<?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>159679</bug_id>
          
          <creation_ts>2016-07-12 10:21:23 -0700</creation_ts>
          <short_desc>Move the pixel data of ImageFrame to a separate class named ImageBackingStore</short_desc>
          <delta_ts>2016-09-12 16:54:09 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>155444</dependson>
          <blocked>155322</blocked>
    
    <blocked>159699</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1210077</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-12 10:21:23 -0700</bug_when>
    <thetext>The goal is to have one class for the ImageFrame. Currently we have two very similar implementations: one is defined for non CG ports &quot;ImageFrame&quot;, which is defined in /platform/image-decoders/ImageDecoder.h, and the second is &quot;FrameData&quot;, which is defined in platform/graphics/BitmapImage.h.

We begin by moving the pixel data manipulation part in ImageFrame into a separate class and then make it optional (allocated on demand). So for the CG case, BitmapPixels object will not be allocated because all the decoding is done by CG.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210080</commentid>
    <comment_count>1</comment_count>
      <attachid>283425</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-12 10:23:58 -0700</bug_when>
    <thetext>Created attachment 283425
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210088</commentid>
    <comment_count>2</comment_count>
      <attachid>283427</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-12 10:44:06 -0700</bug_when>
    <thetext>Created attachment 283427
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210101</commentid>
    <comment_count>3</comment_count>
      <attachid>283429</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-12 11:14:13 -0700</bug_when>
    <thetext>Created attachment 283429
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210105</commentid>
    <comment_count>4</comment_count>
      <attachid>283431</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-12 11:25:39 -0700</bug_when>
    <thetext>Created attachment 283431
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210109</commentid>
    <comment_count>5</comment_count>
      <attachid>283433</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-12 11:35:17 -0700</bug_when>
    <thetext>Created attachment 283433
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210123</commentid>
    <comment_count>6</comment_count>
      <attachid>283437</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-12 12:05:25 -0700</bug_when>
    <thetext>Created attachment 283437
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210128</commentid>
    <comment_count>7</comment_count>
      <attachid>283439</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-12 12:34:00 -0700</bug_when>
    <thetext>Created attachment 283439
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210132</commentid>
    <comment_count>8</comment_count>
      <attachid>283440</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-12 12:42:15 -0700</bug_when>
    <thetext>Created attachment 283440
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210140</commentid>
    <comment_count>9</comment_count>
      <attachid>283443</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-12 13:04:03 -0700</bug_when>
    <thetext>Created attachment 283443
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210167</commentid>
    <comment_count>10</comment_count>
      <attachid>283449</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-12 14:48:45 -0700</bug_when>
    <thetext>Created attachment 283449
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210174</commentid>
    <comment_count>11</comment_count>
      <attachid>283450</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-12 14:55:44 -0700</bug_when>
    <thetext>Created attachment 283450
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210205</commentid>
    <comment_count>12</comment_count>
      <attachid>283461</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-12 15:29:02 -0700</bug_when>
    <thetext>Created attachment 283461
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210219</commentid>
    <comment_count>13</comment_count>
      <attachid>283466</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-12 15:59:10 -0700</bug_when>
    <thetext>Created attachment 283466
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210224</commentid>
    <comment_count>14</comment_count>
      <attachid>283467</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-12 16:08:59 -0700</bug_when>
    <thetext>Created attachment 283467
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1210246</commentid>
    <comment_count>15</comment_count>
      <attachid>283469</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-07-12 16:51:14 -0700</bug_when>
    <thetext>Created attachment 283469
Patch for review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228285</commentid>
    <comment_count>16</comment_count>
      <attachid>288426</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-09 12:03:15 -0700</bug_when>
    <thetext>Created attachment 288426
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228295</commentid>
    <comment_count>17</comment_count>
      <attachid>288428</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-09 12:31:04 -0700</bug_when>
    <thetext>Created attachment 288428
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228298</commentid>
    <comment_count>18</comment_count>
      <attachid>288429</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-09 12:37:50 -0700</bug_when>
    <thetext>Created attachment 288429
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228372</commentid>
    <comment_count>19</comment_count>
      <attachid>288447</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-09 16:18:00 -0700</bug_when>
    <thetext>Created attachment 288447
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228385</commentid>
    <comment_count>20</comment_count>
      <attachid>288451</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-09 17:02:32 -0700</bug_when>
    <thetext>Created attachment 288451
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228412</commentid>
    <comment_count>21</comment_count>
      <attachid>288459</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-09 17:40:55 -0700</bug_when>
    <thetext>Created attachment 288459
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228417</commentid>
    <comment_count>22</comment_count>
      <attachid>288461</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-09 17:50:08 -0700</bug_when>
    <thetext>Created attachment 288461
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228420</commentid>
    <comment_count>23</comment_count>
      <attachid>288463</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-09 18:01:40 -0700</bug_when>
    <thetext>Created attachment 288463
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228428</commentid>
    <comment_count>24</comment_count>
      <attachid>288466</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-09 18:11:31 -0700</bug_when>
    <thetext>Created attachment 288466
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228430</commentid>
    <comment_count>25</comment_count>
      <attachid>288468</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-09 18:35:59 -0700</bug_when>
    <thetext>Created attachment 288468
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228436</commentid>
    <comment_count>26</comment_count>
      <attachid>288472</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-09 18:46:38 -0700</bug_when>
    <thetext>Created attachment 288472
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228441</commentid>
    <comment_count>27</comment_count>
      <attachid>288475</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-09 19:08:09 -0700</bug_when>
    <thetext>Created attachment 288475
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228697</commentid>
    <comment_count>28</comment_count>
      <attachid>288475</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-09-12 00:46:04 -0700</bug_when>
    <thetext>Comment on attachment 288475
Patch

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

I ran the tests for GTK+ and got mostly the same results, so I don&apos;t think this is introducing any regression.

&gt; Source/WebCore/platform/graphics/ImageBackingStore.h:38
&gt; +class ImageBackingStore {
&gt; +public:

This could probably be fast allocated.

&gt; Source/WebCore/platform/graphics/ImageBackingStore.h:47
&gt; +    static std::unique_ptr&lt;ImageBackingStore&gt; create(const IntSize&amp; size, bool premultiplyAlpha)
&gt; +    {
&gt; +        return std::make_unique&lt;ImageBackingStore&gt;(size, premultiplyAlpha);
&gt; +    }
&gt; +
&gt; +    static std::unique_ptr&lt;ImageBackingStore&gt; create(const ImageBackingStore&amp; other)
&gt; +    {
&gt; +        return std::make_unique&lt;ImageBackingStore&gt;(other);
&gt; +    }

Do we need create methods if they just call macke_unique and constructors are public?

&gt; Source/WebCore/platform/graphics/ImageBackingStore.h:49
&gt; +    ImageBackingStore(const IntSize&amp; size, bool premultiplyAlpha = true)

So, premultiplyAlpha is optional here but not in the create method.

&gt; Source/WebCore/platform/graphics/ImageBackingStore.h:59
&gt; +        if (this == &amp;other)
&gt; +            return;

I don&apos;t understand this.

&gt; Source/WebCore/platform/graphics/ImageBackingStore.h:71
&gt; +    {
&gt; +        if (!m_pixels.tryReserveCapacity(size.area()))

Is it ok to set an empty size? otherwise I would add an assert here.

&gt; Source/WebCore/platform/graphics/ImageBackingStore.h:89
&gt; +    IntSize size() const { return m_size; }

Could we return const IntSize&amp; here?

&gt; Source/WebCore/platform/graphics/ImageBackingStore.h:90
&gt; +    IntRect frameRect() const { return m_frameRect; }

And const IntRect&amp; here?

&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:93
&gt; +        IntSize size() const { return m_backingStore-&gt;size(); }

const IntSize&amp; ?

&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:110
&gt; +        void setBackingStore(const ImageBackingStore*);

Where is this implemented?

&gt; Source/WebCore/platform/image-decoders/cairo/ImageBackingStoreCairo.cpp:38
&gt; +NativeImagePtr ImageBackingStore::image() const
&gt; +{
&gt; +    return adoptRef(cairo_image_surface_create_for_data(
&gt; +        reinterpret_cast&lt;unsigned char*&gt;(const_cast&lt;RGBA32*&gt;(m_pixelsPtr)),
&gt; +        CAIRO_FORMAT_ARGB32, size().width(), size().height(), size().width() * sizeof(RGBA32)));
&gt; +}

So, I guess we can remove ImageDecoderCairo.cpp now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228843</commentid>
    <comment_count>29</comment_count>
      <attachid>288598</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-12 12:16:14 -0700</bug_when>
    <thetext>Created attachment 288598
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228853</commentid>
    <comment_count>30</comment_count>
      <attachid>288475</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-12 12:25:21 -0700</bug_when>
    <thetext>Comment on attachment 288475
Patch

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

Thanks for the code review and for verifying the layout tests.

&gt;&gt; Source/WebCore/platform/graphics/ImageBackingStore.h:38
&gt;&gt; +public:
&gt; 
&gt; This could probably be fast allocated.

Done.

&gt;&gt; Source/WebCore/platform/graphics/ImageBackingStore.h:47
&gt;&gt; +    }
&gt; 
&gt; Do we need create methods if they just call macke_unique and constructors are public?

Done. Constructors became private and I have to abandon calling std::make_unique() since it requires the constructor to be public.

&gt;&gt; Source/WebCore/platform/graphics/ImageBackingStore.h:49
&gt;&gt; +    ImageBackingStore(const IntSize&amp; size, bool premultiplyAlpha = true)
&gt; 
&gt; So, premultiplyAlpha is optional here but not in the create method.

Done. The premultiplyAlpha is now optional in both the constructor and the create method.

&gt;&gt; Source/WebCore/platform/graphics/ImageBackingStore.h:59
&gt;&gt; +            return;
&gt; 
&gt; I don&apos;t understand this.

You are right. This constructor was originally implemented as an assignment operator. I forgot to change its body to be suitable for a copy constructor.

&gt;&gt; Source/WebCore/platform/graphics/ImageBackingStore.h:71
&gt;&gt; +        if (!m_pixels.tryReserveCapacity(size.area()))
&gt; 
&gt; Is it ok to set an empty size? otherwise I would add an assert here.

A check for !size.isEmpty() its added to this if-statment.

&gt;&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:93
&gt;&gt; +        IntSize size() const { return m_backingStore-&gt;size(); }
&gt; 
&gt; const IntSize&amp; ?

Done.

&gt;&gt; Source/WebCore/platform/image-decoders/ImageDecoder.h:110
&gt;&gt; +        void setBackingStore(const ImageBackingStore*);
&gt; 
&gt; Where is this implemented?

setBackingStore() is not implemented and this declaration is not needed.

&gt;&gt; Source/WebCore/platform/image-decoders/cairo/ImageBackingStoreCairo.cpp:38
&gt;&gt; +}
&gt; 
&gt; So, I guess we can remove ImageDecoderCairo.cpp now.

You are right. ImageDecoderCairo.cpp is now deleted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228865</commentid>
    <comment_count>31</comment_count>
      <attachid>288604</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-12 13:12:21 -0700</bug_when>
    <thetext>Created attachment 288604
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228900</commentid>
    <comment_count>32</comment_count>
      <attachid>288604</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-09-12 14:32:35 -0700</bug_when>
    <thetext>Comment on attachment 288604
Patch

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

&gt; Source/WebCore/platform/graphics/ImageBackingStore.h:37
&gt; +class ImageBackingStore {

I&apos;m surprised that this class doesn&apos;t pad rowBytes to some multiple of 4 or 8 bytes.

&gt; Source/WebCore/platform/graphics/ImageBackingStore.h:85
&gt; +        size_t rectWidthInBytes = rect.width() * sizeof(RGBA32);

This is normally called rowBytes

&gt; Source/WebCore/platform/graphics/ImageBackingStore.h:98
&gt; +        size_t rectWidthInBytes = rect.width() * sizeof(RGBA32);

Ditto.

&gt; Source/WebCore/platform/graphics/ImageBackingStore.h:107
&gt; +    RGBA32* at(int x, int y) const

I don&apos;t like this name.

&gt; Source/WebCore/platform/graphics/ImageBackingStore.h:112
&gt; +    void setRGBA(int x, int y, unsigned r, unsigned g, unsigned b, unsigned a)

I would call this setPixel()

&gt; Source/WebCore/platform/graphics/ImageBackingStore.h:127
&gt; +    void overRGBA(RGBA32* dest, unsigned r, unsigned g, unsigned b, unsigned a)

I don&apos;t like this name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228955</commentid>
    <comment_count>33</comment_count>
      <attachid>288626</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2016-09-12 15:44:29 -0700</bug_when>
    <thetext>Created attachment 288626
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228995</commentid>
    <comment_count>34</comment_count>
      <attachid>288626</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-12 16:54:02 -0700</bug_when>
    <thetext>Comment on attachment 288626
Patch

Clearing flags on attachment: 288626

Committed r205841: &lt;http://trac.webkit.org/changeset/205841&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228996</commentid>
    <comment_count>35</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-12 16:54:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283425</attachid>
            <date>2016-07-12 10:23:58 -0700</date>
            <delta_ts>2016-07-12 10:44:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159679-20160712102315.patch</filename>
            <type>text/plain</type>
            <size>127299</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzMTAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWM1YmQ5YmQwNmExOWJl
NWNhMDJjNTE3MmQ2ZWYyZWJiZmVjMWMxOS4uNmFlYzQ3MmY4YWVjOGUwNjRkNGYyZmQwODAyYTBm
MWM0NTU4YjI4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxMyBAQAorMjAxNi0wNy0xMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0
IHRoZSBwaXhlbCBkYXRhIG9mIEltYWdlRnJhbWUgdG8gYSBzZXBhcmF0ZSBjbGFzcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5Njc5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgcGl4ZWwg
ZGF0YSBtYW5pcHVsYXRpb24gcGFydCBpbiBJbWFnZUZyYW1lIGludG8gYSBzZXBhcmF0ZSBjbGFz
cworICAgICAgICBhbmQgdGhlbiBtYWtlIGl0IG9wdGlvbmFsIChhbGxvY2F0ZWQgb24gZGVtYW5k
KS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2lu
Q2Fpcm8uY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFBpeGVsczo6Qml0bWFwUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBp
eGVsczo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpoZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFBpeGVsczo6YXQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmNsZWFyUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OnJlcGVhdEZpcnN0Um93KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcFBpeGVsczo6c2V0UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQ
aXhlbHM6Om92ZXJSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6aW5Cb3Vu
ZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Om11bHRpcGx5MjU1KToKKyAgICAgICAgKFdlYkNvcmU6OmRpdmlkZTI1NSk6CisgICAg
ICAgIChXZWJDb3JlOjpkaXZpZGVDZWlsKToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxp
ZWRDaGFubmVsKToKKyAgICAgICAgKFdlYkNvcmU6OnVucHJlbXVsdGlwbGllZENoYW5uZWwpOgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZVByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VVblByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6cGl4ZWxzKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWVEYXRhOjpoYXNQaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y2xlYXJQaXhl
bERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGxQaXhlbERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGxGcmFtZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weUJpdG1hcERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojpjb3B5Um93TlRpbWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0UkdCQSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpnZXRBZGRyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6Omhhc1BpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpvdmVyUkdC
QSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjp3aWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
Y29weVJvd05UaW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpm
aXhQb2ludFVuc2lnbmVkTXVsdGlwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6ZGl2aWRlMjU1KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5j
cHAuCisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmltYWdlKToKKworMjAxNi0wNy0x
MSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAgICAg
IFJlbmFtZSBGcmFtZURhdGEgdG8gSW1hZ2VGcmFtZURhdGEgYW5kIG1vdmUgaXQgdG8gYSBzZXBh
cmF0ZSBmaWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTU0NDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNb3ZlIEltYWdlRnJhbWVEYXRhIHRvIGEgc2VwYXJhdGUgZmlsZSBzbyBpdCBjYW4gYmUgY2Fj
aGVkIGJ5IEltYWdlU291cmNlCisgICAgICAgIGFuZCB3aWxsIHN0aWxsIGJlIGNvbnN1bWVkIGJ5
IEJpdG1hcEltYWdlLiBNYWtlIHRoZSBkYXRhIG1lbWJlcnMgb2YgSW1hZ2VGcmFtZURhdGEKKyAg
ICAgICAgYmUgcHJpdmF0ZSBhbmQgYWRkIGdldHRlcnMgdG8gcmV0dXJuIHRoZWlyIHZhbHVlcy4K
KworICAgICAgICBObyBuZXcgdGVzdHMgLS0gQ29kZSByZWZhY3RvcmluZywgbm8gYmVoYXZpb3Ig
Y2hhbmdlLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Jp
dG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aGF2ZUZyYW1lSW1hZ2VBdEluZGV4
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNz
YXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6ZW5zdXJlRnJhbWVJc0NhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcElt
YWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6ZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6aXNBbG1vc3RTb2xpZENvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRt
YXBJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpGcmFtZURhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp+RnJhbWVEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6dXNlZEZyYW1lQnl0ZXMpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZURhdGFBdEluZGV4KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ltYWdlRnJhbWVEYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lRGF0YTo6SW1hZ2VGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURh
dGE6On5JbWFnZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6
Y2xlYXJTdWJJbWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmNsZWFy
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpzaW5nbGVQaXhlbFNvbGlkQ29s
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmlzQWxtb3N0U29saWRDb2xv
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW1hZ2VGcmFtZURhdGEuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6c3RhdHVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWVEYXRhOjppc0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWVEYXRhOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpm
cmFtZUJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjppbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6b3JpZW50YXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OnN1YnNhbXBsaW5nTGV2ZWwpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZURhdGE6OmR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWVEYXRhOjpoYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6
aGFzSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6Omhhc01ldGFkYXRh
KToKKworMjAxNi0wNi0yNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUs
Y29tPgorCisgICAgICAgIEludHJvZHVjZSBQbGF0Zm9ybUltYWdlIGFuZCBtYWtlIGl0IGlzIGEg
d3JhcHBlciBmb3IgTmF0aXZlSW1hZ2VQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1ODY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyByZWZhY3RvcmluZyBp
cyB0byBtb3ZlIHRoZSBwbGF0Zm9ybSBpbWFnZSBkZXBlbmRlbnQKKyAgICAgICAgY29kZSBmcm9t
IEJpdG1hcEltYWdlIHRvIFBsYXRmb3JtSW1hZ2UuIFBsYXRmb3JtSW1hZ2UgaXMgcmVzcG9uc2li
bGUgb2YgCisgICAgICAgIGRyYXdpbmcgdGhlIGltYWdlIGFuZCBhbnN3ZXJpbmcgTmF0aXZlSW1h
Z2VQdHIgcXVlc3Rpb25zIHdoZW4gYW4gSW1hZ2VEZWNvZGVyCisgICAgICAgIGlzIG5vdCBhdmFp
bGFibGUuIEFwYXJ0IGZyb20gZHJhd2luZyB0aGUgaW1hZ2UsIHRoZSBxdWVyeSBmdW5jdGlvbnMg
d2lsbCBiZQorICAgICAgICBjYWxsZWQgb25seSB3aGVuIGNvbnN0cnVjdGluZyBhIEZyYW1lRGF0
YSBzbyB3ZSB3aWxsIGtlZXAgZXZlcnl0aGluZyBhcyBhCisgICAgICAgIE5hdGl2ZUltYWdlUHRy
LiBCdXQgd2Ugd2lsbCBjYXN0IHRoZSBOYXRpdmVJbWFnZVB0ciB0byBQbGF0Zm9ybUltYWdlIHdo
ZW4KKyAgICAgICAgYSBwbGF0Zm9ybSBkZXBlbmRlbnQgZnVuY3Rpb24gaXMgbmVlZGVkLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cyAtLSBDb2RlIHJlZmFjdG9yaW5nLCBubyBiZWhhdmlvciBjaGFu
Z2UuCisKKyAgICAgICAgKiBQbGF0Zm9ybUFwcGxlV2luLmNtYWtlOgorICAgICAgICAqIFBsYXRm
b3JtRWZsLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBs
YXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2luQ2Fpcm8uY21ha2U6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRp
bmdzL29iamMvRE9NLm1tOgorICAgICAgICAoLVtET01Ob2RlIGdldFByZXZpZXdTbmFwc2hvdElt
YWdlOmFuZFJlY3RzOl0pOgorICAgICAgICAqIHBhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cu
bW06CisgICAgICAgICgtW1dlYlRleHRJbmRpY2F0b3JWaWV3IGluaXRXaXRoRnJhbWU6dGV4dElu
ZGljYXRvcjptYXJnaW46b2Zmc2V0Ol0pOgorICAgICAgICAoY3JlYXRlQ29udGVudENyb3NzZmFk
ZUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpu
YXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZy
YW1lc05hdGl2ZUltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6c2luZ2xl
UGl4ZWxTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppc0FsbW9z
dFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZURhdGE6OkZyYW1lRGF0YSk6CisgICAgICAgIG1faGFzQWxwaGEgY2FuIGJlIGluaXRp
YWxpemVkIHdpdGggZmFsc2UgYmVjYXVzZSBpdCBpcyBhY2Nlc3NlZCBvbmx5IGluCisgICAgICAg
IEJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleCgpIGFuZCBpdCBpcyBndWFyZGVkIGJ5
IG1faGF2ZU1ldGFkYXRhLgorICAgICAgICBCb3RoIG1faGF2ZU1ldGFkYXRhIGFuZCBtX2hhc0Fs
cGhhIGFyZSBzZXQgaW4gQml0bWFwSW1hZ2UgY29uc3RydWN0b3IKKyAgICAgICAgYW5kIGluIEJp
dG1hcEltYWdlOjpjYWNoZUZyYW1lKCkuCisKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6
fkZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OmNsZWFyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6
Om5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpuYXRpdmVJbWFnZU9mU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZnJhbWVzTmF0aXZlSW1hZ2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlOjpnZXRDR0ltYWdlUmVmKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlOjpnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2U6OmdldENHSW1hZ2VBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtSW1hZ2U6OlBsYXRmb3JtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1JbWFnZTo6aXNOaWwpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6Y2dJ
bWFnZVJlZik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjp1cGRhdGVEaXNwbGF5TW9k
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJv
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0JpdG1hcEltYWdlQ2Fpcm8uY3BwLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6
Y2xlYXJTdWJJbWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6c2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpoYXNBbHBoYSk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6aXNBbG1vc3RTb2xpZENvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1JbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
Qml0bWFwSW1hZ2VDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUGF0dGVybkNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm46OmNyZWF0ZVBsYXRm
b3JtUGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFn
ZUNHLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpjbGVhclN1
YkltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IpOiBNb3ZlZCBmcm9tIFBsdWdpblZp
ZXcuY3BwIHNpbmNlIFBsYXRmb3JtSW1hZ2UgaXMgd2hhdCB0aGlzIGZ1bmN0aW9uIGJlbG9uZ3Mg
dG8uCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKTog
UmV0dXJucyB0aGUgc3ViLXNhbXBsaW5nIHNjYWxlIGJhc2VkIG9uIHRoZSBjb250ZXh0IHNjYWxp
bmcuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpkcmF3KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tOgor
ICAgICAgICAoVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYTo6dXBkYXRlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW06CisgICAgICAgIChX
ZWJDb3JlOjpNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6dXBkYXRlUGxhdGZvcm1MYXllcik6
CisgICAgICAgICogcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZSk6CisKIDIwMTYtMDctMTEgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBTcGVlY2ggU3ludGhlc2lzOiBnZXR0aW5n
IGxpc3Qgb2Ygdm9pY2VzIG5vIGxvbmdlciB3b3JrcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IGMxYmMw
YmJkZTM2MTI1YzQ2MmJmNDgxZGRhZDVkZDJmODI3ZDUyMzkuLjE4ZDFlYmViZWU5MjBiMmYyOWVm
MzI4NzdkZWQyZTFlY2ZmOTdkNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAor
MjAxNi0wNy0xMSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgor
CisgICAgICAgIEludHJvZHVjZSBQbGF0Zm9ybUltYWdlIGFuZCBtYWtlIGl0IGlzIGEgd3JhcHBl
ciBmb3IgTmF0aXZlSW1hZ2VQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1ODY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogTWlzYy9XZWJDYWNoZS5tbToKKyAgICAgICAgKCtbV2ViQ2FjaGUgaW1h
Z2VGb3JVUkw6XSk6CisKIDIwMTYtMDctMTEgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxl
LmNvbT4KIAogICAgICAgICBBZGQgc3ludGhldGljIGNsaWNrIG9yaWdpbiB0byBXS05hdmlnYXRp
b25BY3Rpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYjQ3ZTJjZWE3OWE4ZGQ3YzUzMzVkMmNkNThlNzk2MTUz
MzVjNTAyYy4uZjFmMTY3MjU4NGMwZWU4MTg1OGE3ZTk2NTUzYWNkOWNkMGFjNmZlZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE2LTA3LTExICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
Ym91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgSW50cm9kdWNlIFBsYXRmb3JtSW1hZ2Ug
YW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVyIGZvciBOYXRpdmVJbWFnZVB0cgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvY2cv
V0tJY29uRGF0YWJhc2VDRy5jcHA6CisgICAgICAgIChXS0ljb25EYXRhYmFzZVRyeUdldENHSW1h
Z2VGb3JVUkwpOgorICAgICAgICAoV0tJY29uRGF0YWJhc2VUcnlDb3B5Q0dJbWFnZUFycmF5Rm9y
VVJMKToKKyAgICAgICAgSXQgd2FzIHRoZSBvbmx5IHBsYWNlIGluIHRoZSBjb2RlIHdoaWNoIHVz
ZXMgQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VBcnJheSgpLgorICAgICAgICBDYWxsIEJpdG1hcElt
YWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMoKSBpbnN0ZWFkIGFuZCBmb3JtIHRoZSByZXR1cm5lZAor
ICAgICAgICBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGJ1aWxkIHRoZSBDRkFycmF5UmVmLgorICAg
ICAgICAKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcHJlc2VudGF0aW9uU25hcHNob3RGb3JQcmV2
aWV3SXRlbUNvbnRyb2xsZXI6XSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRp
bWVyRmlyZWQpOgorICAgICAgICAKKyAgICAgICAgKFdlYktpdDo6aXNBbG1vc3RTb2xpZENvbG9y
KTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSB0aGUgc3RhdGljIGZ1bmN0aW9uIGlzQWxtb3N0U29s
aWRDb2xvciB0byBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKS4KKwogMjAxNi0w
Ny0xMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFtXSzJdW2lP
U10gSW50ZXJtaXR0ZW50IGNyYXNoIGluIFtVSUFwcGxpY2F0aW9uIGJlZ2luQmFja2dyb3VuZFRh
c2tXaXRoTmFtZV0gZXhwaXJhdGlvbiBoYW5kbGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGU3
OGIwNDJiMTA0MDFlMWY0ZWUzYTJhYjFhMDUyYzIxOGMzYTExZTMuLjIyNmVjOWI4NGU3MjJmZmYz
ZTJmMDRkY2U3ZGI3MGUzZGQ0YjgzYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMjI2LDYg
KzIyMjYsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSVNP
VlRUQ3VlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJh
bWVEYXRhLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT3JpZW50YXRpb24uY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UG9pbnQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxl
V2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCA1
ZmY5OTFmZjdkYTMwOGJiOTE4MmVjZTNiZjEyMTczMGE1NDhkMjg3Li5iYWUzMWVhZjg2ZTdmY2E5
MDU4MjUwOTJhYTM4YTc4YzExZTQyMjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4u
Y21ha2UKQEAgLTU1LDcgKzU1LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XS0NBQ0ZWaWV3TGF5ZXJUcmVlSG9zdC5jcHAKIAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFBv
aW50Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwCkBAIC03
NSw2ICs3NCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UGF0aENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtl
CmluZGV4IDUxNDUwNGU2ZWMyNWFhNWU0M2I5OTM5OGQ1ZTM1Y2VlZWE3NjZhYTQuLjY0YWUxNzEw
ODlkY2JmMGNkNDViNzBhOWI4ZjcwZWZhOWZmZGVkYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNt
YWtlCkBAIC0xMjIsNyArMTIyLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNwcAogCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1wbC5jcHAKLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ZvbnRDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJm
YnV6ek5HLmNwcApAQCAtMTM0LDYgKzEzMyw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNF
UwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QYXR0ZXJuQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Bs
YXRmb3JtUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNh
aXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RyYW5zZm9ybWF0aW9uTWF0cml4
Q2Fpcm8uY3BwCkBAIC0xNzksOSArMTc5LDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MveDExL1BsYXRmb3JtRGlzcGxheVgxMS5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy94MTEvWFVuaXF1ZVJlc291cmNlLmNwcAogCi0gICAgcGxhdGZvcm0v
aW1hZ2UtZW5jb2RlcnMvSlBFR0ltYWdlRW5jb2Rlci5jcHAKKyAgICBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHAKIAotICAgIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2ltYWdl
LWVuY29kZXJzL0pQRUdJbWFnZUVuY29kZXIuY3BwCiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2Vm
bC9OZXR3b3JrU3RhdGVOb3RpZmllckVmbC5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpp
bmRleCA2NDVhZGQxY2UzODg4OGIwNGQ0YTJkODlhZGEwYTdjNmRlMTk5ODZiLi5kMzFmNTcwNmE2
OTU5YjIzMWI1YmZiMjJmMDdkMTg0M2FlODYxYTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFr
ZQpAQCAtMTAxLDcgKzEwMSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1wbC5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9YMTEu
Y3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9GbG9hdFJlY3RDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9Gb250Q2Fpcm8uY3BwCkBAIC0xMTUsNiArMTE0LDcgQEAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vUGxhdGZvcm1QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vUmVmUHRyQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3Jt
YXRpb25NYXRyaXhDYWlyby5jcHAKQEAgLTE0OSw3ICsxNDksNyBAQCBsaXN0KEFQUEVORCBXZWJD
b3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAogICAg
IHBsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuY3BwCiAKLSAgICBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHAKIAogICAgIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL2d0ay9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZUd0ay5jcHAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bU1hYy5jbWFrZQppbmRleCA5ZjZmNDk2YjZjYzRlZjZlNGI3NGQ4NGFjMGFhOWRlYTU1YTAyMzdi
Li40ZGRlZDMwODhmNGYzOTZmZWY0NDRlN2VlNjVjNjQxMDY1OGY1ODQxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybU1hYy5jbWFrZQpAQCAtMzk3LDcgKzM5Nyw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1dlYlN5c3RlbUJhY2tkcm9wTGF5
ZXIubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9XZWJUaWxlZEJhY2tpbmdMYXll
ci5tbQogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0Zsb2F0UG9pbnRDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5j
cHAKQEAgLTQxNyw2ICs0MTYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL1BhdGhDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cu
Y3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFnZUNHLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1N1YmltYWdlQ2FjaGVXaXRoVGltZXIuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtV2luQ2Fpcm8uY21ha2UKaW5kZXggMmM1NTNiMDU1MWRhZDY5YWExOTlkOTYwZjU1MjM0
M2Q5MjBmMDdiMy4uMzQyYWE5MjczMmZkOGY5MmU4NWNmYTYyNmQ1NTU3MGVmNjZiNmE2OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCkBAIC0yMSw3ICsyMSw2IEBAIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCiAKLSAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0Zsb2F0UmVjdENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRD
YWlyby5jcHAKQEAgLTM0LDYgKzMzLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
bGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZv
cm1QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8u
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3JtYXRpb25NYXRyaXhDYWly
by5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAK
IAotICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNw
cAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNw
cAogCiAgICAgcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb25TdHViLmNwcAog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggYzExYmM0N2U1Y2FkNjMwYTM2NTdjZGUxYWQ5ZjdiNzZhMGE1NWM2Ni4uZmYyYTQ5OGJh
OTZiODFkYTAzZjgxYTMwMWE4NWJlMzc0ZDBlYzY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQ4NCw3ICsxNDg0LDcgQEAK
IAkJMzc1Q0QyMzIxMTlENDNDODAwQTJBODU5IC8qIEh5cGhlbmF0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzVDRDIzMTExOUQ0M0M4MDBBMkE4
NTkgLyogSHlwaGVuYXRpb24uaCAqLzsgfTsKIAkJMzc2RENDRTExM0I0Rjk2NjAwMkVCRUZDIC8q
IFRleHRSdW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzc2RENDRTAxM0I0Rjk2NjAwMkVCRUZDIC8qIFRleHRSdW4uY3BwICovOyB9OwogCQkzNzc0
QUJBNTBGQTIxRUI0MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzc0QUJBMzBGQTIxRUI0
MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3
IC8qIEJpdG1hcEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3Bw
ICovOyB9OworCQkzNzdBM0E5MDE1RUZDRTlCMDA1OUY1QzcgLyogUGxhdGZvcm1JbWFnZUNHLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3N0EzQThG
MTVFRkNFOUEwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwICovOyB9OwogCQkzNzkxOUMy
MzBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzkxOUMyMTBCN0QxODg2MDBBNTY5OTgg
LyogUG9zaXRpb25JdGVyYXRvci5jcHAgKi87IH07CiAJCTM3OTE5QzI0MEI3RDE4ODYwMEE1Njk5
OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzNzkxOUMyMjBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTM3OTI5MTdBMTk4
NUVGMzkwMEY0QjY2MSAvKiBDcmVkZW50aWFsQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc5MjkxNzgxOTg1RUYzOTAwRjRCNjYxIC8qIENyZWRl
bnRpYWxCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTIzMjUsMTAgKzIzMjUsMTQgQEAKIAkJNTNFRDNGREYxNjdBODhFNzAwNjc2MkU2IC8q
IEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFRDNGREQxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJu
YWxTZXR0aW5nc0dlbmVyYXRlZC5oICovOyB9OwogCQk1M0VGNzY2QjE2NTMwQTYxMDA0Q0JFNDkg
LyogU2V0dGluZ3NNYWNyb3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzRUY3NjZBMTY1MzBBNjEwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oICov
OyB9OwogCQk1M0VGNzY2QzE2NTMxOTk0MDA0Q0JFNDkgLyogU2V0dGluZ3NNYWNyb3MuaCBpbiBD
b3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzRUY3NjZBMTY1MzBBNjEwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oICovOyB9OworCQk1
NTA0RTRDQjFEMzU1N0IyMDBGRTUwODggLyogQml0bWFwUGl4ZWxzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTA0RTRDQTFEMzU1MzJEMDBGRTUwODgg
LyogQml0bWFwUGl4ZWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTUwQTBCQzkwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzcw
ODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovOyB9OwogCQk1NTBBMEJDQTA4
NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxp
ZmllZE5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1NTVCODdFQzFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU1Qjg3RUExQ0FBRjBB
QjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLzsgfTsKIAkJNTU1Qjg3RUQxQ0FBRjBB
QjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNv
ZGVyQ0cuaCAqLzsgfTsKKwkJNTU3NEYwODcxRDAyNzkwOTAwQjlGMTRDIC8qIFBsYXRmb3JtSW1h
Z2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1NzRG
MDg1MUQwMjc0NDQwMEI5RjE0QyAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTVDQkE2QTExRDFERjJFMTAwNDUxODYw
IC8qIEltYWdlRnJhbWVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU1Q0JBNjlGMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1lRGF0YS5j
cHAgKi87IH07CisJCTU1Q0JBNkEyMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1lRGF0YS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVDQkE2QTAx
RDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTcyQTdGMjExQzZFNTcxOTAwOUM2MTQ5IC8q
IFNpbXVsYXRlZENsaWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NzJBN0YyMDFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCAqLzsg
fTsKIAkJNTcyQTdGMjMxQzZFNUE2NjAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MkE3RjIyMUM2RTVB
NjYwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5jcHAgKi87IH07CiAJCTU3RUY1RTYwMUQyMEM4
MzkwMDE3MUU2MCAvKiBUZXh0Q29kZWNSZXBsYWNlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdFRjVFNUYxRDIwQzgzOTAwMTcxRTYwIC8qIFRl
eHRDb2RlY1JlcGxhY2VtZW50LmggKi87IH07CkBAIC05MDYxLDcgKzkwNjUsNyBAQAogCQkzNzZE
Q0NFMDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUZXh0UnVuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzc3MkIwOTUxNjUzNTg1NjAwMEE0OUNBIC8qIFBvcHVwT3BlbmluZ09ic2VydmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvcHVwT3BlbmluZ09ic2VydmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NzRBQkEzMEZBMjFFQjQwMEFEN0RFOSAvKiBP
dmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdG1hcEltYWdlQ0cuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogUGxhdGZv
cm1JbWFnZUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsYXRm
b3JtSW1hZ2VDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3OTE5QzIxMEI3
RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQb3NpdGlvbkl0ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzc5MTlDMjIwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvc2l0aW9uSXRlcmF0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc5MjkxNzgxOTg1RUYzOTAwRjRCNjYx
IC8qIENyZWRlbnRpYWxCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENy
ZWRlbnRpYWxCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05OTg5LDEwICs5
OTkzLDE0IEBACiAJCTUzRUQzRkRDMTY3QTg4RTcwMDY3NjJFNiAvKiBKU0ludGVybmFsU2V0dGlu
Z3NHZW5lcmF0ZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJ
bnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTNFRDNGREQxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRl
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVybmFsU2V0dGluZ3NH
ZW5lcmF0ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNFRjc2NkExNjUzMEE2
MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNldHRpbmdzTWFjcm9zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1
MDRFNENBMUQzNTUzMkQwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Qml0bWFwUGl4ZWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1MEEwQkM3MDg1
RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllZE5hbWUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTUw
QTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTU1
Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2Rl
ckNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1NzRGMDg1MUQwMjc0NDQwMEI5RjE0QyAv
KiBQbGF0Zm9ybUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVDQkE2OUYxRDFERjJFMTAwNDUxODYwIC8qIEltYWdl
RnJhbWVEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdl
RnJhbWVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVDQkE2QTAxRDFE
RjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlRnJhbWVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTU1RDQwOEY3MUE3QzYzMTgwMEM3ODQ1MCAvKiBTVkdJbWFnZUNsaWVudHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHSW1hZ2VDbGllbnRzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTU3MkE3RjIwMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGlj
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW11bGF0ZWRDbGljay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzJBN0YyMjFDNkU1QTY2MDA5QzYxNDkgLyog
U2ltdWxhdGVkQ2xpY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2ltdWxhdGVkQ2xpY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIwMjQs
NyArMjIwMzIsNiBAQAogCQlCMjc1MzUyOTBCMDUzODE0MDAyQ0U2NEYgLyogY2cgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTM3N0EzQThGMTVFRkNFOUEw
MDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCAqLywKIAkJCQkwRkNGMzMyMzBGMkI5NzE1MDA0
QjY3OTUgLyogQ29sb3JDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRGIC8q
IEZsb2F0UG9pbnRDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEZs
b2F0UmVjdENHLmNwcCAqLywKQEAgLTIyMDUxLDYgKzIyMDU4LDcgQEAKIAkJCQlBODBBMzhGRDBF
NTBDQzgyMDBBMjVFQkMgLyogUGF0dGVybkNHLmNwcCAqLywKIAkJCQlCMjc1MzUzNjBCMDUzODE0
MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5jcHAgKi8sCiAJCQkJQjI3NTM1MzcwQjA1Mzgx
NDAwMkNFNjRGIC8qIFBERkRvY3VtZW50SW1hZ2UuaCAqLywKKwkJCQkzNzdBM0E4RjE1RUZDRTlB
MDA1OUY1QzcgLyogUGxhdGZvcm1JbWFnZUNHLmNwcCAqLywKIAkJCQkxRkM0MEZCODE2NTVDNTkx
MDA0MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAgKi8sCiAJCQkJMUZDNDBGQjcx
NjU1QzU5MTAwNDBGMjlFIC8qIFN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCAqLywKIAkJCQlCMjc1
MzUyQTBCMDUzODE0MDAyQ0U2NEYgLyogVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAgKi8sCkBA
IC0yMjExOCw2ICsyMjEyNiw3IEBACiAJCQkJQkVGMjlFRTkxNzE1REQwOTAwQzRCNEM5IC8qIEF1
ZGlvVHJhY2tQcml2YXRlLmggKi8sCiAJCQkJQTg5OTQzMjcwQjQyMzM4NzAwRDdDODAyIC8qIEJp
dG1hcEltYWdlLmNwcCAqLywKIAkJCQlBODk5NDMyNjBCNDIzMzg3MDBEN0M4MDIgLyogQml0bWFw
SW1hZ2UuaCAqLywKKwkJCQk1NTA0RTRDQTFEMzU1MzJEMDBGRTUwODggLyogQml0bWFwUGl4ZWxz
LmggKi8sCiAJCQkJQ0RERTAyRTkxOEIzREZDNzAwQ0Y3RkYxIC8qIENETVNlc3Npb24uaCAqLywK
IAkJCQlCMjc1MzUzODBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3IuY3BwICovLAogCQkJCUIyNzUz
NTM5MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5oICovLApAQCAtMjIyMDIsNiArMjIyMTEsOCBA
QAogCQkJCTQzRDI1OTc2MTNDODE2RjQwMDYwODU1OSAvKiBJbWFnZUJ1ZmZlci5jcHAgKi8sCiAJ
CQkJQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8sCiAJCQkJMjJC
RDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovLAorCQkJCTU1Q0JB
NjlGMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1lRGF0YS5jcHAgKi8sCisJCQkJNTVDQkE2
QTAxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggKi8sCiAJCQkJQkM3RjQ0QTcw
QjlFMzI0RTAwQTlEMDgxIC8qIEltYWdlT2JzZXJ2ZXIuaCAqLywKIAkJCQlBODc0OEQ3NDEyQ0Mz
Rjg5MDAxRkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5jcHAgKi8sCiAJCQkJQTg3NDhENjYxMkND
Mzc2MzAwMUZCQTQxIC8qIEltYWdlT3JpZW50YXRpb24uaCAqLywKQEAgLTIyMjUxLDYgKzIyMjYy
LDcgQEAKIAkJCQkyRDUwMDJGQTFCNTZENzk5MDAyMEFBRjcgLyogUGF0aFV0aWxpdGllcy5oICov
LAogCQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLywKIAkJCQlB
OEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oICovLAorCQkJCTU1NzRGMDg1MUQw
Mjc0NDQwMEI5RjE0QyAvKiBQbGF0Zm9ybUltYWdlLmggKi8sCiAJCQkJMDU2MkY5NjAxNTczRjg4
RjAwMzFDQTE2IC8qIFBsYXRmb3JtTGF5ZXIuaCAqLywKIAkJCQlDRUVGQ0Q3QjE5REIzM0RDMDAz
ODc2RDcgLyogUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmggKi8sCiAJCQkJMDcyODQ3RTIx
NkVCQzVCMDAwNDNDRkE0IC8qIFBsYXRmb3JtVGV4dFRyYWNrLmggKi8sCkBAIC0yNjAxOCw2ICsy
NjAzMCw3IEBACiAJCQkJODVFNzExQjkwQUM1RDUzNTAwNTMyNzBGIC8qIERPTUhUTUxNYXBFbGVt
ZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTE1NzlGMEMwM0JCRDMwMDhCQjBF
RSAvKiBET01IVE1MTWFycXVlZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTE1NkVB
MEMwM0I3NDEwMDhCQjBFRSAvKiBET01IVE1MTWFycXVlZUVsZW1lbnRJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNTU3NEYwODcxRDAyNzkwOTAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTJERUM2NjU1MUM4MkQwNDEwMDk5ODQ2QSAvKiBET01IVE1M
TWVkaWFFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyREVDNjY1MTFDODJEMDE2MDA5OTg0
NkEgLyogRE9NSFRNTE1lZGlhRWxlbWVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NUJBNEQxMzBBQTY4ODY4MDA4ODA1MkQgLyogRE9NSFRNTE1lbnVFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKQEAgLTI2NDU5LDYgKzI2NDcyLDcgQEAKIAkJCQlEMzU5RDc4QTEyOUNBMjcxMDAwNkU1
RDIgLyogSFRNTERldGFpbHNFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEVBNzlGQTBB
MTkxNkRGMDBBOEVGNUYgLyogSFRNTERpcmVjdG9yeUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4RUE3Q0I3MEExOTJCOUMwMEE4RUY1RiAvKiBIVE1MRGl2RWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNTVDQkE2QTIxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEVBNzlGNzBBMTkxNkRGMDBBOEVGNUYgLyogSFRNTERMaXN0
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk4RTUwODI0NUU1OTAwMUU5QUJDIC8q
IEhUTUxEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc3QjM4NjcxMjI4ODNFOTAwQjgx
RkY4IC8qIEhUTUxEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODM1OSw2ICsy
ODM3Myw3IEBACiAJCQkJQjIyMjc5OTMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0FuaW1hdGVNb3Rp
b25FbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk5NTBEMDBCRjIyMDA3MUI3ODIg
LyogU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3
OTk4MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdBbmltYXRpb25FbGVtZW50LmggaW4gSGVhZGVycyAq
LywKKwkJCQk1NTA0RTRDQjFEMzU1N0IyMDBGRTUwODggLyogQml0bWFwUGl4ZWxzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0MzlEMzM0NTEzQTY5MTFDMDBDMjBGNEYgLyogU1ZHQW5pbWF0b3JGYWN0
b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEZCM0Y4NDEzQkM3NTRDMDA5OUZDMTggLyogU1ZH
QXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5OUMwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR0NpcmNsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjk0
MTEsNyArMjk0MjYsNyBAQAogCQkJCUZEQzU0RjA0MTM5OUIwREEwMDhEOTExNyAvKiBCaXF1YWRG
aWx0ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MDI2MTJCMDI2NzYwMEMxQTM1
OSAvKiBCaXF1YWRQcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg5OTQzMjkwQjQy
MzM4ODAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTM3N0Ez
QTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTM3N0EzQTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTc2RDZDNzgxMjJCOEEzRDAwMUZEMUY3IC8qIEJsb2IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMkVERUYxRjMxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JEYXRhLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUUxRDMxQ0RDMTkxOTYwMjAwMDEwMDVBMyAvKiBCbG9iRGF0YUZp
bGVSZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTc3NCw2ICsyOTc4OSw3IEBACiAJ
CQkJMkUyRDk5RTgxMEUyQkMxQzAwNDk2MzM3IC8qIERPTUJsb2IubW0gaW4gU291cmNlcyAqLywK
IAkJCQk4NTA4OUNEODBBOThDNDI4MDBBMjc1QUEgLyogRE9NQ0RBVEFTZWN0aW9uLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJODVBQ0E5ODcwQTlCNTIwMzAwNjcxRTkwIC8qIERPTUNoYXJhY3RlckRh
dGEubW0gaW4gU291cmNlcyAqLywKKwkJCQk1NUNCQTZBMTFEMURGMkUxMDA0NTE4NjAgLyogSW1h
Z2VGcmFtZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODUwODlDREEwQTk4QzQyODAwQTI3
NUFBIC8qIERPTUNvbW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk5NzhEMDdCRTE0NUEwRjZD
MDA5NjkwOEQgLyogRE9NQ29yZUV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NThD
MzhBNjBBQThGMjA0MDBCMTg3QTQgLyogRE9NQ291bnRlci5tbSBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQppbmRleCA0MDExZWEzZmQ4YzA0Njk3NGM1NWQ0OGUz
OTZmMWI4M2I4MWYzMzVkLi5hNWFjNGYwNWFlMzM5YThkNjQ3MDZjMTBmYzBmN2FmNDA0MjU2MjNj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQpAQCAtNjA2LDcgKzYwNiw3IEBAIC0g
KHZvaWQpZ2V0UHJldmlld1NuYXBzaG90SW1hZ2U6KENHSW1hZ2VSZWYqKWNnSW1hZ2UgYW5kUmVj
dHM6KE5TQXJyYXkgKiopcmVjdHMKIAogICAgIGlmICh0ZXh0SW5kaWNhdG9yKSB7CiAgICAgICAg
IGlmIChJbWFnZSogaW1hZ2UgPSB0ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2UoKSkKLSAgICAg
ICAgICAgICpjZ0ltYWdlID0gKENHSW1hZ2VSZWYpQ0ZBdXRvcmVsZWFzZShDR0ltYWdlUmV0YWlu
KGltYWdlLT5nZXRDR0ltYWdlUmVmKCkpKTsKKyAgICAgICAgICAgICpjZ0ltYWdlID0gaW1hZ2Ut
Pm5hdGl2ZUltYWdlKCkuYXV0b3JlbGVhc2UoKTsKICAgICB9CiAKICAgICBSZXRhaW5QdHI8TlNN
dXRhYmxlQXJyYXk+IHJlY3RBcnJheSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdF0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRv
cldpbmRvdy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cu
bW0KaW5kZXggMzY0YTlhODdjZTZmMDY2Mzk0OGI4ODQ2ZThlMmNlNmQxOTBmMjQ4OS4uYTc0ZGE4
NWFjZWNhM2M2Njk4ZGQxNTZhYjMxYTZjOTcxYTM1NGU2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCkBAIC0xNjIsOSArMTYyLDkgQEAgLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSB0ZXh0SW5kaWNhdG9yOihQ
YXNzUmVmUHRyPFRleHRJbmRpY2EKICAgICBjb250ZW50c0ltYWdlTG9naWNhbFNpemUuc2NhbGUo
MSAvIF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VTY2FsZUZhY3RvcigpKTsKICAgICBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZTsKICAgICBpZiAoaW5kaWNhdG9yV2FudHND
b250ZW50Q3Jvc3NmYWRlKCpfdGV4dEluZGljYXRvcikpCi0gICAgICAgIGNvbnRlbnRzSW1hZ2Ug
PSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlV2l0aEhpZ2hsaWdodCgpLT5nZXRDR0ltYWdl
UmVmKCk7CisgICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudElt
YWdlV2l0aEhpZ2hsaWdodCgpLT5uYXRpdmVJbWFnZSgpOwogICAgIGVsc2UKLSAgICAgICAgY29u
dGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2UoKS0+Z2V0Q0dJbWFnZVJl
ZigpOworICAgICAgICBjb250ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFn
ZSgpLT5uYXRpdmVJbWFnZSgpOwogCiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBib3Vu
Y2VMYXllcnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKIApAQCAt
MjY1LDcgKzI2NSw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0FLZXlmcmFtZUFuaW1hdGlvbj4gY3Jl
YXRlQm91bmNlQW5pbWF0aW9uKENGVGltZUludGVydmFsIGR1cmF0CiBzdGF0aWMgUmV0YWluUHRy
PENBQmFzaWNBbmltYXRpb24+IGNyZWF0ZUNvbnRlbnRDcm9zc2ZhZGVBbmltYXRpb24oQ0ZUaW1l
SW50ZXJ2YWwgZHVyYXRpb24sIFRleHRJbmRpY2F0b3ImIHRleHRJbmRpY2F0b3IpCiB7CiAgICAg
UmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGNyb3NzZmFkZUFuaW1hdGlvbiA9IFtDQUJhc2lj
QW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAiY29udGVudHMiXTsKLSAgICBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZSA9IHRleHRJbmRpY2F0b3IuY29udGVudEltYWdl
KCktPmdldENHSW1hZ2VSZWYoKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJ
bWFnZSA9IHRleHRJbmRpY2F0b3IuY29udGVudEltYWdlKCktPm5hdGl2ZUltYWdlKCk7CiAgICAg
W2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRUb1ZhbHVlOihpZCljb250ZW50c0ltYWdlLmdldCgpXTsK
ICAgICBbY3Jvc3NmYWRlQW5pbWF0aW9uIHNldEZpbGxNb2RlOmtDQUZpbGxNb2RlRm9yd2FyZHNd
OwogICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0UmVtb3ZlZE9uQ29tcGxldGlvbjpOT107CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKaW5k
ZXggNDYwZDFiODU2Yjc3YjdjZjRlYzY4OTY1ODFiODMzZDNlN2Y5NzAxNC4uZmM2NDlkMTBhYWI5
YzEzZmZmMjkzMDU1YTcwN2NiNzQ1Mzc0NjkxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcApAQCAtNjgsMTUgKzY4LDEzIEBAIEJpdG1h
cEltYWdlOjpCaXRtYXBJbWFnZShOYXRpdmVJbWFnZVB0ciYmIGltYWdlLCBJbWFnZU9ic2VydmVy
KiBvYnNlcnZlcikKICAgICAsIG1faGF2ZUZyYW1lQ291bnQodHJ1ZSkKICAgICAsIG1fYW5pbWF0
aW9uRmluaXNoZWRXaGVuQ2F0Y2hpbmdVcChmYWxzZSkKIHsKKyAgICBtX2ZyYW1lcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KDEpOworICAgIG1fZnJhbWVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3Zl
KGltYWdlKSk7CisgICAgCiAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhIGRlY29kZXIsIHdl
IGNhbid0IGZpZ3VyZSBvdXQgdGhlIGltYWdlIG9yaWVudGF0aW9uLgogICAgIC8vIFNldCBtX3Np
emVSZXNwZWN0aW5nT3JpZW50YXRpb24gdG8gYmUgdGhlIHNhbWUgYXMgbV9zaXplIHNvIGl0J3Mg
bm90IDB4MC4KLSAgICBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBtX3NpemUgPSBOYXRp
dmVJbWFnZTo6c2l6ZShpbWFnZSk7CisgICAgbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uID0g
bV9zaXplID0gbV9mcmFtZXNbMF0uc2l6ZSgpOwogICAgIG1fZGVjb2RlZFNpemUgPSBtX3NpemUu
YXJlYSgpICogNDsKLSAgICAKLSAgICBtX2ZyYW1lcy5ncm93KDEpOwotICAgIG1fZnJhbWVzWzBd
Lm1faGFzQWxwaGEgPSBOYXRpdmVJbWFnZTo6aGFzQWxwaGEoaW1hZ2UpOwotICAgIG1fZnJhbWVz
WzBdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKLSAgICBtX2ZyYW1lc1swXS5tX2ltYWdlID0gV1RG
TW92ZShpbWFnZSk7CiB9CiAKIEJpdG1hcEltYWdlOjp+Qml0bWFwSW1hZ2UoKQpAQCAtMTA1LDcg
KzEwMyw3IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmhhdmVGcmFtZUltYWdlQXRJbmRleChzaXplX3Qg
aW5kZXgpCiAgICAgaWYgKGluZGV4ID49IG1fZnJhbWVzLnNpemUoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOworICAgIHJldHVy
biBtX2ZyYW1lc1tpbmRleF0uaGFzSW1hZ2UoKTsKIH0KIAogYm9vbCBCaXRtYXBJbWFnZTo6aGFz
U2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdApAQCAtMTI1LDkgKzEyMyw3IEBAIHZvaWQgQml0
bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGRlc3Ryb3lBbGwpCiAgICAgICAgIC8v
IFRoZSB1bmRlcmx5aW5nIGZyYW1lIGlzbid0IGFjdHVhbGx5IGNoYW5naW5nICh3ZSdyZSBqdXN0
IHRyeWluZyB0bwogICAgICAgICAvLyBzYXZlIHRoZSBtZW1vcnkgZm9yIHRoZSBmcmFtZWJ1ZmZl
ciBkYXRhKSwgc28gd2UgZG9uJ3QgbmVlZCB0byBjbGVhcgogICAgICAgICAvLyB0aGUgbWV0YWRh
dGEuCi0gICAgICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMgPSBtX2ZyYW1lc1tpXS5tX2ZyYW1lQnl0
ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1tpXS5jbGVhcihmYWxzZSkpCi0gICAgICAgICAgICBm
cmFtZUJ5dGVzQ2xlYXJlZCArPSBmcmFtZUJ5dGVzOworICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJl
ZCArPSBtX2ZyYW1lc1tpXS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEp
OwogICAgIH0KIAogICAgIG1fc291cmNlLmNsZWFyKGRlc3Ryb3lBbGwsIGNsZWFyQmVmb3JlRnJh
bWUsIGRhdGEoKSwgbV9hbGxEYXRhUmVjZWl2ZWQpOwpAQCAtMTUwLDggKzE0Niw4IEBAIHZvaWQg
Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KGJvb2wgZGVzdHJveUFs
bCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgYWxsRnJhbWVCeXRlcyA9IDA7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAg
YWxsRnJhbWVCeXRlcyArPSBtX2ZyYW1lc1tpXS51c2VkRnJhbWVCeXRlcygpOworICAgIGZvciAo
YXV0byYgZnJhbWUgOiBtX2ZyYW1lcykKKyAgICAgICAgYWxsRnJhbWVCeXRlcyArPSBmcmFtZS5m
cmFtZUJ5dGVzKCk7CiAKICAgICBpZiAoYWxsRnJhbWVCeXRlcyA+IGxhcmdlQW5pbWF0aW9uQ3V0
b2ZmKSB7CiAgICAgICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZSAlcCBkZXN0cm95RGVjb2Rl
ZERhdGFJZk5lY2Vzc2FyeSBkZXN0cm95aW5nRGF0YTogYWxsRnJhbWVCeXRlcz0ldSBjdXRvZmY9
JXUiLCB0aGlzLCBhbGxGcmFtZUJ5dGVzLCBsYXJnZUFuaW1hdGlvbkN1dG9mZik7CkBAIC0xNzcs
NyArMTczLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJveU1ldGFkYXRhQW5kTm90aWZ5KHVu
c2lnbmVkIGZyYW1lQnl0ZXNDbGVhcmVkLCBDbGVhcmVkU28KICAgICAgICAgaW1hZ2VPYnNlcnZl
cigpLT5kZWNvZGVkU2l6ZUNoYW5nZWQodGhpcywgLXNhZmVDYXN0PGludD4oZnJhbWVCeXRlc0Ns
ZWFyZWQpKTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgs
IFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZUNhY2hpbmcgZnJh
bWVDYWNoaW5nKQordm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgsIFN1
YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcg
Y2FjaGluZykKIHsKICAgICBzaXplX3QgbnVtRnJhbWVzID0gZnJhbWVDb3VudCgpOwogICAgIEFT
U0VSVChtX2RlY29kZWRTaXplID09IDAgfHwgbnVtRnJhbWVzID4gMSk7CkBAIC0xODUsMjUgKzE4
MSwxMiBAQCB2b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vic2Ft
cGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbQogICAgIGlmIChtX2ZyYW1lcy5zaXplKCkg
PCBudW1GcmFtZXMpCiAgICAgICAgIG1fZnJhbWVzLmdyb3cobnVtRnJhbWVzKTsKIAotICAgIGlm
IChmcmFtZUNhY2hpbmcgPT0gQ2FjaGVNZXRhZGF0YUFuZEZyYW1lKSB7Ci0gICAgICAgIG1fZnJh
bWVzW2luZGV4XS5tX2ltYWdlID0gbV9zb3VyY2UuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5k
ZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOwotICAgICAgICBtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1w
bGluZ0xldmVsID0gc3Vic2FtcGxpbmdMZXZlbDsKLSAgICB9Ci0KLSAgICBtX2ZyYW1lc1tpbmRl
eF0ubV9vcmllbnRhdGlvbiA9IG1fc291cmNlLm9yaWVudGF0aW9uQXRJbmRleChpbmRleCk7Ci0g
ICAgbV9mcmFtZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKLSAgICBtX2ZyYW1lc1tp
bmRleF0ubV9pc0NvbXBsZXRlID0gbV9zb3VyY2UuZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRl
eCk7CisgICAgbV9mcmFtZXNbaW5kZXhdID0gbV9zb3VyY2UuY3JlYXRlRnJhbWVEYXRhQXRJbmRl
eChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgY2FjaGluZyk7CiAKLSAgICBpZiAocmVwZXRpdGlv
bkNvdW50KGZhbHNlKSAhPSBjQW5pbWF0aW9uTm9uZSkKLSAgICAgICAgbV9mcmFtZXNbaW5kZXhd
Lm1fZHVyYXRpb24gPSBtX3NvdXJjZS5mcmFtZUR1cmF0aW9uQXRJbmRleChpbmRleCk7CisgICAg
TE9HKEltYWdlcywgIkJpdG1hcEltYWdlICVwIGNhY2hlRnJhbWUgJWx1ICglcyV1IGJ5dGVzLCBj
b21wbGV0ZSAlZCkiLCB0aGlzLCBpbmRleCwgY2FjaGluZyA9PSBJbWFnZUZyYW1lRGF0YTo6Q2Fj
aGluZzo6TWV0YWRhdGEgPyAibWV0YWRhdGEgb25seSwgIiA6ICIiLCBtX2ZyYW1lc1tpbmRleF0u
ZnJhbWVCeXRlcygpLCBtX2ZyYW1lc1tpbmRleF0uaXNDb21wbGV0ZSgpKTsKIAotICAgIG1fZnJh
bWVzW2luZGV4XS5tX2hhc0FscGhhID0gbV9zb3VyY2UuZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5k
ZXgpOwotICAgIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXMgPSBtX3NvdXJjZS5mcmFtZUJ5
dGVzQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7Ci0KLSAgICBMT0coSW1hZ2VzLCAi
Qml0bWFwSW1hZ2UgJXAgY2FjaGVGcmFtZSAlbHUgKCVzJXUgYnl0ZXMsIGNvbXBsZXRlICVkKSIs
IHRoaXMsIGluZGV4LCBmcmFtZUNhY2hpbmcgPT0gQ2FjaGVNZXRhZGF0YU9ubHkgPyAibWV0YWRh
dGEgb25seSwgIiA6ICIiLCBtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZUJ5dGVzLCBtX2ZyYW1lc1tp
bmRleF0ubV9pc0NvbXBsZXRlKTsKLQotICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkg
ewotICAgICAgICBpbnQgZGVsdGFCeXRlcyA9IHNhZmVDYXN0PGludD4obV9mcmFtZXNbaW5kZXhd
Lm1fZnJhbWVCeXRlcyk7CisgICAgaWYgKG1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpKSB7Cisg
ICAgICAgIGludCBkZWx0YUJ5dGVzID0gc2FmZUNhc3Q8aW50PihtX2ZyYW1lc1tpbmRleF0uZnJh
bWVCeXRlcygpKTsKICAgICAgICAgbV9kZWNvZGVkU2l6ZSArPSBkZWx0YUJ5dGVzOwogICAgICAg
ICAvLyBUaGUgZnVsbHktZGVjb2RlZCBmcmFtZSB3aWxsIHN1YnN1bWUgdGhlIHBhcnRpYWxseSBk
ZWNvZGVkIGRhdGEgdXNlZAogICAgICAgICAvLyB0byBkZXRlcm1pbmUgaW1hZ2UgcHJvcGVydGll
cy4KQEAgLTI4OCwyMSArMjcxLDE5IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKGJv
b2wgYWxsRGF0YVJlY2VpdmVkKQogICAgIC8vIGZyYW1lIGFmZmVjdGVkIGJ5IGFwcGVuZGluZyBu
ZXcgZGF0YSBoZXJlLiBUaHVzIHdlIGhhdmUgdG8gY2xlYXIgYWxsIHRoZQogICAgIC8vIGluY29t
cGxldGUgZnJhbWVzIHRvIGJlIHNhZmUuCiAgICAgdW5zaWduZWQgZnJhbWVCeXRlc0NsZWFyZWQg
PSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmFtZXMuc2l6ZSgpOyArK2kpIHsK
KyAgICBmb3IgKGF1dG8mIGZyYW1lIDogbV9mcmFtZXMpIHsKICAgICAgICAgLy8gTk9URTogRG9u
J3QgY2FsbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KCkgaGVyZSwgdGhhdCB3aWxsIHRyeSB0bwog
ICAgICAgICAvLyBkZWNvZGUgYW55IHVuY2FjaGVkIChpLmUuIG5ldmVyLWRlY29kZWQgb3IKICAg
ICAgICAgLy8gY2xlYXJlZC1vbi1hLXByZXZpb3VzLXBhc3MpIGZyYW1lcyEKLSAgICAgICAgdW5z
aWduZWQgZnJhbWVCeXRlcyA9IG1fZnJhbWVzW2ldLm1fZnJhbWVCeXRlczsKLSAgICAgICAgaWYg
KG1fZnJhbWVzW2ldLm1faGF2ZU1ldGFkYXRhICYmICFtX2ZyYW1lc1tpXS5tX2lzQ29tcGxldGUp
Ci0gICAgICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSAobV9mcmFtZXNbaV0uY2xlYXIodHJ1
ZSkgPyBmcmFtZUJ5dGVzIDogMCk7CisgICAgICAgIGlmIChmcmFtZS5oYXNNZXRhZGF0YSgpICYm
ICFmcmFtZS5pc0NvbXBsZXRlKCkpCisgICAgICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSBm
cmFtZS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6RW1wdHkpOwogICAgIH0KICAgICBk
ZXN0cm95TWV0YWRhdGFBbmROb3RpZnkoZnJhbWVCeXRlc0NsZWFyZWQsIENsZWFyZWRTb3VyY2U6
Ok5vKTsKICNlbHNlCiAgICAgLy8gRklYTUU6IHdoeSBpcyB0aGlzIGRpZmZlcmVudCBmb3IgaU9T
PwogICAgIGludCBkZWx0YUJ5dGVzID0gMDsKICAgICBpZiAoIW1fZnJhbWVzLmlzRW1wdHkoKSkg
ewotICAgICAgICBpbnQgYnl0ZXMgPSBtX2ZyYW1lc1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5tX2Zy
YW1lQnl0ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5jbGVh
cih0cnVlKSkgeworICAgICAgICBpZiAoaW50IGJ5dGVzID0gbV9mcmFtZXNbbV9mcmFtZXMuc2l6
ZSgpIC0gMV0uY2xlYXIoSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6OkVtcHR5KSkgewogICAgICAg
ICAgICAgZGVsdGFCeXRlcyArPSBieXRlczsKICAgICAgICAgICAgIGRlbHRhQnl0ZXMgKz0gbV9k
ZWNvZGVkUHJvcGVydGllc1NpemU7CiAgICAgICAgICAgICBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6
ZSA9IDA7CkBAIC0zNjYsMTUgKzM0NywxNSBAQCBib29sIEJpdG1hcEltYWdlOjppc1NpemVBdmFp
bGFibGUoKQogICAgIHJldHVybiBtX3NpemVBdmFpbGFibGU7CiB9CiAKLWJvb2wgQml0bWFwSW1h
Z2U6OmVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4LCBJbWFnZUZyYW1lQ2FjaGluZyBm
cmFtZUNhY2hpbmcpCitib29sIEJpdG1hcEltYWdlOjplbnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVf
dCBpbmRleCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgY2FjaGluZykKIHsKICAgICBpZiAoaW5k
ZXggPj0gZnJhbWVDb3VudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoaW5k
ZXggPj0gbV9mcmFtZXMuc2l6ZSgpCi0gICAgICAgIHx8IChmcmFtZUNhY2hpbmcgPT0gQ2FjaGVN
ZXRhZGF0YUFuZEZyYW1lICYmICFtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKLSAgICAgICAgfHwg
KGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhT25seSAmJiAhbV9mcmFtZXNbaW5kZXhdLm1f
aGF2ZU1ldGFkYXRhKSkKLSAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgMCwgZnJhbWVDYWNoaW5n
KTsKKyAgICAgICAgfHwgKGNhY2hpbmcgPT0gSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFk
YXRhQW5kSW1hZ2UgJiYgIW1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpKQorICAgICAgICB8fCAo
Y2FjaGluZyA9PSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEgJiYgIW1fZnJhbWVz
W2luZGV4XS5oYXNNZXRhZGF0YSgpKSkKKyAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgMCwgY2Fj
aGluZyk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM4OCwxMCArMzY5LDkgQEAgTmF0aXZl
SW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgZmxv
YXQgcHJlc2VudGF0aW9uU2MKIAogICAgIC8vIFdlIG1heSBoYXZlIGNhY2hlZCBhIGZyYW1lIHdp
dGggYSBoaWdoZXIgc3Vic2FtcGxpbmcgbGV2ZWwsIGluIHdoaWNoIGNhc2Ugd2UgbmVlZCB0bwog
ICAgIC8vIHJlLWRlY29kZSB3aXRoIGEgbG93ZXIgbGV2ZWwuCi0gICAgaWYgKGluZGV4IDwgbV9m
cmFtZXMuc2l6ZSgpICYmIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlICYmIHN1YnNhbXBsaW5nTGV2
ZWwgPCBtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1wbGluZ0xldmVsKSB7CisgICAgaWYgKGluZGV4
IDwgbV9mcmFtZXMuc2l6ZSgpICYmIG1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpICYmIHN1YnNh
bXBsaW5nTGV2ZWwgPCBtX2ZyYW1lc1tpbmRleF0uc3Vic2FtcGxpbmdMZXZlbCgpKSB7CiAgICAg
ICAgIC8vIElmIHRoZSBpbWFnZSBpcyBhbHJlYWR5IGNhY2hlZCwgYnV0IGF0IHRvbyBzbWFsbCBh
IHNpemUsIHJlLWRlY29kZSBhIGxhcmdlciB2ZXJzaW9uLgotICAgICAgICBpbnQgc2l6ZUNoYW5n
ZSA9IC1tX2ZyYW1lc1tpbmRleF0ubV9mcmFtZUJ5dGVzOwotICAgICAgICBtX2ZyYW1lc1tpbmRl
eF0uY2xlYXIodHJ1ZSk7CisgICAgICAgIGludCBzaXplQ2hhbmdlID0gLW1fZnJhbWVzW2luZGV4
XS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6RW1wdHkpOwogICAgICAgICBpbnZhbGlk
YXRlUGxhdGZvcm1EYXRhKCk7CiAgICAgICAgIG1fZGVjb2RlZFNpemUgKz0gc2l6ZUNoYW5nZTsK
ICAgICAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKQEAgLTM5OSw0MCArMzc5LDcyIEBAIE5hdGl2
ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIGZs
b2F0IHByZXNlbnRhdGlvblNjCiAgICAgfQogCiAgICAgLy8gSWYgd2UgaGF2ZW4ndCBmZXRjaGVk
IGEgZnJhbWUgeWV0LCBkbyBzby4KLSAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8
ICFtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKLSAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgc3Vi
c2FtcGxpbmdMZXZlbCwgQ2FjaGVNZXRhZGF0YUFuZEZyYW1lKTsKKyAgICBpZiAoaW5kZXggPj0g
bV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0uaGFzSW1hZ2UoKSkKKyAgICAgICAg
Y2FjaGVGcmFtZShpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hp
bmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOworCisgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5pbWFn
ZSgpOworfQorICAgIAorTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKCkK
K3sKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCk7Cit9CisgICAgCitOYXRpdmVJbWFn
ZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkK
K3sKKyAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7CisgICAgCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGF1dG8gaW1hZ2UgPSBmcmFtZUlt
YWdlQXRJbmRleChpKTsKKyAgICAgICAgaWYgKGltYWdlICYmIFBsYXRmb3JtSW1hZ2UoaW1hZ2Up
LnNpemUoKSA9PSBzaXplKQorICAgICAgICAgICAgcmV0dXJuIGltYWdlOworICAgIH0KKyAgICAK
KyAgICAvLyBGYWxsYmFjayB0byB0aGUgZmlyc3QgZnJhbWUgaW1hZ2UgaWYgd2UgY2FuJ3QgZmlu
ZCB0aGUgcmlnaHQgc2l6ZQorICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKTsKK30KKyAg
ICAKK05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpCit7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKK30K
IAotICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZTsKK1ZlY3RvcjxOYXRpdmVJbWFn
ZVB0cj4gQml0bWFwSW1hZ2U6OmZyYW1lc05hdGl2ZUltYWdlcygpCit7CisgICAgVmVjdG9yPE5h
dGl2ZUltYWdlUHRyPiBpbWFnZXM7CisgICAgc2l6ZV90IGNvdW50ID0gZnJhbWVDb3VudCgpOwor
ICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBp
ZiAoYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpKQorICAgICAgICAgICAgaW1hZ2Vz
LmFwcGVuZChpbWFnZSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBpbWFnZXM7CiB9CiAKIGJv
b2wgQml0bWFwSW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogewot
ICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQor
ICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hp
bmc6Ok1ldGFkYXRhKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG1fZnJh
bWVzW2luZGV4XS5tX2lzQ29tcGxldGU7CisgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5pc0Nv
bXBsZXRlKCk7CiB9CiAKIGZsb2F0IEJpdG1hcEltYWdlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChz
aXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBDYWNo
ZU1ldGFkYXRhT25seSkpCisgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBJbWFn
ZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEpKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9kdXJhdGlvbjsKLX0KLQotTmF0aXZlSW1hZ2VQdHIg
Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKLXsKLSAgICByZXR1cm4g
ZnJhbWVJbWFnZUF0SW5kZXgoY3VycmVudEZyYW1lKCkpOworICAgIHJldHVybiBtX2ZyYW1lc1tp
bmRleF0uZHVyYXRpb24oKTsKIH0KIAogYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVIYXNBbHBoYUF0
SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRl
eCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQorICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRl
eCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBpZiAobV9mcmFtZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRhKQotICAgICAgICBy
ZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faGFzQWxwaGE7CisgICAgaWYgKG1fZnJhbWVzW2luZGV4
XS5oYXNNZXRhZGF0YSgpKQorICAgICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLmhhc0FscGhh
KCk7CiAKICAgICByZXR1cm4gbV9zb3VyY2UuZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5kZXgpOwog
fQpAQCAtNDQ0LDExICs0NTYsMTEgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Y3VycmVudEZyYW1lS25v
d25Ub0JlT3BhcXVlKCkKIAogSW1hZ2VPcmllbnRhdGlvbiBCaXRtYXBJbWFnZTo6ZnJhbWVPcmll
bnRhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICghZW5zdXJlRnJhbWVJc0Nh
Y2hlZChpbmRleCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQorICAgIGlmICghZW5zdXJlRnJhbWVJc0Nh
Y2hlZChpbmRleCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhKSkKICAgICAgICAg
cmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsKIAotICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9o
YXZlTWV0YWRhdGEpCi0gICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9vcmllbnRhdGlv
bjsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhdLmhhc01ldGFkYXRhKCkpCisgICAgICAgIHJldHVy
biBtX2ZyYW1lc1tpbmRleF0ub3JpZW50YXRpb24oKTsKIAogICAgIHJldHVybiBtX3NvdXJjZS5v
cmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOwogfQpAQCAtNzAwLDE3ICs3MTIsNTYgQEAgQ29sb3Ig
Qml0bWFwSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcigpCiAgICAgICAgIHJldHVybiBDb2xv
cigpOwogICAgIAogICAgIEFTU0VSVChtX2ZyYW1lcy5zaXplKCkpOwotICAgIG1fc29saWRDb2xv
ciA9IE5hdGl2ZUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IobV9mcmFtZXNbMF0ubV9pbWFn
ZS5nZXQoKSk7CisgICAgbV9zb2xpZENvbG9yID0gbV9mcmFtZXNbMF0uc2luZ2xlUGl4ZWxTb2xp
ZENvbG9yKCk7CiAgICAgCiAgICAgQVNTRVJUKG1fc29saWRDb2xvcik7CiAgICAgcmV0dXJuIG1f
c29saWRDb2xvci52YWx1ZSgpOwogfQogICAgIAorYm9vbCBCaXRtYXBJbWFnZTo6aXNBbG1vc3RT
b2xpZENvbG9yKCkKK3sKKyAgICBpZiAoZnJhbWVDb3VudCgpICE9IDEpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiBlbnN1cmVGcmFtZUlzQ2FjaGVkKDApICYmIG1fZnJhbWVz
WzBdLmlzQWxtb3N0U29saWRDb2xvcigpOworfQorICAgIAogYm9vbCBCaXRtYXBJbWFnZTo6Y2Fu
QW5pbWF0ZSgpCiB7CiAgICAgcmV0dXJuIHNob3VsZEFuaW1hdGUoKSAmJiBmcmFtZUNvdW50KCkg
PiAxOwogfQogCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBD
b21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUsIEltYWdlT3JpZW50YXRpb25EZXNj
cmlwdGlvbiBkZXNjcmlwdGlvbikKK3sKKyAgICBpZiAoZGVzdFJlY3QuaXNFbXB0eSgpIHx8IHNy
Y1JlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgc3RhcnRBbmltYXRpb24oRG9Ob3RDYXRjaFVwKTsKKyNlbHNlCisgICAgc3RhcnRBbmltYXRp
b24oKTsKKyNlbmRpZgorICAgIAorICAgIENvbG9yIGNvbG9yID0gc2luZ2xlUGl4ZWxTb2xpZENv
bG9yKCk7CisgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICBmaWxsV2l0aFNvbGlk
Q29sb3IoY29udGV4dCwgZGVzdFJlY3QsIGNvbG9yLCBvcCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZy
YW1lLCBQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKGNvbnRleHQsIGRlc3RSZWN0LCBz
cmNSZWN0KSk7CisgICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3Qg
aGF2ZSBhbiBpbWFnZSB5ZXQuCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBJbWFnZU9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKGRlc2NyaXB0aW9uLmltYWdlT3JpZW50YXRpb24oKSk7CisgICAg
aWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdl
T3JpZW50YXRpb24pCisgICAgICAgIG9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5k
ZXgobV9jdXJyZW50RnJhbWUpOworICAgIAorICAgIFBsYXRmb3JtSW1hZ2UoaW1hZ2UpLmRyYXco
Y29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG1fc2l6ZSwgb3AsIG1vZGUsIG9yaWVudGF0aW9u
KTsKKyAgICAKKyAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQorICAgICAgICBpbWFnZU9ic2VydmVy
KCktPmRpZERyYXcodGhpcyk7Cit9CisgICAgCiB2b2lkIEJpdG1hcEltYWdlOjpkdW1wKFRleHRT
dHJlYW0mIHRzKSBjb25zdAogewogICAgIEltYWdlOjpkdW1wKHRzKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCmluZGV4IDA3NTg5MjljZDg3ZmFk
YWNmMDJiNmVkOGVlYWZlN2RlZmQ2NmYwYzUuLjIyMThjODI0YjUyOGZkNjM5YmFiMTM4ZGVjYzk4
Yjk4MTZhMTY4MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuaApAQCAtMjgsMTEgKzI4LDEzIEBACiAjaWZuZGVmIEJpdG1hcEltYWdlX2gKICNk
ZWZpbmUgQml0bWFwSW1hZ2VfaAogCi0jaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJDb2xv
ci5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2VGcmFtZURhdGEuaCIKICNp
bmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKICNp
bmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgogCiAjaWYgVVNF
KENHKSB8fCBVU0UoQVBQS0lUKQogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTQ3LDYz
ICs0OSw5IEBAIHR5cGVkZWYgc3RydWN0IEhCSVRNQVBfXyAqSEJJVE1BUDsKICNlbmRpZgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgc3RydWN0IEZyYW1lRGF0YTsKLX0KLQotbmFtZXNwYWNl
IFdURiB7Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgVmVjdG9yVHJhaXRzPFdlYkNvcmU6OkZyYW1l
RGF0YT4gOiBwdWJsaWMgU2ltcGxlQ2xhc3NWZWN0b3JUcmFpdHMgewotICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBjYW5Jbml0aWFsaXplV2l0aE1lbXNldCA9IGZhbHNlOyAvLyBOb3QgYWxsIEZy
YW1lRGF0YSBtZW1iZXJzIGluaXRpYWxpemUgdG8gMC4KLSAgICB9OwotfQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIFRpbWVyOwogCi1uYW1lc3BhY2UgTmF0aXZlSW1hZ2UgewotICAg
IEludFNpemUgc2l6ZShjb25zdCBOYXRpdmVJbWFnZVB0ciYpOwotICAgIGJvb2wgaGFzQWxwaGEo
Y29uc3QgTmF0aXZlSW1hZ2VQdHImKTsKLSAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3Io
Y29uc3QgTmF0aXZlSW1hZ2VQdHImKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBGcmFtZURhdGEgQ2xhc3MKLS8vID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdHJ1Y3QgRnJhbWVE
YXRhIHsKLXB1YmxpYzoKLSAgICBGcmFtZURhdGEoKQotICAgICAgICA6IG1faGF2ZU1ldGFkYXRh
KGZhbHNlKQotICAgICAgICAsIG1faXNDb21wbGV0ZShmYWxzZSkKLSAgICAgICAgLCBtX2hhc0Fs
cGhhKHRydWUpCi0gICAgewotICAgIH0KLQotICAgIH5GcmFtZURhdGEoKQotICAgIHsgCi0gICAg
ICAgIGNsZWFyKHRydWUpOwotICAgIH0KLQotICAgIC8vIENsZWFyIHRoZSBjYWNoZWQgaW1hZ2Ug
ZGF0YSBvbiB0aGUgZnJhbWUsIGFuZCAob3B0aW9uYWxseSkgdGhlIG1ldGFkYXRhLgotICAgIC8v
IFJldHVybnMgd2hldGhlciB0aGVyZSB3YXMgY2FjaGVkIGltYWdlIGRhdGEgdG8gY2xlYXIuCi0g
ICAgYm9vbCBjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpOwotICAgIAotICAgIHVuc2lnbmVkIHVz
ZWRGcmFtZUJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZSA/IG1fZnJhbWVCeXRlcyA6IDA7
IH0KLQotICAgIE5hdGl2ZUltYWdlUHRyIG1faW1hZ2U7Ci0gICAgSW1hZ2VPcmllbnRhdGlvbiBt
X29yaWVudGF0aW9uIHsgRGVmYXVsdEltYWdlT3JpZW50YXRpb24gfTsKLSAgICBTdWJzYW1wbGlu
Z0xldmVsIG1fc3Vic2FtcGxpbmdMZXZlbCB7IDAgfTsKLSAgICBmbG9hdCBtX2R1cmF0aW9uIHsg
MCB9OwotICAgIGJvb2wgbV9oYXZlTWV0YWRhdGEgOiAxOwotICAgIGJvb2wgbV9pc0NvbXBsZXRl
IDogMTsKLSAgICBib29sIG1faGFzQWxwaGEgOiAxOwotICAgIHVuc2lnbmVkIG1fZnJhbWVCeXRl
cyB7IDAgfTsKLX07Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS8vIEJpdG1hcEltYWdlIENsYXNzCi0vLyA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KIGNsYXNzIEJpdG1hcEltYWdlIGZpbmFs
IDogcHVibGljIEltYWdlIHsKICAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7CiAgICAg
ZnJpZW5kIGNsYXNzIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOwpAQCAtMTU1LDEyICsxMDMsNiBA
QCBwdWJsaWM6CiAgICAgQ0ZEYXRhUmVmIGdldFRJRkZSZXByZXNlbnRhdGlvbigpIG92ZXJyaWRl
OwogI2VuZGlmCiAKLSNpZiBVU0UoQ0cpCi0gICAgV0VCQ09SRV9FWFBPUlQgQ0dJbWFnZVJlZiBn
ZXRDR0ltYWdlUmVmKCkgb3ZlcnJpZGU7Ci0gICAgQ0dJbWFnZVJlZiBnZXRGaXJzdENHSW1hZ2VS
ZWZPZlNpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwotICAgIFJldGFpblB0cjxDRkFycmF5
UmVmPiBnZXRDR0ltYWdlQXJyYXkoKSBvdmVycmlkZTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0o
V0lOKQogICAgIGJvb2wgZ2V0SEJJVE1BUChIQklUTUFQKSBvdmVycmlkZTsKICAgICBib29sIGdl
dEhCSVRNQVBPZlNpemUoSEJJVE1BUCwgY29uc3QgSW50U2l6ZSopIG92ZXJyaWRlOwpAQCAtMTc0
LDggKzExNiwxMyBAQCBwdWJsaWM6CiAgICAgRXZhc19PYmplY3QqIGdldEV2YXNPYmplY3QoRXZh
cyopIG92ZXJyaWRlOwogI2VuZGlmCiAKKyAgICBXRUJDT1JFX0VYUE9SVCBOYXRpdmVJbWFnZVB0
ciBuYXRpdmVJbWFnZSgpIG92ZXJyaWRlOworICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdl
T2ZTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKICAgICBOYXRpdmVJbWFnZVB0ciBuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIG92ZXJyaWRlOwogICAgIEltYWdlT3JpZW50YXRpb24g
b3JpZW50YXRpb25Gb3JDdXJyZW50RnJhbWUoKSBvdmVycmlkZSB7IHJldHVybiBmcmFtZU9yaWVu
dGF0aW9uQXRJbmRleChjdXJyZW50RnJhbWUoKSk7IH0KKyAgICBWZWN0b3I8TmF0aXZlSW1hZ2VQ
dHI+IGZyYW1lc05hdGl2ZUltYWdlcygpIG92ZXJyaWRlOworICAgIAorICAgIFdFQkNPUkVfRVhQ
T1JUIGJvb2wgaXNBbG1vc3RTb2xpZENvbG9yKCk7CiAKICAgICBib29sIGN1cnJlbnRGcmFtZUtu
b3duVG9CZU9wYXF1ZSgpIG92ZXJyaWRlOwogCkBAIC0yMTUsNyArMTYyLDYgQEAgcHJvdGVjdGVk
OgogICAgIHNpemVfdCBmcmFtZUNvdW50KCk7CiAKICAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUlt
YWdlQXRJbmRleChzaXplX3QsIGZsb2F0IHByZXNlbnRhdGlvblNjYWxlSGludCA9IDEpOwotICAg
IE5hdGl2ZUltYWdlUHRyIGNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCk7CiAK
ICAgICBib29sIGhhdmVGcmFtZUltYWdlQXRJbmRleChzaXplX3QpOwogCkBAIC0yMjUsMTEgKzE3
MSwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBmcmFtZU9yaWVudGF0aW9u
QXRJbmRleChzaXplX3QpOwogCiAgICAgLy8gRGVjb2RlcyBhbmQgY2FjaGVzIGEgZnJhbWUuIE5l
dmVyIGFjY2Vzc2VkIGV4Y2VwdCBpbnRlcm5hbGx5LgotICAgIGVudW0gSW1hZ2VGcmFtZUNhY2hp
bmcgeyBDYWNoZU1ldGFkYXRhT25seSwgQ2FjaGVNZXRhZGF0YUFuZEZyYW1lIH07Ci0gICAgdm9p
ZCBjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZUNh
Y2hpbmcgPSBDYWNoZU1ldGFkYXRhQW5kRnJhbWUpOworICAgIHZvaWQgY2FjaGVGcmFtZShzaXpl
X3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nID0gSW1h
Z2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOwogCiAgICAgLy8gQ2FsbGVk
IGJlZm9yZSBhY2Nlc3NpbmcgbV9mcmFtZXNbaW5kZXhdIGZvciBpbmZvIHdpdGhvdXQgZGVjb2Rp
bmcuIFJldHVybnMgZmFsc2Ugb24gaW5kZXggb3V0IG9mIGJvdW5kcy4KLSAgICBib29sIGVuc3Vy
ZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4LCBJbWFnZUZyYW1lQ2FjaGluZyA9IENhY2hlTWV0
YWRhdGFBbmRGcmFtZSk7CisgICAgYm9vbCBlbnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVfdCBpbmRl
eCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgPSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0
YWRhdGFBbmRJbWFnZSk7CiAKICAgICAvLyBDYWxsZWQgdG8gaW52YWxpZGF0ZSBjYWNoZWQgZGF0
YS4gV2hlbiB8ZGVzdHJveUFsbHwgaXMgdHJ1ZSwgd2Ugd2lwZSBvdXQKICAgICAvLyB0aGUgZW50
aXJlIGZyYW1lIGJ1ZmZlciBjYWNoZSBhbmQgdGVsbCB0aGUgaW1hZ2Ugc291cmNlIHRvIGRlc3Ry
b3kKQEAgLTI5Miw3ICsyMzcsNyBAQCBwcml2YXRlOgogICAgIG11dGFibGUgSW50U2l6ZSBtX3Np
emVSZXNwZWN0aW5nT3JpZW50YXRpb247CiAKICAgICBzaXplX3QgbV9jdXJyZW50RnJhbWUgeyAw
IH07IC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBmcmFtZSBvZiBhbmltYXRpb24uCi0gICAg
VmVjdG9yPEZyYW1lRGF0YSwgMT4gbV9mcmFtZXM7IC8vIEFuIGFycmF5IG9mIHRoZSBjYWNoZWQg
ZnJhbWVzIG9mIHRoZSBhbmltYXRpb24uIFdlIGhhdmUgdG8gcmVmIGZyYW1lcyB0byBwaW4gdGhl
bSBpbiB0aGUgY2FjaGUuCisgICAgVmVjdG9yPEltYWdlRnJhbWVEYXRhLCAxPiBtX2ZyYW1lczsg
Ly8gQW4gYXJyYXkgb2YgdGhlIGNhY2hlZCBmcmFtZXMgb2YgdGhlIGFuaW1hdGlvbi4gV2UgaGF2
ZSB0byByZWYgZnJhbWVzIHRvIHBpbiB0aGVtIGluIHRoZSBjYWNoZS4KIAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxUaW1lcj4gbV9mcmFtZVRpbWVyOwogICAgIGludCBtX3JlcGV0aXRpb25Db3VudCB7
IGNBbmltYXRpb25Ob25lIH07IC8vIEhvdyBtYW55IHRvdGFsIGFuaW1hdGlvbiBsb29wcyB3ZSBz
aG91bGQgZG8uIFRoaXMgd2lsbCBiZSBjQW5pbWF0aW9uTm9uZSBpZiB0aGlzIGltYWdlIHR5cGUg
aXMgaW5jYXBhYmxlIG9mIGFuaW1hdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwUGl4ZWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTEzZDQxOTJlYWUxMGNkNjQyYTY1
MGRjYjBhM2E4ZDczY2JhMWU0OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oCkBAIC0wLDAgKzEsMTcxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6
ZS5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KyAgICAKK2NsYXNzIEJpdG1hcFBpeGVscyB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxCaXRtYXBQaXhlbHM+IGNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBib29sIHBy
ZW11bHRpcGx5QWxwaGEpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxC
aXRtYXBQaXhlbHM+KHNpemUsIHByZW11bHRpcGx5QWxwaGEpOworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgc3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gY3JlYXRlKGNvbnN0IEJpdG1hcFBp
eGVscyYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxCaXRt
YXBQaXhlbHM+KG90aGVyKTsKKyAgICB9CisgICAgCisgICAgQml0bWFwUGl4ZWxzKGNvbnN0IElu
dFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSA9IHRydWUpCisgICAgICAgIDogbV9w
cmVtdWx0aXBseUFscGhhKHByZW11bHRpcGx5QWxwaGEpCisgICAgeworICAgICAgICBBU1NFUlQo
IXNpemUuaXNFbXB0eSgpKTsKKyAgICAgICAgc2V0U2l6ZShzaXplKTsKKyAgICB9CisgICAgCisg
ICAgQml0bWFwUGl4ZWxzKGNvbnN0IEJpdG1hcFBpeGVscyYgb3RoZXIpCisgICAgeworICAgICAg
ICBpZiAodGhpcyA9PSAmb3RoZXIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
ICAgICBtX2JhY2tpbmdTdG9yZSA9IG90aGVyLm1fYmFja2luZ1N0b3JlOworICAgICAgICBtX3Bp
eGVscyA9IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsKKyAgICAgICAgbV9zaXplID0gb3RoZXIubV9z
aXplOworICAgICAgICBtX3ByZW11bHRpcGx5QWxwaGEgPSBvdGhlci5tX3ByZW11bHRpcGx5QWxw
aGE7CisgICAgfQorICAgIAorICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53
aWR0aCgpOyB9CisgICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQo
KTsgfQorICAgIAorICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlKCkgY29uc3Q7CisgICAgCisgICAg
Ym9vbCBzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpCisgICAgeworICAgICAgICBpZiAoIW1f
YmFja2luZ1N0b3JlLnRyeVJlc2VydmVDYXBhY2l0eShzaXplLmFyZWEoKSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBtX2JhY2tpbmdTdG9yZS5yZXNpemUo
c2l6ZS5hcmVhKCkpOworICAgICAgICBtX3BpeGVscyA9IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsK
KyAgICAgICAgbV9zaXplID0gc2l6ZTsKKyAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIFJHQkEzMiogYXQoaW50IHgsIGludCB5KSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcGl4ZWxzICsgeSAqIG1fc2l6ZS53aWR0aCgpICsgeDsK
KyAgICB9CisgICAgCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtZW1zZXQobV9w
aXhlbHMsIDAsIG1fc2l6ZS5hcmVhKCkgKiBzaXplb2YoUkdCQTMyKSk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICBp
ZiAocmVjdC5pc0VtcHR5KCkgfHwgaW5Cb3VuZHMocmVjdCkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgICAgICBzaXplX3QgcmVjdFdpZHRoSW5CeXRlcyA9IHJlY3Qud2lkdGgo
KSAqIHNpemVvZihSR0JBMzIpOworICAgICAgICBSR0JBMzIqIHN0YXJ0ID0gYXQocmVjdC54KCks
IHJlY3QueSgpKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0LmhlaWdodCgpOyAr
K2kpIHsKKyAgICAgICAgICAgIG1lbXNldChzdGFydCwgMCwgcmVjdFdpZHRoSW5CeXRlcyk7Cisg
ICAgICAgICAgICBzdGFydCArPSBtX3NpemUud2lkdGgoKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICB2b2lkIHJlcGVhdEZpcnN0Um93KGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAgewor
ICAgICAgICBpZiAocmVjdC5pc0VtcHR5KCkgfHwgaW5Cb3VuZHMocmVjdCkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIAorICAgICAgICBzaXplX3QgcmVjdFdpZHRoSW5CeXRlcyA9IHJl
Y3Qud2lkdGgoKSAqIHNpemVvZihSR0JBMzIpOworICAgICAgICBSR0JBMzIqIHNyYyA9IGF0KHJl
Y3QueCgpLCByZWN0LnkoKSk7CisgICAgICAgIFJHQkEzMiogZGVzdCA9IHNyYyArIG1fc2l6ZS53
aWR0aCgpOworICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IHJlY3QuaGVpZ2h0KCk7ICsraSkg
eworICAgICAgICAgICAgbWVtY3B5KGRlc3QsIHNyYywgcmVjdFdpZHRoSW5CeXRlcyk7CisgICAg
ICAgICAgICBkZXN0ICs9IG1fc2l6ZS53aWR0aCgpOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIHZvaWQgc2V0UkdCQShpbnQgeCwgaW50IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVu
c2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAgeworICAgICAgICBzZXRSR0JBKGF0KHgsIHkpLCBy
LCBnLCBiLCBhKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRSR0JBKFJHQkEzMiogZGVzdCwg
dW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKKyAgICB7Cisg
ICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhIHx8IGEgPj0gMjU1KQorICAgICAgICAgICAg
KmRlc3QgPSBtYWtlUkdCQShyLCBnLCBiLCBhKTsKKyAgICAgICAgZWxzZSBpZiAoIWEpCisgICAg
ICAgICAgICAqZGVzdCA9IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpkZXN0ID0gbWFr
ZVByZW11bHRpcGxpZWRSR0JBKHIsIGcsIGIsIGEpOworICAgIH0KKyAgICAKKyAgICB2b2lkIG92
ZXJSR0JBKFJHQkEzMiogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwg
dW5zaWduZWQgYSkKKyAgICB7CisgICAgICAgIGlmICghYSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgICAgIGlmIChhID49IDI1NSB8fCAhYWxwaGFDaGFubmVsKCpkZXN0KSkg
eworICAgICAgICAgICAgc2V0UkdCQShkZXN0LCByLCBnLCBiLCBhKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxw
aGEpCisgICAgICAgICAgICAqZGVzdCA9IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShyZWRDaGFubmVs
KCpkZXN0KSwgZ3JlZW5DaGFubmVsKCpkZXN0KSwgYmx1ZUNoYW5uZWwoKmRlc3QpLCBhbHBoYUNo
YW5uZWwoKmRlc3QpKTsKKyAgICAgICAgCisgICAgICAgIFJHQkEzMiBzcmMgPSBtYWtlUkdCQShy
LCBnLCBiLCBhKTsKKyAgICAgICAgKmRlc3QgPSBDb2xvcigqZGVzdCkuYmxlbmQoc3JjKS5yZ2Io
KTsKKyAgICAgICAgCisgICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKQorICAgICAgICAg
ICAgKmRlc3QgPSBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShyZWRDaGFubmVsKCpkZXN0KSwgZ3Jl
ZW5DaGFubmVsKCpkZXN0KSwgYmx1ZUNoYW5uZWwoKmRlc3QpLCBhbHBoYUNoYW5uZWwoKmRlc3Qp
KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpbkJvdW5kcyhjb25zdCBJbnRQb2ludCYgcG9pbnQp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUp
LmNvbnRhaW5zKHBvaW50KTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpbkJvdW5kcyhjb25zdCBJ
bnRSZWN0JiByZWN0KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9p
bnQoKSwgbV9zaXplKS5jb250YWlucyhyZWN0KTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAg
IFZlY3RvcjxSR0JBMzI+IG1fYmFja2luZ1N0b3JlOworICAgIFJHQkEzMiogbV9waXhlbHMgeyBu
dWxscHRyIH07CisgICAgSW50U2l6ZSBtX3NpemU7CisgICAgYm9vbCBtX3ByZW11bHRpcGx5QWxw
aGEgeyB0cnVlIH07Cit9OworICAgIAorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3IuY3BwCmluZGV4IDRlMjVhYTZmZDc0ZDFlNDZjNTQxNjE0OThiYzE3MmJmNjAwODc1
ZDEuLjQzOWY1YTYzYzdiZWJlNTYwNDJiMjRlN2Q3MmVjY2VjZjM2YzQwYzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKQEAgLTQ5LDYgKzQ5LDQwIEBAIGNv
bnN0IFJHQkEzMiBDb2xvcjo6dHJhbnNwYXJlbnQ7CiBzdGF0aWMgY29uc3QgUkdCQTMyIGxpZ2h0
ZW5lZEJsYWNrID0gMHhGRjU0NTQ1NDsKIHN0YXRpYyBjb25zdCBSR0JBMzIgZGFya2VuZWRXaGl0
ZSA9IDB4RkZBQkFCQUI7CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbXVsdGlwbHkyNTUodW5z
aWduZWQgYykKK3sKKyAgICAvLyBjICogMjU1CisgICAgLy8gICA9IGMgKiAoMjU2IC0gMSkKKyAg
ICAvLyAgID0gYyAqIDI1NiAtIGMKKyAgICByZXR1cm4gKGMgPDwgOCkgLSBjOworfQorCitzdGF0
aWMgaW5saW5lIHVuc2lnbmVkIGRpdmlkZTI1NSh1bnNpZ25lZCBjKQoreworICAgIC8vIGMgLyAy
NTUKKyAgICAvLyAgID0gYyAvIDI1NiAqICgxICsgMSAvIDI1NSkKKyAgICAvLyAgID0gKGMgKyBj
IC8gMjU1KSAvIDI1NgorICAgIC8vICAgPSAoYyArIChjICsgYyAvIDI1NSkgLyAyNTYpIC8gMjU2
CisgICAgLy8gICA9IChjICsgYyAvIDI1NiArIGMgLyAoMjU1IHggMjU2KSkgLyAyNTYKKyAgICAv
LyAgfj0gKGMgKyBjIC8gMjU2ICsgMSkgLyAyNTYKKyAgICByZXR1cm4gKGMgKyAoYyA+PiA4KSAr
IDEpID4+IDg7Cit9CisgICAgCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRpdmlkZUNlaWwodW5z
aWduZWQgYywgdW5zaWduZWQgZCkKK3sKKyAgICByZXR1cm4gKGMgKyBkIC0gMSkgLyBkOworfQor
ICAgIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBwcmVtdWx0aXBsaWVkQ2hhbm5lbCh1bnNpZ25l
ZCBjLCB1bnNpZ25lZCBhKQoreworICAgIHJldHVybiBkaXZpZGUyNTUoYyAqIGEpOworfQorCitz
dGF0aWMgaW5saW5lIHVuc2lnbmVkIHVucHJlbXVsdGlwbGllZENoYW5uZWwodW5zaWduZWQgYywg
dW5zaWduZWQgYSkKK3sKKyAgICByZXR1cm4gZGl2aWRlQ2VpbChtdWx0aXBseTI1NShjKSwgYSk7
Cit9CisgICAgCiBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBiKQogewogICAgIHJl
dHVybiAweEZGMDAwMDAwIHwgc3RkOjptYXgoMCwgc3RkOjptaW4ociwgMjU1KSkgPDwgMTYgfCBz
dGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAyNTUpKSA8PCA4IHwgc3RkOjptYXgoMCwgc3RkOjptaW4o
YiwgMjU1KSk7CkBAIC01OSw2ICs5MywxNiBAQCBSR0JBMzIgbWFrZVJHQkEoaW50IHIsIGludCBn
LCBpbnQgYiwgaW50IGEpCiAgICAgcmV0dXJuIHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGEsIDI1NSkp
IDw8IDI0IHwgc3RkOjptYXgoMCwgc3RkOjptaW4ociwgMjU1KSkgPDwgMTYgfCBzdGQ6Om1heCgw
LCBzdGQ6Om1pbihnLCAyNTUpKSA8PCA4IHwgc3RkOjptYXgoMCwgc3RkOjptaW4oYiwgMjU1KSk7
CiB9CiAKK1JHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwg
aW50IGEpCit7CisgICAgcmV0dXJuIG1ha2VSR0JBKHByZW11bHRpcGxpZWRDaGFubmVsKHIsIGEp
LCBwcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBhKSwgcHJlbXVsdGlwbGllZENoYW5uZWwoYiwgYSks
IGEpOworfQorICAgIAorUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQg
ZywgaW50IGIsIGludCBhKQoreworICAgIHJldHVybiBtYWtlUkdCQSh1bnByZW11bHRpcGxpZWRD
aGFubmVsKHIsIGEpLCB1bnByZW11bHRpcGxpZWRDaGFubmVsKGcsIGEpLCB1bnByZW11bHRpcGxp
ZWRDaGFubmVsKGIsIGEpLCBhKTsKK30KKyAgICAKIHN0YXRpYyBpbnQgY29sb3JGbG9hdFRvUkdC
QUJ5dGUoZmxvYXQgZikKIHsKICAgICAvLyBXZSB1c2UgbHJvdW5kZiBhbmQgMjU1IGluc3RlYWQg
b2YgbmV4dGFmdGVyZigyNTYsIDApIHRvIG1hdGNoIENHJ3Mgcm91bmRpbmcKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCmluZGV4IGRkMjYyNzBiYjQ2NjBiMzNhZTA3MGU4
Yzk0NDUyMGQ3Mjg0NTRiOGEuLmE1NDUzMmM3NzU1YTdjODc2OTM2MjQwY2FlNGVjMzdhNGRhMGQw
NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaApAQCAtNTQsNiAr
NTQsOCBAQCB0eXBlZGVmIHVuc2lnbmVkIFJHQkEzMjsgLy8gRGVwcmVjYXRlZDogVHlwZSBmb3Ig
YW4gUkdCQSBxdWFkcnVwbGV0LiBVc2UgUkdCQSBjbAogCiBXRUJDT1JFX0VYUE9SVCBSR0JBMzIg
bWFrZVJHQihpbnQgciwgaW50IGcsIGludCBiKTsKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtl
UkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7CitXRUJDT1JFX0VYUE9SVCBSR0JBMzIg
bWFrZVByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKK1dFQkNP
UkVfRVhQT1JUIFJHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGlu
dCBiLCBpbnQgYSk7CiAKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBjb2xvcldpdGhPdmVycmlkZUFs
cGhhKFJHQkEzMiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSk7CiBXRUJDT1JFX0VYUE9SVCBS
R0JBMzIgY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIE9wdGlvbmFsPGZsb2F0
PiBvdmVycmlkZUFscGhhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5o
CmluZGV4IDdhMjk5OTJmNzcxODhlMDM4MjhkODBhNjViOGJlMmNkOGRjMmRlNzYuLjhlN2I1MmIx
ZjRmMzFjNzRhM2NiMmExMzIxNWRhNzdhMmIxOGMwN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2UuaApAQCAtMTM3LDggKzEzNywxMSBAQCBwdWJsaWM6CiAKICAgICBl
bnVtIFRpbGVSdWxlIHsgU3RyZXRjaFRpbGUsIFJvdW5kVGlsZSwgU3BhY2VUaWxlLCBSZXBlYXRU
aWxlIH07CiAKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlKCkgeyByZXR1
cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VPZlNp
emUoY29uc3QgSW50U2l6ZSYpIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICB2aXJ0dWFsIE5hdGl2
ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgeyByZXR1cm4gbnVsbHB0cjsg
fQogICAgIHZpcnR1YWwgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkZvckN1cnJlbnRGcmFt
ZSgpIHsgcmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsgfQorICAgIHZpcnR1YWwgVmVjdG9yPE5h
dGl2ZUltYWdlUHRyPiBmcmFtZXNOYXRpdmVJbWFnZXMoKSB7IHJldHVybiB7IH07IH0KIAogICAg
IC8vIEFjY2Vzc29ycyBmb3IgbmF0aXZlIGltYWdlIGZvcm1hdHMuCiAKQEAgLTE1MCwxMiArMTUz
LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgQ0ZEYXRhUmVmIGdldFRJRkZSZXByZXNlbnRhdGlv
bigpIHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCi0jaWYgVVNFKENHKQotICAgIHZpcnR1
YWwgQ0dJbWFnZVJlZiBnZXRDR0ltYWdlUmVmKCkgeyByZXR1cm4gbnVsbHB0cjsgfQotICAgIHZp
cnR1YWwgQ0dJbWFnZVJlZiBnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUoY29uc3QgSW50U2l6ZSYp
IHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIFJldGFpblB0cjxDRkFycmF5UmVmPiBn
ZXRDR0ltYWdlQXJyYXkoKSB7IHJldHVybiBudWxscHRyOyB9Ci0jZW5kaWYKLQogI2lmIFBMQVRG
T1JNKFdJTikKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SEJJVE1BUChIQklUTUFQKSB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBnZXRIQklUTUFQT2ZTaXplKEhCSVRNQVAsIGNvbnN0
IEludFNpemUqKSB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTc5LDYgKzE3Niw4IEBAIHB1YmxpYzoK
ICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgdmlydHVhbCBib29sIG5vdFNvbGlkQ29sb3IoKSB7
IHJldHVybiB0cnVlOyB9CiAjZW5kaWYKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0SWZO
ZWVkZWQoKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRleHRTdHJlYW0mKSBjb25zdDsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFt
ZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURh
dGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjBjZTE0YjViZDE4MDQ4NTIyNjA2MzA0YWJmNDhhM2RjYmI5OTU3
OWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUZyYW1lRGF0YS5jcHAKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkltYWdlRnJhbWVEYXRhLmgiCisKKyNpbmNsdWRlICJDb2xvci5oIgorCisjaWYgVVNFKENHKQor
I2luY2x1ZGUgIkltYWdlRGVjb2RlckNHLmgiCisjZWxzZQorI2luY2x1ZGUgIkltYWdlRGVjb2Rl
ci5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworSW1hZ2VGcmFtZURhdGE6OkltYWdlRnJhbWVEYXRhKCkKK3sKK30KKworSW1h
Z2VGcmFtZURhdGE6OkltYWdlRnJhbWVEYXRhKE5hdGl2ZUltYWdlUHRyJiYgaW1hZ2UpCisgICAg
OiBtX3N0YXR1cyhEZWNvZGluZ1N0YXR1czo6Q29tcGxldGUpCisgICAgLCBtX2ltYWdlKFdURk1v
dmUoaW1hZ2UpKQoreworICAgIG1fc2l6ZSA9IFBsYXRmb3JtSW1hZ2UobV9pbWFnZSkuc2l6ZSgp
OworICAgIG1faGFzQWxwaGEgPSBQbGF0Zm9ybUltYWdlKG1faW1hZ2UpLmhhc0FscGhhKCk7Cit9
CisKK0ltYWdlRnJhbWVEYXRhOjpJbWFnZUZyYW1lRGF0YShJbWFnZURlY29kZXImIGRlY29kZXIs
IHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBDYWNoaW5n
IGZyYW1lQ2FjaGluZykKK3sKKyAgICBBU1NFUlQoZnJhbWVDYWNoaW5nID09IENhY2hpbmc6Ok1l
dGFkYXRhIHx8IGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YUFuZEltYWdlKTsKKyAg
ICAKKyAgICBpZiAoZnJhbWVDYWNoaW5nID09IENhY2hpbmc6OkltYWdlIHx8IGZyYW1lQ2FjaGlu
ZyA9PSBDYWNoaW5nOjpNZXRhZGF0YUFuZEltYWdlKSB7CisgICAgICAgIG1faW1hZ2UgPSBkZWNv
ZGVyLmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsKKyAg
ICAgICAgbV9zdWJzYW1wbGluZ0xldmVsID0gc3Vic2FtcGxpbmdMZXZlbDsKKyAgICB9CisgICAg
CisgICAgaWYgKGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YSB8fCBmcmFtZUNhY2hp
bmcgPT0gQ2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSkgeworICAgICAgICBtX29yaWVudGF0aW9u
ID0gZGVjb2Rlci5vcmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOworICAgICAgICBtX3N0YXR1cyA9
IGRlY29kZXIuZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCkgPyBEZWNvZGluZ1N0YXR1czo6
Q29tcGxldGUgOiBEZWNvZGluZ1N0YXR1czo6UGFydGlhbDsKKyAgICAgICAgCisgICAgICAgIGlm
IChkZWNvZGVyLnJlcGV0aXRpb25Db3VudCgpICE9IGNBbmltYXRpb25Ob25lKQorICAgICAgICAg
ICAgbV9kdXJhdGlvbiA9IGRlY29kZXIuZnJhbWVEdXJhdGlvbkF0SW5kZXgoaW5kZXgpOworICAg
ICAgICAKKyAgICAgICAgbV9oYXNBbHBoYSA9IGRlY29kZXIuZnJhbWVIYXNBbHBoYUF0SW5kZXgo
aW5kZXgpOworICAgICAgICBtX3NpemUgPSBkZWNvZGVyLmZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgs
IHN1YnNhbXBsaW5nTGV2ZWwpOworICAgIH0KK30KKworSW1hZ2VGcmFtZURhdGE6On5JbWFnZUZy
YW1lRGF0YSgpCit7CisgICAgY2xlYXJTdWJJbWFnZXMoKTsKK30KKwordm9pZCBJbWFnZUZyYW1l
RGF0YTo6Y2xlYXJTdWJJbWFnZXMoKQoreworICAgIGlmICghbV9pbWFnZSkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIFBsYXRmb3JtSW1hZ2UobV9pbWFnZSkuY2xlYXJTdWJJbWFnZXMoKTsK
K30KKwordW5zaWduZWQgSW1hZ2VGcmFtZURhdGE6OmNsZWFyKENhY2hpbmcgZnJhbWVDYWNoaW5n
KQoreworICAgIEFTU0VSVChmcmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6RW1wdHkgfHwgZnJhbWVD
YWNoaW5nID09IENhY2hpbmc6Ok1ldGFkYXRhKTsKKyAgICAKKyAgICB1bnNpZ25lZCBmcmFtZUJ5
dGVzID0gdGhpcy0+ZnJhbWVCeXRlcygpOworICAgIAorICAgIGNsZWFyU3ViSW1hZ2VzKCk7Cisg
ICAgCisgICAgaWYgKGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpFbXB0eSkKKyAgICAgICAgKnRo
aXMgPSBJbWFnZUZyYW1lRGF0YSgpOworICAgIGVsc2UKKyAgICAgICAgbV9pbWFnZSA9IG51bGxw
dHI7CisgICAgCisgICAgcmV0dXJuIGZyYW1lQnl0ZXM7Cit9CisKK0NvbG9yIEltYWdlRnJhbWVE
YXRhOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdAoreworICAgIGlmICghaGFzSW1hZ2Uo
KSB8fCBtX3NpemUgIT0gSW50U2l6ZSgxLCAxKSkKKyAgICAgICAgcmV0dXJuIENvbG9yKCk7Cisg
ICAgCisgICAgcmV0dXJuIFBsYXRmb3JtSW1hZ2UobV9pbWFnZSkuc2luZ2xlUGl4ZWxTb2xpZENv
bG9yKCk7Cit9CisKK2Jvb2wgSW1hZ2VGcmFtZURhdGE6OmlzQWxtb3N0U29saWRDb2xvcigpIGNv
bnN0Cit7CisgICAgaWYgKCFoYXNJbWFnZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgcmV0dXJuIFBsYXRmb3JtSW1hZ2UobV9pbWFnZSkuaXNBbG1vc3RTb2xpZENvbG9yKCk7
Cit9CisgICAgCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUZyYW1lRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VGcmFtZURhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MjA4MGM4ZDg5ZDk1ZDU5ZDJhOTZhYTdiNGEyYzQ1
YzI2NTY3ZTA2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VGcmFtZURhdGEuaApAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
Qml0bWFwUGl4ZWxzLmgiCisjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgorI2luY2x1ZGUg
IkludFNpemUuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZVB0ci5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIENvbG9yOworY2xhc3MgSW1hZ2VEZWNvZGVyOworCisvLyBTdWJzYW1w
bGluZ0xldmVsLiAwIGlzIG5vIHN1YnNhbXBsaW5nLCAxIGlzIGhhbGYgZGltZW5zaW9ucyBvbiBl
YWNoIGF4aXMgZXRjLgordXNpbmcgU3Vic2FtcGxpbmdMZXZlbCA9IHVpbnQ4X3Q7CisKK2VudW0g
OiBTdWJzYW1wbGluZ0xldmVsIHsKKyAgICBNaW5TdWJzYW1wbGluZ0xldmVsID0gMCwKKyAgICBN
YXhTdWJzYW1wbGluZ0xldmVsID0gMywKKyAgICBEZWZhdWx0U3Vic2FtcGxpbmdMZXZlbCA9IE1p
blN1YnNhbXBsaW5nTGV2ZWwKK307CisKK2NsYXNzIEltYWdlRnJhbWVEYXRhIHsKK3B1YmxpYzoK
KyAgICBlbnVtIGNsYXNzIENhY2hpbmcgeyBFbXB0eSwgTWV0YWRhdGEsIEltYWdlLCBNZXRhZGF0
YUFuZEltYWdlIH07CisgICAgZW51bSBjbGFzcyBEZWNvZGluZ1N0YXR1cyB7IEVtcHR5LCBQYXJ0
aWFsLCBDb21wbGV0ZSB9OworICAgIAorICAgIEltYWdlRnJhbWVEYXRhKCk7CisgICAgSW1hZ2VG
cmFtZURhdGEoTmF0aXZlSW1hZ2VQdHImJik7CisgICAgSW1hZ2VGcmFtZURhdGEoSW1hZ2VEZWNv
ZGVyJiwgc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsID0gRGVmYXVsdFN1YnNhbXBsaW5n
TGV2ZWwsIENhY2hpbmcgPSBDYWNoaW5nOjpNZXRhZGF0YUFuZEltYWdlKTsKKyAgICBJbWFnZUZy
YW1lRGF0YShJbWFnZUZyYW1lRGF0YSYmKSA9IGRlZmF1bHQ7CisgICAgSW1hZ2VGcmFtZURhdGEm
IG9wZXJhdG9yPShJbWFnZUZyYW1lRGF0YSYmKSA9IGRlZmF1bHQ7CisgICAgCisgICAgfkltYWdl
RnJhbWVEYXRhKCk7CisgICAgCisgICAgdW5zaWduZWQgY2xlYXIoQ2FjaGluZyk7CisgICAgQ29s
b3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3Q7CisgICAgYm9vbCBpc0FsbW9zdFNvbGlk
Q29sb3IoKSBjb25zdDsKKyAgICAKKyAgICBEZWNvZGluZ1N0YXR1cyBzdGF0dXMoKSBjb25zdCB7
IHJldHVybiBtX3N0YXR1czsgfQorICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdHVzID09IERlY29kaW5nU3RhdHVzOjpDb21wbGV0ZTsgfQorICAgIEludFNpemUgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMoKSBj
b25zdCB7IHJldHVybiBoYXNJbWFnZSgpID8gbV9zaXplLmFyZWEoKSAqIDQgOiAwOyB9CisgICAg
TmF0aXZlSW1hZ2VQdHIgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlOyB9CisgICAgQml0
bWFwUGl4ZWxzKiBwaXhlbHMoKSBjb25zdCB7IHJldHVybiBtX3BpeGVscyA/IG1fcGl4ZWxzLmdl
dCgpIDogbnVsbHB0cjsgfQorICAgIAorICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24o
KSBjb25zdCB7IHJldHVybiBtX29yaWVudGF0aW9uOyB9CisgICAgU3Vic2FtcGxpbmdMZXZlbCBz
dWJzYW1wbGluZ0xldmVsKCkgY29uc3QgeyByZXR1cm4gbV9zdWJzYW1wbGluZ0xldmVsOyB9Cisg
ICAgZmxvYXQgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9CisgICAgCisg
ICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQWxwaGE7IH0KKyAgICBib29s
IGhhc0ltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZTsgfQorICAgIGJvb2wgaGFzTWV0YWRh
dGEoKSBjb25zdCB7IHJldHVybiAhbV9zaXplLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaGFzUGl4
ZWxzKCkgY29uc3QgeyByZXR1cm4gcGl4ZWxzKCk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgdm9p
ZCBjbGVhclN1YkltYWdlcygpOworICAgIAorICAgIERlY29kaW5nU3RhdHVzIG1fc3RhdHVzIHsg
RGVjb2RpbmdTdGF0dXM6OkVtcHR5IH07CisgICAgSW50U2l6ZSBtX3NpemU7CisgICAgTmF0aXZl
SW1hZ2VQdHIgbV9pbWFnZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Qml0bWFwUGl4ZWxzPiBtX3Bp
eGVsczsKKyAgICAKKyAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50YXRpb24geyBEZWZhdWx0
SW1hZ2VPcmllbnRhdGlvbiB9OworICAgIFN1YnNhbXBsaW5nTGV2ZWwgbV9zdWJzYW1wbGluZ0xl
dmVsIHsgMCB9OworICAgIGZsb2F0IG1fZHVyYXRpb24geyAwIH07CisgICAgYm9vbCBtX2hhc0Fs
cGhhIHsgdHJ1ZSB9OworfTsKKyAgICAKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAppbmRleCBkZGQ4YTU1YmEwOTA2YzU4NjZhMTkyY2Y4
ZTQxNGVhNzA3YjcyOGFjLi44MmY2ZTJkNmU0NTQzM2RhMWE3ZDU2YjM3MGRmYTYxYTRjNDE5MTM2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJj
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
Y3BwCkBAIC0yMjQsNiArMjI0LDExIEBAIE5hdGl2ZUltYWdlUHRyIEltYWdlU291cmNlOjpjcmVh
dGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2CiAgICAgcmV0
dXJuIGluaXRpYWxpemVkKCkgPyBtX2RlY29kZXItPmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGlu
ZGV4LCBzdWJzYW1wbGluZ0xldmVsKSA6IG51bGxwdHI7CiB9CiAKK0ltYWdlRnJhbWVEYXRhIElt
YWdlU291cmNlOjpjcmVhdGVGcmFtZURhdGFBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2FtcGxp
bmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyBjYWNoaW5n
KQoreworICAgIHJldHVybiBpbml0aWFsaXplZCgpID8gSW1hZ2VGcmFtZURhdGEoKm1fZGVjb2Rl
ciwgaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwsIGNhY2hpbmcpIDogSW1hZ2VGcmFtZURhdGEoKTsK
K30KKyAgICAKIHZvaWQgSW1hZ2VTb3VyY2U6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0CiB7
CiAgICAgaWYgKG1fYWxsb3dTdWJzYW1wbGluZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCmluZGV4IDYwMzU3MzliN2U4YjA5NmRjOGRmZTljNTMw
YTQyYzZmMjkxYmRhMDAuLmE0MGM3Y2U5MzA3Y2RhZGYwNzlhYjcwMWE4Mjc5OWI2OTA1MjlkNDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaApA
QCAtMjcsNiArMjcsNyBAQAogI2lmbmRlZiBJbWFnZVNvdXJjZV9oCiAjZGVmaW5lIEltYWdlU291
cmNlX2gKIAorI2luY2x1ZGUgIkltYWdlRnJhbWVEYXRhLmgiCiAjaW5jbHVkZSAiSW1hZ2VPcmll
bnRhdGlvbi5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VQ
dHIuaCIKQEAgLTYzLDkgKzY0LDYgQEAgY29uc3QgaW50IGNBbmltYXRpb25Mb29wT25jZSA9IDA7
CiBjb25zdCBpbnQgY0FuaW1hdGlvbkxvb3BJbmZpbml0ZSA9IC0xOwogY29uc3QgaW50IGNBbmlt
YXRpb25Ob25lID0gLTI7CiAKLS8vIFN1YnNhbXBsaW5nTGV2ZWwuIDAgaXMgbm8gc3Vic2FtcGxp
bmcsIDEgaXMgaGFsZiBkaW1lbnNpb25zIG9uIGVhY2ggYXhpcyBldGMuCi10eXBlZGVmIHNob3J0
IFN1YnNhbXBsaW5nTGV2ZWw7Ci0KIGNsYXNzIEltYWdlU291cmNlIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShJbWFnZVNvdXJjZSk7CiAgICAgZnJpZW5kIGNsYXNzIEJpdG1hcEltYWdlOwpA
QCAtMTMyLDE4ICsxMzAsMTkgQEAgcHVibGljOgogICAgIGJvb2wgYWxsb3dTdWJzYW1wbGluZ09m
RnJhbWVBdEluZGV4KHNpemVfdCkgY29uc3Q7CiAgICAgCiAgICAgLy8gU2l6ZSBvZiBvcHRpb25h
bGx5IHN1YnNhbXBsZWQgZnJhbWUuCi0gICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVf
dCwgU3Vic2FtcGxpbmdMZXZlbCA9IDAsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSA9IERv
Tm90UmVzcGVjdEltYWdlT3JpZW50YXRpb24pIGNvbnN0OworICAgIEludFNpemUgZnJhbWVTaXpl
QXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBEZWZhdWx0U3Vic2FtcGxpbmdMZXZl
bCwgUmVzcGVjdEltYWdlT3JpZW50YXRpb25FbnVtID0gRG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRh
dGlvbikgY29uc3Q7CiAgICAgCiAgICAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4g
dGhlIGRlY29kZWQgZnJhbWUuIElmIHRoZSBmcmFtZSBpcyBub3QgeWV0CiAgICAgLy8gZGVjb2Rl
ZCB0aGVuIHJldHVybiAwLgotICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCwg
U3Vic2FtcGxpbmdMZXZlbCA9IDApIGNvbnN0OworICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXNBdElu
ZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IERlZmF1bHRTdWJzYW1wbGluZ0xldmVsKSBj
b25zdDsKICAgICAKICAgICBmbG9hdCBmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QpOwogICAg
IEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb25BdEluZGV4KHNpemVfdCkgY29uc3Q7IC8vIEVY
SUYgaW1hZ2Ugb3JpZW50YXRpb24KICAgICAKICAgICAvLyBDYWxsZXJzIHNob3VsZCBub3QgY2Fs
bCB0aGlzIGFmdGVyIGNhbGxpbmcgY2xlYXIoKSB3aXRoIGEgaGlnaGVyIGluZGV4OwogICAgIC8v
IHNlZSBjb21tZW50cyBvbiBjbGVhcigpIGFib3ZlLgotICAgIE5hdGl2ZUltYWdlUHRyIGNyZWF0
ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IDApOworICAgIE5h
dGl2ZUltYWdlUHRyIGNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdM
ZXZlbCA9IERlZmF1bHRTdWJzYW1wbGluZ0xldmVsKTsKKyAgICBJbWFnZUZyYW1lRGF0YSBjcmVh
dGVGcmFtZURhdGFBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IERlZmF1bHRTdWJz
YW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyA9IEltYWdlRnJhbWVEYXRhOjpD
YWNoaW5nOjpNZXRhZGF0YUFuZEltYWdlKTsKICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBjbGVh
ckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYjdhZWE0ODlmM2ViMmE4Mjg3
NzFjMjEwM2U4ZDRkMGJlMTdiZTVkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5o
IgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgQ29sb3I7CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBJbnRTaXplOworY2xhc3MgR3Jh
cGhpY3NDb250ZXh0OworCitjbGFzcyBQbGF0Zm9ybUltYWdlIHsKK3B1YmxpYzoKKyAgICBQbGF0
Zm9ybUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSkKKyAgICAgICAgOiBtX2ltYWdl
KGltYWdlKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGlzTmlsKCkgY29uc3QgeyByZXR1cm4g
IW1faW1hZ2U7IH0KKyAgICB2b2lkIGNsZWFyU3ViSW1hZ2VzKCk7CisKKyAgICBJbnRTaXplIHNp
emUoKSBjb25zdDsKKyAgICBib29sIGhhc0FscGhhKCkgY29uc3Q7CisgICAgQ29sb3Igc2luZ2xl
UGl4ZWxTb2xpZENvbG9yKCkgY29uc3Q7CisgICAgYm9vbCBpc0FsbW9zdFNvbGlkQ29sb3IoKSBj
b25zdDsKKyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXpl
LCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBjb25zdCBJbWFnZU9yaWVudGF0aW9uJikg
Y29uc3Q7CisKKyAgICBzdGF0aWMgZmxvYXQgc3Vic2FtcGxpbmdTY2FsZShHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qp
OworCitwcml2YXRlOgorI2lmIFVTRShDRykKKyAgICBDR0ltYWdlUmVmIGNnSW1hZ2VSZWYoKSBj
b25zdCB7IHJldHVybiBtX2ltYWdlID8gbV9pbWFnZS5nZXQoKSA6IG51bGxwdHI7IH0KKyNlbmRp
ZgorICAgIE5hdGl2ZUltYWdlUHRyIG1faW1hZ2U7Cit9OworCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXll
clByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFW
Rk9iakMubW0KaW5kZXggZjRjMTQ1N2JiYjI1NTc1NGYwMGEwNjI1ZWU4M2UwNGRhN2M2ZWZjZi4u
ZDUyMGY1ZDU4NWFjNjBkYmFlZTI1NWUxYjgzYzI0ZGM2ODcyMTBhNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3Ry
ZWFtQVZGT2JqQy5tbQpAQCAtMjEyLDcgKzIxMiw3IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTdHJlYW1BVkZPYmpDOjp1cGRhdGVEaXNwbGF5TW9kZSgpCiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIG1fcGF1
c2VkSW1hZ2UgPSBpbWFnZS0+Z2V0Q0dJbWFnZVJlZigpOworICAgICAgICAgICAgICAgIG1fcGF1
c2VkSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICAgICAg
ICAgICAgICBpZiAoIW1fcGF1c2VkSW1hZ2UpIHsKICAgICAgICAgICAgICAgICAgICAgbV9kaXNw
bGF5TW9kZSA9IFBhaW50SXRCbGFjazsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJ
bWFnZUNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Jp
dG1hcEltYWdlQ2Fpcm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzcyMmJl
YzUzYWI4YTA4YThkYTg1MjhiOWUwZDdjNGQwY2Q0MTM1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBh
dG9rZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJr
aXQub3JnPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLQotI2lmIFVTRShDQUlS
TykKLQotI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiSW1hZ2VPYnNlcnZl
ci5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5jbHVkZSAiVGltZXIu
aCIKLSNpbmNsdWRlIDxjYWlyby5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLW5hbWVzcGFj
ZSBOYXRpdmVJbWFnZSB7Ci0KLUludFNpemUgc2l6ZShjb25zdCBSZWZQdHI8Y2Fpcm9fc3VyZmFj
ZV90PiYgaW1hZ2UpCi17Ci0gICAgcmV0dXJuIGNhaXJvU3VyZmFjZVNpemUoaW1hZ2UuZ2V0KCkp
OwotfQotCi1ib29sIGhhc0FscGhhKGNvbnN0IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiBpbWFn
ZSkKLXsKLSAgICByZXR1cm4gY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChpbWFnZS5nZXQoKSkg
IT0gQ0FJUk9fQ09OVEVOVF9DT0xPUjsKLX0KLQotQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9y
KGNvbnN0IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiBpbWFnZSkKLXsKLSAgICBBU1NFUlQoaW1h
Z2UpOwotICAgIAotICAgIGlmIChOYXRpdmVJbWFnZTo6c2l6ZShpbWFnZSkgIT0gSW50U2l6ZSgx
LCAxKSkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0KLSAgICBpZiAoY2Fpcm9fc3VyZmFjZV9n
ZXRfdHlwZShpbWFnZS5nZXQoKSkgIT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKQotICAgICAg
ICByZXR1cm4gQ29sb3IoKTsKLQotICAgIFJHQkEzMiogcGl4ZWwgPSByZWludGVycHJldF9jYXN0
X3B0cjxSR0JBMzIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGltYWdlLmdldCgpKSk7
Ci0gICAgcmV0dXJuIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCpwaXhlbCk7Ci19Ci0KLX0K
LQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29tcG9zaXRlT3BlcmF0b3Ig
b3AsCi0gICAgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9u
IGRlc2NyaXB0aW9uKQotewotICAgIGlmICghZHN0LndpZHRoKCkgfHwgIWRzdC5oZWlnaHQoKSB8
fCAhc3JjLndpZHRoKCkgfHwgIXNyYy5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
c3RhcnRBbmltYXRpb24oKTsKLQotICAgIGF1dG8gc3VyZmFjZSA9IGZyYW1lSW1hZ2VBdEluZGV4
KG1fY3VycmVudEZyYW1lKTsKLSAgICBpZiAoIXN1cmZhY2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5
IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgotICAgICAgICByZXR1cm47Ci0KLSAgICBDb2xv
ciBjb2xvciA9IHNpbmdsZVBpeGVsU29saWRDb2xvcigpOwotICAgIGlmIChjb2xvci5pc1ZhbGlk
KCkpIHsKLSAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRzdCwgY29sb3IsIG9w
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbnRleHQuc2F2ZSgpOwotCi0gICAg
Ly8gU2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCi0gICAgaWYgKG9wID09IENvbXBvc2l0
ZVNvdXJjZU92ZXIgJiYgYmxlbmRNb2RlID09IEJsZW5kTW9kZU5vcm1hbCAmJiAhZnJhbWVIYXNB
bHBoYUF0SW5kZXgobV9jdXJyZW50RnJhbWUpKQotICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0
ZU9wZXJhdGlvbihDb21wb3NpdGVDb3B5KTsKLSAgICBlbHNlCi0gICAgICAgIGNvbnRleHQuc2V0
Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBibGVuZE1vZGUpOwotCi0jaWYgRU5BQkxFKElNQUdFX0RF
Q09ERVJfRE9XTl9TQU1QTElORykKLSAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBjYWlyb1N1cmZh
Y2VTaXplKHN1cmZhY2UuZ2V0KCkpOwotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBh
ZGp1c3RTb3VyY2VSZWN0Rm9yRG93blNhbXBsaW5nKHNyYywgc2NhbGVkU2l6ZSk7Ci0jZWxzZQot
ICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3Qoc3JjKTsKLSNlbmRpZgotCi0gICAgSW1hZ2VP
cmllbnRhdGlvbiBmcmFtZU9yaWVudGF0aW9uKGRlc2NyaXB0aW9uLmltYWdlT3JpZW50YXRpb24o
KSk7Ci0gICAgaWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVz
cGVjdEltYWdlT3JpZW50YXRpb24pCi0gICAgICAgIGZyYW1lT3JpZW50YXRpb24gPSBmcmFtZU9y
aWVudGF0aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0KLSAgICBGbG9hdFJlY3QgZHN0UmVj
dCA9IGRzdDsKLQotICAgIGlmIChmcmFtZU9yaWVudGF0aW9uICE9IERlZmF1bHRJbWFnZU9yaWVu
dGF0aW9uKSB7Ci0gICAgICAgIC8vIEltYWdlT3JpZW50YXRpb24gZXhwZWN0cyB0aGUgb3JpZ2lu
IHRvIGJlIGF0ICgwLCAwKS4KLSAgICAgICAgY29udGV4dC50cmFuc2xhdGUoZHN0UmVjdC54KCks
IGRzdFJlY3QueSgpKTsKLSAgICAgICAgZHN0UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KCkp
OwotICAgICAgICBjb250ZXh0LmNvbmNhdENUTShmcmFtZU9yaWVudGF0aW9uLnRyYW5zZm9ybUZy
b21EZWZhdWx0KGRzdFJlY3Quc2l6ZSgpKSk7Ci0gICAgICAgIGlmIChmcmFtZU9yaWVudGF0aW9u
LnVzZXNXaWR0aEFzSGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBkZXN0aW5hdGlvbiBy
ZWN0YW5nbGUgd2lsbCBoYXZlIGl0J3Mgd2lkdGggYW5kIGhlaWdodCBhbHJlYWR5IHJldmVyc2Vk
IGZvciB0aGUgb3JpZW50YXRpb24gb2YKLSAgICAgICAgICAgIC8vIHRoZSBpbWFnZSwgYXMgaXQg
d2FzIG5lZWRlZCBmb3IgcGFnZSBsYXlvdXQsIHNvIHdlIG5lZWQgdG8gcmV2ZXJzZSBpdCBiYWNr
IGhlcmUuCi0gICAgICAgICAgICBkc3RSZWN0ID0gRmxvYXRSZWN0KGRzdFJlY3QueCgpLCBkc3RS
ZWN0LnkoKSwgZHN0UmVjdC5oZWlnaHQoKSwgZHN0UmVjdC53aWR0aCgpKTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmRyYXdTdXJmYWNlVG9Db250
ZXh0KHN1cmZhY2UuZ2V0KCksIGRzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgY29udGV4dCk7Ci0K
LSAgICBjb250ZXh0LnJlc3RvcmUoKTsKLQotICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCi0gICAg
ICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKLX0KLQotYm9vbCBGcmFtZURhdGE6
OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKLXsKLSAgICBpZiAoY2xlYXJNZXRhZGF0YSkKLSAg
ICAgICAgbV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsKLQotICAgIGlmIChtX2ltYWdlKSB7Ci0gICAg
ICAgIG1faW1hZ2UgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBV
U0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MGFkYWVjMjcw
ZTMxYjA1NGFmYzVmNjZkNDgyODhhZWJmMDYxZTNhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcApA
QCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgor
CisjaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordm9pZCBQbGF0Zm9ybUltYWdlOjpjbGVhclN1YkltYWdlcygpCit7Cit9
CisKK0ludFNpemUgUGxhdGZvcm1JbWFnZTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlz
TmlsKCkgPyBJbnRTaXplKCkgOiBjYWlyb1N1cmZhY2VTaXplKG1faW1hZ2UuZ2V0KCkpOworfQor
Citib29sIFBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNO
aWwoKSB8fCBjYWlyb19zdXJmYWNlX2dldF9jb250ZW50KG1faW1hZ2UuZ2V0KCkpICE9IENBSVJP
X0NPTlRFTlRfQ09MT1I7Cit9CisKK0NvbG9yIFBsYXRmb3JtSW1hZ2U6OnNpbmdsZVBpeGVsU29s
aWRDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKGlzTmlsKCkgfHwgc2l6ZSgpICE9IEludFNpemUo
MSwgMSkpCisgICAgICAgIHJldHVybiBDb2xvcigpOworCisgICAgaWYgKGNhaXJvX3N1cmZhY2Vf
Z2V0X3R5cGUobV9pbWFnZS5nZXQoKSkgIT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lNQUdFKQorICAg
ICAgICByZXR1cm4gQ29sb3IoKTsKKworICAgIFJHQkEzMiogcGl4ZWwgPSByZWludGVycHJldF9j
YXN0X3B0cjxSR0JBMzIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1faW1hZ2UuZ2V0
KCkpKTsKKyAgICByZXR1cm4gY29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0IoKnBpeGVsKTsKK30K
KworYm9vbCBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKSBjb25zdAoreworICAg
IHJldHVybiBmYWxzZTsKK30KKworZmxvYXQgUGxhdGZvcm1JbWFnZTo6c3Vic2FtcGxpbmdTY2Fs
ZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmKQor
eworICAgIHJldHVybiAxOworfQorCit2b2lkIFBsYXRmb3JtSW1hZ2U6OmRyYXcoR3JhcGhpY3ND
b250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEludFNpemUmLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRN
b2RlIG1vZGUsIGNvbnN0IEltYWdlT3JpZW50YXRpb24mIG9yaWVudGF0aW9uKSBjb25zdAorewor
ICAgIGNvbnRleHQuc2F2ZSgpOworICAgIAorICAgIC8vIFNldCB0aGUgY29tcG9zaXRpbmcgb3Bl
cmF0aW9uLgorICAgIGlmIChvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyICYmIG1vZGUgPT0gQmxl
bmRNb2RlTm9ybWFsICYmICFoYXNBbHBoYSgpKQorICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0
ZU9wZXJhdGlvbihDb21wb3NpdGVDb3B5KTsKKyAgICBlbHNlCisgICAgICAgIGNvbnRleHQuc2V0
Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBtb2RlKTsKKyAgICAgICAgCisjaWYgRU5BQkxFKElNQUdF
X0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyAgICBJbnRTaXplIHNjYWxlZFNpemUgPSBjYWlyb1N1
cmZhY2VTaXplKG1faW1hZ2UuZ2V0KCkpOworICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3Qg
PSBhZGp1c3RTb3VyY2VSZWN0Rm9yRG93blNhbXBsaW5nKHNyY1JlY3QsIHNjYWxlZFNpemUpOwor
I2Vsc2UKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0KHNyY1JlY3QpOworI2VuZGlmCisg
ICAgICAgIAorICAgIEZsb2F0UmVjdCBhZGp1c3RlZERlc3RSZWN0ID0gZGVzdFJlY3Q7CisgICAg
ICAgIAorICAgIGlmIChvcmllbnRhdGlvbiAhPSBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbikgewor
ICAgICAgICAvLyBJbWFnZU9yaWVudGF0aW9uIGV4cGVjdHMgdGhlIG9yaWdpbiB0byBiZSBhdCAo
MCwgMCkuCisgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKGRlc3RSZWN0LngoKSwgZGVzdFJlY3Qu
eSgpKTsKKyAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRMb2NhdGlvbihGbG9hdFBvaW50KCkp
OworICAgICAgICBjb250ZXh0LmNvbmNhdENUTShvcmllbnRhdGlvbi50cmFuc2Zvcm1Gcm9tRGVm
YXVsdChhZGp1c3RlZERlc3RSZWN0LnNpemUoKSkpOworICAgICAgICBpZiAob3JpZW50YXRpb24u
dXNlc1dpZHRoQXNIZWlnaHQoKSkgeworICAgICAgICAgICAgLy8gVGhlIGRlc3RpbmF0aW9uIHJl
Y3RhbmdsZSB3aWxsIGhhdmUgaXQncyB3aWR0aCBhbmQgaGVpZ2h0IGFscmVhZHkgcmV2ZXJzZWQg
Zm9yIHRoZSBvcmllbnRhdGlvbiBvZgorICAgICAgICAgICAgLy8gdGhlIGltYWdlLCBhcyBpdCB3
YXMgbmVlZGVkIGZvciBwYWdlIGxheW91dCwgc28gd2UgbmVlZCB0byByZXZlcnNlIGl0IGJhY2sg
aGVyZS4KKyAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0U2l6ZShhZGp1c3RlZERlc3RS
ZWN0LnNpemUoKS50cmFuc3Bvc2VkU2l6ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNv
bnRleHQucGxhdGZvcm1Db250ZXh0KCktPmRyYXdTdXJmYWNlVG9Db250ZXh0KG1faW1hZ2UuZ2V0
KCksIGFkanVzdGVkRGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgY29udGV4dCk7CisKKyAgICBj
b250ZXh0LnJlc3RvcmUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9CaXRtYXBJbWFnZUNHLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDNj
ODFhMTcwYmU3OWFlNmJlNmNhY2RjOTlmNGMzOThjYWFmNDI2ZC4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIwNiArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotCi0jaWYg
VVNFKENHKQotCi0jaW5jbHVkZSAiQ29yZUdyYXBoaWNzU1BJLmgiCi0jaW5jbHVkZSAiRmxvYXRD
b252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHRDRy5oIgotI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKLSNpbmNsdWRl
ICJTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgot
Ci0jaWYgVVNFKEFQUEtJVCkKLSNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0
aW9uU2VydmljZXMuaD4KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0EpCi0jaW5jbHVkZSAi
V2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi0j
aW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgot
I2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIE5hdGl2ZUltYWdlIHsK
LQotSW50U2l6ZSBzaXplKGNvbnN0IFJldGFpblB0cjxDR0ltYWdlUmVmPiYgaW1hZ2UpCi17Ci0g
ICAgQVNTRVJUKGltYWdlKTsKLSAgICByZXR1cm4gSW50U2l6ZShDR0ltYWdlR2V0V2lkdGgoaW1h
Z2UuZ2V0KCkpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSk7Ci19Ci0KLWJvb2wgaGFz
QWxwaGEoY29uc3QgUmV0YWluUHRyPENHSW1hZ2VSZWY+JikKLXsKLSAgICAvLyBGSVhNRTogQW5z
d2VyIGNvcnJlY3RseSB0aGUgcXVlc3Rpb246IGRvZXMgdGhlIENHSW1hZ2VSZWYgaGF2ZSBhbHBo
YSBjaGFubm5lbD8KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSAgICAKLUNvbG9yIHNpbmdsZVBpeGVs
U29saWRDb2xvcihjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mIGltYWdlKQotewotICAgIEFT
U0VSVChpbWFnZSk7Ci0gICAgCi0gICAgaWYgKE5hdGl2ZUltYWdlOjpzaXplKGltYWdlKSAhPSBJ
bnRTaXplKDEsIDEpKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKLSAgICAKLSAgICB1bnNpZ25l
ZCBjaGFyIHBpeGVsWzRdOyAvLyBSR0JBCi0gICAgYXV0byBiaXRtYXBDb250ZXh0ID0gYWRvcHRD
RihDR0JpdG1hcENvbnRleHRDcmVhdGUocGl4ZWwsIDEsIDEsIDgsIHNpemVvZihwaXhlbCksIHNS
R0JDb2xvclNwYWNlUmVmKCksCi0gICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFz
dCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMyQmlnKSk7Ci0KLSAgICBpZiAoIWJpdG1hcENvbnRleHQp
Ci0gICAgICAgIHJldHVybiBDb2xvcigpOwotICAgIAotICAgIENHQ29udGV4dFNldEJsZW5kTW9k
ZShiaXRtYXBDb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAgICBDR0NvbnRleHRE
cmF3SW1hZ2UoYml0bWFwQ29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCAxLCAxKSwgaW1h
Z2UuZ2V0KCkpOwotICAgIAotICAgIGlmICghcGl4ZWxbM10pCi0gICAgICAgIHJldHVybiBDb2xv
cigwLCAwLCAwLCAwKTsKLQotICAgIHJldHVybiBDb2xvcihwaXhlbFswXSAqIDI1NSAvIHBpeGVs
WzNdLCBwaXhlbFsxXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsyXSAqIDI1NSAvIHBpeGVsWzNd
LCBwaXhlbFszXSk7Ci19Ci0KLX0KLQotYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJN
ZXRhZGF0YSkKLXsKLSAgICBpZiAoY2xlYXJNZXRhZGF0YSkKLSAgICAgICAgbV9oYXZlTWV0YWRh
dGEgPSBmYWxzZTsKLQotICAgIG1fc3Vic2FtcGxpbmdMZXZlbCA9IDA7Ci0KLSAgICBpZiAobV9p
bWFnZSkgewotI2lmIENBQ0hFX1NVQklNQUdFUwotICAgICAgICBzdWJpbWFnZUNhY2hlKCkuY2xl
YXJJbWFnZShtX2ltYWdlLmdldCgpKTsKLSNlbmRpZgotICAgICAgICBtX2ltYWdlID0gbnVsbHB0
cjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQot
Q0dJbWFnZVJlZiBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZVJlZigpCi17Ci0gICAgcmV0dXJuIGZy
YW1lSW1hZ2VBdEluZGV4KDApLmdldCgpOwotfQotCi1DR0ltYWdlUmVmIEJpdG1hcEltYWdlOjpn
ZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBzaXpl
X3QgY291bnQgPSBmcmFtZUNvdW50KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKSB7Ci0gICAgICAgIENHSW1hZ2VSZWYgY2dJbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4
KGkpLmdldCgpOwotICAgICAgICBpZiAoY2dJbWFnZSAmJiBJbnRTaXplKENHSW1hZ2VHZXRXaWR0
aChjZ0ltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChjZ0ltYWdlKSkgPT0gc2l6ZSkKLSAgICAgICAg
ICAgIHJldHVybiBjZ0ltYWdlOwotICAgIH0KLQotICAgIC8vIEZhbGxiYWNrIHRvIHRoZSBkZWZh
dWx0IENHSW1hZ2VSZWYgaWYgd2UgY2FuJ3QgZmluZCB0aGUgcmlnaHQgc2l6ZQotICAgIHJldHVy
biBnZXRDR0ltYWdlUmVmKCk7Ci19Ci0KLVJldGFpblB0cjxDRkFycmF5UmVmPiBCaXRtYXBJbWFn
ZTo6Z2V0Q0dJbWFnZUFycmF5KCkKLXsKLSAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7
Ci0gICAgaWYgKCFjb3VudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgQ0ZN
dXRhYmxlQXJyYXlSZWYgYXJyYXkgPSBDRkFycmF5Q3JlYXRlTXV0YWJsZShOVUxMLCBjb3VudCwg
JmtDRlR5cGVBcnJheUNhbGxCYWNrcyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKSB7Ci0gICAgICAgIGlmIChDR0ltYWdlUmVmIGN1cnJGcmFtZSA9IGZyYW1lSW1hZ2VB
dEluZGV4KGkpLmdldCgpKQotICAgICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5LCBj
dXJyRnJhbWUpOwotICAgIH0KLSAgICByZXR1cm4gYWRvcHRDRihhcnJheSk7Ci19Ci0KLXZvaWQg
Qml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjdHh0LCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0ZU9wZXJhdG9yIGNv
bXBvc2l0ZU9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRp
b24gZGVzY3JpcHRpb24pCi17Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIHN0YXJ0QW5pbWF0aW9u
KERvTm90Q2F0Y2hVcCk7Ci0jZWxzZQotICAgIHN0YXJ0QW5pbWF0aW9uKCk7Ci0jZW5kaWYKLQot
ICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICAvLyBOZXZlciB1c2Ugc3Vic2Ft
cGxlZCBpbWFnZXMgZm9yIGRyYXdpbmcgaW50byBQREYgY29udGV4dHMuCi0gICAgaWYgKHdrQ0dD
b250ZXh0SXNQREZDb250ZXh0KGN0eHQucGxhdGZvcm1Db250ZXh0KCkpKQotICAgICAgICBpbWFn
ZSA9IGNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgQ0dSZWN0IHRyYW5zZm9ybWVkRGVzdGluYXRpb25SZWN0ID0gQ0dSZWN0
QXBwbHlBZmZpbmVUcmFuc2Zvcm0oZGVzdFJlY3QsIENHQ29udGV4dEdldENUTShjdHh0LnBsYXRm
b3JtQ29udGV4dCgpKSk7Ci0gICAgICAgIGZsb2F0IHN1YnNhbXBsaW5nU2NhbGUgPSBzdGQ6Om1p
bjxmbG9hdD4oMSwgc3RkOjptYXgodHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS53aWR0
aCAvIHNyY1JlY3Qud2lkdGgoKSwgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS5oZWln
aHQgLyBzcmNSZWN0LmhlaWdodCgpKSk7Ci0KLSAgICAgICAgaW1hZ2UgPSBmcmFtZUltYWdlQXRJ
bmRleChtX2N1cnJlbnRGcmFtZSwgc3Vic2FtcGxpbmdTY2FsZSk7Ci0gICAgfQotCi0gICAgaWYg
KCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQu
Ci0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBDb2xvciBjb2xvciA9IHNpbmdsZVBpeGVsU29s
aWRDb2xvcigpOwotICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgZmlsbFdpdGhT
b2xpZENvbG9yKGN0eHQsIGRlc3RSZWN0LCBjb2xvciwgY29tcG9zaXRlT3ApOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgLy8gU3Vic2FtcGxpbmcgbWF5IGhhdmUgZ2l2ZW4gdXMgYW4g
aW1hZ2UgdGhhdCBpcyBzbWFsbGVyIHRoYW4gc2l6ZSgpLgotICAgIEludFNpemUgaW1hZ2VTaXpl
KENHSW1hZ2VHZXRXaWR0aChpbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0
KCkpKTsKLSAgICAKLSAgICAvLyBzcmNSZWN0IGlzIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUg
dW5zdWJzYW1wbGVkIGltYWdlLCBzbyB3ZSBoYXZlIHRvIG1hcCBpdCB0byB0aGUgc3Vic2FtcGxl
ZCBpbWFnZS4KLSAgICBGbG9hdFJlY3Qgc2NhbGVkU3JjUmVjdCA9IHNyY1JlY3Q7Ci0gICAgaWYg
KGltYWdlU2l6ZSAhPSBtX3NpemUpIHsKLSAgICAgICAgRmxvYXRSZWN0IG9yaWdpbmFsSW1hZ2VC
b3VuZHMoRmxvYXRQb2ludCgpLCBtX3NpemUpOwotICAgICAgICBGbG9hdFJlY3Qgc3Vic2FtcGxl
ZEltYWdlQm91bmRzKEZsb2F0UG9pbnQoKSwgaW1hZ2VTaXplKTsKLSAgICAgICAgc2NhbGVkU3Jj
UmVjdCA9IG1hcFJlY3Qoc3JjUmVjdCwgb3JpZ2luYWxJbWFnZUJvdW5kcywgc3Vic2FtcGxlZElt
YWdlQm91bmRzKTsKLSAgICB9Ci0gICAgCi0gICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlv
bjsKLSAgICBpZiAoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNw
ZWN0SW1hZ2VPcmllbnRhdGlvbikKLSAgICAgICAgb3JpZW50YXRpb24gPSBmcmFtZU9yaWVudGF0
aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0KLSAgICBjdHh0LmRyYXdOYXRpdmVJbWFnZShp
bWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc2NhbGVkU3JjUmVjdCwgY29tcG9zaXRlT3AsIGJs
ZW5kTW9kZSwgb3JpZW50YXRpb24pOwotCi0gICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKLSAgICAg
ICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwotfQotCi1SZXRhaW5QdHI8Q0dJbWFn
ZVJlZj4gQml0bWFwSW1hZ2U6OmNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBp
bmRleCkKLXsKLSAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3VudCgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkgfHwgIW1fZnJhbWVz
W2luZGV4XS5tX2ltYWdlKQotICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwKTsKLQotICAgIGlm
ICghbV9mcmFtZXNbaW5kZXhdLm1fc3Vic2FtcGxpbmdMZXZlbCkKLSAgICAgICAgcmV0dXJuIG1f
ZnJhbWVzW2luZGV4XS5tX2ltYWdlOwotCi0gICAgcmV0dXJuIG1fc291cmNlLmNyZWF0ZUZyYW1l
SW1hZ2VBdEluZGV4KGluZGV4KTsKLX0KLQotfQotCi0jZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKaW5kZXgg
YjQyOGQ1MGQ5NGJmOTI0MjgwMzI4N2QyZWVjMTZiZDY5YzUyOGQ5Mi4uM2RhYTEzOWFiN2VhNWI0
MjE1Nzc4ODM1ZDM1M2Q4YWRiNWYwYzc1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCkBAIC03Miw3ICs3Miw3IEBAIENHUGF0dGVy
blJlZiBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB1c2VyU3BhY2VUcmFuCiAgICAgLy8gSWYgd2UncmUgcmVwZWF0aW5nIGluIGJvdGggZGlyZWN0
aW9ucywgd2UgY2FuIHVzZSBpbWFnZS1iYWNrZWQgcGF0dGVybnMKICAgICAvLyBpbnN0ZWFkIG9m
IGN1c3RvbSBwYXR0ZXJucywgYW5kIGF2b2lkIHRpbGluZy1lZGdlIHBpeGVsIGNyYWNrcy4KICAg
ICBpZiAobV9yZXBlYXRYICYmIG1fcmVwZWF0WSkKLSAgICAgICAgcmV0dXJuIHdrQ0dQYXR0ZXJu
Q3JlYXRlV2l0aEltYWdlQW5kVHJhbnNmb3JtKHRpbGVJbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCks
IHBhdHRlcm5UcmFuc2Zvcm0sIHdrUGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2luZyk7CisgICAg
ICAgIHJldHVybiB3a0NHUGF0dGVybkNyZWF0ZVdpdGhJbWFnZUFuZFRyYW5zZm9ybSh0aWxlSW1h
Z2UoKS0+bmF0aXZlSW1hZ2UoKS5nZXQoKSwgcGF0dGVyblRyYW5zZm9ybSwgd2tQYXR0ZXJuVGls
aW5nQ29uc3RhbnRTcGFjaW5nKTsKIAogICAgIC8vIElmIEZMVF9NQVggc2hvdWxkIGFsc28gYmUg
dXNlZCBmb3IgeFN0ZXAgb3IgeVN0ZXAsIG5vdGhpbmcgaXMgcmVuZGVyZWQuIFVzaW5nIGZyYWN0
aW9ucyBvZiBGTFRfTUFYIGFsc28KICAgICAvLyByZXN1bHQgaW4gbm90aGluZyBiZWluZyByZW5k
ZXJlZC4KQEAgLTgzLDcgKzgzLDcgQEAgQ0dQYXR0ZXJuUmVmIFBhdHRlcm46OmNyZWF0ZVBsYXRm
b3JtUGF0dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRyYW4KICAgICBDR0Zs
b2F0IHlTdGVwID0gbV9yZXBlYXRZID8gdGlsZVJlY3QuaGVpZ2h0KCkgOiAoMSA8PCAyMik7CiAK
ICAgICAvLyBUaGUgcGF0dGVybiB3aWxsIHJlbGVhc2UgdGhlIENHSW1hZ2VSZWYgd2hlbiBpdCdz
IGRvbmUgcmVuZGVyaW5nIGluIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sKLSAgICBDR0ltYWdlUmVm
IHBsYXRmb3JtSW1hZ2UgPSBDR0ltYWdlUmV0YWluKHRpbGVJbWFnZSgpLT5nZXRDR0ltYWdlUmVm
KCkpOworICAgIENHSW1hZ2VSZWYgcGxhdGZvcm1JbWFnZSA9IHRpbGVJbWFnZSgpLT5uYXRpdmVJ
bWFnZSgpLmxlYWtSZWYoKTsKIAogICAgIGNvbnN0IENHUGF0dGVybkNhbGxiYWNrcyBwYXR0ZXJu
Q2FsbGJhY2tzID0geyAwLCBwYXR0ZXJuQ2FsbGJhY2ssIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sg
fTsKICAgICByZXR1cm4gQ0dQYXR0ZXJuQ3JlYXRlKHBsYXRmb3JtSW1hZ2UsIHRpbGVSZWN0LCBw
YXR0ZXJuVHJhbnNmb3JtLCB4U3RlcCwgeVN0ZXAsIGtDR1BhdHRlcm5UaWxpbmdDb25zdGFudFNw
YWNpbmcsIFRSVUUsICZwYXR0ZXJuQ2FsbGJhY2tzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmFmYjJkZTBlYTEyZGEyMTRmMTA0NmMzOTYyZThlYWI1M2M2NDQxMjUKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cu
Y3BwCkBAIC0wLDAgKzEsMTcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2Uu
aCIKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiQ29yZUdy
YXBoaWNzU1BJLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR2VvbWV0cnlV
dGlsaXRpZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgorI2luY2x1ZGUgIklu
dFNpemUuaCIKKyNpbmNsdWRlICJTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmgiCisKKyNpZiBQTEFU
Rk9STShXSU4pCisjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUlu
dGVyZmFjZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK3ZvaWQgUGxh
dGZvcm1JbWFnZTo6Y2xlYXJTdWJJbWFnZXMoKQoreworI2lmIENBQ0hFX1NVQklNQUdFUworICAg
IGlmICghaXNOaWwoKSkKKyAgICAgICAgc3ViaW1hZ2VDYWNoZSgpLmNsZWFySW1hZ2UoY2dJbWFn
ZVJlZigpKTsKKyNlbmRpZgorfQorCitJbnRTaXplIFBsYXRmb3JtSW1hZ2U6OnNpemUoKSBjb25z
dAoreworICAgIHJldHVybiBpc05pbCgpID8gSW50U2l6ZSgpIDogSW50U2l6ZShDR0ltYWdlR2V0
V2lkdGgoY2dJbWFnZVJlZigpKSwgQ0dJbWFnZUdldEhlaWdodChjZ0ltYWdlUmVmKCkpKTsKK30K
KworYm9vbCBQbGF0Zm9ybUltYWdlOjpoYXNBbHBoYSgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6
IEFuc3dlciBjb3JyZWN0bHkgdGhlIHF1ZXN0aW9uOiBkb2VzIHRoZSBDR0ltYWdlUmVmIGhhdmUg
YWxwaGEgY2hhbm5uZWw/CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0NvbG9yIFBsYXRmb3JtSW1h
Z2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKGlzTmlsKCkgfHwg
c2l6ZSgpICE9IEludFNpemUoMSwgMSkpCisgICAgICAgIHJldHVybiBDb2xvcigpOworICAgIAor
ICAgIHVuc2lnbmVkIGNoYXIgcGl4ZWxbNF07IC8vIFJHQkEKKyAgICBhdXRvIGJpdG1hcENvbnRl
eHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShwaXhlbCwgMSwgMSwgOCwgc2l6ZW9m
KHBpeGVsKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwKKyAgICAgICAga0NHSW1hZ2VBbHBoYVByZW11
bHRpcGxpZWRMYXN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcpKTsKKyAgICAKKyAgICBpZiAo
IWJpdG1hcENvbnRleHQpCisgICAgICAgIHJldHVybiBDb2xvcigpOworICAgIAorICAgIENHQ29u
dGV4dFNldEJsZW5kTW9kZShiaXRtYXBDb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsK
KyAgICBDR0NvbnRleHREcmF3SW1hZ2UoYml0bWFwQ29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgw
LCAwLCAxLCAxKSwgY2dJbWFnZVJlZigpKTsKKyAgICAKKyAgICBpZiAoIXBpeGVsWzNdKQorICAg
ICAgICByZXR1cm4gQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgCisgICAgcmV0dXJuIENvbG9yKHBp
eGVsWzBdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVs
WzJdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKK30KKyAgICAKK2Jvb2wgUGxhdGZvcm1J
bWFnZTo6aXNBbG1vc3RTb2xpZENvbG9yKCkgY29uc3QKK3sKKyAgICBDR0ltYWdlUmVmIGltYWdl
ID0gY2dJbWFnZVJlZigpOworICAgIEFTU0VSVChDR0ltYWdlR2V0Qml0c1BlckNvbXBvbmVudChp
bWFnZSkgPT0gOCk7CisgICAgCisgICAgQ0dCaXRtYXBJbmZvIGltYWdlSW5mbyA9IENHSW1hZ2VH
ZXRCaXRtYXBJbmZvKGltYWdlKTsKKyAgICBpZiAoIShpbWFnZUluZm8gJiBrQ0dCaXRtYXBCeXRl
T3JkZXIzMkxpdHRsZSkgfHwgKGltYWdlSW5mbyAmIGtDR0JpdG1hcEFscGhhSW5mb01hc2spICE9
IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QpIHsKKyAgICAgICAgLy8gRklYTUU6IENv
bnNpZGVyIGJlaW5nIGFibGUgdG8gaGFuZGxlIG90aGVyIHBpeGVsIGZvcm1hdHMuCisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IAorICAgIHNpemVfdCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0aChpbWFnZSk7CisgICAgc2l6ZV90
IGhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpOworICAgIHNpemVfdCBieXRlc1BlclJv
dyA9IENHSW1hZ2VHZXRCeXRlc1BlclJvdyhpbWFnZSk7CisgICAgCisgICAgUmV0YWluUHRyPENG
RGF0YVJlZj4gcHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ29weURhdGEoQ0dJbWFn
ZUdldERhdGFQcm92aWRlcihpbWFnZSkpKTsKKyAgICBjb25zdCBVSW50OCogZGF0YSA9IENGRGF0
YUdldEJ5dGVQdHIocHJvdmlkZXIuZ2V0KCkpOworICAgIAorICAgIC8vIE92ZXJsYXkgYSBncmlk
IG9mIHNhbXBsaW5nIGRvdHMgb24gdG9wIG9mIGEgZ3JheXNjYWxlIHZlcnNpb24gb2YgdGhlIGlt
YWdlLgorICAgIC8vIEZvciB0aGUgaW50ZXJpb3IgcG9pbnRzLCBjYWxjdWxhdGUgdGhlIGRpZmZl
cmVuY2UgaW4gbHVtaW5hbmNlIGFtb25nIHRoZSBzYW1wbGUgcG9pbnQKKyAgICAvLyBhbmQgaXRz
IHN1cnJvdW5kcyBwb2ludHMsIHNjYWxlZCBieSB0cmFuc3BhcmVuY3kuCisgICAgY29uc3QgdW5z
aWduZWQgc2FtcGxlUm93cyA9IDc7CisgICAgY29uc3QgdW5zaWduZWQgc2FtcGxlQ29scyA9IDc7
CisgICAgLy8gRklYTUU6IFJlZmluZSB0aGUgcHJvcGVyIG51bWJlciBvZiBzYW1wbGVzLCBhbmQg
YWNjb21tb2RhdGUgZGlmZmVyZW50IGFzcGVjdCByYXRpb3MuCisgICAgaWYgKHdpZHRoIDwgc2Ft
cGxlQ29scyB8fCBoZWlnaHQgPCBzYW1wbGVSb3dzKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgCisgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGxhc3Qgcm93L2NvbHVtbiBsYW5kIG9uIHRoZSBp
bWFnZSBwZXJpbWV0ZXIuCisgICAgY29uc3QgZmxvYXQgc3RyaWRlV2lkdGggPSBzdGF0aWNfY2Fz
dDxmbG9hdD4od2lkdGggLSAxKSAvIChzYW1wbGVDb2xzIC0gMSk7CisgICAgY29uc3QgZmxvYXQg
c3RyaWRlSGVpZ2h0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGhlaWdodCAtIDEpIC8gKHNhbXBsZVJv
d3MgLSAxKTsKKyAgICBmbG9hdCBzYW1wbGVzW3NhbXBsZVJvd3NdW3NhbXBsZUNvbHNdOworICAg
IAorICAgIC8vIEZpbmQgdGhlIGx1bWluYW5jZSBvZiB0aGUgc2FtcGxlIHBvaW50cy4KKyAgICBm
bG9hdCB5ID0gMDsKKyAgICBjb25zdCBVSW50OCogcm93ID0gZGF0YTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2FtcGxlUm93czsgKytpKSB7CisgICAgICAgIGZsb2F0IHggPSAwOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc2FtcGxlQ29sczsgKytqKSB7CisgICAg
ICAgICAgICBjb25zdCBVSW50OCogcDAgPSByb3cgKyAoc3RhdGljX2Nhc3Q8aW50Pih4ICsgLjUp
KSAqIDQ7CisgICAgICAgICAgICAvLyBSIEcgQiBBCisgICAgICAgICAgICBzYW1wbGVzW2ldW2pd
ID0gKDAuMjEyNSAqICpwMCArIDAuNzE1NCAqICoocDArMSkgKyAwLjA3MjEgKiAqKHAwKzIpKSAq
ICoocDArMykgLyAyNTU7CisgICAgICAgICAgICB4ICs9IHN0cmlkZVdpZHRoOworICAgICAgICB9
CisgICAgICAgIHkgKz0gc3RyaWRlSGVpZ2h0OworICAgICAgICByb3cgPSBkYXRhICsgKHN0YXRp
Y19jYXN0PGludD4oeSArIC41KSkgKiBieXRlc1BlclJvdzsKKyAgICB9CisgICAgCisgICAgLy8g
RGV0ZXJtaW5lIHRoZSBpbWFnZSBzY29yZS4KKyAgICBmbG9hdCBhY2N1bVNjb3JlID0gMDsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2FtcGxlUm93cyAtIDE7ICsraSkgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSAxOyBqIDwgc2FtcGxlQ29scyAtIDE7ICsraikgeworICAgICAg
ICAgICAgZmxvYXQgZGlmZiA9IHNhbXBsZXNbaSAtIDFdW2pdICsgc2FtcGxlc1tpICsgMV1bal0g
KyBzYW1wbGVzW2ldW2ogLSAxXSArIHNhbXBsZXNbaV1baiArIDFdIC0gNCAqIHNhbXBsZXNbaV1b
al07CisgICAgICAgICAgICBhY2N1bVNjb3JlICs9IGRpZmYgKiBkaWZmOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIC8vIFRoZSBzY29yZSBmb3IgYSBnaXZlbiBzYW1wbGUgY2FuIGJlIHdp
dGhpbiB0aGUgcmFuZ2Ugb2YgMCBhbmQgMjU1XjIuCisgICAgcmV0dXJuIGFjY3VtU2NvcmUgPCAy
NTAwICogKHNhbXBsZVJvd3MgLSAyKSAqIChzYW1wbGVDb2xzIC0gMik7Cit9CisKK2Zsb2F0IFBs
YXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QpCit7Cisg
ICAgLy8gTmV2ZXIgdXNlIHN1YnNhbXBsZWQgaW1hZ2VzIGZvciBkcmF3aW5nIGludG8gUERGIGNv
bnRleHRzLgorICAgIGlmICh3a0NHQ29udGV4dElzUERGQ29udGV4dChjb250ZXh0LnBsYXRmb3Jt
Q29udGV4dCgpKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgCisgICAgQ0dSZWN0IHRyYW5zZm9y
bWVkRGVzdGluYXRpb25SZWN0ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0oZGVzdFJlY3Qs
IENHQ29udGV4dEdldENUTShjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKSk7CisgICAgcmV0dXJu
IHN0ZDo6bWluPGZsb2F0PigxLCBzdGQ6Om1heCh0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVjdC5z
aXplLndpZHRoIC8gc3JjUmVjdC53aWR0aCgpLCB0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVjdC5z
aXplLmhlaWdodCAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsKK30KKwordm9pZCBQbGF0Zm9ybUltYWdl
OjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRTaXplJiBzcmNTaXplLCBDb21w
b3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUsIGNvbnN0IEltYWdlT3JpZW50YXRpb24m
IG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIC8vIFN1YnNhbXBsaW5nIG1heSBoYXZlIGdpdmVu
IHVzIGFuIGltYWdlIHRoYXQgaXMgc21hbGxlciB0aGFuIHNpemUoKS4KKyAgICBJbnRTaXplIHN1
YnNhbXBsZWRJbWFnZVNpemUgPSBzaXplKCk7CisgICAgCisgICAgLy8gc3JjUmVjdCBpcyBpbiB0
aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHVuc3Vic2FtcGxlZCBpbWFnZSwgc28gd2UgaGF2ZSB0byBt
YXAgaXQgdG8gdGhlIHN1YnNhbXBsZWQgaW1hZ2UuCisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3Jj
UmVjdCA9IHNyY1JlY3Q7CisgICAgaWYgKHN1YnNhbXBsZWRJbWFnZVNpemUgIT0gc3JjU2l6ZSkK
KyAgICAgICAgYWRqdXN0ZWRTcmNSZWN0ID0gbWFwUmVjdChzcmNSZWN0LCBGbG9hdFJlY3QoeyB9
LCBzcmNTaXplKSwgRmxvYXRSZWN0KHsgfSwgc3Vic2FtcGxlZEltYWdlU2l6ZSkpOworICAgIAor
ICAgIGNvbnRleHQuZHJhd05hdGl2ZUltYWdlKG1faW1hZ2UsIHN1YnNhbXBsZWRJbWFnZVNpemUs
IGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wLCBtb2RlLCBvcmllbnRhdGlvbik7Cit9Cisg
ICAgCit9CisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50
YXRpb25Db2NvYS5tbQppbmRleCA4OTcyMGQxNzM2NWRhN2U4YmE4NDY5ZDUyOTQ1NDhkNTE4NDdh
N2ZlLi40NDc2ZmM1Zjg3YzM0OTg4ZjZkOWFkNTVlZWJkOGQxYjliYjAyMmU1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNl
bnRhdGlvbkNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nv
Y29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0KQEAgLTEyOSw3ICsxMjksNyBAQCBU
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hOjp+VGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2Nv
YSgpCiB2b2lkIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2E6OnVwZGF0ZSgpCiB7CiAgICAg
aWYgKGF1dG8gcmVwcmVzZW50YXRpb24gPSBtX2NsaWVudC5jcmVhdGVUZXh0VHJhY2tSZXByZXNl
bnRhdGlvbkltYWdlKCkpCi0gICAgICAgIFttX2xheWVyLmdldCgpIHNldENvbnRlbnRzOihpZCly
ZXByZXNlbnRhdGlvbi0+Z2V0Q0dJbWFnZVJlZigpXTsKKyAgICAgICAgW21fbGF5ZXIuZ2V0KCkg
c2V0Q29udGVudHM6KGlkKXJlcHJlc2VudGF0aW9uLT5uYXRpdmVJbWFnZSgpLmdldCgpXTsKIH0K
IAogdm9pZCBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hOjpzZXRDb250ZW50U2NhbGUoZmxv
YXQgc2NhbGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvSW1hZ2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1h
Z2VNYWMubW0KaW5kZXggMDFlYjZkZDMwMDQzYTIyNTI5MTc2ZmQ5MTIxMTdkYzU3NzZjMTdiYS4u
ZGMxYzdjNzA5NWQ5NDRjNGM2MmYxZmUwOTM1NzAyYTEzYzdjN2E0MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQpAQCAtODUsMzEgKzg1
LDIyIEBAIENGRGF0YVJlZiBCaXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0aW9uKCkKICAg
ICBpZiAobV90aWZmUmVwKQogICAgICAgICByZXR1cm4gbV90aWZmUmVwLmdldCgpOwogCi0gICAg
dW5zaWduZWQgbnVtRnJhbWVzID0gZnJhbWVDb3VudCgpOworICAgIGF1dG8gbmF0aXZlSW1hZ2Vz
ID0gdGhpcy0+ZnJhbWVzTmF0aXZlSW1hZ2VzKCk7CiAKLSAgICAvLyBJZiBudW1GcmFtZXMgaXMg
emVybywgd2Uga25vdyBmb3IgY2VydGFpbiB0aGlzIGltYWdlIGRvZXNuJ3QgaGF2ZSB2YWxpZCBk
YXRhCisgICAgLy8gSWYgZnJhbWVzSW1hZ2VzLnNpemUoKSBpcyB6ZXJvLCB3ZSBrbm93IGZvciBj
ZXJ0YWluIHRoaXMgaW1hZ2UgZG9lc24ndCBoYXZlIHZhbGlkIGRhdGEKICAgICAvLyBFdmVuIHRo
b3VnaCB0aGUgY2FsbCB0byBDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YSB3aWxsIGZh
aWwgYW5kIHdlJ2xsIGhhbmRsZSBpdCBncmFjZWZ1bGx5LAogICAgIC8vIGluIGNlcnRhaW4gY2ly
Y3Vtc3RhbmNlcyB0aGF0IGNhbGwgd2lsbCBzcGFtIHRoZSBjb25zb2xlIHdpdGggYW4gZXJyb3Ig
bWVzc2FnZQotICAgIGlmICghbnVtRnJhbWVzKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFZl
Y3RvcjxDR0ltYWdlUmVmPiBpbWFnZXM7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51
bUZyYW1lczsgKytpICkgewotICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBmcmFtZUltYWdl
QXRJbmRleChpKS5nZXQoKTsKLSAgICAgICAgaWYgKGNnSW1hZ2UpCi0gICAgICAgICAgICBpbWFn
ZXMuYXBwZW5kKGNnSW1hZ2UpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIG51bVZhbGlkRnJhbWVz
ID0gaW1hZ2VzLnNpemUoKTsKKyAgICBpZiAoIW5hdGl2ZUltYWdlcy5zaXplKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgUmV0YWluUHRyPENGTXV0YWJsZURhdGFSZWY+IGRhdGEg
PSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOwotICAgIFJldGFpblB0cjxDR0lt
YWdlRGVzdGluYXRpb25SZWY+IGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRp
b25DcmVhdGVXaXRoRGF0YShkYXRhLmdldCgpLCBrVVRUeXBlVElGRiwgbnVtVmFsaWRGcmFtZXMs
IDApKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZURlc3RpbmF0aW9uUmVmPiBkZXN0aW5hdGlvbiA9
IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YS5nZXQoKSwga1VU
VHlwZVRJRkYsIG5hdGl2ZUltYWdlcy5zaXplKCksIDApKTsKIAogICAgIGlmICghZGVzdGluYXRp
b24pCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1WYWxpZEZyYW1lczsgKytpKQotICAgICAgICBDR0lt
YWdlRGVzdGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwgaW1hZ2VzW2ldLCAwKTsK
KyAgICBmb3IgKGF1dG8gbmF0aXZlSW1hZ2UgOiBuYXRpdmVJbWFnZXMpCisgICAgICAgIENHSW1h
Z2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgpLCBuYXRpdmVJbWFnZS5nZXQo
KSwgMCk7CiAKICAgICBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0aW5hdGlvbi5nZXQo
KSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L0ltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9JbWFnZURlY29kZXIuY3BwCmluZGV4IDIxNzUzYmQwNzhhMWM1NWMzMjcxOWMxNDg0NmYwZjZi
OTk3NWY4ZmQuLmMwMGZiN2QzM2QwZTYxOGUyOWYxNDI5MGU1OGU5ZDI5ZTQ0OTI4MjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VE
ZWNvZGVyLmNwcApAQCAtMTQyLDYgKzE0Miw3IEBAIEltYWdlRnJhbWUmIEltYWdlRnJhbWU6Om9w
ZXJhdG9yPShjb25zdCBJbWFnZUZyYW1lJiBvdGhlcikKICAgICAgICAgcmV0dXJuICp0aGlzOwog
CiAgICAgY29weUJpdG1hcERhdGEob3RoZXIpOworICAgIHNldEhhc0FscGhhKG90aGVyLm1faGFz
QWxwaGEpOwogICAgIHNldE9yaWdpbmFsRnJhbWVSZWN0KG90aGVyLm9yaWdpbmFsRnJhbWVSZWN0
KCkpOwogICAgIHNldFN0YXR1cyhvdGhlci5zdGF0dXMoKSk7CiAgICAgc2V0RHVyYXRpb24ob3Ro
ZXIuZHVyYXRpb24oKSk7CkBAIC0xNTIsOCArMTUzLDcgQEAgSW1hZ2VGcmFtZSYgSW1hZ2VGcmFt
ZTo6b3BlcmF0b3I9KGNvbnN0IEltYWdlRnJhbWUmIG90aGVyKQogCiB2b2lkIEltYWdlRnJhbWU6
OmNsZWFyUGl4ZWxEYXRhKCkKIHsKLSAgICBtX2JhY2tpbmdTdG9yZS5jbGVhcigpOwotICAgIG1f
Ynl0ZXMgPSAwOworICAgIG1fcGl4ZWxzID0gbnVsbHB0cjsKICAgICBtX3N0YXR1cyA9IEZyYW1l
RW1wdHk7CiAgICAgLy8gTk9URTogRG8gbm90IHJlc2V0IG90aGVyIG1lbWJlcnMgaGVyZTsgY2xl
YXJGcmFtZUJ1ZmZlckNhY2hlKCkgY2FsbHMgdGhpcwogICAgIC8vIHRvIGZyZWUgdGhlIGJpdG1h
cCBkYXRhLCBidXQgb3RoZXIgZnVuY3Rpb25zIGxpa2UgaW5pdEZyYW1lQnVmZmVyKCkgYW5kCkBA
IC0xNjMsMjQgKzE2MywxNiBAQCB2b2lkIEltYWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKCkKIAog
dm9pZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSgpCiB7Ci0gICAgbWVtc2V0KG1fYnl0
ZXMsIDAsIG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgpICogc2l6ZW9mKFBpeGVsRGF0
YSkpOworICAgIG1fcGl4ZWxzLmNsZWFyKCk7CiAgICAgbV9oYXNBbHBoYSA9IHRydWU7CiB9CiAK
IHZvaWQgSW1hZ2VGcmFtZTo6emVyb0ZpbGxGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkK
IHsKLSAgICBBU1NFUlQoSW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHJlY3Qp
KTsKLQogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2l6
ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkgKiBzaXplb2YoUGl4ZWxEYXRhKTsK
LSAgICBQaXhlbERhdGEqIHN0YXJ0ID0gbV9ieXRlcyArIChyZWN0LnkoKSAqIHdpZHRoKCkpICsg
cmVjdC54KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0LmhlaWdodCgpOyArK2kpIHsK
LSAgICAgICAgbWVtc2V0KHN0YXJ0LCAwLCByZWN0V2lkdGhJbkJ5dGVzKTsKLSAgICAgICAgc3Rh
cnQgKz0gd2lkdGgoKTsKLSAgICB9Ci0KKyAgICBtX3BpeGVscy5jbGVhclJlY3QocmVjdCk7CiAg
ICAgc2V0SGFzQWxwaGEodHJ1ZSk7CiB9CiAKQEAgLTE4OSwyNSArMTgxLDIzIEBAIGJvb2wgSW1h
Z2VGcmFtZTo6Y29weUJpdG1hcERhdGEoY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpCiAgICAgaWYg
KHRoaXMgPT0gJm90aGVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fYmFja2luZ1N0
b3JlID0gb3RoZXIubV9iYWNraW5nU3RvcmU7Ci0gICAgbV9ieXRlcyA9IG1fYmFja2luZ1N0b3Jl
LmRhdGEoKTsKLSAgICBtX3NpemUgPSBvdGhlci5tX3NpemU7Ci0gICAgc2V0SGFzQWxwaGEob3Ro
ZXIubV9oYXNBbHBoYSk7CisgICAgaWYgKG90aGVyLm1fcGl4ZWxzKQorICAgICAgICBtX3BpeGVs
cyA9IEJpdG1hcFBpeGVsczo6Y3JlYXRlKCpvdGhlci5tX3BpeGVscyk7CisgICAgZWxzZQorICAg
ICAgICBtX3BpeGVscyA9IG51bGxwdHI7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgSW1h
Z2VGcmFtZTo6c2V0U2l6ZShpbnQgbmV3V2lkdGgsIGludCBuZXdIZWlnaHQpCiB7Ci0gICAgQVNT
RVJUKCF3aWR0aCgpICYmICFoZWlnaHQoKSk7Ci0gICAgc2l6ZV90IGJhY2tpbmdTdG9yZVNpemUg
PSBuZXdXaWR0aCAqIG5ld0hlaWdodDsKLSAgICBpZiAoIW1fYmFja2luZ1N0b3JlLnRyeVJlc2Vy
dmVDYXBhY2l0eShiYWNraW5nU3RvcmVTaXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IG1fYmFja2luZ1N0b3JlLnJlc2l6ZShiYWNraW5nU3RvcmVTaXplKTsKLSAgICBtX2J5dGVzID0g
bV9iYWNraW5nU3RvcmUuZGF0YSgpOwotICAgIG1fc2l6ZSA9IEludFNpemUobmV3V2lkdGgsIG5l
d0hlaWdodCk7CisgICAgQVNTRVJUKCFtX3BpeGVscyk7CisgICAgbV9waXhlbHMgPSBCaXRtYXBQ
aXhlbHM6OmNyZWF0ZShJbnRTaXplKG5ld1dpZHRoLCBuZXdIZWlnaHQpLCBtX3ByZW11bHRpcGx5
QWxwaGEpOworICAgIHJldHVybiBtX3BpeGVsczsKK30KIAotICAgIHplcm9GaWxsUGl4ZWxEYXRh
KCk7Ci0gICAgcmV0dXJuIHRydWU7Cit2b2lkIEltYWdlRnJhbWU6OmNvcHlSb3dOVGltZXMoaW50
IHN0YXJ0WCwgaW50IGVuZFgsIGludCBzdGFydFksIGludCBlbmRZKQoreworICAgIG1fcGl4ZWxz
LT5yZXBlYXRGaXJzdFJvdyhJbnRSZWN0KHN0YXJ0WCwgc3RhcnRZLCBlbmRYIC1zdGFydFggLCBl
bmRZIC0gc3RhcnRZKSk7CiB9CiAKIGJvb2wgSW1hZ2VGcmFtZTo6aGFzQWxwaGEoKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VE
ZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURl
Y29kZXIuaAppbmRleCAyZjhlZWUxNzgxZDE2MmQ4NmM0OWZlMWRhYzcyYTJlN2U0MGE1ZDZkLi42
Zjk5NDM3MzViOGI5ZDJiZWRlODk5MzU3MTIyZDk2ODc5YTEyZDJjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaApAQCAt
MjgsNiArMjgsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkJpdG1hcFBpeGVscy5o
IgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCkBAIC01Nyw3ICs1OCw2IEBAIHVzaW5nIENvbG9yUHJvZmls
ZSA9IFZlY3RvcjxjaGFyPjsKICAgICAgICAgICAgIERpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cyAg
Ly8gQ2xlYXIgZnJhbWUgdG8gcHJldmlvdXMgZnJhbWVidWZmZXIKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gY29udGVudHMKICAgICAgICAgfTsKLSAgICAgICAgdHlw
ZWRlZiB1bnNpZ25lZCBQaXhlbERhdGE7CiAKICAgICAgICAgSW1hZ2VGcmFtZSgpOwogCkBAIC04
MCwxNyArODAsNyBAQCB1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hhcj47CiAgICAgICAg
IC8vIENvcGllcyB0aGUgcGl4ZWwgZGF0YSBhdCBbKHN0YXJ0WCwgc3RhcnRZKSwgKGVuZFgsIHN0
YXJ0WSkpIHRvIHRoZQogICAgICAgICAvLyBzYW1lIFgtY29vcmRpbmF0ZXMgb24gZWFjaCBzdWJz
ZXF1ZW50IHJvdyB1cCB0byBidXQgbm90IGluY2x1ZGluZwogICAgICAgICAvLyBlbmRZLgotICAg
ICAgICB2b2lkIGNvcHlSb3dOVGltZXMoaW50IHN0YXJ0WCwgaW50IGVuZFgsIGludCBzdGFydFks
IGludCBlbmRZKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhcnRYIDwgd2lkdGgo
KSk7Ci0gICAgICAgICAgICBBU1NFUlQoZW5kWCA8PSB3aWR0aCgpKTsKLSAgICAgICAgICAgIEFT
U0VSVChzdGFydFkgPCBoZWlnaHQoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoZW5kWSA8PSBoZWln
aHQoKSk7Ci0gICAgICAgICAgICBjb25zdCBpbnQgcm93Qnl0ZXMgPSAoZW5kWCAtIHN0YXJ0WCkg
KiBzaXplb2YoUGl4ZWxEYXRhKTsKLSAgICAgICAgICAgIGNvbnN0IFBpeGVsRGF0YSogY29uc3Qg
c3RhcnRBZGRyID0gZ2V0QWRkcihzdGFydFgsIHN0YXJ0WSk7Ci0gICAgICAgICAgICBmb3IgKGlu
dCBkZXN0WSA9IHN0YXJ0WSArIDE7IGRlc3RZIDwgZW5kWTsgKytkZXN0WSkKLSAgICAgICAgICAg
ICAgICBtZW1jcHkoZ2V0QWRkcihzdGFydFgsIGRlc3RZKSwgc3RhcnRBZGRyLCByb3dCeXRlcyk7
Ci0gICAgICAgIH0KKyAgICAgICAgdm9pZCBjb3B5Um93TlRpbWVzKGludCBzdGFydFgsIGludCBl
bmRYLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSk7CiAKICAgICAgICAgLy8gQWxsb2NhdGVzIHNwYWNl
IGZvciB0aGUgcGl4ZWwgZGF0YS4gIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkgcGl4ZWxzCiAg
ICAgICAgIC8vIGFyZSB3cml0dGVuLiAgTXVzdCBvbmx5IGJlIGNhbGxlZCBvbmNlLiAgUmV0dXJu
cyB3aGV0aGVyIGFsbG9jYXRpb24KQEAgLTEwMCw3ICs5MCw3IEBAIHVzaW5nIENvbG9yUHJvZmls
ZSA9IFZlY3RvcjxjaGFyPjsKICAgICAgICAgLy8gUmV0dXJucyBhIGNhbGxlci1vd25lZCBwb2lu
dGVyIHRvIHRoZSB1bmRlcmx5aW5nIG5hdGl2ZSBpbWFnZSBkYXRhLgogICAgICAgICAvLyAoQWN0
dWFsIHVzZTogVGhpcyBwb2ludGVyIHdpbGwgYmUgb3duZWQgYnkgQml0bWFwSW1hZ2UgYW5kIGZy
ZWVkIGluCiAgICAgICAgIC8vIEZyYW1lRGF0YTo6Y2xlYXIoKSkuCi0gICAgICAgIE5hdGl2ZUlt
YWdlUHRyIGFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdDsKKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIg
YXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxzLmltYWdlKCk7IH0KIAog
ICAgICAgICBib29sIGhhc0FscGhhKCkgY29uc3Q7CiAgICAgICAgIGNvbnN0IEludFJlY3QmIG9y
aWdpbmFsRnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5hbEZyYW1lUmVjdDsgfQpA
QCAtMTE5LDEwMSArMTA5LDQ0IEBAIHVzaW5nIENvbG9yUHJvZmlsZSA9IFZlY3RvcjxjaGFyPjsK
IAogICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKGludCB4LCBpbnQgeSwgdW5zaWduZWQgciwg
dW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKICAgICAgICAgewotICAgICAgICAg
ICAgc2V0UkdCQShnZXRBZGRyKHgsIHkpLCByLCBnLCBiLCBhKTsKKyAgICAgICAgICAgIG1fcGl4
ZWxzLnNldFJHQkEoeCwgeSwgciwgZywgYiwgYSk7CiAgICAgICAgIH0KIAotICAgICAgICBpbmxp
bmUgUGl4ZWxEYXRhKiBnZXRBZGRyKGludCB4LCBpbnQgeSkKKyAgICAgICAgaW5saW5lIFJHQkEz
MiogZ2V0QWRkcihpbnQgeCwgaW50IHkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBt
X2J5dGVzICsgKHkgKiB3aWR0aCgpKSArIHg7CisgICAgICAgICAgICByZXR1cm4gbV9waXhlbHMu
YXQoeCwgeSk7CiAgICAgICAgIH0KIAogICAgICAgICBpbmxpbmUgYm9vbCBoYXNQaXhlbERhdGEo
KSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9ieXRlczsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIFVzZSBmaXggcG9pbnQgbXVsdGlwbGllciBpbnN0ZWFkIG9mIGludGVn
ZXIgZGl2aXNpb24gb3IgZmxvYXRpbmcgcG9pbnQgbWF0aC4KLSAgICAgICAgLy8gVGhpcyBtdWx0
aXBsZXIgcHJvZHVjZXMgZXhhY3RseSB0aGUgc2FtZSByZXN1bHQgZm9yIGFsbCB2YWx1ZXMgaW4g
cmFuZ2UgMCAtIDI1NS4KLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZpeFBvaW50U2hp
ZnQgPSAyNDsKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZpeFBvaW50TXVsdCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPigxLjAgLyAyNTUuMCAqICgxIDw8IGZpeFBvaW50U2hpZnQpKSAr
IDE7Ci0gICAgICAgIC8vIE11bHRpcGxpZXMgdW5zaWduZWQgdmFsdWUgYnkgZml4cG9pbnQgdmFs
dWUgYW5kIGNvbnZlcnRzIGJhY2sgdG8gdW5zaWduZWQuCi0gICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkodW5zaWduZWQgZml4ZWQsIHVuc2lnbmVkIHYpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAgKGZpeGVkICogdikgPj4gZml4UG9pbnRTaGlm
dDsKKyAgICAgICAgICAgIHJldHVybiBtX3BpeGVscy5nZXQoKTsKICAgICAgICAgfQogCi0gICAg
ICAgIGlubGluZSB2b2lkIHNldFJHQkEoUGl4ZWxEYXRhKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNp
Z25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgICAgICBpbmxpbmUgdm9pZCBzZXRS
R0JBKFJHQkEzMiogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5z
aWduZWQgYSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAm
JiBhIDwgMjU1KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFhKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICpkZXN0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhTXVsdCA9IGEgKiBmaXhQb2lu
dE11bHQ7Ci0gICAgICAgICAgICAgICAgciA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShyLCBh
bHBoYU11bHQpOwotICAgICAgICAgICAgICAgIGcgPSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHko
ZywgYWxwaGFNdWx0KTsKLSAgICAgICAgICAgICAgICBiID0gZml4UG9pbnRVbnNpZ25lZE11bHRp
cGx5KGIsIGFscGhhTXVsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqZGVzdCA9IChh
IDw8IDI0IHwgciA8PCAxNiB8IGcgPDwgOCB8IGIpOworICAgICAgICAgICAgbV9waXhsZXMuc2V0
UkdCQShkZXN0LCByLCBnLCBiLCBhKTsKICAgICAgICAgfQogCiAjaWYgRU5BQkxFKEFQTkcpCi0g
ICAgICAgIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZGl2aWRlMjU1KHVuc2lnbmVkIGEpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiAoYSArIChhID4+IDgpICsgMSkgPj4gODsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlubGluZSB2b2lkIG92ZXJSR0JBKFBpeGVsRGF0YSogZGVzdCwgdW5z
aWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKKyAgICAgICAgaW5s
aW5lIHZvaWQgb3ZlclJHQkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1
bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWEpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBpZiAoYSA8IDI1NSkgewotICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGFEZXN0ID0gKCgqZGVzdCkgPj4gMjQpICYgMjU1OwotICAg
ICAgICAgICAgICAgIGlmIChhRGVzdCkgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBy
RGVzdCA9ICgoKmRlc3QpID4+IDE2KSAmIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgZ0Rlc3QgPSAoKCpkZXN0KSA+PiA4KSAmIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgYkRlc3QgPSAoKmRlc3QpICYgMjU1OwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBhQXV4ID0gMjU1IC0gYTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5
QWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJEZXN0ID0gZGl2aWRlMjU1KHJEZXN0
ICogYURlc3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ0Rlc3QgPSBkaXZpZGUyNTUoZ0Rl
c3QgKiBhRGVzdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiRGVzdCA9IGRpdmlkZTI1NShi
RGVzdCAqIGFEZXN0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICByID0gZGl2aWRlMjU1KHIgKiBhICsgckRlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAgICAg
ICAgZyA9IGRpdmlkZTI1NShnICogYSArIGdEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGIgPSBkaXZpZGUyNTUoYiAqIGEgKyBiRGVzdCAqIGFBdXgpOwotICAgICAgICAgICAgICAg
ICAgICBhICs9IGRpdmlkZTI1NShhRGVzdCAqIGFBdXgpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgciA9IChy
ICogMjU1ICsgYSAtIDEpIC8gYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGcgPSAoZyAqIDI1
NSArIGEgLSAxKSAvIGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiID0gKGIgKiAyNTUgKyBh
IC0gMSkgLyBhOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNl
IGlmIChtX3ByZW11bHRpcGx5QWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgciA9IGRpdmlk
ZTI1NShyICogYSk7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSBkaXZpZGUyNTUoZyAqIGEpOwot
ICAgICAgICAgICAgICAgICAgICBiID0gZGl2aWRlMjU1KGIgKiBhKTsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqZGVzdCA9IChhIDw8IDI0IHwgciA8PCAx
NiB8IGcgPDwgOCB8IGIpOworICAgICAgICAgICAgbV9waXhsZXMub3ZlclJHQkEoZGVzdCwgciwg
ZywgYiwgYSk7CiAgICAgICAgIH0KICNlbmRpZgogCiAgICAgcHJpdmF0ZToKICAgICAgICAgaW50
IHdpZHRoKCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fc2l6ZS53aWR0
aCgpOworICAgICAgICAgICAgcmV0dXJuIG1fcGl4ZWxzLndpZHRoKCk7CiAgICAgICAgIH0KIAog
ICAgICAgICBpbnQgaGVpZ2h0KCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IG1fc2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3BpeGVscy5oZWlnaHQoKTsK
ICAgICAgICAgfQogCi0gICAgICAgIFZlY3RvcjxQaXhlbERhdGE+IG1fYmFja2luZ1N0b3JlOwot
ICAgICAgICBQaXhlbERhdGEqIG1fYnl0ZXM7IC8vIFRoZSBtZW1vcnkgaXMgYmFja2VkIGJ5IG1f
YmFja2luZ1N0b3JlLgotICAgICAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICAgICAgQml0bWFwUGl4
ZWxzIG1fcGl4ZWxzOworCiAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIG1fY29sb3JQcm9m
aWxlIGFueW1vcmU/CiAgICAgICAgIENvbG9yUHJvZmlsZSBtX2NvbG9yUHJvZmlsZTsKICAgICAg
ICAgYm9vbCBtX2hhc0FscGhhOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvY2Fpcm8vQml0bWFwUGl4ZWxzQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vQml0bWFwUGl4ZWxzQ2Fpcm8uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjNmYzYyYTM3ZDgxNDVjZGQwN2ExNTRlZDhmNzQxMWRlY2E0NmYwZjEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWly
by9CaXRtYXBQaXhlbHNDYWlyby5jcHAKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkJpdG1hcFBpeGVscy5oIgorCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBQaXhlbHM6OmltYWdlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2Rh
dGEoCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGNvbnN0X2Nhc3Q8
UGl4ZWxEYXRhKj4obV9waXhlbHMpKSwKKyAgICAgICAgQ0FJUk9fRk9STUFUX0FSR0IzMiwgd2lk
dGgoKSwgaGVpZ2h0KCksIHdpZHRoKCkgKiBzaXplb2YoUkdCQTMyKSkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNDEyOTVmODU3MzU4ZmJiZjM1YzFiMDUyNWU4ZDZj
YzM1MjBmNTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVy
Q2Fpcm8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkltYWdlRGVjb2Rlci5oIgotCi0jaW5jbHVkZSA8Y2Fpcm8uaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1OYXRpdmVJbWFnZVB0ciBJbWFnZUZyYW1lOjphc05ld05hdGl2ZUltYWdl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVh
dGVfZm9yX2RhdGEoCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGNv
bnN0X2Nhc3Q8UGl4ZWxEYXRhKj4obV9ieXRlcykpLAotICAgICAgICBDQUlST19GT1JNQVRfQVJH
QjMyLCB3aWR0aCgpLCBoZWlnaHQoKSwgd2lkdGgoKSAqIHNpemVvZihQaXhlbERhdGEpKSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1Nv
dXJjZU1hYy5tbQppbmRleCAyMTZjZDA5M2YyNjQ2N2NiYTg4YTQzZjY5M2FiZjRjZjUxZGQxYTRk
Li5kMTE0NTRiMDVlZjg4OTkzYTYyODkzODk2YmMwYzExNzI4YzVlZDUwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9T
b3VyY2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgTW9j
a1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6OnVwZGF0ZVBsYXRmb3JtTGF5ZXIoKSBjb25zdAogICAg
ICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgbV9wcmV2aWV3
SW1hZ2UgPSBpbWFnZS0+Z2V0Q0dJbWFnZVJlZigpOworICAgICAgICBtX3ByZXZpZXdJbWFnZSA9
IGltYWdlLT5uYXRpdmVJbWFnZSgpOwogICAgICAgICBpZiAoIW1fcHJldmlld0ltYWdlKQogICAg
ICAgICAgICAgYnJlYWs7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9EcmFnSW1hZ2VDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0lt
YWdlQ0dXaW4uY3BwCmluZGV4IDM2Y2Q2NTE2ZTgwZjE3NDhiZmVhYjc3YTkzMDI3MWMxMjFkZTgw
MTkuLjRiNGUzNzc5ZTk2Zjc4YzY1NDBhNTNjNDQ3OGMzYmZkOTM1ZjUzZTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcApAQCAtMTM2LDkgKzEz
Niw5IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW1hZ2UqIGltZywg
SW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKQogICAgIENHQ29udGV4dFNjYWxlQ1RNKGRyYXdD
b250ZXh0LCAxLCAtMSk7CiAgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yKGRyYXdDb250ZXh0LCB3
aGl0ZSk7CiAgICAgQ0dDb250ZXh0RmlsbFJlY3QoZHJhd0NvbnRleHQsIHJlY3QpOwotICAgIGlm
IChhdXRvIHNyY0ltYWdlID0gaW1nLT5nZXRDR0ltYWdlUmVmKCkpIHsKKyAgICBpZiAoYXV0byBz
cmNJbWFnZSA9IGltZy0+bmF0aXZlSW1hZ2UoKSkgewogICAgICAgICBDR0NvbnRleHRTZXRCbGVu
ZE1vZGUoZHJhd0NvbnRleHQsIGtDR0JsZW5kTW9kZU5vcm1hbCk7Ci0gICAgICAgIENHQ29udGV4
dERyYXdJbWFnZShkcmF3Q29udGV4dCwgcmVjdCwgc3JjSW1hZ2UpOworICAgICAgICBDR0NvbnRl
eHREcmF3SW1hZ2UoZHJhd0NvbnRleHQsIHJlY3QsIHNyY0ltYWdlLmdldCgpKTsKICAgICB9CiAg
ICAgQ0dDb250ZXh0UmVsZWFzZShkcmF3Q29udGV4dCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNh
Y2hlLm1tCmluZGV4IGI2NTlkNmRiZjlhZDY5OTljM2FjOTYyZGU5NTE1NzgwOTdlMWYzYjEuLjdj
NWVkMjEwZGRiMmEzMmE3NjY2NzRjMTIwZDk5NGMyZmE0N2U3ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvTWlz
Yy9XZWJDYWNoZS5tbQpAQCAtMjA0LDcgKzIwNCw3IEBAICsgKENHSW1hZ2VSZWYpaW1hZ2VGb3JV
Ukw6KE5TVVJMICopdXJsCiAgICAgV2ViQ29yZTo6Q2FjaGVkSW1hZ2UmIGNhY2hlZEltYWdlID0g
ZG93bmNhc3Q8V2ViQ29yZTo6Q2FjaGVkSW1hZ2U+KCpjYWNoZWRSZXNvdXJjZSk7CiAgICAgaWYg
KCFjYWNoZWRJbWFnZS5oYXNJbWFnZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBy
ZXR1cm4gY2FjaGVkSW1hZ2UuaW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpOworICAgIHJldHVybiBj
YWNoZWRJbWFnZS5pbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmdldCgpOwogfQogCiAjZW5kaWYgLy8g
UExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3BwCmluZGV4IDBmNmRlN2ExNDZhNjExYTUyYWExZTUzOTAx
OWZhNmMxYzQ2NzI1YWUuLjMwNTYzMzZjYjY2ZmU0YWYxOGJkYzUyOWFjYTJmOGZjODgxZGZlNTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9jZy9XS0ljb25EYXRh
YmFzZUNHLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29u
RGF0YWJhc2VDRy5jcHAKQEAgLTM3LDEyICszNywyMyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIENHSW1hZ2VSZWYgV0tJY29uRGF0YWJhc2VUcnlHZXRDR0ltYWdlRm9yVVJMKFdLSWNvbkRh
dGFiYXNlUmVmIGljb25EYXRhYmFzZVJlZiwgV0tVUkxSZWYgdXJsUmVmLCBXS1NpemUgc2l6ZSkK
IHsKICAgICBJbWFnZSogaW1hZ2UgPSB0b0ltcGwoaWNvbkRhdGFiYXNlUmVmKS0+aW1hZ2VGb3JQ
YWdlVVJMKHRvV1RGU3RyaW5nKHVybFJlZikpOwotICAgIHJldHVybiBpbWFnZSA/IGltYWdlLT5n
ZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUoSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHNpemUud2lk
dGgpLCBzdGF0aWNfY2FzdDxpbnQ+KHNpemUuaGVpZ2h0KSkpIDogMDsKKyAgICByZXR1cm4gaW1h
Z2UgPyBpbWFnZS0+bmF0aXZlSW1hZ2VPZlNpemUoSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHNp
emUud2lkdGgpLCBzdGF0aWNfY2FzdDxpbnQ+KHNpemUuaGVpZ2h0KSkpLmdldCgpIDogbnVsbHB0
cjsKIH0KIAogQ0ZBcnJheVJlZiBXS0ljb25EYXRhYmFzZVRyeUNvcHlDR0ltYWdlQXJyYXlGb3JV
UkwoV0tJY29uRGF0YWJhc2VSZWYgaWNvbkRhdGFiYXNlUmVmLCBXS1VSTFJlZiB1cmxSZWYpCiB7
CiAgICAgSW1hZ2UqIGltYWdlID0gdG9JbXBsKGljb25EYXRhYmFzZVJlZiktPmltYWdlRm9yUGFn
ZVVSTCh0b1dURlN0cmluZyh1cmxSZWYpKTsKLSAgICByZXR1cm4gaW1hZ2UgPyBpbWFnZS0+Z2V0
Q0dJbWFnZUFycmF5KCkubGVha1JlZigpIDogMDsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gbmF0aXZlSW1hZ2VzID0gaW1hZ2UtPmZyYW1lc05h
dGl2ZUltYWdlcygpOworICAgIGlmICghbmF0aXZlSW1hZ2VzLnNpemUoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgCisgICAgQ0ZNdXRhYmxlQXJyYXlSZWYgYXJyYXkgPSBDRkFycmF5
Q3JlYXRlTXV0YWJsZShudWxscHRyLCBuYXRpdmVJbWFnZXMuc2l6ZSgpLCAma0NGVHlwZUFycmF5
Q2FsbEJhY2tzKTsKKyAgICBmb3IgKGF1dG8gbmF0aXZlSW1hZ2UgOiBuYXRpdmVJbWFnZXMpCisg
ICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheSwgbmF0aXZlSW1hZ2UuZ2V0KCkpOworICAg
IAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxDRkFycmF5UmVmPihDRlJldGFpbihhcnJheSkpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZp
ZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50
Vmlld0ludGVyYWN0aW9uLm1tCmluZGV4IGRjNzk4M2FiOTg4YzJkMDRhMTczMGVlMTM3MzAzYzI0
NDE2MTUxOTcuLmZiYzNlNWQ0YzU0MzAxY2U5MjE3YTQwZjhkMDhiZDU4MzUyNzg3YzYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0
aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0lu
dGVyYWN0aW9uLm1tCkBAIC00MDcxLDcgKzQwNzEsNyBAQCAtIChVSUltYWdlICopX3ByZXNlbnRh
dGlvblNuYXBzaG90Rm9yUHJldmlld0l0ZW1Db250cm9sbGVyOihVSVByZXZpZXdJdGVtQ29udHJv
bAogewogICAgIGlmICghX3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlua0luZGljYXRvci5jb250ZW50
SW1hZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBbW1tVSUltYWdlIGFs
bG9jXSBpbml0V2l0aENHSW1hZ2U6X3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlua0luZGljYXRvci5j
b250ZW50SW1hZ2UtPmdldENHSW1hZ2VSZWYoKV0gYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBb
W1tVSUltYWdlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6X3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlu
a0luZGljYXRvci5jb250ZW50SW1hZ2UtPm5hdGl2ZUltYWdlKCkuZ2V0KCldIGF1dG9yZWxlYXNl
XTsKIH0KIAogLSAoTlNBcnJheSAqKV9wcmVzZW50YXRpb25SZWN0c0ZvclByZXZpZXdJdGVtQ29u
dHJvbGxlcjooVUlQcmV2aWV3SXRlbUNvbnRyb2xsZXIgKiljb250cm9sbGVyCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggOWEzM2Y3
Y2M3ZGM3YzdkNzJmOWRhNzQzMDk4YjdkYmNhODI0MDljZi4uYTUzMjUxMDY3OGI5ZjUzNTE0NThh
MzhhOWY0MjMzNzQ3ZDAzNWY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtMTcyNyw2OSArMTcyNyw2IEBAIHZvaWQgUGx1Z2lu
Vmlldzo6d2luZG93ZWRQbHVnaW5WaXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wgaXNWaXNpYmxlLCB1
aW50NjRfdCB3aW5kCiB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKENPQ09BKQotc3RhdGljIGJv
b2wgaXNBbG1vc3RTb2xpZENvbG9yKEJpdG1hcEltYWdlKiBiaXRtYXApCi17Ci0gICAgQ0dJbWFn
ZVJlZiBpbWFnZSA9IGJpdG1hcC0+Z2V0Q0dJbWFnZVJlZigpOwotICAgIEFTU0VSVChDR0ltYWdl
R2V0Qml0c1BlckNvbXBvbmVudChpbWFnZSkgPT0gOCk7Ci0KLSAgICBDR0JpdG1hcEluZm8gaW1h
Z2VJbmZvID0gQ0dJbWFnZUdldEJpdG1hcEluZm8oaW1hZ2UpOwotICAgIGlmICghKGltYWdlSW5m
byAmIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlKSB8fCAoaW1hZ2VJbmZvICYga0NHQml0bWFw
QWxwaGFJbmZvTWFzaykgIT0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCkgewotICAg
ICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYmVpbmcgYWJsZSB0byBoYW5kbGUgb3RoZXIgcGl4ZWwg
Zm9ybWF0cy4KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBzaXplX3Qgd2lkdGggPSBDR0ltYWdlR2V0V2lkdGgoaW1hZ2Up
OwotICAgIHNpemVfdCBoZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKTsKLSAgICBzaXpl
X3QgYnl0ZXNQZXJSb3cgPSBDR0ltYWdlR2V0Qnl0ZXNQZXJSb3coaW1hZ2UpOwotCi0gICAgUmV0
YWluUHRyPENGRGF0YVJlZj4gcHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ29weURh
dGEoQ0dJbWFnZUdldERhdGFQcm92aWRlcihpbWFnZSkpKTsKLSAgICBjb25zdCBVSW50OCogZGF0
YSA9IENGRGF0YUdldEJ5dGVQdHIocHJvdmlkZXIuZ2V0KCkpOwotCi0gICAgLy8gT3ZlcmxheSBh
IGdyaWQgb2Ygc2FtcGxpbmcgZG90cyBvbiB0b3Agb2YgYSBncmF5c2NhbGUgdmVyc2lvbiBvZiB0
aGUgaW1hZ2UuCi0gICAgLy8gRm9yIHRoZSBpbnRlcmlvciBwb2ludHMsIGNhbGN1bGF0ZSB0aGUg
ZGlmZmVyZW5jZSBpbiBsdW1pbmFuY2UgYW1vbmcgdGhlIHNhbXBsZSBwb2ludAotICAgIC8vIGFu
ZCBpdHMgc3Vycm91bmRzIHBvaW50cywgc2NhbGVkIGJ5IHRyYW5zcGFyZW5jeS4KLSAgICBjb25z
dCB1bnNpZ25lZCBzYW1wbGVSb3dzID0gNzsKLSAgICBjb25zdCB1bnNpZ25lZCBzYW1wbGVDb2xz
ID0gNzsKLSAgICAvLyBGSVhNRTogUmVmaW5lIHRoZSBwcm9wZXIgbnVtYmVyIG9mIHNhbXBsZXMs
IGFuZCBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgYXNwZWN0IHJhdGlvcy4KLSAgICBpZiAod2lkdGgg
PCBzYW1wbGVDb2xzIHx8IGhlaWdodCA8IHNhbXBsZVJvd3MpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBsYXN0IHJvdy9jb2x1bW4gbGFuZCBvbiB0aGUg
aW1hZ2UgcGVyaW1ldGVyLgotICAgIGNvbnN0IGZsb2F0IHN0cmlkZVdpZHRoID0gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHdpZHRoIC0gMSkgLyAoc2FtcGxlQ29scyAtIDEpOwotICAgIGNvbnN0IGZsb2F0
IHN0cmlkZUhlaWdodCA9IHN0YXRpY19jYXN0PGZsb2F0PihoZWlnaHQgLSAxKSAvIChzYW1wbGVS
b3dzIC0gMSk7Ci0gICAgZmxvYXQgc2FtcGxlc1tzYW1wbGVSb3dzXVtzYW1wbGVDb2xzXTsKLQot
ICAgIC8vIEZpbmQgdGhlIGx1bWluYW5jZSBvZiB0aGUgc2FtcGxlIHBvaW50cy4KLSAgICBmbG9h
dCB5ID0gMDsKLSAgICBjb25zdCBVSW50OCogcm93ID0gZGF0YTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2FtcGxlUm93czsgKytpKSB7Ci0gICAgICAgIGZsb2F0IHggPSAwOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc2FtcGxlQ29sczsgKytqKSB7Ci0gICAgICAg
ICAgICBjb25zdCBVSW50OCogcDAgPSByb3cgKyAoc3RhdGljX2Nhc3Q8aW50Pih4ICsgLjUpKSAq
IDQ7Ci0gICAgICAgICAgICAvLyBSIEcgQiBBCi0gICAgICAgICAgICBzYW1wbGVzW2ldW2pdID0g
KDAuMjEyNSAqICpwMCArIDAuNzE1NCAqICoocDArMSkgKyAwLjA3MjEgKiAqKHAwKzIpKSAqICoo
cDArMykgLyAyNTU7Ci0gICAgICAgICAgICB4ICs9IHN0cmlkZVdpZHRoOwotICAgICAgICB9Ci0g
ICAgICAgIHkgKz0gc3RyaWRlSGVpZ2h0OwotICAgICAgICByb3cgPSBkYXRhICsgKHN0YXRpY19j
YXN0PGludD4oeSArIC41KSkgKiBieXRlc1BlclJvdzsKLSAgICB9Ci0KLSAgICAvLyBEZXRlcm1p
bmUgdGhlIGltYWdlIHNjb3JlLgotICAgIGZsb2F0IGFjY3VtU2NvcmUgPSAwOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDE7IGkgPCBzYW1wbGVSb3dzIC0gMTsgKytpKSB7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaiA9IDE7IGogPCBzYW1wbGVDb2xzIC0gMTsgKytqKSB7Ci0gICAgICAgICAgICBm
bG9hdCBkaWZmID0gc2FtcGxlc1tpIC0gMV1bal0gKyBzYW1wbGVzW2kgKyAxXVtqXSArIHNhbXBs
ZXNbaV1baiAtIDFdICsgc2FtcGxlc1tpXVtqICsgMV0gLSA0ICogc2FtcGxlc1tpXVtqXTsKLSAg
ICAgICAgICAgIGFjY3VtU2NvcmUgKz0gZGlmZiAqIGRpZmY7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICAvLyBUaGUgc2NvcmUgZm9yIGEgZ2l2ZW4gc2FtcGxlIGNhbiBiZSB3aXRoaW4gdGhlIHJh
bmdlIG9mIDAgYW5kIDI1NV4yLgotICAgIHJldHVybiBhY2N1bVNjb3JlIDwgMjUwMCAqIChzYW1w
bGVSb3dzIC0gMikgKiAoc2FtcGxlQ29scyAtIDIpOwotfQotI2VuZGlmCi0KIHZvaWQgUGx1Z2lu
Vmlldzo6cGx1Z2luU25hcHNob3RUaW1lckZpcmVkKCkKIHsKICNpZiBFTkFCTEUoUFJJTUFSWV9T
TkFQU0hPVFRFRF9QTFVHSU5fSEVVUklTVElDKQpAQCAtMTgwOSw3ICsxNzQ2LDcgQEAgdm9pZCBQ
bHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRpbWVyRmlyZWQoKQogCiAgICAgICAgIGlmIChzbmFw
c2hvdEltYWdlKSB7CiAjaWYgRU5BQkxFKFBSSU1BUllfU05BUFNIT1RURURfUExVR0lOX0hFVVJJ
U1RJQykKLSAgICAgICAgICAgIGJvb2wgc25hcHNob3RJc0FsbW9zdFNvbGlkQ29sb3IgPSBpc0Fs
bW9zdFNvbGlkQ29sb3IoZG93bmNhc3Q8Qml0bWFwSW1hZ2U+KHNuYXBzaG90SW1hZ2UuZ2V0KCkp
KTsKKyAgICAgICAgICAgIGJvb2wgc25hcHNob3RJc0FsbW9zdFNvbGlkQ29sb3IgPSBzdGF0aWNf
cG9pbnRlcl9jYXN0PEJpdG1hcEltYWdlPihzbmFwc2hvdEltYWdlKS0+aXNBbG1vc3RTb2xpZENv
bG9yKCk7CiAgICAgICAgICAgICBzbmFwc2hvdEZvdW5kID0gIXNuYXBzaG90SXNBbG1vc3RTb2xp
ZENvbG9yOwogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283427</attachid>
            <date>2016-07-12 10:44:06 -0700</date>
            <delta_ts>2016-07-12 11:14:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159679-20160712104323.patch</filename>
            <type>text/plain</type>
            <size>127254</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzMTAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWM1YmQ5YmQwNmExOWJl
NWNhMDJjNTE3MmQ2ZWYyZWJiZmVjMWMxOS4uNmFlYzQ3MmY4YWVjOGUwNjRkNGYyZmQwODAyYTBm
MWM0NTU4YjI4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxMyBAQAorMjAxNi0wNy0xMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0
IHRoZSBwaXhlbCBkYXRhIG9mIEltYWdlRnJhbWUgdG8gYSBzZXBhcmF0ZSBjbGFzcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5Njc5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgcGl4ZWwg
ZGF0YSBtYW5pcHVsYXRpb24gcGFydCBpbiBJbWFnZUZyYW1lIGludG8gYSBzZXBhcmF0ZSBjbGFz
cworICAgICAgICBhbmQgdGhlbiBtYWtlIGl0IG9wdGlvbmFsIChhbGxvY2F0ZWQgb24gZGVtYW5k
KS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2lu
Q2Fpcm8uY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFBpeGVsczo6Qml0bWFwUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBp
eGVsczo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpoZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFBpeGVsczo6YXQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmNsZWFyUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OnJlcGVhdEZpcnN0Um93KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcFBpeGVsczo6c2V0UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQ
aXhlbHM6Om92ZXJSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6aW5Cb3Vu
ZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Om11bHRpcGx5MjU1KToKKyAgICAgICAgKFdlYkNvcmU6OmRpdmlkZTI1NSk6CisgICAg
ICAgIChXZWJDb3JlOjpkaXZpZGVDZWlsKToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxp
ZWRDaGFubmVsKToKKyAgICAgICAgKFdlYkNvcmU6OnVucHJlbXVsdGlwbGllZENoYW5uZWwpOgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZVByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VVblByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6cGl4ZWxzKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWVEYXRhOjpoYXNQaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y2xlYXJQaXhl
bERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGxQaXhlbERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGxGcmFtZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weUJpdG1hcERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojpjb3B5Um93TlRpbWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0UkdCQSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpnZXRBZGRyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6Omhhc1BpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpvdmVyUkdC
QSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjp3aWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
Y29weVJvd05UaW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpm
aXhQb2ludFVuc2lnbmVkTXVsdGlwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6ZGl2aWRlMjU1KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5j
cHAuCisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmltYWdlKToKKworMjAxNi0wNy0x
MSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAgICAg
IFJlbmFtZSBGcmFtZURhdGEgdG8gSW1hZ2VGcmFtZURhdGEgYW5kIG1vdmUgaXQgdG8gYSBzZXBh
cmF0ZSBmaWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTU0NDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNb3ZlIEltYWdlRnJhbWVEYXRhIHRvIGEgc2VwYXJhdGUgZmlsZSBzbyBpdCBjYW4gYmUgY2Fj
aGVkIGJ5IEltYWdlU291cmNlCisgICAgICAgIGFuZCB3aWxsIHN0aWxsIGJlIGNvbnN1bWVkIGJ5
IEJpdG1hcEltYWdlLiBNYWtlIHRoZSBkYXRhIG1lbWJlcnMgb2YgSW1hZ2VGcmFtZURhdGEKKyAg
ICAgICAgYmUgcHJpdmF0ZSBhbmQgYWRkIGdldHRlcnMgdG8gcmV0dXJuIHRoZWlyIHZhbHVlcy4K
KworICAgICAgICBObyBuZXcgdGVzdHMgLS0gQ29kZSByZWZhY3RvcmluZywgbm8gYmVoYXZpb3Ig
Y2hhbmdlLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Jp
dG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aGF2ZUZyYW1lSW1hZ2VBdEluZGV4
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNz
YXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6ZW5zdXJlRnJhbWVJc0NhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcElt
YWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6ZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6aXNBbG1vc3RTb2xpZENvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRt
YXBJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpGcmFtZURhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp+RnJhbWVEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6dXNlZEZyYW1lQnl0ZXMpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZURhdGFBdEluZGV4KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ltYWdlRnJhbWVEYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lRGF0YTo6SW1hZ2VGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURh
dGE6On5JbWFnZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6
Y2xlYXJTdWJJbWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmNsZWFy
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpzaW5nbGVQaXhlbFNvbGlkQ29s
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmlzQWxtb3N0U29saWRDb2xv
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW1hZ2VGcmFtZURhdGEuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6c3RhdHVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWVEYXRhOjppc0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWVEYXRhOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpm
cmFtZUJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjppbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6b3JpZW50YXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OnN1YnNhbXBsaW5nTGV2ZWwpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZURhdGE6OmR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWVEYXRhOjpoYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6
aGFzSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6Omhhc01ldGFkYXRh
KToKKworMjAxNi0wNi0yNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUs
Y29tPgorCisgICAgICAgIEludHJvZHVjZSBQbGF0Zm9ybUltYWdlIGFuZCBtYWtlIGl0IGlzIGEg
d3JhcHBlciBmb3IgTmF0aXZlSW1hZ2VQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1ODY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyByZWZhY3RvcmluZyBp
cyB0byBtb3ZlIHRoZSBwbGF0Zm9ybSBpbWFnZSBkZXBlbmRlbnQKKyAgICAgICAgY29kZSBmcm9t
IEJpdG1hcEltYWdlIHRvIFBsYXRmb3JtSW1hZ2UuIFBsYXRmb3JtSW1hZ2UgaXMgcmVzcG9uc2li
bGUgb2YgCisgICAgICAgIGRyYXdpbmcgdGhlIGltYWdlIGFuZCBhbnN3ZXJpbmcgTmF0aXZlSW1h
Z2VQdHIgcXVlc3Rpb25zIHdoZW4gYW4gSW1hZ2VEZWNvZGVyCisgICAgICAgIGlzIG5vdCBhdmFp
bGFibGUuIEFwYXJ0IGZyb20gZHJhd2luZyB0aGUgaW1hZ2UsIHRoZSBxdWVyeSBmdW5jdGlvbnMg
d2lsbCBiZQorICAgICAgICBjYWxsZWQgb25seSB3aGVuIGNvbnN0cnVjdGluZyBhIEZyYW1lRGF0
YSBzbyB3ZSB3aWxsIGtlZXAgZXZlcnl0aGluZyBhcyBhCisgICAgICAgIE5hdGl2ZUltYWdlUHRy
LiBCdXQgd2Ugd2lsbCBjYXN0IHRoZSBOYXRpdmVJbWFnZVB0ciB0byBQbGF0Zm9ybUltYWdlIHdo
ZW4KKyAgICAgICAgYSBwbGF0Zm9ybSBkZXBlbmRlbnQgZnVuY3Rpb24gaXMgbmVlZGVkLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cyAtLSBDb2RlIHJlZmFjdG9yaW5nLCBubyBiZWhhdmlvciBjaGFu
Z2UuCisKKyAgICAgICAgKiBQbGF0Zm9ybUFwcGxlV2luLmNtYWtlOgorICAgICAgICAqIFBsYXRm
b3JtRWZsLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBs
YXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2luQ2Fpcm8uY21ha2U6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRp
bmdzL29iamMvRE9NLm1tOgorICAgICAgICAoLVtET01Ob2RlIGdldFByZXZpZXdTbmFwc2hvdElt
YWdlOmFuZFJlY3RzOl0pOgorICAgICAgICAqIHBhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cu
bW06CisgICAgICAgICgtW1dlYlRleHRJbmRpY2F0b3JWaWV3IGluaXRXaXRoRnJhbWU6dGV4dElu
ZGljYXRvcjptYXJnaW46b2Zmc2V0Ol0pOgorICAgICAgICAoY3JlYXRlQ29udGVudENyb3NzZmFk
ZUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpu
YXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZy
YW1lc05hdGl2ZUltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6c2luZ2xl
UGl4ZWxTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppc0FsbW9z
dFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZURhdGE6OkZyYW1lRGF0YSk6CisgICAgICAgIG1faGFzQWxwaGEgY2FuIGJlIGluaXRp
YWxpemVkIHdpdGggZmFsc2UgYmVjYXVzZSBpdCBpcyBhY2Nlc3NlZCBvbmx5IGluCisgICAgICAg
IEJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleCgpIGFuZCBpdCBpcyBndWFyZGVkIGJ5
IG1faGF2ZU1ldGFkYXRhLgorICAgICAgICBCb3RoIG1faGF2ZU1ldGFkYXRhIGFuZCBtX2hhc0Fs
cGhhIGFyZSBzZXQgaW4gQml0bWFwSW1hZ2UgY29uc3RydWN0b3IKKyAgICAgICAgYW5kIGluIEJp
dG1hcEltYWdlOjpjYWNoZUZyYW1lKCkuCisKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6
fkZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OmNsZWFyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6
Om5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpuYXRpdmVJbWFnZU9mU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZnJhbWVzTmF0aXZlSW1hZ2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlOjpnZXRDR0ltYWdlUmVmKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlOjpnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2U6OmdldENHSW1hZ2VBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtSW1hZ2U6OlBsYXRmb3JtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1JbWFnZTo6aXNOaWwpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6Y2dJ
bWFnZVJlZik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjp1cGRhdGVEaXNwbGF5TW9k
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJv
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0JpdG1hcEltYWdlQ2Fpcm8uY3BwLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6
Y2xlYXJTdWJJbWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6c2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpoYXNBbHBoYSk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6aXNBbG1vc3RTb2xpZENvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1JbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
Qml0bWFwSW1hZ2VDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUGF0dGVybkNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm46OmNyZWF0ZVBsYXRm
b3JtUGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFn
ZUNHLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpjbGVhclN1
YkltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IpOiBNb3ZlZCBmcm9tIFBsdWdpblZp
ZXcuY3BwIHNpbmNlIFBsYXRmb3JtSW1hZ2UgaXMgd2hhdCB0aGlzIGZ1bmN0aW9uIGJlbG9uZ3Mg
dG8uCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKTog
UmV0dXJucyB0aGUgc3ViLXNhbXBsaW5nIHNjYWxlIGJhc2VkIG9uIHRoZSBjb250ZXh0IHNjYWxp
bmcuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpkcmF3KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tOgor
ICAgICAgICAoVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYTo6dXBkYXRlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW06CisgICAgICAgIChX
ZWJDb3JlOjpNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6dXBkYXRlUGxhdGZvcm1MYXllcik6
CisgICAgICAgICogcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZSk6CisKIDIwMTYtMDctMTEgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBTcGVlY2ggU3ludGhlc2lzOiBnZXR0aW5n
IGxpc3Qgb2Ygdm9pY2VzIG5vIGxvbmdlciB3b3JrcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IGMxYmMw
YmJkZTM2MTI1YzQ2MmJmNDgxZGRhZDVkZDJmODI3ZDUyMzkuLjE4ZDFlYmViZWU5MjBiMmYyOWVm
MzI4NzdkZWQyZTFlY2ZmOTdkNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAor
MjAxNi0wNy0xMSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgor
CisgICAgICAgIEludHJvZHVjZSBQbGF0Zm9ybUltYWdlIGFuZCBtYWtlIGl0IGlzIGEgd3JhcHBl
ciBmb3IgTmF0aXZlSW1hZ2VQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1ODY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogTWlzYy9XZWJDYWNoZS5tbToKKyAgICAgICAgKCtbV2ViQ2FjaGUgaW1h
Z2VGb3JVUkw6XSk6CisKIDIwMTYtMDctMTEgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxl
LmNvbT4KIAogICAgICAgICBBZGQgc3ludGhldGljIGNsaWNrIG9yaWdpbiB0byBXS05hdmlnYXRp
b25BY3Rpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYjQ3ZTJjZWE3OWE4ZGQ3YzUzMzVkMmNkNThlNzk2MTUz
MzVjNTAyYy4uZjFmMTY3MjU4NGMwZWU4MTg1OGE3ZTk2NTUzYWNkOWNkMGFjNmZlZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE2LTA3LTExICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
Ym91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgSW50cm9kdWNlIFBsYXRmb3JtSW1hZ2Ug
YW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVyIGZvciBOYXRpdmVJbWFnZVB0cgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvY2cv
V0tJY29uRGF0YWJhc2VDRy5jcHA6CisgICAgICAgIChXS0ljb25EYXRhYmFzZVRyeUdldENHSW1h
Z2VGb3JVUkwpOgorICAgICAgICAoV0tJY29uRGF0YWJhc2VUcnlDb3B5Q0dJbWFnZUFycmF5Rm9y
VVJMKToKKyAgICAgICAgSXQgd2FzIHRoZSBvbmx5IHBsYWNlIGluIHRoZSBjb2RlIHdoaWNoIHVz
ZXMgQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VBcnJheSgpLgorICAgICAgICBDYWxsIEJpdG1hcElt
YWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMoKSBpbnN0ZWFkIGFuZCBmb3JtIHRoZSByZXR1cm5lZAor
ICAgICAgICBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGJ1aWxkIHRoZSBDRkFycmF5UmVmLgorICAg
ICAgICAKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcHJlc2VudGF0aW9uU25hcHNob3RGb3JQcmV2
aWV3SXRlbUNvbnRyb2xsZXI6XSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRp
bWVyRmlyZWQpOgorICAgICAgICAKKyAgICAgICAgKFdlYktpdDo6aXNBbG1vc3RTb2xpZENvbG9y
KTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSB0aGUgc3RhdGljIGZ1bmN0aW9uIGlzQWxtb3N0U29s
aWRDb2xvciB0byBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKS4KKwogMjAxNi0w
Ny0xMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFtXSzJdW2lP
U10gSW50ZXJtaXR0ZW50IGNyYXNoIGluIFtVSUFwcGxpY2F0aW9uIGJlZ2luQmFja2dyb3VuZFRh
c2tXaXRoTmFtZV0gZXhwaXJhdGlvbiBoYW5kbGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGU3
OGIwNDJiMTA0MDFlMWY0ZWUzYTJhYjFhMDUyYzIxOGMzYTExZTMuLjIyNmVjOWI4NGU3MjJmZmYz
ZTJmMDRkY2U3ZGI3MGUzZGQ0YjgzYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMjI2LDYg
KzIyMjYsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSVNP
VlRUQ3VlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJh
bWVEYXRhLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT3JpZW50YXRpb24uY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UG9pbnQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxl
V2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCA1
ZmY5OTFmZjdkYTMwOGJiOTE4MmVjZTNiZjEyMTczMGE1NDhkMjg3Li5iYWUzMWVhZjg2ZTdmY2E5
MDU4MjUwOTJhYTM4YTc4YzExZTQyMjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4u
Y21ha2UKQEAgLTU1LDcgKzU1LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XS0NBQ0ZWaWV3TGF5ZXJUcmVlSG9zdC5jcHAKIAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFBv
aW50Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwCkBAIC03
NSw2ICs3NCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UGF0aENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtl
CmluZGV4IDUxNDUwNGU2ZWMyNWFhNWU0M2I5OTM5OGQ1ZTM1Y2VlZWE3NjZhYTQuLjY0YWUxNzEw
ODlkY2JmMGNkNDViNzBhOWI4ZjcwZWZhOWZmZGVkYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNt
YWtlCkBAIC0xMjIsNyArMTIyLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNwcAogCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1wbC5jcHAKLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ZvbnRDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJm
YnV6ek5HLmNwcApAQCAtMTM0LDYgKzEzMyw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNF
UwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QYXR0ZXJuQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Bs
YXRmb3JtUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNh
aXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RyYW5zZm9ybWF0aW9uTWF0cml4
Q2Fpcm8uY3BwCkBAIC0xNzksOSArMTc5LDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MveDExL1BsYXRmb3JtRGlzcGxheVgxMS5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy94MTEvWFVuaXF1ZVJlc291cmNlLmNwcAogCi0gICAgcGxhdGZvcm0v
aW1hZ2UtZW5jb2RlcnMvSlBFR0ltYWdlRW5jb2Rlci5jcHAKKyAgICBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHAKIAotICAgIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2ltYWdl
LWVuY29kZXJzL0pQRUdJbWFnZUVuY29kZXIuY3BwCiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2Vm
bC9OZXR3b3JrU3RhdGVOb3RpZmllckVmbC5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpp
bmRleCA2NDVhZGQxY2UzODg4OGIwNGQ0YTJkODlhZGEwYTdjNmRlMTk5ODZiLi5kMzFmNTcwNmE2
OTU5YjIzMWI1YmZiMjJmMDdkMTg0M2FlODYxYTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFr
ZQpAQCAtMTAxLDcgKzEwMSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1wbC5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9YMTEu
Y3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9GbG9hdFJlY3RDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9Gb250Q2Fpcm8uY3BwCkBAIC0xMTUsNiArMTE0LDcgQEAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vUGxhdGZvcm1QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vUmVmUHRyQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3Jt
YXRpb25NYXRyaXhDYWlyby5jcHAKQEAgLTE0OSw3ICsxNDksNyBAQCBsaXN0KEFQUEVORCBXZWJD
b3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAogICAg
IHBsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuY3BwCiAKLSAgICBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHAKIAogICAgIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL2d0ay9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZUd0ay5jcHAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bU1hYy5jbWFrZQppbmRleCA5ZjZmNDk2YjZjYzRlZjZlNGI3NGQ4NGFjMGFhOWRlYTU1YTAyMzdi
Li40ZGRlZDMwODhmNGYzOTZmZWY0NDRlN2VlNjVjNjQxMDY1OGY1ODQxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybU1hYy5jbWFrZQpAQCAtMzk3LDcgKzM5Nyw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1dlYlN5c3RlbUJhY2tkcm9wTGF5
ZXIubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9XZWJUaWxlZEJhY2tpbmdMYXll
ci5tbQogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0Zsb2F0UG9pbnRDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5j
cHAKQEAgLTQxNyw2ICs0MTYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL1BhdGhDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cu
Y3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFnZUNHLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1N1YmltYWdlQ2FjaGVXaXRoVGltZXIuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtV2luQ2Fpcm8uY21ha2UKaW5kZXggMmM1NTNiMDU1MWRhZDY5YWExOTlkOTYwZjU1MjM0
M2Q5MjBmMDdiMy4uMzQyYWE5MjczMmZkOGY5MmU4NWNmYTYyNmQ1NTU3MGVmNjZiNmE2OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCkBAIC0yMSw3ICsyMSw2IEBAIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCiAKLSAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0Zsb2F0UmVjdENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRD
YWlyby5jcHAKQEAgLTM0LDYgKzMzLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
bGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZv
cm1QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8u
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3JtYXRpb25NYXRyaXhDYWly
by5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAK
IAotICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNw
cAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNw
cAogCiAgICAgcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb25TdHViLmNwcAog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggYzExYmM0N2U1Y2FkNjMwYTM2NTdjZGUxYWQ5ZjdiNzZhMGE1NWM2Ni4uZmYyYTQ5OGJh
OTZiODFkYTAzZjgxYTMwMWE4NWJlMzc0ZDBlYzY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQ4NCw3ICsxNDg0LDcgQEAK
IAkJMzc1Q0QyMzIxMTlENDNDODAwQTJBODU5IC8qIEh5cGhlbmF0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzVDRDIzMTExOUQ0M0M4MDBBMkE4
NTkgLyogSHlwaGVuYXRpb24uaCAqLzsgfTsKIAkJMzc2RENDRTExM0I0Rjk2NjAwMkVCRUZDIC8q
IFRleHRSdW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzc2RENDRTAxM0I0Rjk2NjAwMkVCRUZDIC8qIFRleHRSdW4uY3BwICovOyB9OwogCQkzNzc0
QUJBNTBGQTIxRUI0MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzc0QUJBMzBGQTIxRUI0
MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3
IC8qIEJpdG1hcEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3Bw
ICovOyB9OworCQkzNzdBM0E5MDE1RUZDRTlCMDA1OUY1QzcgLyogUGxhdGZvcm1JbWFnZUNHLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3N0EzQThG
MTVFRkNFOUEwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwICovOyB9OwogCQkzNzkxOUMy
MzBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzkxOUMyMTBCN0QxODg2MDBBNTY5OTgg
LyogUG9zaXRpb25JdGVyYXRvci5jcHAgKi87IH07CiAJCTM3OTE5QzI0MEI3RDE4ODYwMEE1Njk5
OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzNzkxOUMyMjBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTM3OTI5MTdBMTk4
NUVGMzkwMEY0QjY2MSAvKiBDcmVkZW50aWFsQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc5MjkxNzgxOTg1RUYzOTAwRjRCNjYxIC8qIENyZWRl
bnRpYWxCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTIzMjUsMTAgKzIzMjUsMTQgQEAKIAkJNTNFRDNGREYxNjdBODhFNzAwNjc2MkU2IC8q
IEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFRDNGREQxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJu
YWxTZXR0aW5nc0dlbmVyYXRlZC5oICovOyB9OwogCQk1M0VGNzY2QjE2NTMwQTYxMDA0Q0JFNDkg
LyogU2V0dGluZ3NNYWNyb3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzRUY3NjZBMTY1MzBBNjEwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oICov
OyB9OwogCQk1M0VGNzY2QzE2NTMxOTk0MDA0Q0JFNDkgLyogU2V0dGluZ3NNYWNyb3MuaCBpbiBD
b3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzRUY3NjZBMTY1MzBBNjEwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oICovOyB9OworCQk1
NTA0RTRDQjFEMzU1N0IyMDBGRTUwODggLyogQml0bWFwUGl4ZWxzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTA0RTRDQTFEMzU1MzJEMDBGRTUwODgg
LyogQml0bWFwUGl4ZWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTUwQTBCQzkwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzcw
ODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovOyB9OwogCQk1NTBBMEJDQTA4
NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxp
ZmllZE5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1NTVCODdFQzFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU1Qjg3RUExQ0FBRjBB
QjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLzsgfTsKIAkJNTU1Qjg3RUQxQ0FBRjBB
QjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNv
ZGVyQ0cuaCAqLzsgfTsKKwkJNTU3NEYwODcxRDAyNzkwOTAwQjlGMTRDIC8qIFBsYXRmb3JtSW1h
Z2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1NzRG
MDg1MUQwMjc0NDQwMEI5RjE0QyAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTVDQkE2QTExRDFERjJFMTAwNDUxODYw
IC8qIEltYWdlRnJhbWVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU1Q0JBNjlGMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1lRGF0YS5j
cHAgKi87IH07CisJCTU1Q0JBNkEyMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1lRGF0YS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVDQkE2QTAx
RDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTcyQTdGMjExQzZFNTcxOTAwOUM2MTQ5IC8q
IFNpbXVsYXRlZENsaWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NzJBN0YyMDFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCAqLzsg
fTsKIAkJNTcyQTdGMjMxQzZFNUE2NjAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MkE3RjIyMUM2RTVB
NjYwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5jcHAgKi87IH07CiAJCTU3RUY1RTYwMUQyMEM4
MzkwMDE3MUU2MCAvKiBUZXh0Q29kZWNSZXBsYWNlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdFRjVFNUYxRDIwQzgzOTAwMTcxRTYwIC8qIFRl
eHRDb2RlY1JlcGxhY2VtZW50LmggKi87IH07CkBAIC05MDYxLDcgKzkwNjUsNyBAQAogCQkzNzZE
Q0NFMDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUZXh0UnVuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzc3MkIwOTUxNjUzNTg1NjAwMEE0OUNBIC8qIFBvcHVwT3BlbmluZ09ic2VydmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvcHVwT3BlbmluZ09ic2VydmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NzRBQkEzMEZBMjFFQjQwMEFEN0RFOSAvKiBP
dmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdG1hcEltYWdlQ0cuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogUGxhdGZv
cm1JbWFnZUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsYXRm
b3JtSW1hZ2VDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3OTE5QzIxMEI3
RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQb3NpdGlvbkl0ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzc5MTlDMjIwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvc2l0aW9uSXRlcmF0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc5MjkxNzgxOTg1RUYzOTAwRjRCNjYx
IC8qIENyZWRlbnRpYWxCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENy
ZWRlbnRpYWxCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05OTg5LDEwICs5
OTkzLDE0IEBACiAJCTUzRUQzRkRDMTY3QTg4RTcwMDY3NjJFNiAvKiBKU0ludGVybmFsU2V0dGlu
Z3NHZW5lcmF0ZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJ
bnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTNFRDNGREQxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRl
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVybmFsU2V0dGluZ3NH
ZW5lcmF0ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNFRjc2NkExNjUzMEE2
MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNldHRpbmdzTWFjcm9zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1
MDRFNENBMUQzNTUzMkQwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Qml0bWFwUGl4ZWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1MEEwQkM3MDg1
RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllZE5hbWUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTUw
QTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTU1
Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2Rl
ckNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1NzRGMDg1MUQwMjc0NDQwMEI5RjE0QyAv
KiBQbGF0Zm9ybUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVDQkE2OUYxRDFERjJFMTAwNDUxODYwIC8qIEltYWdl
RnJhbWVEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdl
RnJhbWVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVDQkE2QTAxRDFE
RjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlRnJhbWVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTU1RDQwOEY3MUE3QzYzMTgwMEM3ODQ1MCAvKiBTVkdJbWFnZUNsaWVudHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHSW1hZ2VDbGllbnRzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTU3MkE3RjIwMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGlj
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW11bGF0ZWRDbGljay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzJBN0YyMjFDNkU1QTY2MDA5QzYxNDkgLyog
U2ltdWxhdGVkQ2xpY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2ltdWxhdGVkQ2xpY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIwMjQs
NyArMjIwMzIsNiBAQAogCQlCMjc1MzUyOTBCMDUzODE0MDAyQ0U2NEYgLyogY2cgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTM3N0EzQThGMTVFRkNFOUEw
MDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCAqLywKIAkJCQkwRkNGMzMyMzBGMkI5NzE1MDA0
QjY3OTUgLyogQ29sb3JDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRGIC8q
IEZsb2F0UG9pbnRDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEZs
b2F0UmVjdENHLmNwcCAqLywKQEAgLTIyMDUxLDYgKzIyMDU4LDcgQEAKIAkJCQlBODBBMzhGRDBF
NTBDQzgyMDBBMjVFQkMgLyogUGF0dGVybkNHLmNwcCAqLywKIAkJCQlCMjc1MzUzNjBCMDUzODE0
MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5jcHAgKi8sCiAJCQkJQjI3NTM1MzcwQjA1Mzgx
NDAwMkNFNjRGIC8qIFBERkRvY3VtZW50SW1hZ2UuaCAqLywKKwkJCQkzNzdBM0E4RjE1RUZDRTlB
MDA1OUY1QzcgLyogUGxhdGZvcm1JbWFnZUNHLmNwcCAqLywKIAkJCQkxRkM0MEZCODE2NTVDNTkx
MDA0MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAgKi8sCiAJCQkJMUZDNDBGQjcx
NjU1QzU5MTAwNDBGMjlFIC8qIFN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCAqLywKIAkJCQlCMjc1
MzUyQTBCMDUzODE0MDAyQ0U2NEYgLyogVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAgKi8sCkBA
IC0yMjExOCw2ICsyMjEyNiw3IEBACiAJCQkJQkVGMjlFRTkxNzE1REQwOTAwQzRCNEM5IC8qIEF1
ZGlvVHJhY2tQcml2YXRlLmggKi8sCiAJCQkJQTg5OTQzMjcwQjQyMzM4NzAwRDdDODAyIC8qIEJp
dG1hcEltYWdlLmNwcCAqLywKIAkJCQlBODk5NDMyNjBCNDIzMzg3MDBEN0M4MDIgLyogQml0bWFw
SW1hZ2UuaCAqLywKKwkJCQk1NTA0RTRDQTFEMzU1MzJEMDBGRTUwODggLyogQml0bWFwUGl4ZWxz
LmggKi8sCiAJCQkJQ0RERTAyRTkxOEIzREZDNzAwQ0Y3RkYxIC8qIENETVNlc3Npb24uaCAqLywK
IAkJCQlCMjc1MzUzODBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3IuY3BwICovLAogCQkJCUIyNzUz
NTM5MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5oICovLApAQCAtMjIyMDIsNiArMjIyMTEsOCBA
QAogCQkJCTQzRDI1OTc2MTNDODE2RjQwMDYwODU1OSAvKiBJbWFnZUJ1ZmZlci5jcHAgKi8sCiAJ
CQkJQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8sCiAJCQkJMjJC
RDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovLAorCQkJCTU1Q0JB
NjlGMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1lRGF0YS5jcHAgKi8sCisJCQkJNTVDQkE2
QTAxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggKi8sCiAJCQkJQkM3RjQ0QTcw
QjlFMzI0RTAwQTlEMDgxIC8qIEltYWdlT2JzZXJ2ZXIuaCAqLywKIAkJCQlBODc0OEQ3NDEyQ0Mz
Rjg5MDAxRkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5jcHAgKi8sCiAJCQkJQTg3NDhENjYxMkND
Mzc2MzAwMUZCQTQxIC8qIEltYWdlT3JpZW50YXRpb24uaCAqLywKQEAgLTIyMjUxLDYgKzIyMjYy
LDcgQEAKIAkJCQkyRDUwMDJGQTFCNTZENzk5MDAyMEFBRjcgLyogUGF0aFV0aWxpdGllcy5oICov
LAogCQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLywKIAkJCQlB
OEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oICovLAorCQkJCTU1NzRGMDg1MUQw
Mjc0NDQwMEI5RjE0QyAvKiBQbGF0Zm9ybUltYWdlLmggKi8sCiAJCQkJMDU2MkY5NjAxNTczRjg4
RjAwMzFDQTE2IC8qIFBsYXRmb3JtTGF5ZXIuaCAqLywKIAkJCQlDRUVGQ0Q3QjE5REIzM0RDMDAz
ODc2RDcgLyogUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmggKi8sCiAJCQkJMDcyODQ3RTIx
NkVCQzVCMDAwNDNDRkE0IC8qIFBsYXRmb3JtVGV4dFRyYWNrLmggKi8sCkBAIC0yNjAxOCw2ICsy
NjAzMCw3IEBACiAJCQkJODVFNzExQjkwQUM1RDUzNTAwNTMyNzBGIC8qIERPTUhUTUxNYXBFbGVt
ZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTE1NzlGMEMwM0JCRDMwMDhCQjBF
RSAvKiBET01IVE1MTWFycXVlZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTE1NkVB
MEMwM0I3NDEwMDhCQjBFRSAvKiBET01IVE1MTWFycXVlZUVsZW1lbnRJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNTU3NEYwODcxRDAyNzkwOTAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTJERUM2NjU1MUM4MkQwNDEwMDk5ODQ2QSAvKiBET01IVE1M
TWVkaWFFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyREVDNjY1MTFDODJEMDE2MDA5OTg0
NkEgLyogRE9NSFRNTE1lZGlhRWxlbWVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NUJBNEQxMzBBQTY4ODY4MDA4ODA1MkQgLyogRE9NSFRNTE1lbnVFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKQEAgLTI2NDU5LDYgKzI2NDcyLDcgQEAKIAkJCQlEMzU5RDc4QTEyOUNBMjcxMDAwNkU1
RDIgLyogSFRNTERldGFpbHNFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEVBNzlGQTBB
MTkxNkRGMDBBOEVGNUYgLyogSFRNTERpcmVjdG9yeUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4RUE3Q0I3MEExOTJCOUMwMEE4RUY1RiAvKiBIVE1MRGl2RWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNTVDQkE2QTIxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEVBNzlGNzBBMTkxNkRGMDBBOEVGNUYgLyogSFRNTERMaXN0
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk4RTUwODI0NUU1OTAwMUU5QUJDIC8q
IEhUTUxEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc3QjM4NjcxMjI4ODNFOTAwQjgx
RkY4IC8qIEhUTUxEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODM1OSw2ICsy
ODM3Myw3IEBACiAJCQkJQjIyMjc5OTMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0FuaW1hdGVNb3Rp
b25FbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk5NTBEMDBCRjIyMDA3MUI3ODIg
LyogU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3
OTk4MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdBbmltYXRpb25FbGVtZW50LmggaW4gSGVhZGVycyAq
LywKKwkJCQk1NTA0RTRDQjFEMzU1N0IyMDBGRTUwODggLyogQml0bWFwUGl4ZWxzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0MzlEMzM0NTEzQTY5MTFDMDBDMjBGNEYgLyogU1ZHQW5pbWF0b3JGYWN0
b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEZCM0Y4NDEzQkM3NTRDMDA5OUZDMTggLyogU1ZH
QXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5OUMwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR0NpcmNsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjk0
MTEsNyArMjk0MjYsNyBAQAogCQkJCUZEQzU0RjA0MTM5OUIwREEwMDhEOTExNyAvKiBCaXF1YWRG
aWx0ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MDI2MTJCMDI2NzYwMEMxQTM1
OSAvKiBCaXF1YWRQcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg5OTQzMjkwQjQy
MzM4ODAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTM3N0Ez
QTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTM3N0EzQTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTc2RDZDNzgxMjJCOEEzRDAwMUZEMUY3IC8qIEJsb2IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMkVERUYxRjMxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JEYXRhLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUUxRDMxQ0RDMTkxOTYwMjAwMDEwMDVBMyAvKiBCbG9iRGF0YUZp
bGVSZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTc3NCw2ICsyOTc4OSw3IEBACiAJ
CQkJMkUyRDk5RTgxMEUyQkMxQzAwNDk2MzM3IC8qIERPTUJsb2IubW0gaW4gU291cmNlcyAqLywK
IAkJCQk4NTA4OUNEODBBOThDNDI4MDBBMjc1QUEgLyogRE9NQ0RBVEFTZWN0aW9uLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJODVBQ0E5ODcwQTlCNTIwMzAwNjcxRTkwIC8qIERPTUNoYXJhY3RlckRh
dGEubW0gaW4gU291cmNlcyAqLywKKwkJCQk1NUNCQTZBMTFEMURGMkUxMDA0NTE4NjAgLyogSW1h
Z2VGcmFtZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODUwODlDREEwQTk4QzQyODAwQTI3
NUFBIC8qIERPTUNvbW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk5NzhEMDdCRTE0NUEwRjZD
MDA5NjkwOEQgLyogRE9NQ29yZUV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NThD
MzhBNjBBQThGMjA0MDBCMTg3QTQgLyogRE9NQ291bnRlci5tbSBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQppbmRleCA0MDExZWEzZmQ4YzA0Njk3NGM1NWQ0OGUz
OTZmMWI4M2I4MWYzMzVkLi5hNWFjNGYwNWFlMzM5YThkNjQ3MDZjMTBmYzBmN2FmNDA0MjU2MjNj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQpAQCAtNjA2LDcgKzYwNiw3IEBAIC0g
KHZvaWQpZ2V0UHJldmlld1NuYXBzaG90SW1hZ2U6KENHSW1hZ2VSZWYqKWNnSW1hZ2UgYW5kUmVj
dHM6KE5TQXJyYXkgKiopcmVjdHMKIAogICAgIGlmICh0ZXh0SW5kaWNhdG9yKSB7CiAgICAgICAg
IGlmIChJbWFnZSogaW1hZ2UgPSB0ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2UoKSkKLSAgICAg
ICAgICAgICpjZ0ltYWdlID0gKENHSW1hZ2VSZWYpQ0ZBdXRvcmVsZWFzZShDR0ltYWdlUmV0YWlu
KGltYWdlLT5nZXRDR0ltYWdlUmVmKCkpKTsKKyAgICAgICAgICAgICpjZ0ltYWdlID0gaW1hZ2Ut
Pm5hdGl2ZUltYWdlKCkuYXV0b3JlbGVhc2UoKTsKICAgICB9CiAKICAgICBSZXRhaW5QdHI8TlNN
dXRhYmxlQXJyYXk+IHJlY3RBcnJheSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdF0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRv
cldpbmRvdy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cu
bW0KaW5kZXggMzY0YTlhODdjZTZmMDY2Mzk0OGI4ODQ2ZThlMmNlNmQxOTBmMjQ4OS4uYTc0ZGE4
NWFjZWNhM2M2Njk4ZGQxNTZhYjMxYTZjOTcxYTM1NGU2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCkBAIC0xNjIsOSArMTYyLDkgQEAgLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSB0ZXh0SW5kaWNhdG9yOihQ
YXNzUmVmUHRyPFRleHRJbmRpY2EKICAgICBjb250ZW50c0ltYWdlTG9naWNhbFNpemUuc2NhbGUo
MSAvIF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VTY2FsZUZhY3RvcigpKTsKICAgICBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZTsKICAgICBpZiAoaW5kaWNhdG9yV2FudHND
b250ZW50Q3Jvc3NmYWRlKCpfdGV4dEluZGljYXRvcikpCi0gICAgICAgIGNvbnRlbnRzSW1hZ2Ug
PSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlV2l0aEhpZ2hsaWdodCgpLT5nZXRDR0ltYWdl
UmVmKCk7CisgICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudElt
YWdlV2l0aEhpZ2hsaWdodCgpLT5uYXRpdmVJbWFnZSgpOwogICAgIGVsc2UKLSAgICAgICAgY29u
dGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2UoKS0+Z2V0Q0dJbWFnZVJl
ZigpOworICAgICAgICBjb250ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFn
ZSgpLT5uYXRpdmVJbWFnZSgpOwogCiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBib3Vu
Y2VMYXllcnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKIApAQCAt
MjY1LDcgKzI2NSw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0FLZXlmcmFtZUFuaW1hdGlvbj4gY3Jl
YXRlQm91bmNlQW5pbWF0aW9uKENGVGltZUludGVydmFsIGR1cmF0CiBzdGF0aWMgUmV0YWluUHRy
PENBQmFzaWNBbmltYXRpb24+IGNyZWF0ZUNvbnRlbnRDcm9zc2ZhZGVBbmltYXRpb24oQ0ZUaW1l
SW50ZXJ2YWwgZHVyYXRpb24sIFRleHRJbmRpY2F0b3ImIHRleHRJbmRpY2F0b3IpCiB7CiAgICAg
UmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGNyb3NzZmFkZUFuaW1hdGlvbiA9IFtDQUJhc2lj
QW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAiY29udGVudHMiXTsKLSAgICBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZSA9IHRleHRJbmRpY2F0b3IuY29udGVudEltYWdl
KCktPmdldENHSW1hZ2VSZWYoKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJ
bWFnZSA9IHRleHRJbmRpY2F0b3IuY29udGVudEltYWdlKCktPm5hdGl2ZUltYWdlKCk7CiAgICAg
W2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRUb1ZhbHVlOihpZCljb250ZW50c0ltYWdlLmdldCgpXTsK
ICAgICBbY3Jvc3NmYWRlQW5pbWF0aW9uIHNldEZpbGxNb2RlOmtDQUZpbGxNb2RlRm9yd2FyZHNd
OwogICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0UmVtb3ZlZE9uQ29tcGxldGlvbjpOT107CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKaW5k
ZXggNDYwZDFiODU2Yjc3YjdjZjRlYzY4OTY1ODFiODMzZDNlN2Y5NzAxNC4uZmM2NDlkMTBhYWI5
YzEzZmZmMjkzMDU1YTcwN2NiNzQ1Mzc0NjkxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcApAQCAtNjgsMTUgKzY4LDEzIEBAIEJpdG1h
cEltYWdlOjpCaXRtYXBJbWFnZShOYXRpdmVJbWFnZVB0ciYmIGltYWdlLCBJbWFnZU9ic2VydmVy
KiBvYnNlcnZlcikKICAgICAsIG1faGF2ZUZyYW1lQ291bnQodHJ1ZSkKICAgICAsIG1fYW5pbWF0
aW9uRmluaXNoZWRXaGVuQ2F0Y2hpbmdVcChmYWxzZSkKIHsKKyAgICBtX2ZyYW1lcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KDEpOworICAgIG1fZnJhbWVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3Zl
KGltYWdlKSk7CisgICAgCiAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhIGRlY29kZXIsIHdl
IGNhbid0IGZpZ3VyZSBvdXQgdGhlIGltYWdlIG9yaWVudGF0aW9uLgogICAgIC8vIFNldCBtX3Np
emVSZXNwZWN0aW5nT3JpZW50YXRpb24gdG8gYmUgdGhlIHNhbWUgYXMgbV9zaXplIHNvIGl0J3Mg
bm90IDB4MC4KLSAgICBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBtX3NpemUgPSBOYXRp
dmVJbWFnZTo6c2l6ZShpbWFnZSk7CisgICAgbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uID0g
bV9zaXplID0gbV9mcmFtZXNbMF0uc2l6ZSgpOwogICAgIG1fZGVjb2RlZFNpemUgPSBtX3NpemUu
YXJlYSgpICogNDsKLSAgICAKLSAgICBtX2ZyYW1lcy5ncm93KDEpOwotICAgIG1fZnJhbWVzWzBd
Lm1faGFzQWxwaGEgPSBOYXRpdmVJbWFnZTo6aGFzQWxwaGEoaW1hZ2UpOwotICAgIG1fZnJhbWVz
WzBdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKLSAgICBtX2ZyYW1lc1swXS5tX2ltYWdlID0gV1RG
TW92ZShpbWFnZSk7CiB9CiAKIEJpdG1hcEltYWdlOjp+Qml0bWFwSW1hZ2UoKQpAQCAtMTA1LDcg
KzEwMyw3IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmhhdmVGcmFtZUltYWdlQXRJbmRleChzaXplX3Qg
aW5kZXgpCiAgICAgaWYgKGluZGV4ID49IG1fZnJhbWVzLnNpemUoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOworICAgIHJldHVy
biBtX2ZyYW1lc1tpbmRleF0uaGFzSW1hZ2UoKTsKIH0KIAogYm9vbCBCaXRtYXBJbWFnZTo6aGFz
U2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdApAQCAtMTI1LDkgKzEyMyw3IEBAIHZvaWQgQml0
bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGRlc3Ryb3lBbGwpCiAgICAgICAgIC8v
IFRoZSB1bmRlcmx5aW5nIGZyYW1lIGlzbid0IGFjdHVhbGx5IGNoYW5naW5nICh3ZSdyZSBqdXN0
IHRyeWluZyB0bwogICAgICAgICAvLyBzYXZlIHRoZSBtZW1vcnkgZm9yIHRoZSBmcmFtZWJ1ZmZl
ciBkYXRhKSwgc28gd2UgZG9uJ3QgbmVlZCB0byBjbGVhcgogICAgICAgICAvLyB0aGUgbWV0YWRh
dGEuCi0gICAgICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMgPSBtX2ZyYW1lc1tpXS5tX2ZyYW1lQnl0
ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1tpXS5jbGVhcihmYWxzZSkpCi0gICAgICAgICAgICBm
cmFtZUJ5dGVzQ2xlYXJlZCArPSBmcmFtZUJ5dGVzOworICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJl
ZCArPSBtX2ZyYW1lc1tpXS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEp
OwogICAgIH0KIAogICAgIG1fc291cmNlLmNsZWFyKGRlc3Ryb3lBbGwsIGNsZWFyQmVmb3JlRnJh
bWUsIGRhdGEoKSwgbV9hbGxEYXRhUmVjZWl2ZWQpOwpAQCAtMTUwLDggKzE0Niw4IEBAIHZvaWQg
Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KGJvb2wgZGVzdHJveUFs
bCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgYWxsRnJhbWVCeXRlcyA9IDA7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAg
YWxsRnJhbWVCeXRlcyArPSBtX2ZyYW1lc1tpXS51c2VkRnJhbWVCeXRlcygpOworICAgIGZvciAo
YXV0byYgZnJhbWUgOiBtX2ZyYW1lcykKKyAgICAgICAgYWxsRnJhbWVCeXRlcyArPSBmcmFtZS5m
cmFtZUJ5dGVzKCk7CiAKICAgICBpZiAoYWxsRnJhbWVCeXRlcyA+IGxhcmdlQW5pbWF0aW9uQ3V0
b2ZmKSB7CiAgICAgICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZSAlcCBkZXN0cm95RGVjb2Rl
ZERhdGFJZk5lY2Vzc2FyeSBkZXN0cm95aW5nRGF0YTogYWxsRnJhbWVCeXRlcz0ldSBjdXRvZmY9
JXUiLCB0aGlzLCBhbGxGcmFtZUJ5dGVzLCBsYXJnZUFuaW1hdGlvbkN1dG9mZik7CkBAIC0xNzcs
NyArMTczLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJveU1ldGFkYXRhQW5kTm90aWZ5KHVu
c2lnbmVkIGZyYW1lQnl0ZXNDbGVhcmVkLCBDbGVhcmVkU28KICAgICAgICAgaW1hZ2VPYnNlcnZl
cigpLT5kZWNvZGVkU2l6ZUNoYW5nZWQodGhpcywgLXNhZmVDYXN0PGludD4oZnJhbWVCeXRlc0Ns
ZWFyZWQpKTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgs
IFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZUNhY2hpbmcgZnJh
bWVDYWNoaW5nKQordm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgsIFN1
YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcg
Y2FjaGluZykKIHsKICAgICBzaXplX3QgbnVtRnJhbWVzID0gZnJhbWVDb3VudCgpOwogICAgIEFT
U0VSVChtX2RlY29kZWRTaXplID09IDAgfHwgbnVtRnJhbWVzID4gMSk7CkBAIC0xODUsMjUgKzE4
MSwxMiBAQCB2b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vic2Ft
cGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbQogICAgIGlmIChtX2ZyYW1lcy5zaXplKCkg
PCBudW1GcmFtZXMpCiAgICAgICAgIG1fZnJhbWVzLmdyb3cobnVtRnJhbWVzKTsKIAotICAgIGlm
IChmcmFtZUNhY2hpbmcgPT0gQ2FjaGVNZXRhZGF0YUFuZEZyYW1lKSB7Ci0gICAgICAgIG1fZnJh
bWVzW2luZGV4XS5tX2ltYWdlID0gbV9zb3VyY2UuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5k
ZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOwotICAgICAgICBtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1w
bGluZ0xldmVsID0gc3Vic2FtcGxpbmdMZXZlbDsKLSAgICB9Ci0KLSAgICBtX2ZyYW1lc1tpbmRl
eF0ubV9vcmllbnRhdGlvbiA9IG1fc291cmNlLm9yaWVudGF0aW9uQXRJbmRleChpbmRleCk7Ci0g
ICAgbV9mcmFtZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKLSAgICBtX2ZyYW1lc1tp
bmRleF0ubV9pc0NvbXBsZXRlID0gbV9zb3VyY2UuZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRl
eCk7CisgICAgbV9mcmFtZXNbaW5kZXhdID0gbV9zb3VyY2UuY3JlYXRlRnJhbWVEYXRhQXRJbmRl
eChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgY2FjaGluZyk7CiAKLSAgICBpZiAocmVwZXRpdGlv
bkNvdW50KGZhbHNlKSAhPSBjQW5pbWF0aW9uTm9uZSkKLSAgICAgICAgbV9mcmFtZXNbaW5kZXhd
Lm1fZHVyYXRpb24gPSBtX3NvdXJjZS5mcmFtZUR1cmF0aW9uQXRJbmRleChpbmRleCk7CisgICAg
TE9HKEltYWdlcywgIkJpdG1hcEltYWdlICVwIGNhY2hlRnJhbWUgJWx1ICglcyV1IGJ5dGVzLCBj
b21wbGV0ZSAlZCkiLCB0aGlzLCBpbmRleCwgY2FjaGluZyA9PSBJbWFnZUZyYW1lRGF0YTo6Q2Fj
aGluZzo6TWV0YWRhdGEgPyAibWV0YWRhdGEgb25seSwgIiA6ICIiLCBtX2ZyYW1lc1tpbmRleF0u
ZnJhbWVCeXRlcygpLCBtX2ZyYW1lc1tpbmRleF0uaXNDb21wbGV0ZSgpKTsKIAotICAgIG1fZnJh
bWVzW2luZGV4XS5tX2hhc0FscGhhID0gbV9zb3VyY2UuZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5k
ZXgpOwotICAgIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXMgPSBtX3NvdXJjZS5mcmFtZUJ5
dGVzQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7Ci0KLSAgICBMT0coSW1hZ2VzLCAi
Qml0bWFwSW1hZ2UgJXAgY2FjaGVGcmFtZSAlbHUgKCVzJXUgYnl0ZXMsIGNvbXBsZXRlICVkKSIs
IHRoaXMsIGluZGV4LCBmcmFtZUNhY2hpbmcgPT0gQ2FjaGVNZXRhZGF0YU9ubHkgPyAibWV0YWRh
dGEgb25seSwgIiA6ICIiLCBtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZUJ5dGVzLCBtX2ZyYW1lc1tp
bmRleF0ubV9pc0NvbXBsZXRlKTsKLQotICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkg
ewotICAgICAgICBpbnQgZGVsdGFCeXRlcyA9IHNhZmVDYXN0PGludD4obV9mcmFtZXNbaW5kZXhd
Lm1fZnJhbWVCeXRlcyk7CisgICAgaWYgKG1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpKSB7Cisg
ICAgICAgIGludCBkZWx0YUJ5dGVzID0gc2FmZUNhc3Q8aW50PihtX2ZyYW1lc1tpbmRleF0uZnJh
bWVCeXRlcygpKTsKICAgICAgICAgbV9kZWNvZGVkU2l6ZSArPSBkZWx0YUJ5dGVzOwogICAgICAg
ICAvLyBUaGUgZnVsbHktZGVjb2RlZCBmcmFtZSB3aWxsIHN1YnN1bWUgdGhlIHBhcnRpYWxseSBk
ZWNvZGVkIGRhdGEgdXNlZAogICAgICAgICAvLyB0byBkZXRlcm1pbmUgaW1hZ2UgcHJvcGVydGll
cy4KQEAgLTI4OCwyMSArMjcxLDE5IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKGJv
b2wgYWxsRGF0YVJlY2VpdmVkKQogICAgIC8vIGZyYW1lIGFmZmVjdGVkIGJ5IGFwcGVuZGluZyBu
ZXcgZGF0YSBoZXJlLiBUaHVzIHdlIGhhdmUgdG8gY2xlYXIgYWxsIHRoZQogICAgIC8vIGluY29t
cGxldGUgZnJhbWVzIHRvIGJlIHNhZmUuCiAgICAgdW5zaWduZWQgZnJhbWVCeXRlc0NsZWFyZWQg
PSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmFtZXMuc2l6ZSgpOyArK2kpIHsK
KyAgICBmb3IgKGF1dG8mIGZyYW1lIDogbV9mcmFtZXMpIHsKICAgICAgICAgLy8gTk9URTogRG9u
J3QgY2FsbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KCkgaGVyZSwgdGhhdCB3aWxsIHRyeSB0bwog
ICAgICAgICAvLyBkZWNvZGUgYW55IHVuY2FjaGVkIChpLmUuIG5ldmVyLWRlY29kZWQgb3IKICAg
ICAgICAgLy8gY2xlYXJlZC1vbi1hLXByZXZpb3VzLXBhc3MpIGZyYW1lcyEKLSAgICAgICAgdW5z
aWduZWQgZnJhbWVCeXRlcyA9IG1fZnJhbWVzW2ldLm1fZnJhbWVCeXRlczsKLSAgICAgICAgaWYg
KG1fZnJhbWVzW2ldLm1faGF2ZU1ldGFkYXRhICYmICFtX2ZyYW1lc1tpXS5tX2lzQ29tcGxldGUp
Ci0gICAgICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSAobV9mcmFtZXNbaV0uY2xlYXIodHJ1
ZSkgPyBmcmFtZUJ5dGVzIDogMCk7CisgICAgICAgIGlmIChmcmFtZS5oYXNNZXRhZGF0YSgpICYm
ICFmcmFtZS5pc0NvbXBsZXRlKCkpCisgICAgICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSBm
cmFtZS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6RW1wdHkpOwogICAgIH0KICAgICBk
ZXN0cm95TWV0YWRhdGFBbmROb3RpZnkoZnJhbWVCeXRlc0NsZWFyZWQsIENsZWFyZWRTb3VyY2U6
Ok5vKTsKICNlbHNlCiAgICAgLy8gRklYTUU6IHdoeSBpcyB0aGlzIGRpZmZlcmVudCBmb3IgaU9T
PwogICAgIGludCBkZWx0YUJ5dGVzID0gMDsKICAgICBpZiAoIW1fZnJhbWVzLmlzRW1wdHkoKSkg
ewotICAgICAgICBpbnQgYnl0ZXMgPSBtX2ZyYW1lc1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5tX2Zy
YW1lQnl0ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5jbGVh
cih0cnVlKSkgeworICAgICAgICBpZiAoaW50IGJ5dGVzID0gbV9mcmFtZXNbbV9mcmFtZXMuc2l6
ZSgpIC0gMV0uY2xlYXIoSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6OkVtcHR5KSkgewogICAgICAg
ICAgICAgZGVsdGFCeXRlcyArPSBieXRlczsKICAgICAgICAgICAgIGRlbHRhQnl0ZXMgKz0gbV9k
ZWNvZGVkUHJvcGVydGllc1NpemU7CiAgICAgICAgICAgICBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6
ZSA9IDA7CkBAIC0zNjYsMTUgKzM0NywxNSBAQCBib29sIEJpdG1hcEltYWdlOjppc1NpemVBdmFp
bGFibGUoKQogICAgIHJldHVybiBtX3NpemVBdmFpbGFibGU7CiB9CiAKLWJvb2wgQml0bWFwSW1h
Z2U6OmVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4LCBJbWFnZUZyYW1lQ2FjaGluZyBm
cmFtZUNhY2hpbmcpCitib29sIEJpdG1hcEltYWdlOjplbnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVf
dCBpbmRleCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgY2FjaGluZykKIHsKICAgICBpZiAoaW5k
ZXggPj0gZnJhbWVDb3VudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoaW5k
ZXggPj0gbV9mcmFtZXMuc2l6ZSgpCi0gICAgICAgIHx8IChmcmFtZUNhY2hpbmcgPT0gQ2FjaGVN
ZXRhZGF0YUFuZEZyYW1lICYmICFtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKLSAgICAgICAgfHwg
KGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhT25seSAmJiAhbV9mcmFtZXNbaW5kZXhdLm1f
aGF2ZU1ldGFkYXRhKSkKLSAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgMCwgZnJhbWVDYWNoaW5n
KTsKKyAgICAgICAgfHwgKGNhY2hpbmcgPT0gSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFk
YXRhQW5kSW1hZ2UgJiYgIW1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpKQorICAgICAgICB8fCAo
Y2FjaGluZyA9PSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEgJiYgIW1fZnJhbWVz
W2luZGV4XS5oYXNNZXRhZGF0YSgpKSkKKyAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgMCwgY2Fj
aGluZyk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM4OCwxMCArMzY5LDkgQEAgTmF0aXZl
SW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgZmxv
YXQgcHJlc2VudGF0aW9uU2MKIAogICAgIC8vIFdlIG1heSBoYXZlIGNhY2hlZCBhIGZyYW1lIHdp
dGggYSBoaWdoZXIgc3Vic2FtcGxpbmcgbGV2ZWwsIGluIHdoaWNoIGNhc2Ugd2UgbmVlZCB0bwog
ICAgIC8vIHJlLWRlY29kZSB3aXRoIGEgbG93ZXIgbGV2ZWwuCi0gICAgaWYgKGluZGV4IDwgbV9m
cmFtZXMuc2l6ZSgpICYmIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlICYmIHN1YnNhbXBsaW5nTGV2
ZWwgPCBtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1wbGluZ0xldmVsKSB7CisgICAgaWYgKGluZGV4
IDwgbV9mcmFtZXMuc2l6ZSgpICYmIG1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpICYmIHN1YnNh
bXBsaW5nTGV2ZWwgPCBtX2ZyYW1lc1tpbmRleF0uc3Vic2FtcGxpbmdMZXZlbCgpKSB7CiAgICAg
ICAgIC8vIElmIHRoZSBpbWFnZSBpcyBhbHJlYWR5IGNhY2hlZCwgYnV0IGF0IHRvbyBzbWFsbCBh
IHNpemUsIHJlLWRlY29kZSBhIGxhcmdlciB2ZXJzaW9uLgotICAgICAgICBpbnQgc2l6ZUNoYW5n
ZSA9IC1tX2ZyYW1lc1tpbmRleF0ubV9mcmFtZUJ5dGVzOwotICAgICAgICBtX2ZyYW1lc1tpbmRl
eF0uY2xlYXIodHJ1ZSk7CisgICAgICAgIGludCBzaXplQ2hhbmdlID0gLW1fZnJhbWVzW2luZGV4
XS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6RW1wdHkpOwogICAgICAgICBpbnZhbGlk
YXRlUGxhdGZvcm1EYXRhKCk7CiAgICAgICAgIG1fZGVjb2RlZFNpemUgKz0gc2l6ZUNoYW5nZTsK
ICAgICAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKQEAgLTM5OSw0MCArMzc5LDcyIEBAIE5hdGl2
ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIGZs
b2F0IHByZXNlbnRhdGlvblNjCiAgICAgfQogCiAgICAgLy8gSWYgd2UgaGF2ZW4ndCBmZXRjaGVk
IGEgZnJhbWUgeWV0LCBkbyBzby4KLSAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8
ICFtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKLSAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgc3Vi
c2FtcGxpbmdMZXZlbCwgQ2FjaGVNZXRhZGF0YUFuZEZyYW1lKTsKKyAgICBpZiAoaW5kZXggPj0g
bV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0uaGFzSW1hZ2UoKSkKKyAgICAgICAg
Y2FjaGVGcmFtZShpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hp
bmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOworCisgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5pbWFn
ZSgpOworfQorICAgIAorTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKCkK
K3sKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCk7Cit9CisgICAgCitOYXRpdmVJbWFn
ZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkK
K3sKKyAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7CisgICAgCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGF1dG8gaW1hZ2UgPSBmcmFtZUlt
YWdlQXRJbmRleChpKTsKKyAgICAgICAgaWYgKGltYWdlICYmIFBsYXRmb3JtSW1hZ2UoaW1hZ2Up
LnNpemUoKSA9PSBzaXplKQorICAgICAgICAgICAgcmV0dXJuIGltYWdlOworICAgIH0KKyAgICAK
KyAgICAvLyBGYWxsYmFjayB0byB0aGUgZmlyc3QgZnJhbWUgaW1hZ2UgaWYgd2UgY2FuJ3QgZmlu
ZCB0aGUgcmlnaHQgc2l6ZQorICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKTsKK30KKyAg
ICAKK05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpCit7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKK30K
IAotICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZTsKK1ZlY3RvcjxOYXRpdmVJbWFn
ZVB0cj4gQml0bWFwSW1hZ2U6OmZyYW1lc05hdGl2ZUltYWdlcygpCit7CisgICAgVmVjdG9yPE5h
dGl2ZUltYWdlUHRyPiBpbWFnZXM7CisgICAgc2l6ZV90IGNvdW50ID0gZnJhbWVDb3VudCgpOwor
ICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBp
ZiAoYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpKQorICAgICAgICAgICAgaW1hZ2Vz
LmFwcGVuZChpbWFnZSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBpbWFnZXM7CiB9CiAKIGJv
b2wgQml0bWFwSW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogewot
ICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQor
ICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hp
bmc6Ok1ldGFkYXRhKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG1fZnJh
bWVzW2luZGV4XS5tX2lzQ29tcGxldGU7CisgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5pc0Nv
bXBsZXRlKCk7CiB9CiAKIGZsb2F0IEJpdG1hcEltYWdlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChz
aXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBDYWNo
ZU1ldGFkYXRhT25seSkpCisgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBJbWFn
ZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEpKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9kdXJhdGlvbjsKLX0KLQotTmF0aXZlSW1hZ2VQdHIg
Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKLXsKLSAgICByZXR1cm4g
ZnJhbWVJbWFnZUF0SW5kZXgoY3VycmVudEZyYW1lKCkpOworICAgIHJldHVybiBtX2ZyYW1lc1tp
bmRleF0uZHVyYXRpb24oKTsKIH0KIAogYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVIYXNBbHBoYUF0
SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRl
eCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQorICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRl
eCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBpZiAobV9mcmFtZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRhKQotICAgICAgICBy
ZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faGFzQWxwaGE7CisgICAgaWYgKG1fZnJhbWVzW2luZGV4
XS5oYXNNZXRhZGF0YSgpKQorICAgICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLmhhc0FscGhh
KCk7CiAKICAgICByZXR1cm4gbV9zb3VyY2UuZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5kZXgpOwog
fQpAQCAtNDQ0LDExICs0NTYsMTEgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Y3VycmVudEZyYW1lS25v
d25Ub0JlT3BhcXVlKCkKIAogSW1hZ2VPcmllbnRhdGlvbiBCaXRtYXBJbWFnZTo6ZnJhbWVPcmll
bnRhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICghZW5zdXJlRnJhbWVJc0Nh
Y2hlZChpbmRleCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQorICAgIGlmICghZW5zdXJlRnJhbWVJc0Nh
Y2hlZChpbmRleCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhKSkKICAgICAgICAg
cmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsKIAotICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9o
YXZlTWV0YWRhdGEpCi0gICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9vcmllbnRhdGlv
bjsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhdLmhhc01ldGFkYXRhKCkpCisgICAgICAgIHJldHVy
biBtX2ZyYW1lc1tpbmRleF0ub3JpZW50YXRpb24oKTsKIAogICAgIHJldHVybiBtX3NvdXJjZS5v
cmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOwogfQpAQCAtNzAwLDE3ICs3MTIsNTYgQEAgQ29sb3Ig
Qml0bWFwSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcigpCiAgICAgICAgIHJldHVybiBDb2xv
cigpOwogICAgIAogICAgIEFTU0VSVChtX2ZyYW1lcy5zaXplKCkpOwotICAgIG1fc29saWRDb2xv
ciA9IE5hdGl2ZUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IobV9mcmFtZXNbMF0ubV9pbWFn
ZS5nZXQoKSk7CisgICAgbV9zb2xpZENvbG9yID0gbV9mcmFtZXNbMF0uc2luZ2xlUGl4ZWxTb2xp
ZENvbG9yKCk7CiAgICAgCiAgICAgQVNTRVJUKG1fc29saWRDb2xvcik7CiAgICAgcmV0dXJuIG1f
c29saWRDb2xvci52YWx1ZSgpOwogfQogICAgIAorYm9vbCBCaXRtYXBJbWFnZTo6aXNBbG1vc3RT
b2xpZENvbG9yKCkKK3sKKyAgICBpZiAoZnJhbWVDb3VudCgpICE9IDEpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiBlbnN1cmVGcmFtZUlzQ2FjaGVkKDApICYmIG1fZnJhbWVz
WzBdLmlzQWxtb3N0U29saWRDb2xvcigpOworfQorICAgIAogYm9vbCBCaXRtYXBJbWFnZTo6Y2Fu
QW5pbWF0ZSgpCiB7CiAgICAgcmV0dXJuIHNob3VsZEFuaW1hdGUoKSAmJiBmcmFtZUNvdW50KCkg
PiAxOwogfQogCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBD
b21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUsIEltYWdlT3JpZW50YXRpb25EZXNj
cmlwdGlvbiBkZXNjcmlwdGlvbikKK3sKKyAgICBpZiAoZGVzdFJlY3QuaXNFbXB0eSgpIHx8IHNy
Y1JlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgc3RhcnRBbmltYXRpb24oRG9Ob3RDYXRjaFVwKTsKKyNlbHNlCisgICAgc3RhcnRBbmltYXRp
b24oKTsKKyNlbmRpZgorICAgIAorICAgIENvbG9yIGNvbG9yID0gc2luZ2xlUGl4ZWxTb2xpZENv
bG9yKCk7CisgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICBmaWxsV2l0aFNvbGlk
Q29sb3IoY29udGV4dCwgZGVzdFJlY3QsIGNvbG9yLCBvcCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZy
YW1lLCBQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKGNvbnRleHQsIGRlc3RSZWN0LCBz
cmNSZWN0KSk7CisgICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3Qg
aGF2ZSBhbiBpbWFnZSB5ZXQuCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBJbWFnZU9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKGRlc2NyaXB0aW9uLmltYWdlT3JpZW50YXRpb24oKSk7CisgICAg
aWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdl
T3JpZW50YXRpb24pCisgICAgICAgIG9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5k
ZXgobV9jdXJyZW50RnJhbWUpOworICAgIAorICAgIFBsYXRmb3JtSW1hZ2UoaW1hZ2UpLmRyYXco
Y29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG1fc2l6ZSwgb3AsIG1vZGUsIG9yaWVudGF0aW9u
KTsKKyAgICAKKyAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQorICAgICAgICBpbWFnZU9ic2VydmVy
KCktPmRpZERyYXcodGhpcyk7Cit9CisgICAgCiB2b2lkIEJpdG1hcEltYWdlOjpkdW1wKFRleHRT
dHJlYW0mIHRzKSBjb25zdAogewogICAgIEltYWdlOjpkdW1wKHRzKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCmluZGV4IDA3NTg5MjljZDg3ZmFk
YWNmMDJiNmVkOGVlYWZlN2RlZmQ2NmYwYzUuLjIyMThjODI0YjUyOGZkNjM5YmFiMTM4ZGVjYzk4
Yjk4MTZhMTY4MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuaApAQCAtMjgsMTEgKzI4LDEzIEBACiAjaWZuZGVmIEJpdG1hcEltYWdlX2gKICNk
ZWZpbmUgQml0bWFwSW1hZ2VfaAogCi0jaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJDb2xv
ci5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2VGcmFtZURhdGEuaCIKICNp
bmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKICNp
bmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgogCiAjaWYgVVNF
KENHKSB8fCBVU0UoQVBQS0lUKQogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTQ3LDYz
ICs0OSw5IEBAIHR5cGVkZWYgc3RydWN0IEhCSVRNQVBfXyAqSEJJVE1BUDsKICNlbmRpZgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgc3RydWN0IEZyYW1lRGF0YTsKLX0KLQotbmFtZXNwYWNl
IFdURiB7Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgVmVjdG9yVHJhaXRzPFdlYkNvcmU6OkZyYW1l
RGF0YT4gOiBwdWJsaWMgU2ltcGxlQ2xhc3NWZWN0b3JUcmFpdHMgewotICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBjYW5Jbml0aWFsaXplV2l0aE1lbXNldCA9IGZhbHNlOyAvLyBOb3QgYWxsIEZy
YW1lRGF0YSBtZW1iZXJzIGluaXRpYWxpemUgdG8gMC4KLSAgICB9OwotfQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIFRpbWVyOwogCi1uYW1lc3BhY2UgTmF0aXZlSW1hZ2UgewotICAg
IEludFNpemUgc2l6ZShjb25zdCBOYXRpdmVJbWFnZVB0ciYpOwotICAgIGJvb2wgaGFzQWxwaGEo
Y29uc3QgTmF0aXZlSW1hZ2VQdHImKTsKLSAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3Io
Y29uc3QgTmF0aXZlSW1hZ2VQdHImKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBGcmFtZURhdGEgQ2xhc3MKLS8vID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdHJ1Y3QgRnJhbWVE
YXRhIHsKLXB1YmxpYzoKLSAgICBGcmFtZURhdGEoKQotICAgICAgICA6IG1faGF2ZU1ldGFkYXRh
KGZhbHNlKQotICAgICAgICAsIG1faXNDb21wbGV0ZShmYWxzZSkKLSAgICAgICAgLCBtX2hhc0Fs
cGhhKHRydWUpCi0gICAgewotICAgIH0KLQotICAgIH5GcmFtZURhdGEoKQotICAgIHsgCi0gICAg
ICAgIGNsZWFyKHRydWUpOwotICAgIH0KLQotICAgIC8vIENsZWFyIHRoZSBjYWNoZWQgaW1hZ2Ug
ZGF0YSBvbiB0aGUgZnJhbWUsIGFuZCAob3B0aW9uYWxseSkgdGhlIG1ldGFkYXRhLgotICAgIC8v
IFJldHVybnMgd2hldGhlciB0aGVyZSB3YXMgY2FjaGVkIGltYWdlIGRhdGEgdG8gY2xlYXIuCi0g
ICAgYm9vbCBjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpOwotICAgIAotICAgIHVuc2lnbmVkIHVz
ZWRGcmFtZUJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZSA/IG1fZnJhbWVCeXRlcyA6IDA7
IH0KLQotICAgIE5hdGl2ZUltYWdlUHRyIG1faW1hZ2U7Ci0gICAgSW1hZ2VPcmllbnRhdGlvbiBt
X29yaWVudGF0aW9uIHsgRGVmYXVsdEltYWdlT3JpZW50YXRpb24gfTsKLSAgICBTdWJzYW1wbGlu
Z0xldmVsIG1fc3Vic2FtcGxpbmdMZXZlbCB7IDAgfTsKLSAgICBmbG9hdCBtX2R1cmF0aW9uIHsg
MCB9OwotICAgIGJvb2wgbV9oYXZlTWV0YWRhdGEgOiAxOwotICAgIGJvb2wgbV9pc0NvbXBsZXRl
IDogMTsKLSAgICBib29sIG1faGFzQWxwaGEgOiAxOwotICAgIHVuc2lnbmVkIG1fZnJhbWVCeXRl
cyB7IDAgfTsKLX07Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS8vIEJpdG1hcEltYWdlIENsYXNzCi0vLyA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KIGNsYXNzIEJpdG1hcEltYWdlIGZpbmFs
IDogcHVibGljIEltYWdlIHsKICAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7CiAgICAg
ZnJpZW5kIGNsYXNzIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOwpAQCAtMTU1LDEyICsxMDMsNiBA
QCBwdWJsaWM6CiAgICAgQ0ZEYXRhUmVmIGdldFRJRkZSZXByZXNlbnRhdGlvbigpIG92ZXJyaWRl
OwogI2VuZGlmCiAKLSNpZiBVU0UoQ0cpCi0gICAgV0VCQ09SRV9FWFBPUlQgQ0dJbWFnZVJlZiBn
ZXRDR0ltYWdlUmVmKCkgb3ZlcnJpZGU7Ci0gICAgQ0dJbWFnZVJlZiBnZXRGaXJzdENHSW1hZ2VS
ZWZPZlNpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwotICAgIFJldGFpblB0cjxDRkFycmF5
UmVmPiBnZXRDR0ltYWdlQXJyYXkoKSBvdmVycmlkZTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0o
V0lOKQogICAgIGJvb2wgZ2V0SEJJVE1BUChIQklUTUFQKSBvdmVycmlkZTsKICAgICBib29sIGdl
dEhCSVRNQVBPZlNpemUoSEJJVE1BUCwgY29uc3QgSW50U2l6ZSopIG92ZXJyaWRlOwpAQCAtMTc0
LDggKzExNiwxMyBAQCBwdWJsaWM6CiAgICAgRXZhc19PYmplY3QqIGdldEV2YXNPYmplY3QoRXZh
cyopIG92ZXJyaWRlOwogI2VuZGlmCiAKKyAgICBXRUJDT1JFX0VYUE9SVCBOYXRpdmVJbWFnZVB0
ciBuYXRpdmVJbWFnZSgpIG92ZXJyaWRlOworICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdl
T2ZTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKICAgICBOYXRpdmVJbWFnZVB0ciBuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIG92ZXJyaWRlOwogICAgIEltYWdlT3JpZW50YXRpb24g
b3JpZW50YXRpb25Gb3JDdXJyZW50RnJhbWUoKSBvdmVycmlkZSB7IHJldHVybiBmcmFtZU9yaWVu
dGF0aW9uQXRJbmRleChjdXJyZW50RnJhbWUoKSk7IH0KKyAgICBWZWN0b3I8TmF0aXZlSW1hZ2VQ
dHI+IGZyYW1lc05hdGl2ZUltYWdlcygpIG92ZXJyaWRlOworICAgIAorICAgIFdFQkNPUkVfRVhQ
T1JUIGJvb2wgaXNBbG1vc3RTb2xpZENvbG9yKCk7CiAKICAgICBib29sIGN1cnJlbnRGcmFtZUtu
b3duVG9CZU9wYXF1ZSgpIG92ZXJyaWRlOwogCkBAIC0yMTUsNyArMTYyLDYgQEAgcHJvdGVjdGVk
OgogICAgIHNpemVfdCBmcmFtZUNvdW50KCk7CiAKICAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUlt
YWdlQXRJbmRleChzaXplX3QsIGZsb2F0IHByZXNlbnRhdGlvblNjYWxlSGludCA9IDEpOwotICAg
IE5hdGl2ZUltYWdlUHRyIGNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCk7CiAK
ICAgICBib29sIGhhdmVGcmFtZUltYWdlQXRJbmRleChzaXplX3QpOwogCkBAIC0yMjUsMTEgKzE3
MSwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBmcmFtZU9yaWVudGF0aW9u
QXRJbmRleChzaXplX3QpOwogCiAgICAgLy8gRGVjb2RlcyBhbmQgY2FjaGVzIGEgZnJhbWUuIE5l
dmVyIGFjY2Vzc2VkIGV4Y2VwdCBpbnRlcm5hbGx5LgotICAgIGVudW0gSW1hZ2VGcmFtZUNhY2hp
bmcgeyBDYWNoZU1ldGFkYXRhT25seSwgQ2FjaGVNZXRhZGF0YUFuZEZyYW1lIH07Ci0gICAgdm9p
ZCBjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZUNh
Y2hpbmcgPSBDYWNoZU1ldGFkYXRhQW5kRnJhbWUpOworICAgIHZvaWQgY2FjaGVGcmFtZShzaXpl
X3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nID0gSW1h
Z2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOwogCiAgICAgLy8gQ2FsbGVk
IGJlZm9yZSBhY2Nlc3NpbmcgbV9mcmFtZXNbaW5kZXhdIGZvciBpbmZvIHdpdGhvdXQgZGVjb2Rp
bmcuIFJldHVybnMgZmFsc2Ugb24gaW5kZXggb3V0IG9mIGJvdW5kcy4KLSAgICBib29sIGVuc3Vy
ZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4LCBJbWFnZUZyYW1lQ2FjaGluZyA9IENhY2hlTWV0
YWRhdGFBbmRGcmFtZSk7CisgICAgYm9vbCBlbnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVfdCBpbmRl
eCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgPSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0
YWRhdGFBbmRJbWFnZSk7CiAKICAgICAvLyBDYWxsZWQgdG8gaW52YWxpZGF0ZSBjYWNoZWQgZGF0
YS4gV2hlbiB8ZGVzdHJveUFsbHwgaXMgdHJ1ZSwgd2Ugd2lwZSBvdXQKICAgICAvLyB0aGUgZW50
aXJlIGZyYW1lIGJ1ZmZlciBjYWNoZSBhbmQgdGVsbCB0aGUgaW1hZ2Ugc291cmNlIHRvIGRlc3Ry
b3kKQEAgLTI5Miw3ICsyMzcsNyBAQCBwcml2YXRlOgogICAgIG11dGFibGUgSW50U2l6ZSBtX3Np
emVSZXNwZWN0aW5nT3JpZW50YXRpb247CiAKICAgICBzaXplX3QgbV9jdXJyZW50RnJhbWUgeyAw
IH07IC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBmcmFtZSBvZiBhbmltYXRpb24uCi0gICAg
VmVjdG9yPEZyYW1lRGF0YSwgMT4gbV9mcmFtZXM7IC8vIEFuIGFycmF5IG9mIHRoZSBjYWNoZWQg
ZnJhbWVzIG9mIHRoZSBhbmltYXRpb24uIFdlIGhhdmUgdG8gcmVmIGZyYW1lcyB0byBwaW4gdGhl
bSBpbiB0aGUgY2FjaGUuCisgICAgVmVjdG9yPEltYWdlRnJhbWVEYXRhLCAxPiBtX2ZyYW1lczsg
Ly8gQW4gYXJyYXkgb2YgdGhlIGNhY2hlZCBmcmFtZXMgb2YgdGhlIGFuaW1hdGlvbi4gV2UgaGF2
ZSB0byByZWYgZnJhbWVzIHRvIHBpbiB0aGVtIGluIHRoZSBjYWNoZS4KIAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxUaW1lcj4gbV9mcmFtZVRpbWVyOwogICAgIGludCBtX3JlcGV0aXRpb25Db3VudCB7
IGNBbmltYXRpb25Ob25lIH07IC8vIEhvdyBtYW55IHRvdGFsIGFuaW1hdGlvbiBsb29wcyB3ZSBz
aG91bGQgZG8uIFRoaXMgd2lsbCBiZSBjQW5pbWF0aW9uTm9uZSBpZiB0aGlzIGltYWdlIHR5cGUg
aXMgaW5jYXBhYmxlIG9mIGFuaW1hdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwUGl4ZWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTY4MWU0YTZjNGNjMDlmZTk0YmRk
ODE0NWQxMDRiZjBiZmQyZTlmMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oCkBAIC0wLDAgKzEsMTczIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6
ZS5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQml0bWFwUGl4ZWxzIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gY3JlYXRlKGNvbnN0
IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPEJpdG1hcFBpeGVscz4oc2l6ZSwgcHJlbXVsdGlwbHlBbHBo
YSk7CisgICAgfQorCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxCaXRtYXBQaXhlbHM+IGNy
ZWF0ZShjb25zdCBCaXRtYXBQaXhlbHMmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8Qml0bWFwUGl4ZWxzPihvdGhlcik7CisgICAgfQorCisgICAgQml0bWFw
UGl4ZWxzKGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSA9IHRydWUp
CisgICAgICAgIDogbV9wcmVtdWx0aXBseUFscGhhKHByZW11bHRpcGx5QWxwaGEpCisgICAgewor
ICAgICAgICBBU1NFUlQoIXNpemUuaXNFbXB0eSgpKTsKKyAgICAgICAgc2V0U2l6ZShzaXplKTsK
KyAgICB9CisKKyAgICBCaXRtYXBQaXhlbHMoY29uc3QgQml0bWFwUGl4ZWxzJiBvdGhlcikKKyAg
ICB7CisgICAgICAgIGlmICh0aGlzID09ICZvdGhlcikKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgICAgIG1fYmFja2luZ1N0b3JlID0gb3RoZXIubV9iYWNraW5nU3RvcmU7Cisg
ICAgICAgIG1fcGl4ZWxzID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOworICAgICAgICBtX3NpemUg
PSBvdGhlci5tX3NpemU7CisgICAgICAgIG1fcHJlbXVsdGlwbHlBbHBoYSA9IG90aGVyLm1fcHJl
bXVsdGlwbHlBbHBoYTsKKyAgICB9CisKKyAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBt
X3NpemUud2lkdGgoKTsgfQorICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUu
aGVpZ2h0KCk7IH0KKworICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlKCkgY29uc3Q7CisKKyAgICBi
b29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAgIGlmICghbV9i
YWNraW5nU3RvcmUudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUuYXJlYSgpKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIG1fYmFja2luZ1N0b3JlLnJlc2l6ZShz
aXplLmFyZWEoKSk7CisgICAgICAgIG1fcGl4ZWxzID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOwor
ICAgICAgICBtX3NpemUgPSBzaXplOworICAgICAgICBjbGVhcigpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBSR0JBMzIqIGF0KGludCB4LCBpbnQgeSkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3BpeGVscyArIHkgKiBtX3NpemUud2lkdGgoKSArIHg7CisgICAg
fQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtZW1zZXQobV9waXhlbHMsIDAs
IG1fc2l6ZS5hcmVhKCkgKiBzaXplb2YoUkdCQTMyKSk7CisgICAgfQorCisgICAgdm9pZCBjbGVh
clJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIGlmIChyZWN0LmlzRW1w
dHkoKSB8fCBpbkJvdW5kcyhyZWN0KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgIHNpemVfdCByZWN0V2lkdGhJbkJ5dGVzID0gcmVjdC53aWR0aCgpICogc2l6ZW9mKFJH
QkEzMik7CisgICAgICAgIFJHQkEzMiogc3RhcnQgPSBhdChyZWN0LngoKSwgcmVjdC55KCkpOwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QuaGVpZ2h0KCk7ICsraSkgeworICAgICAg
ICAgICAgbWVtc2V0KHN0YXJ0LCAwLCByZWN0V2lkdGhJbkJ5dGVzKTsKKyAgICAgICAgICAgIHN0
YXJ0ICs9IG1fc2l6ZS53aWR0aCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCByZXBl
YXRGaXJzdFJvdyhjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHJlY3Qu
aXNFbXB0eSgpIHx8IGluQm91bmRzKHJlY3QpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkgKiBzaXpl
b2YoUkdCQTMyKTsKKyAgICAgICAgUkdCQTMyKiBzcmMgPSBhdChyZWN0LngoKSwgcmVjdC55KCkp
OworICAgICAgICBSR0JBMzIqIGRlc3QgPSBzcmMgKyBtX3NpemUud2lkdGgoKTsKKyAgICAgICAg
Zm9yIChpbnQgaSA9IDE7IGkgPCByZWN0LmhlaWdodCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1l
bWNweShkZXN0LCBzcmMsIHJlY3RXaWR0aEluQnl0ZXMpOworICAgICAgICAgICAgZGVzdCArPSBt
X3NpemUud2lkdGgoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgc2V0UkdCQShpbnQg
eCwgaW50IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEp
CisgICAgeworICAgICAgICBzZXRSR0JBKGF0KHgsIHkpLCByLCBnLCBiLCBhKTsKKyAgICB9CisK
KyAgICB2b2lkIHNldFJHQkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1
bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5
QWxwaGEgfHwgYSA+PSAyNTUpCisgICAgICAgICAgICAqZGVzdCA9IG1ha2VSR0JBKHIsIGcsIGIs
IGEpOworICAgICAgICBlbHNlIGlmICghYSkKKyAgICAgICAgICAgICpkZXN0ID0gMDsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgKmRlc3QgPSBtYWtlUHJlbXVsdGlwbGllZFJHQkEociwgZywg
YiwgYSk7CisgICAgfQorCisgICAgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVk
IHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAgeworICAgICAgICBp
ZiAoIWEpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoYSA+PSAy
NTUgfHwgIWFscGhhQ2hhbm5lbCgqZGVzdCkpIHsKKyAgICAgICAgICAgIHNldFJHQkEoZGVzdCwg
ciwgZywgYiwgYSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKQorICAgICAgICAgICAgKmRlc3QgPSBtYWtl
UHJlbXVsdGlwbGllZFJHQkEocmVkQ2hhbm5lbCgqZGVzdCksIGdyZWVuQ2hhbm5lbCgqZGVzdCks
IGJsdWVDaGFubmVsKCpkZXN0KSwgYWxwaGFDaGFubmVsKCpkZXN0KSk7CisgICAgICAgIAorICAg
ICAgICBSR0JBMzIgc3JjID0gbWFrZVJHQkEociwgZywgYiwgYSk7CisgICAgICAgICpkZXN0ID0g
Q29sb3IoKmRlc3QpLmJsZW5kKHNyYykucmdiKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIW1f
cHJlbXVsdGlwbHlBbHBoYSkKKyAgICAgICAgICAgICpkZXN0ID0gbWFrZVVuUHJlbXVsdGlwbGll
ZFJHQkEocmVkQ2hhbm5lbCgqZGVzdCksIGdyZWVuQ2hhbm5lbCgqZGVzdCksIGJsdWVDaGFubmVs
KCpkZXN0KSwgYWxwaGFDaGFubmVsKCpkZXN0KSk7CisgICAgfQorCisgICAgYm9vbCBpbkJvdW5k
cyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSW50
UmVjdChJbnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHBvaW50KTsKKyAgICB9CisKKyAgICBi
b29sIGluQm91bmRzKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHJlY3QpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBWZWN0b3I8UkdCQTMyPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBSR0JB
MzIqIG1fcGl4ZWxzIHsgbnVsbHB0ciB9OworICAgIEludFNpemUgbV9zaXplOworICAgIGJvb2wg
bV9wcmVtdWx0aXBseUFscGhhIHsgdHJ1ZSB9OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCmluZGV4IDRlMjVhYTZmZDc0ZDFlNDZjNTQxNjE0OThi
YzE3MmJmNjAwODc1ZDEuLjQzOWY1YTYzYzdiZWJlNTYwNDJiMjRlN2Q3MmVjY2VjZjM2YzQwYzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKQEAgLTQ5LDYg
KzQ5LDQwIEBAIGNvbnN0IFJHQkEzMiBDb2xvcjo6dHJhbnNwYXJlbnQ7CiBzdGF0aWMgY29uc3Qg
UkdCQTMyIGxpZ2h0ZW5lZEJsYWNrID0gMHhGRjU0NTQ1NDsKIHN0YXRpYyBjb25zdCBSR0JBMzIg
ZGFya2VuZWRXaGl0ZSA9IDB4RkZBQkFCQUI7CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbXVs
dGlwbHkyNTUodW5zaWduZWQgYykKK3sKKyAgICAvLyBjICogMjU1CisgICAgLy8gICA9IGMgKiAo
MjU2IC0gMSkKKyAgICAvLyAgID0gYyAqIDI1NiAtIGMKKyAgICByZXR1cm4gKGMgPDwgOCkgLSBj
OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRpdmlkZTI1NSh1bnNpZ25lZCBjKQorewor
ICAgIC8vIGMgLyAyNTUKKyAgICAvLyAgID0gYyAvIDI1NiAqICgxICsgMSAvIDI1NSkKKyAgICAv
LyAgID0gKGMgKyBjIC8gMjU1KSAvIDI1NgorICAgIC8vICAgPSAoYyArIChjICsgYyAvIDI1NSkg
LyAyNTYpIC8gMjU2CisgICAgLy8gICA9IChjICsgYyAvIDI1NiArIGMgLyAoMjU1IHggMjU2KSkg
LyAyNTYKKyAgICAvLyAgfj0gKGMgKyBjIC8gMjU2ICsgMSkgLyAyNTYKKyAgICByZXR1cm4gKGMg
KyAoYyA+PiA4KSArIDEpID4+IDg7Cit9CisgICAgCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRp
dmlkZUNlaWwodW5zaWduZWQgYywgdW5zaWduZWQgZCkKK3sKKyAgICByZXR1cm4gKGMgKyBkIC0g
MSkgLyBkOworfQorICAgIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBwcmVtdWx0aXBsaWVkQ2hh
bm5lbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBhKQoreworICAgIHJldHVybiBkaXZpZGUyNTUoYyAq
IGEpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHVucHJlbXVsdGlwbGllZENoYW5uZWwo
dW5zaWduZWQgYywgdW5zaWduZWQgYSkKK3sKKyAgICByZXR1cm4gZGl2aWRlQ2VpbChtdWx0aXBs
eTI1NShjKSwgYSk7Cit9CisgICAgCiBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBi
KQogewogICAgIHJldHVybiAweEZGMDAwMDAwIHwgc3RkOjptYXgoMCwgc3RkOjptaW4ociwgMjU1
KSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAyNTUpKSA8PCA4IHwgc3RkOjptYXgo
MCwgc3RkOjptaW4oYiwgMjU1KSk7CkBAIC01OSw2ICs5MywxNiBAQCBSR0JBMzIgbWFrZVJHQkEo
aW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCiAgICAgcmV0dXJuIHN0ZDo6bWF4KDAsIHN0ZDo6
bWluKGEsIDI1NSkpIDw8IDI0IHwgc3RkOjptYXgoMCwgc3RkOjptaW4ociwgMjU1KSkgPDwgMTYg
fCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAyNTUpKSA8PCA4IHwgc3RkOjptYXgoMCwgc3RkOjpt
aW4oYiwgMjU1KSk7CiB9CiAKK1JHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGlu
dCBnLCBpbnQgYiwgaW50IGEpCit7CisgICAgcmV0dXJuIG1ha2VSR0JBKHByZW11bHRpcGxpZWRD
aGFubmVsKHIsIGEpLCBwcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBhKSwgcHJlbXVsdGlwbGllZENo
YW5uZWwoYiwgYSksIGEpOworfQorICAgIAorUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRSR0JB
KGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQoreworICAgIHJldHVybiBtYWtlUkdCQSh1bnBy
ZW11bHRpcGxpZWRDaGFubmVsKHIsIGEpLCB1bnByZW11bHRpcGxpZWRDaGFubmVsKGcsIGEpLCB1
bnByZW11bHRpcGxpZWRDaGFubmVsKGIsIGEpLCBhKTsKK30KKyAgICAKIHN0YXRpYyBpbnQgY29s
b3JGbG9hdFRvUkdCQUJ5dGUoZmxvYXQgZikKIHsKICAgICAvLyBXZSB1c2UgbHJvdW5kZiBhbmQg
MjU1IGluc3RlYWQgb2YgbmV4dGFmdGVyZigyNTYsIDApIHRvIG1hdGNoIENHJ3Mgcm91bmRpbmcK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCmluZGV4IGRkMjYyNzBiYjQ2
NjBiMzNhZTA3MGU4Yzk0NDUyMGQ3Mjg0NTRiOGEuLmE1NDUzMmM3NzU1YTdjODc2OTM2MjQwY2Fl
NGVjMzdhNGRhMGQwNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
aApAQCAtNTQsNiArNTQsOCBAQCB0eXBlZGVmIHVuc2lnbmVkIFJHQkEzMjsgLy8gRGVwcmVjYXRl
ZDogVHlwZSBmb3IgYW4gUkdCQSBxdWFkcnVwbGV0LiBVc2UgUkdCQSBjbAogCiBXRUJDT1JFX0VY
UE9SVCBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBiKTsKIFdFQkNPUkVfRVhQT1JU
IFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7CitXRUJDT1JFX0VY
UE9SVCBSR0JBMzIgbWFrZVByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGlu
dCBhKTsKK1dFQkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQg
ciwgaW50IGcsIGludCBiLCBpbnQgYSk7CiAKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBjb2xvcldp
dGhPdmVycmlkZUFscGhhKFJHQkEzMiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSk7CiBXRUJD
T1JFX0VYUE9SVCBSR0JBMzIgY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIE9w
dGlvbmFsPGZsb2F0PiBvdmVycmlkZUFscGhhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZS5oCmluZGV4IDdhMjk5OTJmNzcxODhlMDM4MjhkODBhNjViOGJlMmNkOGRjMmRl
NzYuLjhlN2I1MmIxZjRmMzFjNzRhM2NiMmExMzIxNWRhNzdhMmIxOGMwN2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaApAQCAtMTM3LDggKzEzNywxMSBAQCBwdWJs
aWM6CiAKICAgICBlbnVtIFRpbGVSdWxlIHsgU3RyZXRjaFRpbGUsIFJvdW5kVGlsZSwgU3BhY2VU
aWxlLCBSZXBlYXRUaWxlIH07CiAKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUlt
YWdlKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0
aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50U2l6ZSYpIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICB2
aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgeyByZXR1
cm4gbnVsbHB0cjsgfQogICAgIHZpcnR1YWwgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkZv
ckN1cnJlbnRGcmFtZSgpIHsgcmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsgfQorICAgIHZpcnR1
YWwgVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBmcmFtZXNOYXRpdmVJbWFnZXMoKSB7IHJldHVybiB7
IH07IH0KIAogICAgIC8vIEFjY2Vzc29ycyBmb3IgbmF0aXZlIGltYWdlIGZvcm1hdHMuCiAKQEAg
LTE1MCwxMiArMTUzLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgQ0ZEYXRhUmVmIGdldFRJRkZS
ZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCi0jaWYgVVNFKENH
KQotICAgIHZpcnR1YWwgQ0dJbWFnZVJlZiBnZXRDR0ltYWdlUmVmKCkgeyByZXR1cm4gbnVsbHB0
cjsgfQotICAgIHZpcnR1YWwgQ0dJbWFnZVJlZiBnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUoY29u
c3QgSW50U2l6ZSYpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIFJldGFpblB0cjxD
RkFycmF5UmVmPiBnZXRDR0ltYWdlQXJyYXkoKSB7IHJldHVybiBudWxscHRyOyB9Ci0jZW5kaWYK
LQogI2lmIFBMQVRGT1JNKFdJTikKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SEJJVE1BUChIQklUTUFQ
KSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBnZXRIQklUTUFQT2ZTaXplKEhC
SVRNQVAsIGNvbnN0IEludFNpemUqKSB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTc5LDYgKzE3Niw4
IEBAIHB1YmxpYzoKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgdmlydHVhbCBib29sIG5vdFNv
bGlkQ29sb3IoKSB7IHJldHVybiB0cnVlOyB9CiAjZW5kaWYKKyAgICAKKyAgICB2aXJ0dWFsIHZv
aWQgbGF5b3V0SWZOZWVkZWQoKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRleHRTdHJl
YW0mKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VGcmFtZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VGcmFtZURhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBjZTE0YjViZDE4MDQ4NTIyNjA2MzA0YWJm
NDhhM2RjYmI5OTU3OWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5jcHAKQEAgLTAsMCArMSwxMTkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkltYWdlRnJhbWVEYXRhLmgiCisKKyNpbmNsdWRlICJDb2xvci5oIgorCisj
aWYgVVNFKENHKQorI2luY2x1ZGUgIkltYWdlRGVjb2RlckNHLmgiCisjZWxzZQorI2luY2x1ZGUg
IkltYWdlRGVjb2Rlci5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VGcmFtZURhdGE6OkltYWdlRnJhbWVEYXRhKCkK
K3sKK30KKworSW1hZ2VGcmFtZURhdGE6OkltYWdlRnJhbWVEYXRhKE5hdGl2ZUltYWdlUHRyJiYg
aW1hZ2UpCisgICAgOiBtX3N0YXR1cyhEZWNvZGluZ1N0YXR1czo6Q29tcGxldGUpCisgICAgLCBt
X2ltYWdlKFdURk1vdmUoaW1hZ2UpKQoreworICAgIG1fc2l6ZSA9IFBsYXRmb3JtSW1hZ2UobV9p
bWFnZSkuc2l6ZSgpOworICAgIG1faGFzQWxwaGEgPSBQbGF0Zm9ybUltYWdlKG1faW1hZ2UpLmhh
c0FscGhhKCk7Cit9CisKK0ltYWdlRnJhbWVEYXRhOjpJbWFnZUZyYW1lRGF0YShJbWFnZURlY29k
ZXImIGRlY29kZXIsIHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xl
dmVsLCBDYWNoaW5nIGZyYW1lQ2FjaGluZykKK3sKKyAgICBBU1NFUlQoZnJhbWVDYWNoaW5nID09
IENhY2hpbmc6Ok1ldGFkYXRhIHx8IGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YUFu
ZEltYWdlKTsKKyAgICAKKyAgICBpZiAoZnJhbWVDYWNoaW5nID09IENhY2hpbmc6OkltYWdlIHx8
IGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YUFuZEltYWdlKSB7CisgICAgICAgIG1f
aW1hZ2UgPSBkZWNvZGVyLmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGluZGV4LCBzdWJzYW1wbGlu
Z0xldmVsKTsKKyAgICAgICAgbV9zdWJzYW1wbGluZ0xldmVsID0gc3Vic2FtcGxpbmdMZXZlbDsK
KyAgICB9CisgICAgCisgICAgaWYgKGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YSB8
fCBmcmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSkgeworICAgICAgICBt
X29yaWVudGF0aW9uID0gZGVjb2Rlci5vcmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOworICAgICAg
ICBtX3N0YXR1cyA9IGRlY29kZXIuZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCkgPyBEZWNv
ZGluZ1N0YXR1czo6Q29tcGxldGUgOiBEZWNvZGluZ1N0YXR1czo6UGFydGlhbDsKKyAgICAgICAg
CisgICAgICAgIGlmIChkZWNvZGVyLnJlcGV0aXRpb25Db3VudCgpICE9IGNBbmltYXRpb25Ob25l
KQorICAgICAgICAgICAgbV9kdXJhdGlvbiA9IGRlY29kZXIuZnJhbWVEdXJhdGlvbkF0SW5kZXgo
aW5kZXgpOworICAgICAgICAKKyAgICAgICAgbV9oYXNBbHBoYSA9IGRlY29kZXIuZnJhbWVIYXNB
bHBoYUF0SW5kZXgoaW5kZXgpOworICAgICAgICBtX3NpemUgPSBkZWNvZGVyLmZyYW1lU2l6ZUF0
SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOworICAgIH0KK30KKworSW1hZ2VGcmFtZURh
dGE6On5JbWFnZUZyYW1lRGF0YSgpCit7CisgICAgY2xlYXJTdWJJbWFnZXMoKTsKK30KKwordm9p
ZCBJbWFnZUZyYW1lRGF0YTo6Y2xlYXJTdWJJbWFnZXMoKQoreworICAgIGlmICghbV9pbWFnZSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFBsYXRmb3JtSW1hZ2UobV9pbWFnZSkuY2xlYXJT
dWJJbWFnZXMoKTsKK30KKwordW5zaWduZWQgSW1hZ2VGcmFtZURhdGE6OmNsZWFyKENhY2hpbmcg
ZnJhbWVDYWNoaW5nKQoreworICAgIEFTU0VSVChmcmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6RW1w
dHkgfHwgZnJhbWVDYWNoaW5nID09IENhY2hpbmc6Ok1ldGFkYXRhKTsKKyAgICAKKyAgICB1bnNp
Z25lZCBmcmFtZUJ5dGVzID0gdGhpcy0+ZnJhbWVCeXRlcygpOworICAgIAorICAgIGNsZWFyU3Vi
SW1hZ2VzKCk7CisgICAgCisgICAgaWYgKGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpFbXB0eSkK
KyAgICAgICAgKnRoaXMgPSBJbWFnZUZyYW1lRGF0YSgpOworICAgIGVsc2UKKyAgICAgICAgbV9p
bWFnZSA9IG51bGxwdHI7CisgICAgCisgICAgcmV0dXJuIGZyYW1lQnl0ZXM7Cit9CisKK0NvbG9y
IEltYWdlRnJhbWVEYXRhOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdAoreworICAgIGlm
ICghaGFzSW1hZ2UoKSB8fCBtX3NpemUgIT0gSW50U2l6ZSgxLCAxKSkKKyAgICAgICAgcmV0dXJu
IENvbG9yKCk7CisgICAgCisgICAgcmV0dXJuIFBsYXRmb3JtSW1hZ2UobV9pbWFnZSkuc2luZ2xl
UGl4ZWxTb2xpZENvbG9yKCk7Cit9CisKK2Jvb2wgSW1hZ2VGcmFtZURhdGE6OmlzQWxtb3N0U29s
aWRDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKCFoYXNJbWFnZSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgCisgICAgcmV0dXJuIFBsYXRmb3JtSW1hZ2UobV9pbWFnZSkuaXNBbG1vc3RT
b2xpZENvbG9yKCk7Cit9CisgICAgCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MjA4MGM4ZDg5ZDk1ZDU5ZDJh
OTZhYTdiNGEyYzQ1YzI2NTY3ZTA2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuaApAQCAtMCwwICsxLDk0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiQml0bWFwUGl4ZWxzLmgiCisjaW5jbHVkZSAiSW1hZ2VPcmllbnRhdGlvbi5o
IgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZVB0ci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbG9yOworY2xhc3MgSW1hZ2VEZWNvZGVyOwor
CisvLyBTdWJzYW1wbGluZ0xldmVsLiAwIGlzIG5vIHN1YnNhbXBsaW5nLCAxIGlzIGhhbGYgZGlt
ZW5zaW9ucyBvbiBlYWNoIGF4aXMgZXRjLgordXNpbmcgU3Vic2FtcGxpbmdMZXZlbCA9IHVpbnQ4
X3Q7CisKK2VudW0gOiBTdWJzYW1wbGluZ0xldmVsIHsKKyAgICBNaW5TdWJzYW1wbGluZ0xldmVs
ID0gMCwKKyAgICBNYXhTdWJzYW1wbGluZ0xldmVsID0gMywKKyAgICBEZWZhdWx0U3Vic2FtcGxp
bmdMZXZlbCA9IE1pblN1YnNhbXBsaW5nTGV2ZWwKK307CisKK2NsYXNzIEltYWdlRnJhbWVEYXRh
IHsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIENhY2hpbmcgeyBFbXB0eSwgTWV0YWRhdGEsIElt
YWdlLCBNZXRhZGF0YUFuZEltYWdlIH07CisgICAgZW51bSBjbGFzcyBEZWNvZGluZ1N0YXR1cyB7
IEVtcHR5LCBQYXJ0aWFsLCBDb21wbGV0ZSB9OworICAgIAorICAgIEltYWdlRnJhbWVEYXRhKCk7
CisgICAgSW1hZ2VGcmFtZURhdGEoTmF0aXZlSW1hZ2VQdHImJik7CisgICAgSW1hZ2VGcmFtZURh
dGEoSW1hZ2VEZWNvZGVyJiwgc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsID0gRGVmYXVs
dFN1YnNhbXBsaW5nTGV2ZWwsIENhY2hpbmcgPSBDYWNoaW5nOjpNZXRhZGF0YUFuZEltYWdlKTsK
KyAgICBJbWFnZUZyYW1lRGF0YShJbWFnZUZyYW1lRGF0YSYmKSA9IGRlZmF1bHQ7CisgICAgSW1h
Z2VGcmFtZURhdGEmIG9wZXJhdG9yPShJbWFnZUZyYW1lRGF0YSYmKSA9IGRlZmF1bHQ7CisgICAg
CisgICAgfkltYWdlRnJhbWVEYXRhKCk7CisgICAgCisgICAgdW5zaWduZWQgY2xlYXIoQ2FjaGlu
Zyk7CisgICAgQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3Q7CisgICAgYm9vbCBp
c0FsbW9zdFNvbGlkQ29sb3IoKSBjb25zdDsKKyAgICAKKyAgICBEZWNvZGluZ1N0YXR1cyBzdGF0
dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQorICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdHVzID09IERlY29kaW5nU3RhdHVzOjpDb21wbGV0ZTsgfQorICAg
IEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIHVuc2lnbmVkIGZy
YW1lQnl0ZXMoKSBjb25zdCB7IHJldHVybiBoYXNJbWFnZSgpID8gbV9zaXplLmFyZWEoKSAqIDQg
OiAwOyB9CisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdl
OyB9CisgICAgQml0bWFwUGl4ZWxzKiBwaXhlbHMoKSBjb25zdCB7IHJldHVybiBtX3BpeGVscyA/
IG1fcGl4ZWxzLmdldCgpIDogbnVsbHB0cjsgfQorICAgIAorICAgIEltYWdlT3JpZW50YXRpb24g
b3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBtX29yaWVudGF0aW9uOyB9CisgICAgU3Vic2Ft
cGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsKCkgY29uc3QgeyByZXR1cm4gbV9zdWJzYW1wbGlu
Z0xldmVsOyB9CisgICAgZmxvYXQgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9u
OyB9CisgICAgCisgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQWxwaGE7
IH0KKyAgICBib29sIGhhc0ltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZTsgfQorICAgIGJv
b2wgaGFzTWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiAhbV9zaXplLmlzRW1wdHkoKTsgfQorICAg
IGJvb2wgaGFzUGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gcGl4ZWxzKCk7IH0KKyAgICAKK3ByaXZh
dGU6CisgICAgdm9pZCBjbGVhclN1YkltYWdlcygpOworICAgIAorICAgIERlY29kaW5nU3RhdHVz
IG1fc3RhdHVzIHsgRGVjb2RpbmdTdGF0dXM6OkVtcHR5IH07CisgICAgSW50U2l6ZSBtX3NpemU7
CisgICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Qml0bWFw
UGl4ZWxzPiBtX3BpeGVsczsKKyAgICAKKyAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50YXRp
b24geyBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbiB9OworICAgIFN1YnNhbXBsaW5nTGV2ZWwgbV9z
dWJzYW1wbGluZ0xldmVsIHsgMCB9OworICAgIGZsb2F0IG1fZHVyYXRpb24geyAwIH07CisgICAg
Ym9vbCBtX2hhc0FscGhhIHsgdHJ1ZSB9OworfTsKKyAgICAKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAppbmRleCBkZGQ4YTU1YmEwOTA2
YzU4NjZhMTkyY2Y4ZTQxNGVhNzA3YjcyOGFjLi44MmY2ZTJkNmU0NTQzM2RhMWE3ZDU2YjM3MGRm
YTYxYTRjNDE5MTM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VTb3VyY2UuY3BwCkBAIC0yMjQsNiArMjI0LDExIEBAIE5hdGl2ZUltYWdlUHRyIEltYWdl
U291cmNlOjpjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5n
TGV2CiAgICAgcmV0dXJuIGluaXRpYWxpemVkKCkgPyBtX2RlY29kZXItPmNyZWF0ZUZyYW1lSW1h
Z2VBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKSA6IG51bGxwdHI7CiB9CiAKK0ltYWdl
RnJhbWVEYXRhIEltYWdlU291cmNlOjpjcmVhdGVGcmFtZURhdGFBdEluZGV4KHNpemVfdCBpbmRl
eCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2Fj
aGluZyBjYWNoaW5nKQoreworICAgIHJldHVybiBpbml0aWFsaXplZCgpID8gSW1hZ2VGcmFtZURh
dGEoKm1fZGVjb2RlciwgaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwsIGNhY2hpbmcpIDogSW1hZ2VG
cmFtZURhdGEoKTsKK30KKyAgICAKIHZvaWQgSW1hZ2VTb3VyY2U6OmR1bXAoVGV4dFN0cmVhbSYg
dHMpIGNvbnN0CiB7CiAgICAgaWYgKG1fYWxsb3dTdWJzYW1wbGluZykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCmluZGV4IDYwMzU3MzliN2U4YjA5
NmRjOGRmZTljNTMwYTQyYzZmMjkxYmRhMDAuLmE0MGM3Y2U5MzA3Y2RhZGYwNzlhYjcwMWE4Mjc5
OWI2OTA1MjlkNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlU291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VTb3VyY2UuaApAQCAtMjcsNiArMjcsNyBAQAogI2lmbmRlZiBJbWFnZVNvdXJjZV9oCiAjZGVm
aW5lIEltYWdlU291cmNlX2gKIAorI2luY2x1ZGUgIkltYWdlRnJhbWVEYXRhLmgiCiAjaW5jbHVk
ZSAiSW1hZ2VPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSAi
TmF0aXZlSW1hZ2VQdHIuaCIKQEAgLTYzLDkgKzY0LDYgQEAgY29uc3QgaW50IGNBbmltYXRpb25M
b29wT25jZSA9IDA7CiBjb25zdCBpbnQgY0FuaW1hdGlvbkxvb3BJbmZpbml0ZSA9IC0xOwogY29u
c3QgaW50IGNBbmltYXRpb25Ob25lID0gLTI7CiAKLS8vIFN1YnNhbXBsaW5nTGV2ZWwuIDAgaXMg
bm8gc3Vic2FtcGxpbmcsIDEgaXMgaGFsZiBkaW1lbnNpb25zIG9uIGVhY2ggYXhpcyBldGMuCi10
eXBlZGVmIHNob3J0IFN1YnNhbXBsaW5nTGV2ZWw7Ci0KIGNsYXNzIEltYWdlU291cmNlIHsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShJbWFnZVNvdXJjZSk7CiAgICAgZnJpZW5kIGNsYXNzIEJp
dG1hcEltYWdlOwpAQCAtMTMyLDE4ICsxMzAsMTkgQEAgcHVibGljOgogICAgIGJvb2wgYWxsb3dT
dWJzYW1wbGluZ09mRnJhbWVBdEluZGV4KHNpemVfdCkgY29uc3Q7CiAgICAgCiAgICAgLy8gU2l6
ZSBvZiBvcHRpb25hbGx5IHN1YnNhbXBsZWQgZnJhbWUuCi0gICAgSW50U2l6ZSBmcmFtZVNpemVB
dEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IDAsIFJlc3BlY3RJbWFnZU9yaWVudGF0
aW9uRW51bSA9IERvTm90UmVzcGVjdEltYWdlT3JpZW50YXRpb24pIGNvbnN0OworICAgIEludFNp
emUgZnJhbWVTaXplQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBEZWZhdWx0U3Vi
c2FtcGxpbmdMZXZlbCwgUmVzcGVjdEltYWdlT3JpZW50YXRpb25FbnVtID0gRG9Ob3RSZXNwZWN0
SW1hZ2VPcmllbnRhdGlvbikgY29uc3Q7CiAgICAgCiAgICAgLy8gUmV0dXJuIHRoZSBudW1iZXIg
b2YgYnl0ZXMgaW4gdGhlIGRlY29kZWQgZnJhbWUuIElmIHRoZSBmcmFtZSBpcyBub3QgeWV0CiAg
ICAgLy8gZGVjb2RlZCB0aGVuIHJldHVybiAwLgotICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXNBdElu
ZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IDApIGNvbnN0OworICAgIHVuc2lnbmVkIGZy
YW1lQnl0ZXNBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9IERlZmF1bHRTdWJzYW1w
bGluZ0xldmVsKSBjb25zdDsKICAgICAKICAgICBmbG9hdCBmcmFtZUR1cmF0aW9uQXRJbmRleChz
aXplX3QpOwogICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb25BdEluZGV4KHNpemVfdCkg
Y29uc3Q7IC8vIEVYSUYgaW1hZ2Ugb3JpZW50YXRpb24KICAgICAKICAgICAvLyBDYWxsZXJzIHNo
b3VsZCBub3QgY2FsbCB0aGlzIGFmdGVyIGNhbGxpbmcgY2xlYXIoKSB3aXRoIGEgaGlnaGVyIGlu
ZGV4OwogICAgIC8vIHNlZSBjb21tZW50cyBvbiBjbGVhcigpIGFib3ZlLgotICAgIE5hdGl2ZUlt
YWdlUHRyIGNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9
IDApOworICAgIE5hdGl2ZUltYWdlUHRyIGNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCwg
U3Vic2FtcGxpbmdMZXZlbCA9IERlZmF1bHRTdWJzYW1wbGluZ0xldmVsKTsKKyAgICBJbWFnZUZy
YW1lRGF0YSBjcmVhdGVGcmFtZURhdGFBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9
IERlZmF1bHRTdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyA9IEltYWdl
RnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRhZGF0YUFuZEltYWdlKTsKICAgICAKIHByaXZhdGU6CiAg
ICAgdm9pZCBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoc2l6ZV90KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2UuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYjdhZWE0
ODlmM2ViMmE4Mjg3NzFjMjEwM2U4ZDRkMGJlMTdiZTVkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oCkBAIC0wLDAgKzEs
NjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCisjaW5jbHVkZSAiSW1hZ2VP
cmllbnRhdGlvbi5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgQ29sb3I7CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBJbnRTaXpl
OworY2xhc3MgR3JhcGhpY3NDb250ZXh0OworCitjbGFzcyBQbGF0Zm9ybUltYWdlIHsKK3B1Ymxp
YzoKKyAgICBQbGF0Zm9ybUltYWdlKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSkKKyAgICAg
ICAgOiBtX2ltYWdlKGltYWdlKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGlzTmlsKCkgY29u
c3QgeyByZXR1cm4gIW1faW1hZ2U7IH0KKyAgICB2b2lkIGNsZWFyU3ViSW1hZ2VzKCk7CisKKyAg
ICBJbnRTaXplIHNpemUoKSBjb25zdDsKKyAgICBib29sIGhhc0FscGhhKCkgY29uc3Q7CisgICAg
Q29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3Q7CisgICAgYm9vbCBpc0FsbW9zdFNv
bGlkQ29sb3IoKSBjb25zdDsKKyAgICB2b2lkIGRyYXcoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRT
aXplJiBzcmNTaXplLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRNb2RlLCBjb25zdCBJbWFnZU9y
aWVudGF0aW9uJikgY29uc3Q7CisKKyAgICBzdGF0aWMgZmxvYXQgc3Vic2FtcGxpbmdTY2FsZShH
cmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QpOworCitwcml2YXRlOgorI2lmIFVTRShDRykKKyAgICBDR0ltYWdlUmVmIGNn
SW1hZ2VSZWYoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlID8gbV9pbWFnZS5nZXQoKSA6IG51bGxw
dHI7IH0KKyNlbmRpZgorICAgIE5hdGl2ZUltYWdlUHRyIG1faW1hZ2U7Cit9OworCit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2Jq
Yy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVN
ZWRpYVN0cmVhbUFWRk9iakMubW0KaW5kZXggZjRjMTQ1N2JiYjI1NTc1NGYwMGEwNjI1ZWU4M2Uw
NGRhN2M2ZWZjZi4uZDUyMGY1ZDU4NWFjNjBkYmFlZTI1NWUxYjgzYzI0ZGM2ODcyMTBhNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbQpAQCAtMjEyLDcgKzIxMiw3IEBAIHZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjp1cGRhdGVEaXNwbGF5TW9kZSgpCiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgICAgIG1fcGF1c2VkSW1hZ2UgPSBpbWFnZS0+Z2V0Q0dJbWFnZVJlZigpOworICAgICAgICAg
ICAgICAgIG1fcGF1c2VkSW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KTsKICAgICAgICAgICAgICAgICBpZiAoIW1fcGF1c2VkSW1hZ2UpIHsKICAgICAgICAgICAgICAg
ICAgICAgbV9kaXNwbGF5TW9kZSA9IFBhaW50SXRCbGFjazsKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxNzcyMmJlYzUzYWI4YTA4YThkYTg1MjhiOWUwZDdjNGQwY2Q0MTM1Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCisrKyAvZGV2L251bGwKQEAg
LTEsMTQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAg
VG9rZXIgPGFscEBhdG9rZXIuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLQot
I2lmIFVTRShDQUlSTykKLQotI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAi
SW1hZ2VPYnNlcnZlci5oIgotI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCi0jaW5j
bHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDxjYWlyby5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLW5hbWVzcGFjZSBOYXRpdmVJbWFnZSB7Ci0KLUludFNpemUgc2l6ZShjb25zdCBSZWZQdHI8
Y2Fpcm9fc3VyZmFjZV90PiYgaW1hZ2UpCi17Ci0gICAgcmV0dXJuIGNhaXJvU3VyZmFjZVNpemUo
aW1hZ2UuZ2V0KCkpOwotfQotCi1ib29sIGhhc0FscGhhKGNvbnN0IFJlZlB0cjxjYWlyb19zdXJm
YWNlX3Q+JiBpbWFnZSkKLXsKLSAgICByZXR1cm4gY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChp
bWFnZS5nZXQoKSkgIT0gQ0FJUk9fQ09OVEVOVF9DT0xPUjsKLX0KLQotQ29sb3Igc2luZ2xlUGl4
ZWxTb2xpZENvbG9yKGNvbnN0IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiBpbWFnZSkKLXsKLSAg
ICBBU1NFUlQoaW1hZ2UpOwotICAgIAotICAgIGlmIChOYXRpdmVJbWFnZTo6c2l6ZShpbWFnZSkg
IT0gSW50U2l6ZSgxLCAxKSkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0KLSAgICBpZiAoY2Fp
cm9fc3VyZmFjZV9nZXRfdHlwZShpbWFnZS5nZXQoKSkgIT0gQ0FJUk9fU1VSRkFDRV9UWVBFX0lN
QUdFKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKLQotICAgIFJHQkEzMiogcGl4ZWwgPSByZWlu
dGVycHJldF9jYXN0X3B0cjxSR0JBMzIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGlt
YWdlLmdldCgpKSk7Ci0gICAgcmV0dXJuIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCpwaXhl
bCk7Ci19Ci0KLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNv
bnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LCBjb25zdCBGbG9hdFJlY3QmIHNyYywgQ29tcG9z
aXRlT3BlcmF0b3Igb3AsCi0gICAgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlv
bkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKQotewotICAgIGlmICghZHN0LndpZHRoKCkgfHwgIWRz
dC5oZWlnaHQoKSB8fCAhc3JjLndpZHRoKCkgfHwgIXNyYy5oZWlnaHQoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgc3RhcnRBbmltYXRpb24oKTsKLQotICAgIGF1dG8gc3VyZmFjZSA9IGZyYW1l
SW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKLSAgICBpZiAoIXN1cmZhY2UpIC8vIElmIGl0
J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgotICAgICAgICByZXR1cm47
Ci0KLSAgICBDb2xvciBjb2xvciA9IHNpbmdsZVBpeGVsU29saWRDb2xvcigpOwotICAgIGlmIChj
b2xvci5pc1ZhbGlkKCkpIHsKLSAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGNvbnRleHQsIGRz
dCwgY29sb3IsIG9wKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNvbnRleHQuc2F2
ZSgpOwotCi0gICAgLy8gU2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCi0gICAgaWYgKG9w
ID09IENvbXBvc2l0ZVNvdXJjZU92ZXIgJiYgYmxlbmRNb2RlID09IEJsZW5kTW9kZU5vcm1hbCAm
JiAhZnJhbWVIYXNBbHBoYUF0SW5kZXgobV9jdXJyZW50RnJhbWUpKQotICAgICAgICBjb250ZXh0
LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVDb3B5KTsKLSAgICBlbHNlCi0gICAgICAg
IGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBibGVuZE1vZGUpOwotCi0jaWYgRU5B
QkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKLSAgICBJbnRTaXplIHNjYWxlZFNpemUg
PSBjYWlyb1N1cmZhY2VTaXplKHN1cmZhY2UuZ2V0KCkpOwotICAgIEZsb2F0UmVjdCBhZGp1c3Rl
ZFNyY1JlY3QgPSBhZGp1c3RTb3VyY2VSZWN0Rm9yRG93blNhbXBsaW5nKHNyYywgc2NhbGVkU2l6
ZSk7Ci0jZWxzZQotICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3Qoc3JjKTsKLSNlbmRpZgot
Ci0gICAgSW1hZ2VPcmllbnRhdGlvbiBmcmFtZU9yaWVudGF0aW9uKGRlc2NyaXB0aW9uLmltYWdl
T3JpZW50YXRpb24oKSk7Ci0gICAgaWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0
aW9uKCkgPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24pCi0gICAgICAgIGZyYW1lT3JpZW50YXRp
b24gPSBmcmFtZU9yaWVudGF0aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0KLSAgICBGbG9h
dFJlY3QgZHN0UmVjdCA9IGRzdDsKLQotICAgIGlmIChmcmFtZU9yaWVudGF0aW9uICE9IERlZmF1
bHRJbWFnZU9yaWVudGF0aW9uKSB7Ci0gICAgICAgIC8vIEltYWdlT3JpZW50YXRpb24gZXhwZWN0
cyB0aGUgb3JpZ2luIHRvIGJlIGF0ICgwLCAwKS4KLSAgICAgICAgY29udGV4dC50cmFuc2xhdGUo
ZHN0UmVjdC54KCksIGRzdFJlY3QueSgpKTsKLSAgICAgICAgZHN0UmVjdC5zZXRMb2NhdGlvbihG
bG9hdFBvaW50KCkpOwotICAgICAgICBjb250ZXh0LmNvbmNhdENUTShmcmFtZU9yaWVudGF0aW9u
LnRyYW5zZm9ybUZyb21EZWZhdWx0KGRzdFJlY3Quc2l6ZSgpKSk7Ci0gICAgICAgIGlmIChmcmFt
ZU9yaWVudGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSBk
ZXN0aW5hdGlvbiByZWN0YW5nbGUgd2lsbCBoYXZlIGl0J3Mgd2lkdGggYW5kIGhlaWdodCBhbHJl
YWR5IHJldmVyc2VkIGZvciB0aGUgb3JpZW50YXRpb24gb2YKLSAgICAgICAgICAgIC8vIHRoZSBp
bWFnZSwgYXMgaXQgd2FzIG5lZWRlZCBmb3IgcGFnZSBsYXlvdXQsIHNvIHdlIG5lZWQgdG8gcmV2
ZXJzZSBpdCBiYWNrIGhlcmUuCi0gICAgICAgICAgICBkc3RSZWN0ID0gRmxvYXRSZWN0KGRzdFJl
Y3QueCgpLCBkc3RSZWN0LnkoKSwgZHN0UmVjdC5oZWlnaHQoKSwgZHN0UmVjdC53aWR0aCgpKTsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmRyYXdT
dXJmYWNlVG9Db250ZXh0KHN1cmZhY2UuZ2V0KCksIGRzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwg
Y29udGV4dCk7Ci0KLSAgICBjb250ZXh0LnJlc3RvcmUoKTsKLQotICAgIGlmIChpbWFnZU9ic2Vy
dmVyKCkpCi0gICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKLX0KLQotYm9v
bCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKLXsKLSAgICBpZiAoY2xlYXJN
ZXRhZGF0YSkKLSAgICAgICAgbV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsKLQotICAgIGlmIChtX2lt
YWdlKSB7Ci0gICAgICAgIG1faW1hZ2UgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li43MGFkYWVjMjcwZTMxYjA1NGFmYzVmNjZkNDgyODhhZWJmMDYxZTNhCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFn
ZUNhaXJvLmNwcApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1JbWFnZS5oIgorCisjaWYgVVNFKENBSVJPKQorCisjaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgPGNhaXJvLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBQbGF0Zm9ybUltYWdlOjpjbGVhclN1Yklt
YWdlcygpCit7Cit9CisKK0ludFNpemUgUGxhdGZvcm1JbWFnZTo6c2l6ZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGlzTmlsKCkgPyBJbnRTaXplKCkgOiBjYWlyb1N1cmZhY2VTaXplKG1faW1hZ2Uu
Z2V0KCkpOworfQorCitib29sIFBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gaXNOaWwoKSB8fCBjYWlyb19zdXJmYWNlX2dldF9jb250ZW50KG1faW1hZ2UuZ2V0
KCkpICE9IENBSVJPX0NPTlRFTlRfQ09MT1I7Cit9CisKK0NvbG9yIFBsYXRmb3JtSW1hZ2U6OnNp
bmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKGlzTmlsKCkgfHwgc2l6ZSgp
ICE9IEludFNpemUoMSwgMSkpCisgICAgICAgIHJldHVybiBDb2xvcigpOworCisgICAgaWYgKGNh
aXJvX3N1cmZhY2VfZ2V0X3R5cGUobV9pbWFnZS5nZXQoKSkgIT0gQ0FJUk9fU1VSRkFDRV9UWVBF
X0lNQUdFKQorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKworICAgIFJHQkEzMiogcGl4ZWwgPSBy
ZWludGVycHJldF9jYXN0X3B0cjxSR0JBMzIqPihjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRh
KG1faW1hZ2UuZ2V0KCkpKTsKKyAgICByZXR1cm4gY29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0Io
KnBpeGVsKTsKK30KKworYm9vbCBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKSBj
b25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworZmxvYXQgUGxhdGZvcm1JbWFnZTo6c3Vi
c2FtcGxpbmdTY2FsZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBG
bG9hdFJlY3QmKQoreworICAgIHJldHVybiAxOworfQorCit2b2lkIFBsYXRmb3JtSW1hZ2U6OmRy
YXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEludFNpemUmLCBDb21wb3NpdGVPcGVyYXRv
ciBvcCwgQmxlbmRNb2RlIG1vZGUsIGNvbnN0IEltYWdlT3JpZW50YXRpb24mIG9yaWVudGF0aW9u
KSBjb25zdAoreworICAgIGNvbnRleHQuc2F2ZSgpOworICAgIAorICAgIC8vIFNldCB0aGUgY29t
cG9zaXRpbmcgb3BlcmF0aW9uLgorICAgIGlmIChvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyICYm
IG1vZGUgPT0gQmxlbmRNb2RlTm9ybWFsICYmICFoYXNBbHBoYSgpKQorICAgICAgICBjb250ZXh0
LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVDb3B5KTsKKyAgICBlbHNlCisgICAgICAg
IGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wLCBtb2RlKTsKKyAgICAgICAgCisjaWYg
RU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKKyAgICBJbnRTaXplIHNjYWxlZFNp
emUgPSBjYWlyb1N1cmZhY2VTaXplKG1faW1hZ2UuZ2V0KCkpOworICAgIEZsb2F0UmVjdCBhZGp1
c3RlZFNyY1JlY3QgPSBhZGp1c3RTb3VyY2VSZWN0Rm9yRG93blNhbXBsaW5nKHNyY1JlY3QsIHNj
YWxlZFNpemUpOworI2Vsc2UKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0KHNyY1JlY3Qp
OworI2VuZGlmCisgICAgICAgIAorICAgIEZsb2F0UmVjdCBhZGp1c3RlZERlc3RSZWN0ID0gZGVz
dFJlY3Q7CisgICAgICAgIAorICAgIGlmIChvcmllbnRhdGlvbiAhPSBEZWZhdWx0SW1hZ2VPcmll
bnRhdGlvbikgeworICAgICAgICAvLyBJbWFnZU9yaWVudGF0aW9uIGV4cGVjdHMgdGhlIG9yaWdp
biB0byBiZSBhdCAoMCwgMCkuCisgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKGRlc3RSZWN0Lngo
KSwgZGVzdFJlY3QueSgpKTsKKyAgICAgICAgYWRqdXN0ZWREZXN0UmVjdC5zZXRMb2NhdGlvbihG
bG9hdFBvaW50KCkpOworICAgICAgICBjb250ZXh0LmNvbmNhdENUTShvcmllbnRhdGlvbi50cmFu
c2Zvcm1Gcm9tRGVmYXVsdChhZGp1c3RlZERlc3RSZWN0LnNpemUoKSkpOworICAgICAgICBpZiAo
b3JpZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSkgeworICAgICAgICAgICAgLy8gVGhlIGRl
c3RpbmF0aW9uIHJlY3RhbmdsZSB3aWxsIGhhdmUgaXQncyB3aWR0aCBhbmQgaGVpZ2h0IGFscmVh
ZHkgcmV2ZXJzZWQgZm9yIHRoZSBvcmllbnRhdGlvbiBvZgorICAgICAgICAgICAgLy8gdGhlIGlt
YWdlLCBhcyBpdCB3YXMgbmVlZGVkIGZvciBwYWdlIGxheW91dCwgc28gd2UgbmVlZCB0byByZXZl
cnNlIGl0IGJhY2sgaGVyZS4KKyAgICAgICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0U2l6ZShh
ZGp1c3RlZERlc3RSZWN0LnNpemUoKS50cmFuc3Bvc2VkU2l6ZSgpKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmRyYXdTdXJmYWNlVG9Db250ZXh0
KG1faW1hZ2UuZ2V0KCksIGFkanVzdGVkRGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgY29udGV4
dCk7CisKKyAgICBjb250ZXh0LnJlc3RvcmUoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDNjODFhMTcwYmU3OWFlNmJlNmNhY2RjOTlmNGMzOThjYWFmNDI2ZC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDIwNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCaXRtYXBJbWFn
ZS5oIgotCi0jaWYgVVNFKENHKQotCi0jaW5jbHVkZSAiQ29yZUdyYXBoaWNzU1BJLmgiCi0jaW5j
bHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgotI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIu
aCIKLSNpbmNsdWRlICJTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgotCi0jaWYgVVNFKEFQUEtJVCkKLSNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZp
Y2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oQ09DT0Ep
Ci0jaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgotI2VuZGlmCi0KLSNpZiBQTEFU
Rk9STShXSU4pCi0jaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUlu
dGVyZmFjZS5oPgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIE5h
dGl2ZUltYWdlIHsKLQotSW50U2l6ZSBzaXplKGNvbnN0IFJldGFpblB0cjxDR0ltYWdlUmVmPiYg
aW1hZ2UpCi17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICByZXR1cm4gSW50U2l6ZShDR0ltYWdl
R2V0V2lkdGgoaW1hZ2UuZ2V0KCkpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSk7Ci19
Ci0KLWJvb2wgaGFzQWxwaGEoY29uc3QgUmV0YWluUHRyPENHSW1hZ2VSZWY+JikKLXsKLSAgICAv
LyBGSVhNRTogQW5zd2VyIGNvcnJlY3RseSB0aGUgcXVlc3Rpb246IGRvZXMgdGhlIENHSW1hZ2VS
ZWYgaGF2ZSBhbHBoYSBjaGFubm5lbD8KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSAgICAKLUNvbG9y
IHNpbmdsZVBpeGVsU29saWRDb2xvcihjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mIGltYWdl
KQotewotICAgIEFTU0VSVChpbWFnZSk7Ci0gICAgCi0gICAgaWYgKE5hdGl2ZUltYWdlOjpzaXpl
KGltYWdlKSAhPSBJbnRTaXplKDEsIDEpKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKLSAgICAK
LSAgICB1bnNpZ25lZCBjaGFyIHBpeGVsWzRdOyAvLyBSR0JBCi0gICAgYXV0byBiaXRtYXBDb250
ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUocGl4ZWwsIDEsIDEsIDgsIHNpemVv
ZihwaXhlbCksIHNSR0JDb2xvclNwYWNlUmVmKCksCi0gICAgICAgIGtDR0ltYWdlQWxwaGFQcmVt
dWx0aXBsaWVkTGFzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMyQmlnKSk7Ci0KLSAgICBpZiAoIWJp
dG1hcENvbnRleHQpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotICAgIAotICAgIENHQ29udGV4
dFNldEJsZW5kTW9kZShiaXRtYXBDb250ZXh0LmdldCgpLCBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAg
ICBDR0NvbnRleHREcmF3SW1hZ2UoYml0bWFwQ29udGV4dC5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAw
LCAxLCAxKSwgaW1hZ2UuZ2V0KCkpOwotICAgIAotICAgIGlmICghcGl4ZWxbM10pCi0gICAgICAg
IHJldHVybiBDb2xvcigwLCAwLCAwLCAwKTsKLQotICAgIHJldHVybiBDb2xvcihwaXhlbFswXSAq
IDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsxXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsyXSAqIDI1
NSAvIHBpeGVsWzNdLCBwaXhlbFszXSk7Ci19Ci0KLX0KLQotYm9vbCBGcmFtZURhdGE6OmNsZWFy
KGJvb2wgY2xlYXJNZXRhZGF0YSkKLXsKLSAgICBpZiAoY2xlYXJNZXRhZGF0YSkKLSAgICAgICAg
bV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsKLQotICAgIG1fc3Vic2FtcGxpbmdMZXZlbCA9IDA7Ci0K
LSAgICBpZiAobV9pbWFnZSkgewotI2lmIENBQ0hFX1NVQklNQUdFUwotICAgICAgICBzdWJpbWFn
ZUNhY2hlKCkuY2xlYXJJbWFnZShtX2ltYWdlLmdldCgpKTsKLSNlbmRpZgotICAgICAgICBtX2lt
YWdlID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotQ0dJbWFnZVJlZiBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZVJlZigpCi17Ci0g
ICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KDApLmdldCgpOwotfQotCi1DR0ltYWdlUmVmIEJp
dG1hcEltYWdlOjpnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkK
LXsKLSAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIENHSW1hZ2VSZWYgY2dJbWFnZSA9IGZyYW1l
SW1hZ2VBdEluZGV4KGkpLmdldCgpOwotICAgICAgICBpZiAoY2dJbWFnZSAmJiBJbnRTaXplKENH
SW1hZ2VHZXRXaWR0aChjZ0ltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChjZ0ltYWdlKSkgPT0gc2l6
ZSkKLSAgICAgICAgICAgIHJldHVybiBjZ0ltYWdlOwotICAgIH0KLQotICAgIC8vIEZhbGxiYWNr
IHRvIHRoZSBkZWZhdWx0IENHSW1hZ2VSZWYgaWYgd2UgY2FuJ3QgZmluZCB0aGUgcmlnaHQgc2l6
ZQotICAgIHJldHVybiBnZXRDR0ltYWdlUmVmKCk7Ci19Ci0KLVJldGFpblB0cjxDRkFycmF5UmVm
PiBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZUFycmF5KCkKLXsKLSAgICBzaXplX3QgY291bnQgPSBm
cmFtZUNvdW50KCk7Ci0gICAgaWYgKCFjb3VudCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgCi0gICAgQ0ZNdXRhYmxlQXJyYXlSZWYgYXJyYXkgPSBDRkFycmF5Q3JlYXRlTXV0YWJsZShO
VUxMLCBjb3VudCwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcyk7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIGlmIChDR0ltYWdlUmVmIGN1cnJGcmFtZSA9
IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpKQotICAgICAgICAgICAgQ0ZBcnJheUFwcGVuZFZh
bHVlKGFycmF5LCBjdXJyRnJhbWUpOwotICAgIH0KLSAgICByZXR1cm4gYWRvcHRDRihhcnJheSk7
Ci19Ci0KLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjdHh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbXBvc2l0
ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFnZU9yaWVudGF0
aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pCi17Ci0jaWYgUExBVEZPUk0oSU9TKQotICAgIHN0
YXJ0QW5pbWF0aW9uKERvTm90Q2F0Y2hVcCk7Ci0jZWxzZQotICAgIHN0YXJ0QW5pbWF0aW9uKCk7
Ci0jZW5kaWYKLQotICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBpbWFnZTsKLSAgICAvLyBOZXZl
ciB1c2Ugc3Vic2FtcGxlZCBpbWFnZXMgZm9yIGRyYXdpbmcgaW50byBQREYgY29udGV4dHMuCi0g
ICAgaWYgKHdrQ0dDb250ZXh0SXNQREZDb250ZXh0KGN0eHQucGxhdGZvcm1Db250ZXh0KCkpKQot
ICAgICAgICBpbWFnZSA9IGNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZy
YW1lKTsKLSAgICBlbHNlIHsKLSAgICAgICAgQ0dSZWN0IHRyYW5zZm9ybWVkRGVzdGluYXRpb25S
ZWN0ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zvcm0oZGVzdFJlY3QsIENHQ29udGV4dEdldENU
TShjdHh0LnBsYXRmb3JtQ29udGV4dCgpKSk7Ci0gICAgICAgIGZsb2F0IHN1YnNhbXBsaW5nU2Nh
bGUgPSBzdGQ6Om1pbjxmbG9hdD4oMSwgc3RkOjptYXgodHJhbnNmb3JtZWREZXN0aW5hdGlvblJl
Y3Quc2l6ZS53aWR0aCAvIHNyY1JlY3Qud2lkdGgoKSwgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJl
Y3Quc2l6ZS5oZWlnaHQgLyBzcmNSZWN0LmhlaWdodCgpKSk7Ci0KLSAgICAgICAgaW1hZ2UgPSBm
cmFtZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFtZSwgc3Vic2FtcGxpbmdTY2FsZSk7Ci0gICAg
fQotCi0gICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBh
biBpbWFnZSB5ZXQuCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBDb2xvciBjb2xvciA9IHNp
bmdsZVBpeGVsU29saWRDb2xvcigpOwotICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHsKLSAgICAg
ICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQsIGRlc3RSZWN0LCBjb2xvciwgY29tcG9zaXRlT3Ap
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gU3Vic2FtcGxpbmcgbWF5IGhhdmUg
Z2l2ZW4gdXMgYW4gaW1hZ2UgdGhhdCBpcyBzbWFsbGVyIHRoYW4gc2l6ZSgpLgotICAgIEludFNp
emUgaW1hZ2VTaXplKENHSW1hZ2VHZXRXaWR0aChpbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWln
aHQoaW1hZ2UuZ2V0KCkpKTsKLSAgICAKLSAgICAvLyBzcmNSZWN0IGlzIGluIHRoZSBjb29yZGlu
YXRlcyBvZiB0aGUgdW5zdWJzYW1wbGVkIGltYWdlLCBzbyB3ZSBoYXZlIHRvIG1hcCBpdCB0byB0
aGUgc3Vic2FtcGxlZCBpbWFnZS4KLSAgICBGbG9hdFJlY3Qgc2NhbGVkU3JjUmVjdCA9IHNyY1Jl
Y3Q7Ci0gICAgaWYgKGltYWdlU2l6ZSAhPSBtX3NpemUpIHsKLSAgICAgICAgRmxvYXRSZWN0IG9y
aWdpbmFsSW1hZ2VCb3VuZHMoRmxvYXRQb2ludCgpLCBtX3NpemUpOwotICAgICAgICBGbG9hdFJl
Y3Qgc3Vic2FtcGxlZEltYWdlQm91bmRzKEZsb2F0UG9pbnQoKSwgaW1hZ2VTaXplKTsKLSAgICAg
ICAgc2NhbGVkU3JjUmVjdCA9IG1hcFJlY3Qoc3JjUmVjdCwgb3JpZ2luYWxJbWFnZUJvdW5kcywg
c3Vic2FtcGxlZEltYWdlQm91bmRzKTsKLSAgICB9Ci0gICAgCi0gICAgSW1hZ2VPcmllbnRhdGlv
biBvcmllbnRhdGlvbjsKLSAgICBpZiAoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRp
b24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikKLSAgICAgICAgb3JpZW50YXRpb24gPSBm
cmFtZU9yaWVudGF0aW9uQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0KLSAgICBjdHh0LmRyYXdO
YXRpdmVJbWFnZShpbWFnZSwgaW1hZ2VTaXplLCBkZXN0UmVjdCwgc2NhbGVkU3JjUmVjdCwgY29t
cG9zaXRlT3AsIGJsZW5kTW9kZSwgb3JpZW50YXRpb24pOwotCi0gICAgaWYgKGltYWdlT2JzZXJ2
ZXIoKSkKLSAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwotfQotCi1SZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gQml0bWFwSW1hZ2U6OmNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdElu
ZGV4KHNpemVfdCBpbmRleCkKLXsKLSAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3VudCgpKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkg
fHwgIW1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKQotICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAw
KTsKLQotICAgIGlmICghbV9mcmFtZXNbaW5kZXhdLm1fc3Vic2FtcGxpbmdMZXZlbCkKLSAgICAg
ICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOwotCi0gICAgcmV0dXJuIG1fc291cmNl
LmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGluZGV4KTsKLX0KLQotfQotCi0jZW5kaWYgLy8gVVNF
KENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0
dGVybkNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5D
Ry5jcHAKaW5kZXggYjQyOGQ1MGQ5NGJmOTI0MjgwMzI4N2QyZWVjMTZiZDY5YzUyOGQ5Mi4uM2Rh
YTEzOWFiN2VhNWI0MjE1Nzc4ODM1ZDM1M2Q4YWRiNWYwYzc1ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCkBAIC03Miw3ICs3Miw3
IEBAIENHUGF0dGVyblJlZiBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB1c2VyU3BhY2VUcmFuCiAgICAgLy8gSWYgd2UncmUgcmVwZWF0aW5nIGlu
IGJvdGggZGlyZWN0aW9ucywgd2UgY2FuIHVzZSBpbWFnZS1iYWNrZWQgcGF0dGVybnMKICAgICAv
LyBpbnN0ZWFkIG9mIGN1c3RvbSBwYXR0ZXJucywgYW5kIGF2b2lkIHRpbGluZy1lZGdlIHBpeGVs
IGNyYWNrcy4KICAgICBpZiAobV9yZXBlYXRYICYmIG1fcmVwZWF0WSkKLSAgICAgICAgcmV0dXJu
IHdrQ0dQYXR0ZXJuQ3JlYXRlV2l0aEltYWdlQW5kVHJhbnNmb3JtKHRpbGVJbWFnZSgpLT5nZXRD
R0ltYWdlUmVmKCksIHBhdHRlcm5UcmFuc2Zvcm0sIHdrUGF0dGVyblRpbGluZ0NvbnN0YW50U3Bh
Y2luZyk7CisgICAgICAgIHJldHVybiB3a0NHUGF0dGVybkNyZWF0ZVdpdGhJbWFnZUFuZFRyYW5z
Zm9ybSh0aWxlSW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKS5nZXQoKSwgcGF0dGVyblRyYW5zZm9ybSwg
d2tQYXR0ZXJuVGlsaW5nQ29uc3RhbnRTcGFjaW5nKTsKIAogICAgIC8vIElmIEZMVF9NQVggc2hv
dWxkIGFsc28gYmUgdXNlZCBmb3IgeFN0ZXAgb3IgeVN0ZXAsIG5vdGhpbmcgaXMgcmVuZGVyZWQu
IFVzaW5nIGZyYWN0aW9ucyBvZiBGTFRfTUFYIGFsc28KICAgICAvLyByZXN1bHQgaW4gbm90aGlu
ZyBiZWluZyByZW5kZXJlZC4KQEAgLTgzLDcgKzgzLDcgQEAgQ0dQYXR0ZXJuUmVmIFBhdHRlcm46
OmNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRy
YW4KICAgICBDR0Zsb2F0IHlTdGVwID0gbV9yZXBlYXRZID8gdGlsZVJlY3QuaGVpZ2h0KCkgOiAo
MSA8PCAyMik7CiAKICAgICAvLyBUaGUgcGF0dGVybiB3aWxsIHJlbGVhc2UgdGhlIENHSW1hZ2VS
ZWYgd2hlbiBpdCdzIGRvbmUgcmVuZGVyaW5nIGluIHBhdHRlcm5SZWxlYXNlQ2FsbGJhY2sKLSAg
ICBDR0ltYWdlUmVmIHBsYXRmb3JtSW1hZ2UgPSBDR0ltYWdlUmV0YWluKHRpbGVJbWFnZSgpLT5n
ZXRDR0ltYWdlUmVmKCkpOworICAgIENHSW1hZ2VSZWYgcGxhdGZvcm1JbWFnZSA9IHRpbGVJbWFn
ZSgpLT5uYXRpdmVJbWFnZSgpLmxlYWtSZWYoKTsKIAogICAgIGNvbnN0IENHUGF0dGVybkNhbGxi
YWNrcyBwYXR0ZXJuQ2FsbGJhY2tzID0geyAwLCBwYXR0ZXJuQ2FsbGJhY2ssIHBhdHRlcm5SZWxl
YXNlQ2FsbGJhY2sgfTsKICAgICByZXR1cm4gQ0dQYXR0ZXJuQ3JlYXRlKHBsYXRmb3JtSW1hZ2Us
IHRpbGVSZWN0LCBwYXR0ZXJuVHJhbnNmb3JtLCB4U3RlcCwgeVN0ZXAsIGtDR1BhdHRlcm5UaWxp
bmdDb25zdGFudFNwYWNpbmcsIFRSVUUsICZwYXR0ZXJuQ2FsbGJhY2tzKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmFmYjJkZTBlYTEyZGEyMTRmMTA0NmMzOTYyZThlYWI1M2M2NDQxMjUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0
Zm9ybUltYWdlQ0cuY3BwCkBAIC0wLDAgKzEsMTcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtSW1hZ2UuaCIKKworI2lmIFVTRShDRykKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5j
bHVkZSAiQ29yZUdyYXBoaWNzU1BJLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVk
ZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgor
I2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmgi
CisKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dl
YktpdFN5c3RlbUludGVyZmFjZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAg
ICAKK3ZvaWQgUGxhdGZvcm1JbWFnZTo6Y2xlYXJTdWJJbWFnZXMoKQoreworI2lmIENBQ0hFX1NV
QklNQUdFUworICAgIGlmICghaXNOaWwoKSkKKyAgICAgICAgc3ViaW1hZ2VDYWNoZSgpLmNsZWFy
SW1hZ2UoY2dJbWFnZVJlZigpKTsKKyNlbmRpZgorfQorCitJbnRTaXplIFBsYXRmb3JtSW1hZ2U6
OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBpc05pbCgpID8gSW50U2l6ZSgpIDogSW50U2l6
ZShDR0ltYWdlR2V0V2lkdGgoY2dJbWFnZVJlZigpKSwgQ0dJbWFnZUdldEhlaWdodChjZ0ltYWdl
UmVmKCkpKTsKK30KKworYm9vbCBQbGF0Zm9ybUltYWdlOjpoYXNBbHBoYSgpIGNvbnN0Cit7Cisg
ICAgLy8gRklYTUU6IEFuc3dlciBjb3JyZWN0bHkgdGhlIHF1ZXN0aW9uOiBkb2VzIHRoZSBDR0lt
YWdlUmVmIGhhdmUgYWxwaGEgY2hhbm5uZWw/CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0NvbG9y
IFBsYXRmb3JtSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0Cit7CisgICAgaWYg
KGlzTmlsKCkgfHwgc2l6ZSgpICE9IEludFNpemUoMSwgMSkpCisgICAgICAgIHJldHVybiBDb2xv
cigpOworICAgIAorICAgIHVuc2lnbmVkIGNoYXIgcGl4ZWxbNF07IC8vIFJHQkEKKyAgICBhdXRv
IGJpdG1hcENvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShwaXhlbCwgMSwg
MSwgOCwgc2l6ZW9mKHBpeGVsKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwKKyAgICAgICAga0NHSW1h
Z2VBbHBoYVByZW11bHRpcGxpZWRMYXN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcpKTsKKyAg
ICAKKyAgICBpZiAoIWJpdG1hcENvbnRleHQpCisgICAgICAgIHJldHVybiBDb2xvcigpOworICAg
IAorICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShiaXRtYXBDb250ZXh0LmdldCgpLCBrQ0dCbGVu
ZE1vZGVDb3B5KTsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoYml0bWFwQ29udGV4dC5nZXQoKSwg
Q0dSZWN0TWFrZSgwLCAwLCAxLCAxKSwgY2dJbWFnZVJlZigpKTsKKyAgICAKKyAgICBpZiAoIXBp
eGVsWzNdKQorICAgICAgICByZXR1cm4gQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgCisgICAgcmV0
dXJuIENvbG9yKHBpeGVsWzBdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICogMjU1IC8gcGl4
ZWxbM10sIHBpeGVsWzJdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKK30KKyAgICAKK2Jv
b2wgUGxhdGZvcm1JbWFnZTo6aXNBbG1vc3RTb2xpZENvbG9yKCkgY29uc3QKK3sKKyAgICBDR0lt
YWdlUmVmIGltYWdlID0gY2dJbWFnZVJlZigpOworICAgIEFTU0VSVChDR0ltYWdlR2V0Qml0c1Bl
ckNvbXBvbmVudChpbWFnZSkgPT0gOCk7CisgICAgCisgICAgQ0dCaXRtYXBJbmZvIGltYWdlSW5m
byA9IENHSW1hZ2VHZXRCaXRtYXBJbmZvKGltYWdlKTsKKyAgICBpZiAoIShpbWFnZUluZm8gJiBr
Q0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSkgfHwgKGltYWdlSW5mbyAmIGtDR0JpdG1hcEFscGhh
SW5mb01hc2spICE9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QpIHsKKyAgICAgICAg
Ly8gRklYTUU6IENvbnNpZGVyIGJlaW5nIGFibGUgdG8gaGFuZGxlIG90aGVyIHBpeGVsIGZvcm1h
dHMuCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIAorICAgIHNpemVfdCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0aChpbWFnZSk7
CisgICAgc2l6ZV90IGhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpOworICAgIHNpemVf
dCBieXRlc1BlclJvdyA9IENHSW1hZ2VHZXRCeXRlc1BlclJvdyhpbWFnZSk7CisgICAgCisgICAg
UmV0YWluUHRyPENGRGF0YVJlZj4gcHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ29w
eURhdGEoQ0dJbWFnZUdldERhdGFQcm92aWRlcihpbWFnZSkpKTsKKyAgICBjb25zdCBVSW50OCog
ZGF0YSA9IENGRGF0YUdldEJ5dGVQdHIocHJvdmlkZXIuZ2V0KCkpOworICAgIAorICAgIC8vIE92
ZXJsYXkgYSBncmlkIG9mIHNhbXBsaW5nIGRvdHMgb24gdG9wIG9mIGEgZ3JheXNjYWxlIHZlcnNp
b24gb2YgdGhlIGltYWdlLgorICAgIC8vIEZvciB0aGUgaW50ZXJpb3IgcG9pbnRzLCBjYWxjdWxh
dGUgdGhlIGRpZmZlcmVuY2UgaW4gbHVtaW5hbmNlIGFtb25nIHRoZSBzYW1wbGUgcG9pbnQKKyAg
ICAvLyBhbmQgaXRzIHN1cnJvdW5kcyBwb2ludHMsIHNjYWxlZCBieSB0cmFuc3BhcmVuY3kuCisg
ICAgY29uc3QgdW5zaWduZWQgc2FtcGxlUm93cyA9IDc7CisgICAgY29uc3QgdW5zaWduZWQgc2Ft
cGxlQ29scyA9IDc7CisgICAgLy8gRklYTUU6IFJlZmluZSB0aGUgcHJvcGVyIG51bWJlciBvZiBz
YW1wbGVzLCBhbmQgYWNjb21tb2RhdGUgZGlmZmVyZW50IGFzcGVjdCByYXRpb3MuCisgICAgaWYg
KHdpZHRoIDwgc2FtcGxlQ29scyB8fCBoZWlnaHQgPCBzYW1wbGVSb3dzKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgCisgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGxhc3Qgcm93L2NvbHVtbiBs
YW5kIG9uIHRoZSBpbWFnZSBwZXJpbWV0ZXIuCisgICAgY29uc3QgZmxvYXQgc3RyaWRlV2lkdGgg
PSBzdGF0aWNfY2FzdDxmbG9hdD4od2lkdGggLSAxKSAvIChzYW1wbGVDb2xzIC0gMSk7CisgICAg
Y29uc3QgZmxvYXQgc3RyaWRlSGVpZ2h0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGhlaWdodCAtIDEp
IC8gKHNhbXBsZVJvd3MgLSAxKTsKKyAgICBmbG9hdCBzYW1wbGVzW3NhbXBsZVJvd3NdW3NhbXBs
ZUNvbHNdOworICAgIAorICAgIC8vIEZpbmQgdGhlIGx1bWluYW5jZSBvZiB0aGUgc2FtcGxlIHBv
aW50cy4KKyAgICBmbG9hdCB5ID0gMDsKKyAgICBjb25zdCBVSW50OCogcm93ID0gZGF0YTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2FtcGxlUm93czsgKytpKSB7CisgICAgICAgIGZs
b2F0IHggPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc2FtcGxlQ29sczsg
KytqKSB7CisgICAgICAgICAgICBjb25zdCBVSW50OCogcDAgPSByb3cgKyAoc3RhdGljX2Nhc3Q8
aW50Pih4ICsgLjUpKSAqIDQ7CisgICAgICAgICAgICAvLyBSIEcgQiBBCisgICAgICAgICAgICBz
YW1wbGVzW2ldW2pdID0gKDAuMjEyNSAqICpwMCArIDAuNzE1NCAqICoocDArMSkgKyAwLjA3MjEg
KiAqKHAwKzIpKSAqICoocDArMykgLyAyNTU7CisgICAgICAgICAgICB4ICs9IHN0cmlkZVdpZHRo
OworICAgICAgICB9CisgICAgICAgIHkgKz0gc3RyaWRlSGVpZ2h0OworICAgICAgICByb3cgPSBk
YXRhICsgKHN0YXRpY19jYXN0PGludD4oeSArIC41KSkgKiBieXRlc1BlclJvdzsKKyAgICB9Cisg
ICAgCisgICAgLy8gRGV0ZXJtaW5lIHRoZSBpbWFnZSBzY29yZS4KKyAgICBmbG9hdCBhY2N1bVNj
b3JlID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgc2FtcGxlUm93cyAtIDE7ICsr
aSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAxOyBqIDwgc2FtcGxlQ29scyAtIDE7ICsr
aikgeworICAgICAgICAgICAgZmxvYXQgZGlmZiA9IHNhbXBsZXNbaSAtIDFdW2pdICsgc2FtcGxl
c1tpICsgMV1bal0gKyBzYW1wbGVzW2ldW2ogLSAxXSArIHNhbXBsZXNbaV1baiArIDFdIC0gNCAq
IHNhbXBsZXNbaV1bal07CisgICAgICAgICAgICBhY2N1bVNjb3JlICs9IGRpZmYgKiBkaWZmOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFRoZSBzY29yZSBmb3IgYSBnaXZlbiBzYW1w
bGUgY2FuIGJlIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgMCBhbmQgMjU1XjIuCisgICAgcmV0dXJuIGFj
Y3VtU2NvcmUgPCAyNTAwICogKHNhbXBsZVJvd3MgLSAyKSAqIChzYW1wbGVDb2xzIC0gMik7Cit9
CisKK2Zsb2F0IFBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUoR3JhcGhpY3NDb250ZXh0
JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QpCit7CisgICAgLy8gTmV2ZXIgdXNlIHN1YnNhbXBsZWQgaW1hZ2VzIGZvciBkcmF3aW5n
IGludG8gUERGIGNvbnRleHRzLgorICAgIGlmICh3a0NHQ29udGV4dElzUERGQ29udGV4dChjb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgCisgICAgQ0dS
ZWN0IHRyYW5zZm9ybWVkRGVzdGluYXRpb25SZWN0ID0gQ0dSZWN0QXBwbHlBZmZpbmVUcmFuc2Zv
cm0oZGVzdFJlY3QsIENHQ29udGV4dEdldENUTShjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpKSk7
CisgICAgcmV0dXJuIHN0ZDo6bWluPGZsb2F0PigxLCBzdGQ6Om1heCh0cmFuc2Zvcm1lZERlc3Rp
bmF0aW9uUmVjdC5zaXplLndpZHRoIC8gc3JjUmVjdC53aWR0aCgpLCB0cmFuc2Zvcm1lZERlc3Rp
bmF0aW9uUmVjdC5zaXplLmhlaWdodCAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsKK30KKwordm9pZCBQ
bGF0Zm9ybUltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRTaXplJiBz
cmNTaXplLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUsIGNvbnN0IEltYWdl
T3JpZW50YXRpb24mIG9yaWVudGF0aW9uKSBjb25zdAoreworICAgIC8vIFN1YnNhbXBsaW5nIG1h
eSBoYXZlIGdpdmVuIHVzIGFuIGltYWdlIHRoYXQgaXMgc21hbGxlciB0aGFuIHNpemUoKS4KKyAg
ICBJbnRTaXplIHN1YnNhbXBsZWRJbWFnZVNpemUgPSBzaXplKCk7CisgICAgCisgICAgLy8gc3Jj
UmVjdCBpcyBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHVuc3Vic2FtcGxlZCBpbWFnZSwgc28g
d2UgaGF2ZSB0byBtYXAgaXQgdG8gdGhlIHN1YnNhbXBsZWQgaW1hZ2UuCisgICAgRmxvYXRSZWN0
IGFkanVzdGVkU3JjUmVjdCA9IHNyY1JlY3Q7CisgICAgaWYgKHN1YnNhbXBsZWRJbWFnZVNpemUg
IT0gc3JjU2l6ZSkKKyAgICAgICAgYWRqdXN0ZWRTcmNSZWN0ID0gbWFwUmVjdChzcmNSZWN0LCBG
bG9hdFJlY3QoeyB9LCBzcmNTaXplKSwgRmxvYXRSZWN0KHsgfSwgc3Vic2FtcGxlZEltYWdlU2l6
ZSkpOworICAgIAorICAgIGNvbnRleHQuZHJhd05hdGl2ZUltYWdlKG1faW1hZ2UsIHN1YnNhbXBs
ZWRJbWFnZVNpemUsIGRlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIG9wLCBtb2RlLCBvcmllbnRh
dGlvbik7Cit9CisgICAgCit9CisKKyNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlv
bkNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRy
YWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbQppbmRleCA4OTcyMGQxNzM2NWRhN2U4YmE4NDY5ZDUy
OTQ1NDhkNTE4NDdhN2ZlLi40NDc2ZmM1Zjg3YzM0OTg4ZjZkOWFkNTVlZWJkOGQxYjliYjAyMmU1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0
VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0KQEAgLTEyOSw3
ICsxMjksNyBAQCBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hOjp+VGV4dFRyYWNrUmVwcmVz
ZW50YXRpb25Db2NvYSgpCiB2b2lkIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2E6OnVwZGF0
ZSgpCiB7CiAgICAgaWYgKGF1dG8gcmVwcmVzZW50YXRpb24gPSBtX2NsaWVudC5jcmVhdGVUZXh0
VHJhY2tSZXByZXNlbnRhdGlvbkltYWdlKCkpCi0gICAgICAgIFttX2xheWVyLmdldCgpIHNldENv
bnRlbnRzOihpZClyZXByZXNlbnRhdGlvbi0+Z2V0Q0dJbWFnZVJlZigpXTsKKyAgICAgICAgW21f
bGF5ZXIuZ2V0KCkgc2V0Q29udGVudHM6KGlkKXJlcHJlc2VudGF0aW9uLT5uYXRpdmVJbWFnZSgp
LmdldCgpXTsKIH0KIAogdm9pZCBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hOjpzZXRDb250
ZW50U2NhbGUoZmxvYXQgc2NhbGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvSW1hZ2VNYWMubW0KaW5kZXggMDFlYjZkZDMwMDQzYTIyNTI5MTc2ZmQ5MTIxMTdk
YzU3NzZjMTdiYS4uZGMxYzdjNzA5NWQ5NDRjNGM2MmYxZmUwOTM1NzAyYTEzYzdjN2E0MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQpA
QCAtODUsMzEgKzg1LDIyIEBAIENGRGF0YVJlZiBCaXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2Vu
dGF0aW9uKCkKICAgICBpZiAobV90aWZmUmVwKQogICAgICAgICByZXR1cm4gbV90aWZmUmVwLmdl
dCgpOwogCi0gICAgdW5zaWduZWQgbnVtRnJhbWVzID0gZnJhbWVDb3VudCgpOworICAgIGF1dG8g
bmF0aXZlSW1hZ2VzID0gdGhpcy0+ZnJhbWVzTmF0aXZlSW1hZ2VzKCk7CiAKLSAgICAvLyBJZiBu
dW1GcmFtZXMgaXMgemVybywgd2Uga25vdyBmb3IgY2VydGFpbiB0aGlzIGltYWdlIGRvZXNuJ3Qg
aGF2ZSB2YWxpZCBkYXRhCisgICAgLy8gSWYgZnJhbWVzSW1hZ2VzLnNpemUoKSBpcyB6ZXJvLCB3
ZSBrbm93IGZvciBjZXJ0YWluIHRoaXMgaW1hZ2UgZG9lc24ndCBoYXZlIHZhbGlkIGRhdGEKICAg
ICAvLyBFdmVuIHRob3VnaCB0aGUgY2FsbCB0byBDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVXaXRo
RGF0YSB3aWxsIGZhaWwgYW5kIHdlJ2xsIGhhbmRsZSBpdCBncmFjZWZ1bGx5LAogICAgIC8vIGlu
IGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyB0aGF0IGNhbGwgd2lsbCBzcGFtIHRoZSBjb25zb2xlIHdp
dGggYW4gZXJyb3IgbWVzc2FnZQotICAgIGlmICghbnVtRnJhbWVzKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIFZlY3RvcjxDR0ltYWdlUmVmPiBpbWFnZXM7Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG51bUZyYW1lczsgKytpICkgewotICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2Ug
PSBmcmFtZUltYWdlQXRJbmRleChpKS5nZXQoKTsKLSAgICAgICAgaWYgKGNnSW1hZ2UpCi0gICAg
ICAgICAgICBpbWFnZXMuYXBwZW5kKGNnSW1hZ2UpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIG51
bVZhbGlkRnJhbWVzID0gaW1hZ2VzLnNpemUoKTsKKyAgICBpZiAoIW5hdGl2ZUltYWdlcy5zaXpl
KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgUmV0YWluUHRyPENGTXV0YWJsZURh
dGFSZWY+IGRhdGEgPSBhZG9wdENGKENGRGF0YUNyZWF0ZU11dGFibGUoMCwgMCkpOwotICAgIFJl
dGFpblB0cjxDR0ltYWdlRGVzdGluYXRpb25SZWY+IGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0lt
YWdlRGVzdGluYXRpb25DcmVhdGVXaXRoRGF0YShkYXRhLmdldCgpLCBrVVRUeXBlVElGRiwgbnVt
VmFsaWRGcmFtZXMsIDApKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZURlc3RpbmF0aW9uUmVmPiBk
ZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0
YS5nZXQoKSwga1VUVHlwZVRJRkYsIG5hdGl2ZUltYWdlcy5zaXplKCksIDApKTsKIAogICAgIGlm
ICghZGVzdGluYXRpb24pCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1WYWxpZEZyYW1lczsgKytpKQot
ICAgICAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwgaW1h
Z2VzW2ldLCAwKTsKKyAgICBmb3IgKGF1dG8gbmF0aXZlSW1hZ2UgOiBuYXRpdmVJbWFnZXMpCisg
ICAgICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9uLmdldCgpLCBuYXRp
dmVJbWFnZS5nZXQoKSwgMCk7CiAKICAgICBDR0ltYWdlRGVzdGluYXRpb25GaW5hbGl6ZShkZXN0
aW5hdGlvbi5nZXQoKSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCmluZGV4IDIxNzUzYmQwNzhhMWM1NWMzMjcx
OWMxNDg0NmYwZjZiOTk3NWY4ZmQuLmMwMGZiN2QzM2QwZTYxOGUyOWYxNDI5MGU1OGU5ZDI5ZTQ0
OTI4MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L0ltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvSW1hZ2VEZWNvZGVyLmNwcApAQCAtMTQyLDYgKzE0Miw3IEBAIEltYWdlRnJhbWUmIElt
YWdlRnJhbWU6Om9wZXJhdG9yPShjb25zdCBJbWFnZUZyYW1lJiBvdGhlcikKICAgICAgICAgcmV0
dXJuICp0aGlzOwogCiAgICAgY29weUJpdG1hcERhdGEob3RoZXIpOworICAgIHNldEhhc0FscGhh
KG90aGVyLm1faGFzQWxwaGEpOwogICAgIHNldE9yaWdpbmFsRnJhbWVSZWN0KG90aGVyLm9yaWdp
bmFsRnJhbWVSZWN0KCkpOwogICAgIHNldFN0YXR1cyhvdGhlci5zdGF0dXMoKSk7CiAgICAgc2V0
RHVyYXRpb24ob3RoZXIuZHVyYXRpb24oKSk7CkBAIC0xNTIsOCArMTUzLDcgQEAgSW1hZ2VGcmFt
ZSYgSW1hZ2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0IEltYWdlRnJhbWUmIG90aGVyKQogCiB2b2lk
IEltYWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKCkKIHsKLSAgICBtX2JhY2tpbmdTdG9yZS5jbGVh
cigpOwotICAgIG1fYnl0ZXMgPSAwOworICAgIG1fcGl4ZWxzID0gbnVsbHB0cjsKICAgICBtX3N0
YXR1cyA9IEZyYW1lRW1wdHk7CiAgICAgLy8gTk9URTogRG8gbm90IHJlc2V0IG90aGVyIG1lbWJl
cnMgaGVyZTsgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKCkgY2FsbHMgdGhpcwogICAgIC8vIHRvIGZy
ZWUgdGhlIGJpdG1hcCBkYXRhLCBidXQgb3RoZXIgZnVuY3Rpb25zIGxpa2UgaW5pdEZyYW1lQnVm
ZmVyKCkgYW5kCkBAIC0xNjMsMjQgKzE2MywxNiBAQCB2b2lkIEltYWdlRnJhbWU6OmNsZWFyUGl4
ZWxEYXRhKCkKIAogdm9pZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSgpCiB7Ci0gICAg
bWVtc2V0KG1fYnl0ZXMsIDAsIG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgpICogc2l6
ZW9mKFBpeGVsRGF0YSkpOworICAgIG1fcGl4ZWxzLmNsZWFyKCk7CiAgICAgbV9oYXNBbHBoYSA9
IHRydWU7CiB9CiAKIHZvaWQgSW1hZ2VGcmFtZTo6emVyb0ZpbGxGcmFtZVJlY3QoY29uc3QgSW50
UmVjdCYgcmVjdCkKIHsKLSAgICBBU1NFUlQoSW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUpLmNv
bnRhaW5zKHJlY3QpKTsKLQogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkgKiBzaXplb2Yo
UGl4ZWxEYXRhKTsKLSAgICBQaXhlbERhdGEqIHN0YXJ0ID0gbV9ieXRlcyArIChyZWN0LnkoKSAq
IHdpZHRoKCkpICsgcmVjdC54KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0LmhlaWdo
dCgpOyArK2kpIHsKLSAgICAgICAgbWVtc2V0KHN0YXJ0LCAwLCByZWN0V2lkdGhJbkJ5dGVzKTsK
LSAgICAgICAgc3RhcnQgKz0gd2lkdGgoKTsKLSAgICB9Ci0KKyAgICBtX3BpeGVscy5jbGVhclJl
Y3QocmVjdCk7CiAgICAgc2V0SGFzQWxwaGEodHJ1ZSk7CiB9CiAKQEAgLTE4OSwyNSArMTgxLDIz
IEBAIGJvb2wgSW1hZ2VGcmFtZTo6Y29weUJpdG1hcERhdGEoY29uc3QgSW1hZ2VGcmFtZSYgb3Ro
ZXIpCiAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IG1fYmFja2luZ1N0b3JlID0gb3RoZXIubV9iYWNraW5nU3RvcmU7Ci0gICAgbV9ieXRlcyA9IG1f
YmFja2luZ1N0b3JlLmRhdGEoKTsKLSAgICBtX3NpemUgPSBvdGhlci5tX3NpemU7Ci0gICAgc2V0
SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7CisgICAgaWYgKG90aGVyLm1fcGl4ZWxzKQorICAg
ICAgICBtX3BpeGVscyA9IEJpdG1hcFBpeGVsczo6Y3JlYXRlKCpvdGhlci5tX3BpeGVscyk7Cisg
ICAgZWxzZQorICAgICAgICBtX3BpeGVscyA9IG51bGxwdHI7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKIGJvb2wgSW1hZ2VGcmFtZTo6c2V0U2l6ZShpbnQgbmV3V2lkdGgsIGludCBuZXdIZWlnaHQp
CiB7Ci0gICAgQVNTRVJUKCF3aWR0aCgpICYmICFoZWlnaHQoKSk7Ci0gICAgc2l6ZV90IGJhY2tp
bmdTdG9yZVNpemUgPSBuZXdXaWR0aCAqIG5ld0hlaWdodDsKLSAgICBpZiAoIW1fYmFja2luZ1N0
b3JlLnRyeVJlc2VydmVDYXBhY2l0eShiYWNraW5nU3RvcmVTaXplKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIG1fYmFja2luZ1N0b3JlLnJlc2l6ZShiYWNraW5nU3RvcmVTaXplKTsKLSAg
ICBtX2J5dGVzID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOwotICAgIG1fc2l6ZSA9IEludFNpemUo
bmV3V2lkdGgsIG5ld0hlaWdodCk7CisgICAgQVNTRVJUKCFtX3BpeGVscyk7CisgICAgbV9waXhl
bHMgPSBCaXRtYXBQaXhlbHM6OmNyZWF0ZShJbnRTaXplKG5ld1dpZHRoLCBuZXdIZWlnaHQpLCBt
X3ByZW11bHRpcGx5QWxwaGEpOworICAgIHJldHVybiBtX3BpeGVsczsKK30KIAotICAgIHplcm9G
aWxsUGl4ZWxEYXRhKCk7Ci0gICAgcmV0dXJuIHRydWU7Cit2b2lkIEltYWdlRnJhbWU6OmNvcHlS
b3dOVGltZXMoaW50IHN0YXJ0WCwgaW50IGVuZFgsIGludCBzdGFydFksIGludCBlbmRZKQorewor
ICAgIG1fcGl4ZWxzLT5yZXBlYXRGaXJzdFJvdyhJbnRSZWN0KHN0YXJ0WCwgc3RhcnRZLCBlbmRY
IC1zdGFydFggLCBlbmRZIC0gc3RhcnRZKSk7CiB9CiAKIGJvb2wgSW1hZ2VGcmFtZTo6aGFzQWxw
aGEoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvSW1hZ2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9JbWFnZURlY29kZXIuaAppbmRleCAyZjhlZWUxNzgxZDE2MmQ4NmM0OWZlMWRhYzcyYTJl
N2U0MGE1ZDZkLi42Zjk5NDM3MzViOGI5ZDJiZWRlODk5MzU3MTIyZDk2ODc5YTEyZDJjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29k
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURl
Y29kZXIuaApAQCAtMjgsNiArMjgsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkJp
dG1hcFBpeGVscy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJbWFnZVNvdXJj
ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCkBAIC01Nyw3ICs1OCw2IEBAIHVzaW5n
IENvbG9yUHJvZmlsZSA9IFZlY3RvcjxjaGFyPjsKICAgICAgICAgICAgIERpc3Bvc2VPdmVyd3Jp
dGVQcmV2aW91cyAgLy8gQ2xlYXIgZnJhbWUgdG8gcHJldmlvdXMgZnJhbWVidWZmZXIKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udGVudHMKICAgICAgICAgfTsK
LSAgICAgICAgdHlwZWRlZiB1bnNpZ25lZCBQaXhlbERhdGE7CiAKICAgICAgICAgSW1hZ2VGcmFt
ZSgpOwogCkBAIC04MCwxNyArODAsNyBAQCB1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hh
cj47CiAgICAgICAgIC8vIENvcGllcyB0aGUgcGl4ZWwgZGF0YSBhdCBbKHN0YXJ0WCwgc3RhcnRZ
KSwgKGVuZFgsIHN0YXJ0WSkpIHRvIHRoZQogICAgICAgICAvLyBzYW1lIFgtY29vcmRpbmF0ZXMg
b24gZWFjaCBzdWJzZXF1ZW50IHJvdyB1cCB0byBidXQgbm90IGluY2x1ZGluZwogICAgICAgICAv
LyBlbmRZLgotICAgICAgICB2b2lkIGNvcHlSb3dOVGltZXMoaW50IHN0YXJ0WCwgaW50IGVuZFgs
IGludCBzdGFydFksIGludCBlbmRZKQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoc3Rh
cnRYIDwgd2lkdGgoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoZW5kWCA8PSB3aWR0aCgpKTsKLSAg
ICAgICAgICAgIEFTU0VSVChzdGFydFkgPCBoZWlnaHQoKSk7Ci0gICAgICAgICAgICBBU1NFUlQo
ZW5kWSA8PSBoZWlnaHQoKSk7Ci0gICAgICAgICAgICBjb25zdCBpbnQgcm93Qnl0ZXMgPSAoZW5k
WCAtIHN0YXJ0WCkgKiBzaXplb2YoUGl4ZWxEYXRhKTsKLSAgICAgICAgICAgIGNvbnN0IFBpeGVs
RGF0YSogY29uc3Qgc3RhcnRBZGRyID0gZ2V0QWRkcihzdGFydFgsIHN0YXJ0WSk7Ci0gICAgICAg
ICAgICBmb3IgKGludCBkZXN0WSA9IHN0YXJ0WSArIDE7IGRlc3RZIDwgZW5kWTsgKytkZXN0WSkK
LSAgICAgICAgICAgICAgICBtZW1jcHkoZ2V0QWRkcihzdGFydFgsIGRlc3RZKSwgc3RhcnRBZGRy
LCByb3dCeXRlcyk7Ci0gICAgICAgIH0KKyAgICAgICAgdm9pZCBjb3B5Um93TlRpbWVzKGludCBz
dGFydFgsIGludCBlbmRYLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSk7CiAKICAgICAgICAgLy8gQWxs
b2NhdGVzIHNwYWNlIGZvciB0aGUgcGl4ZWwgZGF0YS4gIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBh
bnkgcGl4ZWxzCiAgICAgICAgIC8vIGFyZSB3cml0dGVuLiAgTXVzdCBvbmx5IGJlIGNhbGxlZCBv
bmNlLiAgUmV0dXJucyB3aGV0aGVyIGFsbG9jYXRpb24KQEAgLTEwMCw3ICs5MCw3IEBAIHVzaW5n
IENvbG9yUHJvZmlsZSA9IFZlY3RvcjxjaGFyPjsKICAgICAgICAgLy8gUmV0dXJucyBhIGNhbGxl
ci1vd25lZCBwb2ludGVyIHRvIHRoZSB1bmRlcmx5aW5nIG5hdGl2ZSBpbWFnZSBkYXRhLgogICAg
ICAgICAvLyAoQWN0dWFsIHVzZTogVGhpcyBwb2ludGVyIHdpbGwgYmUgb3duZWQgYnkgQml0bWFw
SW1hZ2UgYW5kIGZyZWVkIGluCiAgICAgICAgIC8vIEZyYW1lRGF0YTo6Y2xlYXIoKSkuCi0gICAg
ICAgIE5hdGl2ZUltYWdlUHRyIGFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdDsKKyAgICAgICAgTmF0
aXZlSW1hZ2VQdHIgYXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxzLmlt
YWdlKCk7IH0KIAogICAgICAgICBib29sIGhhc0FscGhhKCkgY29uc3Q7CiAgICAgICAgIGNvbnN0
IEludFJlY3QmIG9yaWdpbmFsRnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5hbEZy
YW1lUmVjdDsgfQpAQCAtMTE5LDEwMSArMTA5LDQ0IEBAIHVzaW5nIENvbG9yUHJvZmlsZSA9IFZl
Y3RvcjxjaGFyPjsKIAogICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKGludCB4LCBpbnQgeSwg
dW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKICAgICAgICAg
ewotICAgICAgICAgICAgc2V0UkdCQShnZXRBZGRyKHgsIHkpLCByLCBnLCBiLCBhKTsKKyAgICAg
ICAgICAgIG1fcGl4ZWxzLnNldFJHQkEoeCwgeSwgciwgZywgYiwgYSk7CiAgICAgICAgIH0KIAot
ICAgICAgICBpbmxpbmUgUGl4ZWxEYXRhKiBnZXRBZGRyKGludCB4LCBpbnQgeSkKKyAgICAgICAg
aW5saW5lIFJHQkEzMiogZ2V0QWRkcihpbnQgeCwgaW50IHkpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBtX2J5dGVzICsgKHkgKiB3aWR0aCgpKSArIHg7CisgICAgICAgICAgICByZXR1
cm4gbV9waXhlbHMuYXQoeCwgeSk7CiAgICAgICAgIH0KIAogICAgICAgICBpbmxpbmUgYm9vbCBo
YXNQaXhlbERhdGEoKSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9ieXRl
czsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIFVzZSBmaXggcG9pbnQgbXVsdGlwbGllciBpbnN0
ZWFkIG9mIGludGVnZXIgZGl2aXNpb24gb3IgZmxvYXRpbmcgcG9pbnQgbWF0aC4KLSAgICAgICAg
Ly8gVGhpcyBtdWx0aXBsZXIgcHJvZHVjZXMgZXhhY3RseSB0aGUgc2FtZSByZXN1bHQgZm9yIGFs
bCB2YWx1ZXMgaW4gcmFuZ2UgMCAtIDI1NS4KLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IGZpeFBvaW50U2hpZnQgPSAyNDsKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZpeFBv
aW50TXVsdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPigxLjAgLyAyNTUuMCAqICgxIDw8IGZpeFBv
aW50U2hpZnQpKSArIDE7Ci0gICAgICAgIC8vIE11bHRpcGxpZXMgdW5zaWduZWQgdmFsdWUgYnkg
Zml4cG9pbnQgdmFsdWUgYW5kIGNvbnZlcnRzIGJhY2sgdG8gdW5zaWduZWQuCi0gICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkodW5zaWduZWQgZml4ZWQsIHVu
c2lnbmVkIHYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAgKGZpeGVkICogdikgPj4g
Zml4UG9pbnRTaGlmdDsKKyAgICAgICAgICAgIHJldHVybiBtX3BpeGVscy5nZXQoKTsKICAgICAg
ICAgfQogCi0gICAgICAgIGlubGluZSB2b2lkIHNldFJHQkEoUGl4ZWxEYXRhKiBkZXN0LCB1bnNp
Z25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgICAgICBpbmxp
bmUgdm9pZCBzZXRSR0JBKFJHQkEzMiogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5z
aWduZWQgYiwgdW5zaWduZWQgYSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fcHJlbXVs
dGlwbHlBbHBoYSAmJiBhIDwgMjU1KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFhKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICpkZXN0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhTXVsdCA9
IGEgKiBmaXhQb2ludE11bHQ7Ci0gICAgICAgICAgICAgICAgciA9IGZpeFBvaW50VW5zaWduZWRN
dWx0aXBseShyLCBhbHBoYU11bHQpOwotICAgICAgICAgICAgICAgIGcgPSBmaXhQb2ludFVuc2ln
bmVkTXVsdGlwbHkoZywgYWxwaGFNdWx0KTsKLSAgICAgICAgICAgICAgICBiID0gZml4UG9pbnRV
bnNpZ25lZE11bHRpcGx5KGIsIGFscGhhTXVsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAqZGVzdCA9IChhIDw8IDI0IHwgciA8PCAxNiB8IGcgPDwgOCB8IGIpOworICAgICAgICAgICAg
bV9waXhsZXMuc2V0UkdCQShkZXN0LCByLCBnLCBiLCBhKTsKICAgICAgICAgfQogCiAjaWYgRU5B
QkxFKEFQTkcpCi0gICAgICAgIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZGl2aWRlMjU1KHVuc2ln
bmVkIGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAoYSArIChhID4+IDgpICsgMSkg
Pj4gODsKLSAgICAgICAgfQotCi0gICAgICAgIGlubGluZSB2b2lkIG92ZXJSR0JBKFBpeGVsRGF0
YSogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkK
KyAgICAgICAgaW5saW5lIHZvaWQgb3ZlclJHQkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1
bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoIWEpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBpZiAoYSA8
IDI1NSkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFEZXN0ID0gKCgqZGVzdCkgPj4gMjQp
ICYgMjU1OwotICAgICAgICAgICAgICAgIGlmIChhRGVzdCkgewotICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCByRGVzdCA9ICgoKmRlc3QpID4+IDE2KSAmIDI1NTsKLSAgICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgZ0Rlc3QgPSAoKCpkZXN0KSA+PiA4KSAmIDI1NTsKLSAgICAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgYkRlc3QgPSAoKmRlc3QpICYgMjU1OwotICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBhQXV4ID0gMjU1IC0gYTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFt
X3ByZW11bHRpcGx5QWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJEZXN0ID0gZGl2
aWRlMjU1KHJEZXN0ICogYURlc3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ0Rlc3QgPSBk
aXZpZGUyNTUoZ0Rlc3QgKiBhRGVzdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiRGVzdCA9
IGRpdmlkZTI1NShiRGVzdCAqIGFEZXN0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICByID0gZGl2aWRlMjU1KHIgKiBhICsgckRlc3QgKiBhQXV4KTsKLSAgICAg
ICAgICAgICAgICAgICAgZyA9IGRpdmlkZTI1NShnICogYSArIGdEZXN0ICogYUF1eCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGIgPSBkaXZpZGUyNTUoYiAqIGEgKyBiRGVzdCAqIGFBdXgpOwotICAg
ICAgICAgICAgICAgICAgICBhICs9IGRpdmlkZTI1NShhRGVzdCAqIGFBdXgpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgciA9IChyICogMjU1ICsgYSAtIDEpIC8gYTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGcgPSAoZyAqIDI1NSArIGEgLSAxKSAvIGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiID0g
KGIgKiAyNTUgKyBhIC0gMSkgLyBhOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChtX3ByZW11bHRpcGx5QWxwaGEpIHsKLSAgICAgICAgICAgICAgICAg
ICAgciA9IGRpdmlkZTI1NShyICogYSk7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSBkaXZpZGUy
NTUoZyAqIGEpOwotICAgICAgICAgICAgICAgICAgICBiID0gZGl2aWRlMjU1KGIgKiBhKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqZGVzdCA9IChhIDw8
IDI0IHwgciA8PCAxNiB8IGcgPDwgOCB8IGIpOworICAgICAgICAgICAgbV9waXhsZXMub3ZlclJH
QkEoZGVzdCwgciwgZywgYiwgYSk7CiAgICAgICAgIH0KICNlbmRpZgogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgaW50IHdpZHRoKCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IG1fc2l6ZS53aWR0aCgpOworICAgICAgICAgICAgcmV0dXJuIG1fcGl4ZWxzLndpZHRoKCk7CiAg
ICAgICAgIH0KIAogICAgICAgICBpbnQgaGVpZ2h0KCkgY29uc3QKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3BpeGVs
cy5oZWlnaHQoKTsKICAgICAgICAgfQogCi0gICAgICAgIFZlY3RvcjxQaXhlbERhdGE+IG1fYmFj
a2luZ1N0b3JlOwotICAgICAgICBQaXhlbERhdGEqIG1fYnl0ZXM7IC8vIFRoZSBtZW1vcnkgaXMg
YmFja2VkIGJ5IG1fYmFja2luZ1N0b3JlLgotICAgICAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICAg
ICAgQml0bWFwUGl4ZWxzIG1fcGl4ZWxzOworCiAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVk
IG1fY29sb3JQcm9maWxlIGFueW1vcmU/CiAgICAgICAgIENvbG9yUHJvZmlsZSBtX2NvbG9yUHJv
ZmlsZTsKICAgICAgICAgYm9vbCBtX2hhc0FscGhhOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vQml0bWFwUGl4ZWxzQ2Fpcm8uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vQml0bWFwUGl4ZWxz
Q2Fpcm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNmYzYyYTM3ZDgxNDVjZGQwN2ExNTRlZDhmNzQxMWRlY2E0
NmYwZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHAKQEAgLTAsMCArMSw0MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkJpdG1hcFBpeGVscy5oIgorCisjaW5jbHVkZSA8Y2Fpcm8uaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBQaXhlbHM6Omlt
YWdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9j
cmVhdGVfZm9yX2RhdGEoCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+
KGNvbnN0X2Nhc3Q8UGl4ZWxEYXRhKj4obV9waXhlbHMpKSwKKyAgICAgICAgQ0FJUk9fRk9STUFU
X0FSR0IzMiwgd2lkdGgoKSwgaGVpZ2h0KCksIHdpZHRoKCkgKiBzaXplb2YoUkdCQTMyKSkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWly
by5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNDEyOTVmODU3MzU4ZmJiZjM1
YzFiMDUyNWU4ZDZjYzM1MjBmNTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8v
SW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgotCi0jaW5jbHVkZSA8Y2Fpcm8uaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1OYXRpdmVJbWFnZVB0ciBJbWFnZUZyYW1lOjphc05l
d05hdGl2ZUltYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KGNvbnN0X2Nhc3Q8UGl4ZWxEYXRhKj4obV9ieXRlcykpLAotICAgICAgICBDQUlS
T19GT1JNQVRfQVJHQjMyLCB3aWR0aCgpLCBoZWlnaHQoKSwgd2lkdGgoKSAqIHNpemVvZihQaXhl
bERhdGEpKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJj
ZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZU1hYy5tbQppbmRleCAyMTZjZDA5M2YyNjQ2N2NiYTg4YTQzZjY5M2Fi
ZjRjZjUxZGQxYTRkLi5kMTE0NTRiMDVlZjg4OTkzYTYyODkzODk2YmMwYzExNzI4YzVlZDUwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1Jl
YWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tCkBAIC04Nyw3ICs4Nyw3
IEBAIHZvaWQgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6OnVwZGF0ZVBsYXRmb3JtTGF5ZXIo
KSBjb25zdAogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAg
ICAgbV9wcmV2aWV3SW1hZ2UgPSBpbWFnZS0+Z2V0Q0dJbWFnZVJlZigpOworICAgICAgICBtX3By
ZXZpZXdJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZSgpOwogICAgICAgICBpZiAoIW1fcHJldmll
d0ltYWdlKQogICAgICAgICAgICAgYnJlYWs7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwCmluZGV4IDM2Y2Q2NTE2ZTgwZjE3NDhiZmVhYjc3YTkz
MDI3MWMxMjFkZTgwMTkuLjRiNGUzNzc5ZTk2Zjc4YzY1NDBhNTNjNDQ3OGMzYmZkOTM1ZjUzZTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcApA
QCAtMTM2LDkgKzEzNiw5IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2Uo
SW1hZ2UqIGltZywgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKQogICAgIENHQ29udGV4dFNj
YWxlQ1RNKGRyYXdDb250ZXh0LCAxLCAtMSk7CiAgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yKGRy
YXdDb250ZXh0LCB3aGl0ZSk7CiAgICAgQ0dDb250ZXh0RmlsbFJlY3QoZHJhd0NvbnRleHQsIHJl
Y3QpOwotICAgIGlmIChhdXRvIHNyY0ltYWdlID0gaW1nLT5nZXRDR0ltYWdlUmVmKCkpIHsKKyAg
ICBpZiAoYXV0byBzcmNJbWFnZSA9IGltZy0+bmF0aXZlSW1hZ2UoKSkgewogICAgICAgICBDR0Nv
bnRleHRTZXRCbGVuZE1vZGUoZHJhd0NvbnRleHQsIGtDR0JsZW5kTW9kZU5vcm1hbCk7Ci0gICAg
ICAgIENHQ29udGV4dERyYXdJbWFnZShkcmF3Q29udGV4dCwgcmVjdCwgc3JjSW1hZ2UpOworICAg
ICAgICBDR0NvbnRleHREcmF3SW1hZ2UoZHJhd0NvbnRleHQsIHJlY3QsIHNyY0ltYWdlLmdldCgp
KTsKICAgICB9CiAgICAgQ0dDb250ZXh0UmVsZWFzZShkcmF3Q29udGV4dCk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0gYi9Tb3VyY2UvV2ViS2l0L21h
Yy9NaXNjL1dlYkNhY2hlLm1tCmluZGV4IGI2NTlkNmRiZjlhZDY5OTljM2FjOTYyZGU5NTE1Nzgw
OTdlMWYzYjEuLjdjNWVkMjEwZGRiMmEzMmE3NjY2NzRjMTIwZDk5NGMyZmE0N2U3ZmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0KKysrIGIvU291cmNlL1dl
YktpdC9tYWMvTWlzYy9XZWJDYWNoZS5tbQpAQCAtMjA0LDcgKzIwNCw3IEBAICsgKENHSW1hZ2VS
ZWYpaW1hZ2VGb3JVUkw6KE5TVVJMICopdXJsCiAgICAgV2ViQ29yZTo6Q2FjaGVkSW1hZ2UmIGNh
Y2hlZEltYWdlID0gZG93bmNhc3Q8V2ViQ29yZTo6Q2FjaGVkSW1hZ2U+KCpjYWNoZWRSZXNvdXJj
ZSk7CiAgICAgaWYgKCFjYWNoZWRJbWFnZS5oYXNJbWFnZSgpKQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICByZXR1cm4gY2FjaGVkSW1hZ2UuaW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpOwor
ICAgIHJldHVybiBjYWNoZWRJbWFnZS5pbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmdldCgpOwogfQog
CiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3BwCmluZGV4IDBmNmRlN2ExNDZhNjEx
YTUyYWExZTUzOTAxOWZhNmMxYzQ2NzI1YWUuLjMwNTYzMzZjYjY2ZmU0YWYxOGJkYzUyOWFjYTJm
OGZjODgxZGZlNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9j
Zy9XS0ljb25EYXRhYmFzZUNHLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvY2cvV0tJY29uRGF0YWJhc2VDRy5jcHAKQEAgLTM3LDEyICszNywyMyBAQCB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIENHSW1hZ2VSZWYgV0tJY29uRGF0YWJhc2VUcnlHZXRDR0ltYWdlRm9y
VVJMKFdLSWNvbkRhdGFiYXNlUmVmIGljb25EYXRhYmFzZVJlZiwgV0tVUkxSZWYgdXJsUmVmLCBX
S1NpemUgc2l6ZSkKIHsKICAgICBJbWFnZSogaW1hZ2UgPSB0b0ltcGwoaWNvbkRhdGFiYXNlUmVm
KS0+aW1hZ2VGb3JQYWdlVVJMKHRvV1RGU3RyaW5nKHVybFJlZikpOwotICAgIHJldHVybiBpbWFn
ZSA/IGltYWdlLT5nZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUoSW50U2l6ZShzdGF0aWNfY2FzdDxp
bnQ+KHNpemUud2lkdGgpLCBzdGF0aWNfY2FzdDxpbnQ+KHNpemUuaGVpZ2h0KSkpIDogMDsKKyAg
ICByZXR1cm4gaW1hZ2UgPyBpbWFnZS0+bmF0aXZlSW1hZ2VPZlNpemUoSW50U2l6ZShzdGF0aWNf
Y2FzdDxpbnQ+KHNpemUud2lkdGgpLCBzdGF0aWNfY2FzdDxpbnQ+KHNpemUuaGVpZ2h0KSkpLmdl
dCgpIDogbnVsbHB0cjsKIH0KIAogQ0ZBcnJheVJlZiBXS0ljb25EYXRhYmFzZVRyeUNvcHlDR0lt
YWdlQXJyYXlGb3JVUkwoV0tJY29uRGF0YWJhc2VSZWYgaWNvbkRhdGFiYXNlUmVmLCBXS1VSTFJl
ZiB1cmxSZWYpCiB7CiAgICAgSW1hZ2UqIGltYWdlID0gdG9JbXBsKGljb25EYXRhYmFzZVJlZikt
PmltYWdlRm9yUGFnZVVSTCh0b1dURlN0cmluZyh1cmxSZWYpKTsKLSAgICByZXR1cm4gaW1hZ2Ug
PyBpbWFnZS0+Z2V0Q0dJbWFnZUFycmF5KCkubGVha1JlZigpIDogMDsKKyAgICBpZiAoIWltYWdl
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gbmF0aXZlSW1hZ2VzID0gaW1h
Z2UtPmZyYW1lc05hdGl2ZUltYWdlcygpOworICAgIGlmICghbmF0aXZlSW1hZ2VzLnNpemUoKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgQ0ZNdXRhYmxlQXJyYXlSZWYgYXJy
YXkgPSBDRkFycmF5Q3JlYXRlTXV0YWJsZShudWxscHRyLCBuYXRpdmVJbWFnZXMuc2l6ZSgpLCAm
a0NGVHlwZUFycmF5Q2FsbEJhY2tzKTsKKyAgICBmb3IgKGF1dG8gbmF0aXZlSW1hZ2UgOiBuYXRp
dmVJbWFnZXMpCisgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheSwgbmF0aXZlSW1hZ2Uu
Z2V0KCkpOworICAgIAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxDRkFycmF5UmVmPihDRlJldGFp
bihhcnJheSkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9z
L1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9p
b3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCmluZGV4IGRjNzk4M2FiOTg4YzJkMDRhMTcz
MGVlMTM3MzAzYzI0NDE2MTUxOTcuLmZiYzNlNWQ0YzU0MzAxY2U5MjE3YTQwZjhkMDhiZDU4MzUy
Nzg3YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50
Vmlld0ludGVyYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tD
b250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBAIC00MDcxLDcgKzQwNzEsNyBAQCAtIChVSUltYWdl
ICopX3ByZXNlbnRhdGlvblNuYXBzaG90Rm9yUHJldmlld0l0ZW1Db250cm9sbGVyOihVSVByZXZp
ZXdJdGVtQ29udHJvbAogewogICAgIGlmICghX3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlua0luZGlj
YXRvci5jb250ZW50SW1hZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBb
W1tVSUltYWdlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6X3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlu
a0luZGljYXRvci5jb250ZW50SW1hZ2UtPmdldENHSW1hZ2VSZWYoKV0gYXV0b3JlbGVhc2VdOwor
ICAgIHJldHVybiBbW1tVSUltYWdlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6X3Bvc2l0aW9uSW5m
b3JtYXRpb24ubGlua0luZGljYXRvci5jb250ZW50SW1hZ2UtPm5hdGl2ZUltYWdlKCkuZ2V0KCld
IGF1dG9yZWxlYXNlXTsKIH0KIAogLSAoTlNBcnJheSAqKV9wcmVzZW50YXRpb25SZWN0c0ZvclBy
ZXZpZXdJdGVtQ29udHJvbGxlcjooVUlQcmV2aWV3SXRlbUNvbnRyb2xsZXIgKiljb250cm9sbGVy
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmll
dy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAK
aW5kZXggOWEzM2Y3Y2M3ZGM3YzdkNzJmOWRhNzQzMDk4YjdkYmNhODI0MDljZi4uYTUzMjUxMDY3
OGI5ZjUzNTE0NThhMzhhOWY0MjMzNzQ3ZDAzNWY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtMTcyNyw2OSArMTcyNyw2IEBA
IHZvaWQgUGx1Z2luVmlldzo6d2luZG93ZWRQbHVnaW5WaXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wg
aXNWaXNpYmxlLCB1aW50NjRfdCB3aW5kCiB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKENPQ09B
KQotc3RhdGljIGJvb2wgaXNBbG1vc3RTb2xpZENvbG9yKEJpdG1hcEltYWdlKiBiaXRtYXApCi17
Ci0gICAgQ0dJbWFnZVJlZiBpbWFnZSA9IGJpdG1hcC0+Z2V0Q0dJbWFnZVJlZigpOwotICAgIEFT
U0VSVChDR0ltYWdlR2V0Qml0c1BlckNvbXBvbmVudChpbWFnZSkgPT0gOCk7Ci0KLSAgICBDR0Jp
dG1hcEluZm8gaW1hZ2VJbmZvID0gQ0dJbWFnZUdldEJpdG1hcEluZm8oaW1hZ2UpOwotICAgIGlm
ICghKGltYWdlSW5mbyAmIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlKSB8fCAoaW1hZ2VJbmZv
ICYga0NHQml0bWFwQWxwaGFJbmZvTWFzaykgIT0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRG
aXJzdCkgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYmVpbmcgYWJsZSB0byBoYW5kbGUg
b3RoZXIgcGl4ZWwgZm9ybWF0cy4KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzaXplX3Qgd2lkdGggPSBDR0ltYWdlR2V0
V2lkdGgoaW1hZ2UpOwotICAgIHNpemVfdCBoZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGltYWdl
KTsKLSAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBDR0ltYWdlR2V0Qnl0ZXNQZXJSb3coaW1hZ2Up
OwotCi0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gcHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVBy
b3ZpZGVyQ29weURhdGEoQ0dJbWFnZUdldERhdGFQcm92aWRlcihpbWFnZSkpKTsKLSAgICBjb25z
dCBVSW50OCogZGF0YSA9IENGRGF0YUdldEJ5dGVQdHIocHJvdmlkZXIuZ2V0KCkpOwotCi0gICAg
Ly8gT3ZlcmxheSBhIGdyaWQgb2Ygc2FtcGxpbmcgZG90cyBvbiB0b3Agb2YgYSBncmF5c2NhbGUg
dmVyc2lvbiBvZiB0aGUgaW1hZ2UuCi0gICAgLy8gRm9yIHRoZSBpbnRlcmlvciBwb2ludHMsIGNh
bGN1bGF0ZSB0aGUgZGlmZmVyZW5jZSBpbiBsdW1pbmFuY2UgYW1vbmcgdGhlIHNhbXBsZSBwb2lu
dAotICAgIC8vIGFuZCBpdHMgc3Vycm91bmRzIHBvaW50cywgc2NhbGVkIGJ5IHRyYW5zcGFyZW5j
eS4KLSAgICBjb25zdCB1bnNpZ25lZCBzYW1wbGVSb3dzID0gNzsKLSAgICBjb25zdCB1bnNpZ25l
ZCBzYW1wbGVDb2xzID0gNzsKLSAgICAvLyBGSVhNRTogUmVmaW5lIHRoZSBwcm9wZXIgbnVtYmVy
IG9mIHNhbXBsZXMsIGFuZCBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgYXNwZWN0IHJhdGlvcy4KLSAg
ICBpZiAod2lkdGggPCBzYW1wbGVDb2xzIHx8IGhlaWdodCA8IHNhbXBsZVJvd3MpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBsYXN0IHJvdy9jb2x1bW4g
bGFuZCBvbiB0aGUgaW1hZ2UgcGVyaW1ldGVyLgotICAgIGNvbnN0IGZsb2F0IHN0cmlkZVdpZHRo
ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdpZHRoIC0gMSkgLyAoc2FtcGxlQ29scyAtIDEpOwotICAg
IGNvbnN0IGZsb2F0IHN0cmlkZUhlaWdodCA9IHN0YXRpY19jYXN0PGZsb2F0PihoZWlnaHQgLSAx
KSAvIChzYW1wbGVSb3dzIC0gMSk7Ci0gICAgZmxvYXQgc2FtcGxlc1tzYW1wbGVSb3dzXVtzYW1w
bGVDb2xzXTsKLQotICAgIC8vIEZpbmQgdGhlIGx1bWluYW5jZSBvZiB0aGUgc2FtcGxlIHBvaW50
cy4KLSAgICBmbG9hdCB5ID0gMDsKLSAgICBjb25zdCBVSW50OCogcm93ID0gZGF0YTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2FtcGxlUm93czsgKytpKSB7Ci0gICAgICAgIGZsb2F0
IHggPSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc2FtcGxlQ29sczsgKytq
KSB7Ci0gICAgICAgICAgICBjb25zdCBVSW50OCogcDAgPSByb3cgKyAoc3RhdGljX2Nhc3Q8aW50
Pih4ICsgLjUpKSAqIDQ7Ci0gICAgICAgICAgICAvLyBSIEcgQiBBCi0gICAgICAgICAgICBzYW1w
bGVzW2ldW2pdID0gKDAuMjEyNSAqICpwMCArIDAuNzE1NCAqICoocDArMSkgKyAwLjA3MjEgKiAq
KHAwKzIpKSAqICoocDArMykgLyAyNTU7Ci0gICAgICAgICAgICB4ICs9IHN0cmlkZVdpZHRoOwot
ICAgICAgICB9Ci0gICAgICAgIHkgKz0gc3RyaWRlSGVpZ2h0OwotICAgICAgICByb3cgPSBkYXRh
ICsgKHN0YXRpY19jYXN0PGludD4oeSArIC41KSkgKiBieXRlc1BlclJvdzsKLSAgICB9Ci0KLSAg
ICAvLyBEZXRlcm1pbmUgdGhlIGltYWdlIHNjb3JlLgotICAgIGZsb2F0IGFjY3VtU2NvcmUgPSAw
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzYW1wbGVSb3dzIC0gMTsgKytpKSB7Ci0g
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IDE7IGogPCBzYW1wbGVDb2xzIC0gMTsgKytqKSB7Ci0g
ICAgICAgICAgICBmbG9hdCBkaWZmID0gc2FtcGxlc1tpIC0gMV1bal0gKyBzYW1wbGVzW2kgKyAx
XVtqXSArIHNhbXBsZXNbaV1baiAtIDFdICsgc2FtcGxlc1tpXVtqICsgMV0gLSA0ICogc2FtcGxl
c1tpXVtqXTsKLSAgICAgICAgICAgIGFjY3VtU2NvcmUgKz0gZGlmZiAqIGRpZmY7Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgc2NvcmUgZm9yIGEgZ2l2ZW4gc2FtcGxlIGNhbiBiZSB3
aXRoaW4gdGhlIHJhbmdlIG9mIDAgYW5kIDI1NV4yLgotICAgIHJldHVybiBhY2N1bVNjb3JlIDwg
MjUwMCAqIChzYW1wbGVSb3dzIC0gMikgKiAoc2FtcGxlQ29scyAtIDIpOwotfQotI2VuZGlmCi0K
IHZvaWQgUGx1Z2luVmlldzo6cGx1Z2luU25hcHNob3RUaW1lckZpcmVkKCkKIHsKICNpZiBFTkFC
TEUoUFJJTUFSWV9TTkFQU0hPVFRFRF9QTFVHSU5fSEVVUklTVElDKQpAQCAtMTgwOSw3ICsxNzQ2
LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRpbWVyRmlyZWQoKQogCiAgICAg
ICAgIGlmIChzbmFwc2hvdEltYWdlKSB7CiAjaWYgRU5BQkxFKFBSSU1BUllfU05BUFNIT1RURURf
UExVR0lOX0hFVVJJU1RJQykKLSAgICAgICAgICAgIGJvb2wgc25hcHNob3RJc0FsbW9zdFNvbGlk
Q29sb3IgPSBpc0FsbW9zdFNvbGlkQ29sb3IoZG93bmNhc3Q8Qml0bWFwSW1hZ2U+KHNuYXBzaG90
SW1hZ2UuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJvb2wgc25hcHNob3RJc0FsbW9zdFNvbGlkQ29s
b3IgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEJpdG1hcEltYWdlPihzbmFwc2hvdEltYWdlKS0+aXNB
bG1vc3RTb2xpZENvbG9yKCk7CiAgICAgICAgICAgICBzbmFwc2hvdEZvdW5kID0gIXNuYXBzaG90
SXNBbG1vc3RTb2xpZENvbG9yOwogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283429</attachid>
            <date>2016-07-12 11:14:13 -0700</date>
            <delta_ts>2016-07-12 11:25:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159679-20160712111330.patch</filename>
            <type>text/plain</type>
            <size>127778</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzMTAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWM1YmQ5YmQwNmExOWJl
NWNhMDJjNTE3MmQ2ZWYyZWJiZmVjMWMxOS4uNmFlYzQ3MmY4YWVjOGUwNjRkNGYyZmQwODAyYTBm
MWM0NTU4YjI4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxMyBAQAorMjAxNi0wNy0xMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0
IHRoZSBwaXhlbCBkYXRhIG9mIEltYWdlRnJhbWUgdG8gYSBzZXBhcmF0ZSBjbGFzcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5Njc5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgcGl4ZWwg
ZGF0YSBtYW5pcHVsYXRpb24gcGFydCBpbiBJbWFnZUZyYW1lIGludG8gYSBzZXBhcmF0ZSBjbGFz
cworICAgICAgICBhbmQgdGhlbiBtYWtlIGl0IG9wdGlvbmFsIChhbGxvY2F0ZWQgb24gZGVtYW5k
KS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2lu
Q2Fpcm8uY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFBpeGVsczo6Qml0bWFwUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBp
eGVsczo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpoZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFBpeGVsczo6YXQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmNsZWFyUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OnJlcGVhdEZpcnN0Um93KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcFBpeGVsczo6c2V0UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQ
aXhlbHM6Om92ZXJSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6aW5Cb3Vu
ZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Om11bHRpcGx5MjU1KToKKyAgICAgICAgKFdlYkNvcmU6OmRpdmlkZTI1NSk6CisgICAg
ICAgIChXZWJDb3JlOjpkaXZpZGVDZWlsKToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxp
ZWRDaGFubmVsKToKKyAgICAgICAgKFdlYkNvcmU6OnVucHJlbXVsdGlwbGllZENoYW5uZWwpOgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZVByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VVblByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6cGl4ZWxzKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWVEYXRhOjpoYXNQaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y2xlYXJQaXhl
bERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGxQaXhlbERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGxGcmFtZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weUJpdG1hcERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojpjb3B5Um93TlRpbWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0UkdCQSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpnZXRBZGRyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6Omhhc1BpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpvdmVyUkdC
QSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjp3aWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
Y29weVJvd05UaW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpm
aXhQb2ludFVuc2lnbmVkTXVsdGlwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6ZGl2aWRlMjU1KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5j
cHAuCisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmltYWdlKToKKworMjAxNi0wNy0x
MSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAgICAg
IFJlbmFtZSBGcmFtZURhdGEgdG8gSW1hZ2VGcmFtZURhdGEgYW5kIG1vdmUgaXQgdG8gYSBzZXBh
cmF0ZSBmaWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTU0NDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNb3ZlIEltYWdlRnJhbWVEYXRhIHRvIGEgc2VwYXJhdGUgZmlsZSBzbyBpdCBjYW4gYmUgY2Fj
aGVkIGJ5IEltYWdlU291cmNlCisgICAgICAgIGFuZCB3aWxsIHN0aWxsIGJlIGNvbnN1bWVkIGJ5
IEJpdG1hcEltYWdlLiBNYWtlIHRoZSBkYXRhIG1lbWJlcnMgb2YgSW1hZ2VGcmFtZURhdGEKKyAg
ICAgICAgYmUgcHJpdmF0ZSBhbmQgYWRkIGdldHRlcnMgdG8gcmV0dXJuIHRoZWlyIHZhbHVlcy4K
KworICAgICAgICBObyBuZXcgdGVzdHMgLS0gQ29kZSByZWZhY3RvcmluZywgbm8gYmVoYXZpb3Ig
Y2hhbmdlLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Jp
dG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aGF2ZUZyYW1lSW1hZ2VBdEluZGV4
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNz
YXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6ZW5zdXJlRnJhbWVJc0NhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcElt
YWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6ZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6aXNBbG1vc3RTb2xpZENvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRt
YXBJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpGcmFtZURhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp+RnJhbWVEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6dXNlZEZyYW1lQnl0ZXMpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZURhdGFBdEluZGV4KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ltYWdlRnJhbWVEYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lRGF0YTo6SW1hZ2VGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURh
dGE6On5JbWFnZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6
Y2xlYXJTdWJJbWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmNsZWFy
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpzaW5nbGVQaXhlbFNvbGlkQ29s
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmlzQWxtb3N0U29saWRDb2xv
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW1hZ2VGcmFtZURhdGEuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6c3RhdHVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWVEYXRhOjppc0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWVEYXRhOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpm
cmFtZUJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjppbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6b3JpZW50YXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OnN1YnNhbXBsaW5nTGV2ZWwpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZURhdGE6OmR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWVEYXRhOjpoYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6
aGFzSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6Omhhc01ldGFkYXRh
KToKKworMjAxNi0wNi0yNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUs
Y29tPgorCisgICAgICAgIEludHJvZHVjZSBQbGF0Zm9ybUltYWdlIGFuZCBtYWtlIGl0IGlzIGEg
d3JhcHBlciBmb3IgTmF0aXZlSW1hZ2VQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1ODY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyByZWZhY3RvcmluZyBp
cyB0byBtb3ZlIHRoZSBwbGF0Zm9ybSBpbWFnZSBkZXBlbmRlbnQKKyAgICAgICAgY29kZSBmcm9t
IEJpdG1hcEltYWdlIHRvIFBsYXRmb3JtSW1hZ2UuIFBsYXRmb3JtSW1hZ2UgaXMgcmVzcG9uc2li
bGUgb2YgCisgICAgICAgIGRyYXdpbmcgdGhlIGltYWdlIGFuZCBhbnN3ZXJpbmcgTmF0aXZlSW1h
Z2VQdHIgcXVlc3Rpb25zIHdoZW4gYW4gSW1hZ2VEZWNvZGVyCisgICAgICAgIGlzIG5vdCBhdmFp
bGFibGUuIEFwYXJ0IGZyb20gZHJhd2luZyB0aGUgaW1hZ2UsIHRoZSBxdWVyeSBmdW5jdGlvbnMg
d2lsbCBiZQorICAgICAgICBjYWxsZWQgb25seSB3aGVuIGNvbnN0cnVjdGluZyBhIEZyYW1lRGF0
YSBzbyB3ZSB3aWxsIGtlZXAgZXZlcnl0aGluZyBhcyBhCisgICAgICAgIE5hdGl2ZUltYWdlUHRy
LiBCdXQgd2Ugd2lsbCBjYXN0IHRoZSBOYXRpdmVJbWFnZVB0ciB0byBQbGF0Zm9ybUltYWdlIHdo
ZW4KKyAgICAgICAgYSBwbGF0Zm9ybSBkZXBlbmRlbnQgZnVuY3Rpb24gaXMgbmVlZGVkLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cyAtLSBDb2RlIHJlZmFjdG9yaW5nLCBubyBiZWhhdmlvciBjaGFu
Z2UuCisKKyAgICAgICAgKiBQbGF0Zm9ybUFwcGxlV2luLmNtYWtlOgorICAgICAgICAqIFBsYXRm
b3JtRWZsLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBs
YXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2luQ2Fpcm8uY21ha2U6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRp
bmdzL29iamMvRE9NLm1tOgorICAgICAgICAoLVtET01Ob2RlIGdldFByZXZpZXdTbmFwc2hvdElt
YWdlOmFuZFJlY3RzOl0pOgorICAgICAgICAqIHBhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cu
bW06CisgICAgICAgICgtW1dlYlRleHRJbmRpY2F0b3JWaWV3IGluaXRXaXRoRnJhbWU6dGV4dElu
ZGljYXRvcjptYXJnaW46b2Zmc2V0Ol0pOgorICAgICAgICAoY3JlYXRlQ29udGVudENyb3NzZmFk
ZUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpu
YXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZy
YW1lc05hdGl2ZUltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6c2luZ2xl
UGl4ZWxTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppc0FsbW9z
dFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZURhdGE6OkZyYW1lRGF0YSk6CisgICAgICAgIG1faGFzQWxwaGEgY2FuIGJlIGluaXRp
YWxpemVkIHdpdGggZmFsc2UgYmVjYXVzZSBpdCBpcyBhY2Nlc3NlZCBvbmx5IGluCisgICAgICAg
IEJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleCgpIGFuZCBpdCBpcyBndWFyZGVkIGJ5
IG1faGF2ZU1ldGFkYXRhLgorICAgICAgICBCb3RoIG1faGF2ZU1ldGFkYXRhIGFuZCBtX2hhc0Fs
cGhhIGFyZSBzZXQgaW4gQml0bWFwSW1hZ2UgY29uc3RydWN0b3IKKyAgICAgICAgYW5kIGluIEJp
dG1hcEltYWdlOjpjYWNoZUZyYW1lKCkuCisKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6
fkZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OmNsZWFyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6
Om5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpuYXRpdmVJbWFnZU9mU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZnJhbWVzTmF0aXZlSW1hZ2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlOjpnZXRDR0ltYWdlUmVmKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlOjpnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2U6OmdldENHSW1hZ2VBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtSW1hZ2U6OlBsYXRmb3JtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1JbWFnZTo6aXNOaWwpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6Y2dJ
bWFnZVJlZik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjp1cGRhdGVEaXNwbGF5TW9k
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJv
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0JpdG1hcEltYWdlQ2Fpcm8uY3BwLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6
Y2xlYXJTdWJJbWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6c2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpoYXNBbHBoYSk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6aXNBbG1vc3RTb2xpZENvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1JbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
Qml0bWFwSW1hZ2VDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUGF0dGVybkNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm46OmNyZWF0ZVBsYXRm
b3JtUGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFn
ZUNHLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpjbGVhclN1
YkltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IpOiBNb3ZlZCBmcm9tIFBsdWdpblZp
ZXcuY3BwIHNpbmNlIFBsYXRmb3JtSW1hZ2UgaXMgd2hhdCB0aGlzIGZ1bmN0aW9uIGJlbG9uZ3Mg
dG8uCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKTog
UmV0dXJucyB0aGUgc3ViLXNhbXBsaW5nIHNjYWxlIGJhc2VkIG9uIHRoZSBjb250ZXh0IHNjYWxp
bmcuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpkcmF3KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tOgor
ICAgICAgICAoVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYTo6dXBkYXRlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW06CisgICAgICAgIChX
ZWJDb3JlOjpNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6dXBkYXRlUGxhdGZvcm1MYXllcik6
CisgICAgICAgICogcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZSk6CisKIDIwMTYtMDctMTEgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBTcGVlY2ggU3ludGhlc2lzOiBnZXR0aW5n
IGxpc3Qgb2Ygdm9pY2VzIG5vIGxvbmdlciB3b3JrcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IGMxYmMw
YmJkZTM2MTI1YzQ2MmJmNDgxZGRhZDVkZDJmODI3ZDUyMzkuLjE4ZDFlYmViZWU5MjBiMmYyOWVm
MzI4NzdkZWQyZTFlY2ZmOTdkNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAor
MjAxNi0wNy0xMSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgor
CisgICAgICAgIEludHJvZHVjZSBQbGF0Zm9ybUltYWdlIGFuZCBtYWtlIGl0IGlzIGEgd3JhcHBl
ciBmb3IgTmF0aXZlSW1hZ2VQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1ODY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogTWlzYy9XZWJDYWNoZS5tbToKKyAgICAgICAgKCtbV2ViQ2FjaGUgaW1h
Z2VGb3JVUkw6XSk6CisKIDIwMTYtMDctMTEgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxl
LmNvbT4KIAogICAgICAgICBBZGQgc3ludGhldGljIGNsaWNrIG9yaWdpbiB0byBXS05hdmlnYXRp
b25BY3Rpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYjQ3ZTJjZWE3OWE4ZGQ3YzUzMzVkMmNkNThlNzk2MTUz
MzVjNTAyYy4uZjFmMTY3MjU4NGMwZWU4MTg1OGE3ZTk2NTUzYWNkOWNkMGFjNmZlZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE2LTA3LTExICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
Ym91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgSW50cm9kdWNlIFBsYXRmb3JtSW1hZ2Ug
YW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVyIGZvciBOYXRpdmVJbWFnZVB0cgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvY2cv
V0tJY29uRGF0YWJhc2VDRy5jcHA6CisgICAgICAgIChXS0ljb25EYXRhYmFzZVRyeUdldENHSW1h
Z2VGb3JVUkwpOgorICAgICAgICAoV0tJY29uRGF0YWJhc2VUcnlDb3B5Q0dJbWFnZUFycmF5Rm9y
VVJMKToKKyAgICAgICAgSXQgd2FzIHRoZSBvbmx5IHBsYWNlIGluIHRoZSBjb2RlIHdoaWNoIHVz
ZXMgQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VBcnJheSgpLgorICAgICAgICBDYWxsIEJpdG1hcElt
YWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMoKSBpbnN0ZWFkIGFuZCBmb3JtIHRoZSByZXR1cm5lZAor
ICAgICAgICBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGJ1aWxkIHRoZSBDRkFycmF5UmVmLgorICAg
ICAgICAKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcHJlc2VudGF0aW9uU25hcHNob3RGb3JQcmV2
aWV3SXRlbUNvbnRyb2xsZXI6XSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRp
bWVyRmlyZWQpOgorICAgICAgICAKKyAgICAgICAgKFdlYktpdDo6aXNBbG1vc3RTb2xpZENvbG9y
KTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSB0aGUgc3RhdGljIGZ1bmN0aW9uIGlzQWxtb3N0U29s
aWRDb2xvciB0byBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKS4KKwogMjAxNi0w
Ny0xMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFtXSzJdW2lP
U10gSW50ZXJtaXR0ZW50IGNyYXNoIGluIFtVSUFwcGxpY2F0aW9uIGJlZ2luQmFja2dyb3VuZFRh
c2tXaXRoTmFtZV0gZXhwaXJhdGlvbiBoYW5kbGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGU3
OGIwNDJiMTA0MDFlMWY0ZWUzYTJhYjFhMDUyYzIxOGMzYTExZTMuLjIyNmVjOWI4NGU3MjJmZmYz
ZTJmMDRkY2U3ZGI3MGUzZGQ0YjgzYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMjI2LDYg
KzIyMjYsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSVNP
VlRUQ3VlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJh
bWVEYXRhLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT3JpZW50YXRpb24uY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UG9pbnQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxl
V2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCA1
ZmY5OTFmZjdkYTMwOGJiOTE4MmVjZTNiZjEyMTczMGE1NDhkMjg3Li5iYWUzMWVhZjg2ZTdmY2E5
MDU4MjUwOTJhYTM4YTc4YzExZTQyMjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4u
Y21ha2UKQEAgLTU1LDcgKzU1LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XS0NBQ0ZWaWV3TGF5ZXJUcmVlSG9zdC5jcHAKIAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFBv
aW50Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwCkBAIC03
NSw2ICs3NCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UGF0aENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtl
CmluZGV4IDUxNDUwNGU2ZWMyNWFhNWU0M2I5OTM5OGQ1ZTM1Y2VlZWE3NjZhYTQuLjY0YWUxNzEw
ODlkY2JmMGNkNDViNzBhOWI4ZjcwZWZhOWZmZGVkYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNt
YWtlCkBAIC0xMjIsNyArMTIyLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNwcAogCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1wbC5jcHAKLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ZvbnRDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJm
YnV6ek5HLmNwcApAQCAtMTM0LDYgKzEzMyw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNF
UwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QYXR0ZXJuQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Bs
YXRmb3JtUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNh
aXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RyYW5zZm9ybWF0aW9uTWF0cml4
Q2Fpcm8uY3BwCkBAIC0xNzksOSArMTc5LDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MveDExL1BsYXRmb3JtRGlzcGxheVgxMS5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy94MTEvWFVuaXF1ZVJlc291cmNlLmNwcAogCi0gICAgcGxhdGZvcm0v
aW1hZ2UtZW5jb2RlcnMvSlBFR0ltYWdlRW5jb2Rlci5jcHAKKyAgICBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHAKIAotICAgIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2ltYWdl
LWVuY29kZXJzL0pQRUdJbWFnZUVuY29kZXIuY3BwCiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2Vm
bC9OZXR3b3JrU3RhdGVOb3RpZmllckVmbC5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpp
bmRleCA2NDVhZGQxY2UzODg4OGIwNGQ0YTJkODlhZGEwYTdjNmRlMTk5ODZiLi5kMzFmNTcwNmE2
OTU5YjIzMWI1YmZiMjJmMDdkMTg0M2FlODYxYTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFr
ZQpAQCAtMTAxLDcgKzEwMSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1wbC5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9YMTEu
Y3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9GbG9hdFJlY3RDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9Gb250Q2Fpcm8uY3BwCkBAIC0xMTUsNiArMTE0LDcgQEAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vUGxhdGZvcm1QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vUmVmUHRyQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3Jt
YXRpb25NYXRyaXhDYWlyby5jcHAKQEAgLTE0OSw3ICsxNDksNyBAQCBsaXN0KEFQUEVORCBXZWJD
b3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAogICAg
IHBsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuY3BwCiAKLSAgICBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHAKIAogICAgIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL2d0ay9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZUd0ay5jcHAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bU1hYy5jbWFrZQppbmRleCA5ZjZmNDk2YjZjYzRlZjZlNGI3NGQ4NGFjMGFhOWRlYTU1YTAyMzdi
Li40ZGRlZDMwODhmNGYzOTZmZWY0NDRlN2VlNjVjNjQxMDY1OGY1ODQxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybU1hYy5jbWFrZQpAQCAtMzk3LDcgKzM5Nyw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1dlYlN5c3RlbUJhY2tkcm9wTGF5
ZXIubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9XZWJUaWxlZEJhY2tpbmdMYXll
ci5tbQogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0Zsb2F0UG9pbnRDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5j
cHAKQEAgLTQxNyw2ICs0MTYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL1BhdGhDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cu
Y3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFnZUNHLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1N1YmltYWdlQ2FjaGVXaXRoVGltZXIuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtV2luQ2Fpcm8uY21ha2UKaW5kZXggMmM1NTNiMDU1MWRhZDY5YWExOTlkOTYwZjU1MjM0
M2Q5MjBmMDdiMy4uMzQyYWE5MjczMmZkOGY5MmU4NWNmYTYyNmQ1NTU3MGVmNjZiNmE2OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCkBAIC0yMSw3ICsyMSw2IEBAIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCiAKLSAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0Zsb2F0UmVjdENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRD
YWlyby5jcHAKQEAgLTM0LDYgKzMzLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
bGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZv
cm1QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8u
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3JtYXRpb25NYXRyaXhDYWly
by5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAK
IAotICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNw
cAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNw
cAogCiAgICAgcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb25TdHViLmNwcAog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggYzExYmM0N2U1Y2FkNjMwYTM2NTdjZGUxYWQ5ZjdiNzZhMGE1NWM2Ni4uZmYyYTQ5OGJh
OTZiODFkYTAzZjgxYTMwMWE4NWJlMzc0ZDBlYzY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQ4NCw3ICsxNDg0LDcgQEAK
IAkJMzc1Q0QyMzIxMTlENDNDODAwQTJBODU5IC8qIEh5cGhlbmF0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzVDRDIzMTExOUQ0M0M4MDBBMkE4
NTkgLyogSHlwaGVuYXRpb24uaCAqLzsgfTsKIAkJMzc2RENDRTExM0I0Rjk2NjAwMkVCRUZDIC8q
IFRleHRSdW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzc2RENDRTAxM0I0Rjk2NjAwMkVCRUZDIC8qIFRleHRSdW4uY3BwICovOyB9OwogCQkzNzc0
QUJBNTBGQTIxRUI0MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzc0QUJBMzBGQTIxRUI0
MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3
IC8qIEJpdG1hcEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3Bw
ICovOyB9OworCQkzNzdBM0E5MDE1RUZDRTlCMDA1OUY1QzcgLyogUGxhdGZvcm1JbWFnZUNHLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3N0EzQThG
MTVFRkNFOUEwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwICovOyB9OwogCQkzNzkxOUMy
MzBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzkxOUMyMTBCN0QxODg2MDBBNTY5OTgg
LyogUG9zaXRpb25JdGVyYXRvci5jcHAgKi87IH07CiAJCTM3OTE5QzI0MEI3RDE4ODYwMEE1Njk5
OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzNzkxOUMyMjBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTM3OTI5MTdBMTk4
NUVGMzkwMEY0QjY2MSAvKiBDcmVkZW50aWFsQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc5MjkxNzgxOTg1RUYzOTAwRjRCNjYxIC8qIENyZWRl
bnRpYWxCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTIzMjUsMTAgKzIzMjUsMTQgQEAKIAkJNTNFRDNGREYxNjdBODhFNzAwNjc2MkU2IC8q
IEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFRDNGREQxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJu
YWxTZXR0aW5nc0dlbmVyYXRlZC5oICovOyB9OwogCQk1M0VGNzY2QjE2NTMwQTYxMDA0Q0JFNDkg
LyogU2V0dGluZ3NNYWNyb3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzRUY3NjZBMTY1MzBBNjEwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oICov
OyB9OwogCQk1M0VGNzY2QzE2NTMxOTk0MDA0Q0JFNDkgLyogU2V0dGluZ3NNYWNyb3MuaCBpbiBD
b3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzRUY3NjZBMTY1MzBBNjEwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oICovOyB9OworCQk1
NTA0RTRDQjFEMzU1N0IyMDBGRTUwODggLyogQml0bWFwUGl4ZWxzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTA0RTRDQTFEMzU1MzJEMDBGRTUwODgg
LyogQml0bWFwUGl4ZWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTUwQTBCQzkwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzcw
ODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovOyB9OwogCQk1NTBBMEJDQTA4
NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxp
ZmllZE5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1NTVCODdFQzFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU1Qjg3RUExQ0FBRjBB
QjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLzsgfTsKIAkJNTU1Qjg3RUQxQ0FBRjBB
QjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNv
ZGVyQ0cuaCAqLzsgfTsKKwkJNTU3NEYwODcxRDAyNzkwOTAwQjlGMTRDIC8qIFBsYXRmb3JtSW1h
Z2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1NzRG
MDg1MUQwMjc0NDQwMEI5RjE0QyAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTVDQkE2QTExRDFERjJFMTAwNDUxODYw
IC8qIEltYWdlRnJhbWVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU1Q0JBNjlGMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1lRGF0YS5j
cHAgKi87IH07CisJCTU1Q0JBNkEyMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1lRGF0YS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVDQkE2QTAx
RDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTcyQTdGMjExQzZFNTcxOTAwOUM2MTQ5IC8q
IFNpbXVsYXRlZENsaWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NzJBN0YyMDFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCAqLzsg
fTsKIAkJNTcyQTdGMjMxQzZFNUE2NjAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MkE3RjIyMUM2RTVB
NjYwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5jcHAgKi87IH07CiAJCTU3RUY1RTYwMUQyMEM4
MzkwMDE3MUU2MCAvKiBUZXh0Q29kZWNSZXBsYWNlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdFRjVFNUYxRDIwQzgzOTAwMTcxRTYwIC8qIFRl
eHRDb2RlY1JlcGxhY2VtZW50LmggKi87IH07CkBAIC05MDYxLDcgKzkwNjUsNyBAQAogCQkzNzZE
Q0NFMDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUZXh0UnVuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzc3MkIwOTUxNjUzNTg1NjAwMEE0OUNBIC8qIFBvcHVwT3BlbmluZ09ic2VydmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvcHVwT3BlbmluZ09ic2VydmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NzRBQkEzMEZBMjFFQjQwMEFEN0RFOSAvKiBP
dmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdG1hcEltYWdlQ0cuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogUGxhdGZv
cm1JbWFnZUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsYXRm
b3JtSW1hZ2VDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3OTE5QzIxMEI3
RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQb3NpdGlvbkl0ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzc5MTlDMjIwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvc2l0aW9uSXRlcmF0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc5MjkxNzgxOTg1RUYzOTAwRjRCNjYx
IC8qIENyZWRlbnRpYWxCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENy
ZWRlbnRpYWxCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05OTg5LDEwICs5
OTkzLDE0IEBACiAJCTUzRUQzRkRDMTY3QTg4RTcwMDY3NjJFNiAvKiBKU0ludGVybmFsU2V0dGlu
Z3NHZW5lcmF0ZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJ
bnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTNFRDNGREQxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRl
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVybmFsU2V0dGluZ3NH
ZW5lcmF0ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNFRjc2NkExNjUzMEE2
MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNldHRpbmdzTWFjcm9zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1
MDRFNENBMUQzNTUzMkQwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Qml0bWFwUGl4ZWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1MEEwQkM3MDg1
RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllZE5hbWUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTUw
QTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTU1
Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2Rl
ckNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1NzRGMDg1MUQwMjc0NDQwMEI5RjE0QyAv
KiBQbGF0Zm9ybUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVDQkE2OUYxRDFERjJFMTAwNDUxODYwIC8qIEltYWdl
RnJhbWVEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdl
RnJhbWVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVDQkE2QTAxRDFE
RjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlRnJhbWVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTU1RDQwOEY3MUE3QzYzMTgwMEM3ODQ1MCAvKiBTVkdJbWFnZUNsaWVudHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHSW1hZ2VDbGllbnRzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTU3MkE3RjIwMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGlj
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW11bGF0ZWRDbGljay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzJBN0YyMjFDNkU1QTY2MDA5QzYxNDkgLyog
U2ltdWxhdGVkQ2xpY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2ltdWxhdGVkQ2xpY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIwMjQs
NyArMjIwMzIsNiBAQAogCQlCMjc1MzUyOTBCMDUzODE0MDAyQ0U2NEYgLyogY2cgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTM3N0EzQThGMTVFRkNFOUEw
MDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCAqLywKIAkJCQkwRkNGMzMyMzBGMkI5NzE1MDA0
QjY3OTUgLyogQ29sb3JDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRGIC8q
IEZsb2F0UG9pbnRDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEZs
b2F0UmVjdENHLmNwcCAqLywKQEAgLTIyMDUxLDYgKzIyMDU4LDcgQEAKIAkJCQlBODBBMzhGRDBF
NTBDQzgyMDBBMjVFQkMgLyogUGF0dGVybkNHLmNwcCAqLywKIAkJCQlCMjc1MzUzNjBCMDUzODE0
MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5jcHAgKi8sCiAJCQkJQjI3NTM1MzcwQjA1Mzgx
NDAwMkNFNjRGIC8qIFBERkRvY3VtZW50SW1hZ2UuaCAqLywKKwkJCQkzNzdBM0E4RjE1RUZDRTlB
MDA1OUY1QzcgLyogUGxhdGZvcm1JbWFnZUNHLmNwcCAqLywKIAkJCQkxRkM0MEZCODE2NTVDNTkx
MDA0MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAgKi8sCiAJCQkJMUZDNDBGQjcx
NjU1QzU5MTAwNDBGMjlFIC8qIFN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCAqLywKIAkJCQlCMjc1
MzUyQTBCMDUzODE0MDAyQ0U2NEYgLyogVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAgKi8sCkBA
IC0yMjExOCw2ICsyMjEyNiw3IEBACiAJCQkJQkVGMjlFRTkxNzE1REQwOTAwQzRCNEM5IC8qIEF1
ZGlvVHJhY2tQcml2YXRlLmggKi8sCiAJCQkJQTg5OTQzMjcwQjQyMzM4NzAwRDdDODAyIC8qIEJp
dG1hcEltYWdlLmNwcCAqLywKIAkJCQlBODk5NDMyNjBCNDIzMzg3MDBEN0M4MDIgLyogQml0bWFw
SW1hZ2UuaCAqLywKKwkJCQk1NTA0RTRDQTFEMzU1MzJEMDBGRTUwODggLyogQml0bWFwUGl4ZWxz
LmggKi8sCiAJCQkJQ0RERTAyRTkxOEIzREZDNzAwQ0Y3RkYxIC8qIENETVNlc3Npb24uaCAqLywK
IAkJCQlCMjc1MzUzODBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3IuY3BwICovLAogCQkJCUIyNzUz
NTM5MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5oICovLApAQCAtMjIyMDIsNiArMjIyMTEsOCBA
QAogCQkJCTQzRDI1OTc2MTNDODE2RjQwMDYwODU1OSAvKiBJbWFnZUJ1ZmZlci5jcHAgKi8sCiAJ
CQkJQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8sCiAJCQkJMjJC
RDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovLAorCQkJCTU1Q0JB
NjlGMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1lRGF0YS5jcHAgKi8sCisJCQkJNTVDQkE2
QTAxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggKi8sCiAJCQkJQkM3RjQ0QTcw
QjlFMzI0RTAwQTlEMDgxIC8qIEltYWdlT2JzZXJ2ZXIuaCAqLywKIAkJCQlBODc0OEQ3NDEyQ0Mz
Rjg5MDAxRkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5jcHAgKi8sCiAJCQkJQTg3NDhENjYxMkND
Mzc2MzAwMUZCQTQxIC8qIEltYWdlT3JpZW50YXRpb24uaCAqLywKQEAgLTIyMjUxLDYgKzIyMjYy
LDcgQEAKIAkJCQkyRDUwMDJGQTFCNTZENzk5MDAyMEFBRjcgLyogUGF0aFV0aWxpdGllcy5oICov
LAogCQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLywKIAkJCQlB
OEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oICovLAorCQkJCTU1NzRGMDg1MUQw
Mjc0NDQwMEI5RjE0QyAvKiBQbGF0Zm9ybUltYWdlLmggKi8sCiAJCQkJMDU2MkY5NjAxNTczRjg4
RjAwMzFDQTE2IC8qIFBsYXRmb3JtTGF5ZXIuaCAqLywKIAkJCQlDRUVGQ0Q3QjE5REIzM0RDMDAz
ODc2RDcgLyogUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmggKi8sCiAJCQkJMDcyODQ3RTIx
NkVCQzVCMDAwNDNDRkE0IC8qIFBsYXRmb3JtVGV4dFRyYWNrLmggKi8sCkBAIC0yNjAxOCw2ICsy
NjAzMCw3IEBACiAJCQkJODVFNzExQjkwQUM1RDUzNTAwNTMyNzBGIC8qIERPTUhUTUxNYXBFbGVt
ZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTE1NzlGMEMwM0JCRDMwMDhCQjBF
RSAvKiBET01IVE1MTWFycXVlZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTE1NkVB
MEMwM0I3NDEwMDhCQjBFRSAvKiBET01IVE1MTWFycXVlZUVsZW1lbnRJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNTU3NEYwODcxRDAyNzkwOTAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTJERUM2NjU1MUM4MkQwNDEwMDk5ODQ2QSAvKiBET01IVE1M
TWVkaWFFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyREVDNjY1MTFDODJEMDE2MDA5OTg0
NkEgLyogRE9NSFRNTE1lZGlhRWxlbWVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NUJBNEQxMzBBQTY4ODY4MDA4ODA1MkQgLyogRE9NSFRNTE1lbnVFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKQEAgLTI2NDU5LDYgKzI2NDcyLDcgQEAKIAkJCQlEMzU5RDc4QTEyOUNBMjcxMDAwNkU1
RDIgLyogSFRNTERldGFpbHNFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEVBNzlGQTBB
MTkxNkRGMDBBOEVGNUYgLyogSFRNTERpcmVjdG9yeUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4RUE3Q0I3MEExOTJCOUMwMEE4RUY1RiAvKiBIVE1MRGl2RWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNTVDQkE2QTIxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEVBNzlGNzBBMTkxNkRGMDBBOEVGNUYgLyogSFRNTERMaXN0
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk4RTUwODI0NUU1OTAwMUU5QUJDIC8q
IEhUTUxEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc3QjM4NjcxMjI4ODNFOTAwQjgx
RkY4IC8qIEhUTUxEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODM1OSw2ICsy
ODM3Myw3IEBACiAJCQkJQjIyMjc5OTMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0FuaW1hdGVNb3Rp
b25FbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk5NTBEMDBCRjIyMDA3MUI3ODIg
LyogU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3
OTk4MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdBbmltYXRpb25FbGVtZW50LmggaW4gSGVhZGVycyAq
LywKKwkJCQk1NTA0RTRDQjFEMzU1N0IyMDBGRTUwODggLyogQml0bWFwUGl4ZWxzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0MzlEMzM0NTEzQTY5MTFDMDBDMjBGNEYgLyogU1ZHQW5pbWF0b3JGYWN0
b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEZCM0Y4NDEzQkM3NTRDMDA5OUZDMTggLyogU1ZH
QXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5OUMwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR0NpcmNsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjk0
MTEsNyArMjk0MjYsNyBAQAogCQkJCUZEQzU0RjA0MTM5OUIwREEwMDhEOTExNyAvKiBCaXF1YWRG
aWx0ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MDI2MTJCMDI2NzYwMEMxQTM1
OSAvKiBCaXF1YWRQcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg5OTQzMjkwQjQy
MzM4ODAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTM3N0Ez
QTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTM3N0EzQTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTc2RDZDNzgxMjJCOEEzRDAwMUZEMUY3IC8qIEJsb2IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMkVERUYxRjMxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JEYXRhLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUUxRDMxQ0RDMTkxOTYwMjAwMDEwMDVBMyAvKiBCbG9iRGF0YUZp
bGVSZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTc3NCw2ICsyOTc4OSw3IEBACiAJ
CQkJMkUyRDk5RTgxMEUyQkMxQzAwNDk2MzM3IC8qIERPTUJsb2IubW0gaW4gU291cmNlcyAqLywK
IAkJCQk4NTA4OUNEODBBOThDNDI4MDBBMjc1QUEgLyogRE9NQ0RBVEFTZWN0aW9uLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJODVBQ0E5ODcwQTlCNTIwMzAwNjcxRTkwIC8qIERPTUNoYXJhY3RlckRh
dGEubW0gaW4gU291cmNlcyAqLywKKwkJCQk1NUNCQTZBMTFEMURGMkUxMDA0NTE4NjAgLyogSW1h
Z2VGcmFtZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODUwODlDREEwQTk4QzQyODAwQTI3
NUFBIC8qIERPTUNvbW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk5NzhEMDdCRTE0NUEwRjZD
MDA5NjkwOEQgLyogRE9NQ29yZUV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NThD
MzhBNjBBQThGMjA0MDBCMTg3QTQgLyogRE9NQ291bnRlci5tbSBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQppbmRleCA0MDExZWEzZmQ4YzA0Njk3NGM1NWQ0OGUz
OTZmMWI4M2I4MWYzMzVkLi5hNWFjNGYwNWFlMzM5YThkNjQ3MDZjMTBmYzBmN2FmNDA0MjU2MjNj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQpAQCAtNjA2LDcgKzYwNiw3IEBAIC0g
KHZvaWQpZ2V0UHJldmlld1NuYXBzaG90SW1hZ2U6KENHSW1hZ2VSZWYqKWNnSW1hZ2UgYW5kUmVj
dHM6KE5TQXJyYXkgKiopcmVjdHMKIAogICAgIGlmICh0ZXh0SW5kaWNhdG9yKSB7CiAgICAgICAg
IGlmIChJbWFnZSogaW1hZ2UgPSB0ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2UoKSkKLSAgICAg
ICAgICAgICpjZ0ltYWdlID0gKENHSW1hZ2VSZWYpQ0ZBdXRvcmVsZWFzZShDR0ltYWdlUmV0YWlu
KGltYWdlLT5nZXRDR0ltYWdlUmVmKCkpKTsKKyAgICAgICAgICAgICpjZ0ltYWdlID0gaW1hZ2Ut
Pm5hdGl2ZUltYWdlKCkuYXV0b3JlbGVhc2UoKTsKICAgICB9CiAKICAgICBSZXRhaW5QdHI8TlNN
dXRhYmxlQXJyYXk+IHJlY3RBcnJheSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdF0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRv
cldpbmRvdy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cu
bW0KaW5kZXggMzY0YTlhODdjZTZmMDY2Mzk0OGI4ODQ2ZThlMmNlNmQxOTBmMjQ4OS4uYTc0ZGE4
NWFjZWNhM2M2Njk4ZGQxNTZhYjMxYTZjOTcxYTM1NGU2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCkBAIC0xNjIsOSArMTYyLDkgQEAgLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSB0ZXh0SW5kaWNhdG9yOihQ
YXNzUmVmUHRyPFRleHRJbmRpY2EKICAgICBjb250ZW50c0ltYWdlTG9naWNhbFNpemUuc2NhbGUo
MSAvIF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VTY2FsZUZhY3RvcigpKTsKICAgICBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZTsKICAgICBpZiAoaW5kaWNhdG9yV2FudHND
b250ZW50Q3Jvc3NmYWRlKCpfdGV4dEluZGljYXRvcikpCi0gICAgICAgIGNvbnRlbnRzSW1hZ2Ug
PSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlV2l0aEhpZ2hsaWdodCgpLT5nZXRDR0ltYWdl
UmVmKCk7CisgICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudElt
YWdlV2l0aEhpZ2hsaWdodCgpLT5uYXRpdmVJbWFnZSgpOwogICAgIGVsc2UKLSAgICAgICAgY29u
dGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2UoKS0+Z2V0Q0dJbWFnZVJl
ZigpOworICAgICAgICBjb250ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFn
ZSgpLT5uYXRpdmVJbWFnZSgpOwogCiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBib3Vu
Y2VMYXllcnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKIApAQCAt
MjY1LDcgKzI2NSw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0FLZXlmcmFtZUFuaW1hdGlvbj4gY3Jl
YXRlQm91bmNlQW5pbWF0aW9uKENGVGltZUludGVydmFsIGR1cmF0CiBzdGF0aWMgUmV0YWluUHRy
PENBQmFzaWNBbmltYXRpb24+IGNyZWF0ZUNvbnRlbnRDcm9zc2ZhZGVBbmltYXRpb24oQ0ZUaW1l
SW50ZXJ2YWwgZHVyYXRpb24sIFRleHRJbmRpY2F0b3ImIHRleHRJbmRpY2F0b3IpCiB7CiAgICAg
UmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGNyb3NzZmFkZUFuaW1hdGlvbiA9IFtDQUJhc2lj
QW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAiY29udGVudHMiXTsKLSAgICBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZSA9IHRleHRJbmRpY2F0b3IuY29udGVudEltYWdl
KCktPmdldENHSW1hZ2VSZWYoKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJ
bWFnZSA9IHRleHRJbmRpY2F0b3IuY29udGVudEltYWdlKCktPm5hdGl2ZUltYWdlKCk7CiAgICAg
W2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRUb1ZhbHVlOihpZCljb250ZW50c0ltYWdlLmdldCgpXTsK
ICAgICBbY3Jvc3NmYWRlQW5pbWF0aW9uIHNldEZpbGxNb2RlOmtDQUZpbGxNb2RlRm9yd2FyZHNd
OwogICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0UmVtb3ZlZE9uQ29tcGxldGlvbjpOT107CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKaW5k
ZXggNDYwZDFiODU2Yjc3YjdjZjRlYzY4OTY1ODFiODMzZDNlN2Y5NzAxNC4uZmM2NDlkMTBhYWI5
YzEzZmZmMjkzMDU1YTcwN2NiNzQ1Mzc0NjkxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcApAQCAtNjgsMTUgKzY4LDEzIEBAIEJpdG1h
cEltYWdlOjpCaXRtYXBJbWFnZShOYXRpdmVJbWFnZVB0ciYmIGltYWdlLCBJbWFnZU9ic2VydmVy
KiBvYnNlcnZlcikKICAgICAsIG1faGF2ZUZyYW1lQ291bnQodHJ1ZSkKICAgICAsIG1fYW5pbWF0
aW9uRmluaXNoZWRXaGVuQ2F0Y2hpbmdVcChmYWxzZSkKIHsKKyAgICBtX2ZyYW1lcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KDEpOworICAgIG1fZnJhbWVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3Zl
KGltYWdlKSk7CisgICAgCiAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhIGRlY29kZXIsIHdl
IGNhbid0IGZpZ3VyZSBvdXQgdGhlIGltYWdlIG9yaWVudGF0aW9uLgogICAgIC8vIFNldCBtX3Np
emVSZXNwZWN0aW5nT3JpZW50YXRpb24gdG8gYmUgdGhlIHNhbWUgYXMgbV9zaXplIHNvIGl0J3Mg
bm90IDB4MC4KLSAgICBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBtX3NpemUgPSBOYXRp
dmVJbWFnZTo6c2l6ZShpbWFnZSk7CisgICAgbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uID0g
bV9zaXplID0gbV9mcmFtZXNbMF0uc2l6ZSgpOwogICAgIG1fZGVjb2RlZFNpemUgPSBtX3NpemUu
YXJlYSgpICogNDsKLSAgICAKLSAgICBtX2ZyYW1lcy5ncm93KDEpOwotICAgIG1fZnJhbWVzWzBd
Lm1faGFzQWxwaGEgPSBOYXRpdmVJbWFnZTo6aGFzQWxwaGEoaW1hZ2UpOwotICAgIG1fZnJhbWVz
WzBdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKLSAgICBtX2ZyYW1lc1swXS5tX2ltYWdlID0gV1RG
TW92ZShpbWFnZSk7CiB9CiAKIEJpdG1hcEltYWdlOjp+Qml0bWFwSW1hZ2UoKQpAQCAtMTA1LDcg
KzEwMyw3IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmhhdmVGcmFtZUltYWdlQXRJbmRleChzaXplX3Qg
aW5kZXgpCiAgICAgaWYgKGluZGV4ID49IG1fZnJhbWVzLnNpemUoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOworICAgIHJldHVy
biBtX2ZyYW1lc1tpbmRleF0uaGFzSW1hZ2UoKTsKIH0KIAogYm9vbCBCaXRtYXBJbWFnZTo6aGFz
U2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdApAQCAtMTI1LDkgKzEyMyw3IEBAIHZvaWQgQml0
bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGRlc3Ryb3lBbGwpCiAgICAgICAgIC8v
IFRoZSB1bmRlcmx5aW5nIGZyYW1lIGlzbid0IGFjdHVhbGx5IGNoYW5naW5nICh3ZSdyZSBqdXN0
IHRyeWluZyB0bwogICAgICAgICAvLyBzYXZlIHRoZSBtZW1vcnkgZm9yIHRoZSBmcmFtZWJ1ZmZl
ciBkYXRhKSwgc28gd2UgZG9uJ3QgbmVlZCB0byBjbGVhcgogICAgICAgICAvLyB0aGUgbWV0YWRh
dGEuCi0gICAgICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMgPSBtX2ZyYW1lc1tpXS5tX2ZyYW1lQnl0
ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1tpXS5jbGVhcihmYWxzZSkpCi0gICAgICAgICAgICBm
cmFtZUJ5dGVzQ2xlYXJlZCArPSBmcmFtZUJ5dGVzOworICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJl
ZCArPSBtX2ZyYW1lc1tpXS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEp
OwogICAgIH0KIAogICAgIG1fc291cmNlLmNsZWFyKGRlc3Ryb3lBbGwsIGNsZWFyQmVmb3JlRnJh
bWUsIGRhdGEoKSwgbV9hbGxEYXRhUmVjZWl2ZWQpOwpAQCAtMTUwLDggKzE0Niw4IEBAIHZvaWQg
Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KGJvb2wgZGVzdHJveUFs
bCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgYWxsRnJhbWVCeXRlcyA9IDA7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAg
YWxsRnJhbWVCeXRlcyArPSBtX2ZyYW1lc1tpXS51c2VkRnJhbWVCeXRlcygpOworICAgIGZvciAo
YXV0byYgZnJhbWUgOiBtX2ZyYW1lcykKKyAgICAgICAgYWxsRnJhbWVCeXRlcyArPSBmcmFtZS5m
cmFtZUJ5dGVzKCk7CiAKICAgICBpZiAoYWxsRnJhbWVCeXRlcyA+IGxhcmdlQW5pbWF0aW9uQ3V0
b2ZmKSB7CiAgICAgICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZSAlcCBkZXN0cm95RGVjb2Rl
ZERhdGFJZk5lY2Vzc2FyeSBkZXN0cm95aW5nRGF0YTogYWxsRnJhbWVCeXRlcz0ldSBjdXRvZmY9
JXUiLCB0aGlzLCBhbGxGcmFtZUJ5dGVzLCBsYXJnZUFuaW1hdGlvbkN1dG9mZik7CkBAIC0xNzcs
NyArMTczLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJveU1ldGFkYXRhQW5kTm90aWZ5KHVu
c2lnbmVkIGZyYW1lQnl0ZXNDbGVhcmVkLCBDbGVhcmVkU28KICAgICAgICAgaW1hZ2VPYnNlcnZl
cigpLT5kZWNvZGVkU2l6ZUNoYW5nZWQodGhpcywgLXNhZmVDYXN0PGludD4oZnJhbWVCeXRlc0Ns
ZWFyZWQpKTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgs
IFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZUNhY2hpbmcgZnJh
bWVDYWNoaW5nKQordm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgsIFN1
YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcg
Y2FjaGluZykKIHsKICAgICBzaXplX3QgbnVtRnJhbWVzID0gZnJhbWVDb3VudCgpOwogICAgIEFT
U0VSVChtX2RlY29kZWRTaXplID09IDAgfHwgbnVtRnJhbWVzID4gMSk7CkBAIC0xODUsMjUgKzE4
MSwxMiBAQCB2b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vic2Ft
cGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbQogICAgIGlmIChtX2ZyYW1lcy5zaXplKCkg
PCBudW1GcmFtZXMpCiAgICAgICAgIG1fZnJhbWVzLmdyb3cobnVtRnJhbWVzKTsKIAotICAgIGlm
IChmcmFtZUNhY2hpbmcgPT0gQ2FjaGVNZXRhZGF0YUFuZEZyYW1lKSB7Ci0gICAgICAgIG1fZnJh
bWVzW2luZGV4XS5tX2ltYWdlID0gbV9zb3VyY2UuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5k
ZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOwotICAgICAgICBtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1w
bGluZ0xldmVsID0gc3Vic2FtcGxpbmdMZXZlbDsKLSAgICB9Ci0KLSAgICBtX2ZyYW1lc1tpbmRl
eF0ubV9vcmllbnRhdGlvbiA9IG1fc291cmNlLm9yaWVudGF0aW9uQXRJbmRleChpbmRleCk7Ci0g
ICAgbV9mcmFtZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKLSAgICBtX2ZyYW1lc1tp
bmRleF0ubV9pc0NvbXBsZXRlID0gbV9zb3VyY2UuZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRl
eCk7CisgICAgbV9mcmFtZXNbaW5kZXhdID0gbV9zb3VyY2UuY3JlYXRlRnJhbWVEYXRhQXRJbmRl
eChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgY2FjaGluZyk7CiAKLSAgICBpZiAocmVwZXRpdGlv
bkNvdW50KGZhbHNlKSAhPSBjQW5pbWF0aW9uTm9uZSkKLSAgICAgICAgbV9mcmFtZXNbaW5kZXhd
Lm1fZHVyYXRpb24gPSBtX3NvdXJjZS5mcmFtZUR1cmF0aW9uQXRJbmRleChpbmRleCk7CisgICAg
TE9HKEltYWdlcywgIkJpdG1hcEltYWdlICVwIGNhY2hlRnJhbWUgJWx1ICglcyV1IGJ5dGVzLCBj
b21wbGV0ZSAlZCkiLCB0aGlzLCBpbmRleCwgY2FjaGluZyA9PSBJbWFnZUZyYW1lRGF0YTo6Q2Fj
aGluZzo6TWV0YWRhdGEgPyAibWV0YWRhdGEgb25seSwgIiA6ICIiLCBtX2ZyYW1lc1tpbmRleF0u
ZnJhbWVCeXRlcygpLCBtX2ZyYW1lc1tpbmRleF0uaXNDb21wbGV0ZSgpKTsKIAotICAgIG1fZnJh
bWVzW2luZGV4XS5tX2hhc0FscGhhID0gbV9zb3VyY2UuZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5k
ZXgpOwotICAgIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXMgPSBtX3NvdXJjZS5mcmFtZUJ5
dGVzQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7Ci0KLSAgICBMT0coSW1hZ2VzLCAi
Qml0bWFwSW1hZ2UgJXAgY2FjaGVGcmFtZSAlbHUgKCVzJXUgYnl0ZXMsIGNvbXBsZXRlICVkKSIs
IHRoaXMsIGluZGV4LCBmcmFtZUNhY2hpbmcgPT0gQ2FjaGVNZXRhZGF0YU9ubHkgPyAibWV0YWRh
dGEgb25seSwgIiA6ICIiLCBtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZUJ5dGVzLCBtX2ZyYW1lc1tp
bmRleF0ubV9pc0NvbXBsZXRlKTsKLQotICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkg
ewotICAgICAgICBpbnQgZGVsdGFCeXRlcyA9IHNhZmVDYXN0PGludD4obV9mcmFtZXNbaW5kZXhd
Lm1fZnJhbWVCeXRlcyk7CisgICAgaWYgKG1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpKSB7Cisg
ICAgICAgIGludCBkZWx0YUJ5dGVzID0gc2FmZUNhc3Q8aW50PihtX2ZyYW1lc1tpbmRleF0uZnJh
bWVCeXRlcygpKTsKICAgICAgICAgbV9kZWNvZGVkU2l6ZSArPSBkZWx0YUJ5dGVzOwogICAgICAg
ICAvLyBUaGUgZnVsbHktZGVjb2RlZCBmcmFtZSB3aWxsIHN1YnN1bWUgdGhlIHBhcnRpYWxseSBk
ZWNvZGVkIGRhdGEgdXNlZAogICAgICAgICAvLyB0byBkZXRlcm1pbmUgaW1hZ2UgcHJvcGVydGll
cy4KQEAgLTI4OCwyMSArMjcxLDE5IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKGJv
b2wgYWxsRGF0YVJlY2VpdmVkKQogICAgIC8vIGZyYW1lIGFmZmVjdGVkIGJ5IGFwcGVuZGluZyBu
ZXcgZGF0YSBoZXJlLiBUaHVzIHdlIGhhdmUgdG8gY2xlYXIgYWxsIHRoZQogICAgIC8vIGluY29t
cGxldGUgZnJhbWVzIHRvIGJlIHNhZmUuCiAgICAgdW5zaWduZWQgZnJhbWVCeXRlc0NsZWFyZWQg
PSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmFtZXMuc2l6ZSgpOyArK2kpIHsK
KyAgICBmb3IgKGF1dG8mIGZyYW1lIDogbV9mcmFtZXMpIHsKICAgICAgICAgLy8gTk9URTogRG9u
J3QgY2FsbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KCkgaGVyZSwgdGhhdCB3aWxsIHRyeSB0bwog
ICAgICAgICAvLyBkZWNvZGUgYW55IHVuY2FjaGVkIChpLmUuIG5ldmVyLWRlY29kZWQgb3IKICAg
ICAgICAgLy8gY2xlYXJlZC1vbi1hLXByZXZpb3VzLXBhc3MpIGZyYW1lcyEKLSAgICAgICAgdW5z
aWduZWQgZnJhbWVCeXRlcyA9IG1fZnJhbWVzW2ldLm1fZnJhbWVCeXRlczsKLSAgICAgICAgaWYg
KG1fZnJhbWVzW2ldLm1faGF2ZU1ldGFkYXRhICYmICFtX2ZyYW1lc1tpXS5tX2lzQ29tcGxldGUp
Ci0gICAgICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSAobV9mcmFtZXNbaV0uY2xlYXIodHJ1
ZSkgPyBmcmFtZUJ5dGVzIDogMCk7CisgICAgICAgIGlmIChmcmFtZS5oYXNNZXRhZGF0YSgpICYm
ICFmcmFtZS5pc0NvbXBsZXRlKCkpCisgICAgICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSBm
cmFtZS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6RW1wdHkpOwogICAgIH0KICAgICBk
ZXN0cm95TWV0YWRhdGFBbmROb3RpZnkoZnJhbWVCeXRlc0NsZWFyZWQsIENsZWFyZWRTb3VyY2U6
Ok5vKTsKICNlbHNlCiAgICAgLy8gRklYTUU6IHdoeSBpcyB0aGlzIGRpZmZlcmVudCBmb3IgaU9T
PwogICAgIGludCBkZWx0YUJ5dGVzID0gMDsKICAgICBpZiAoIW1fZnJhbWVzLmlzRW1wdHkoKSkg
ewotICAgICAgICBpbnQgYnl0ZXMgPSBtX2ZyYW1lc1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5tX2Zy
YW1lQnl0ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5jbGVh
cih0cnVlKSkgeworICAgICAgICBpZiAoaW50IGJ5dGVzID0gbV9mcmFtZXNbbV9mcmFtZXMuc2l6
ZSgpIC0gMV0uY2xlYXIoSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6OkVtcHR5KSkgewogICAgICAg
ICAgICAgZGVsdGFCeXRlcyArPSBieXRlczsKICAgICAgICAgICAgIGRlbHRhQnl0ZXMgKz0gbV9k
ZWNvZGVkUHJvcGVydGllc1NpemU7CiAgICAgICAgICAgICBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6
ZSA9IDA7CkBAIC0zNjYsMTUgKzM0NywxNSBAQCBib29sIEJpdG1hcEltYWdlOjppc1NpemVBdmFp
bGFibGUoKQogICAgIHJldHVybiBtX3NpemVBdmFpbGFibGU7CiB9CiAKLWJvb2wgQml0bWFwSW1h
Z2U6OmVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4LCBJbWFnZUZyYW1lQ2FjaGluZyBm
cmFtZUNhY2hpbmcpCitib29sIEJpdG1hcEltYWdlOjplbnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVf
dCBpbmRleCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgY2FjaGluZykKIHsKICAgICBpZiAoaW5k
ZXggPj0gZnJhbWVDb3VudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoaW5k
ZXggPj0gbV9mcmFtZXMuc2l6ZSgpCi0gICAgICAgIHx8IChmcmFtZUNhY2hpbmcgPT0gQ2FjaGVN
ZXRhZGF0YUFuZEZyYW1lICYmICFtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKLSAgICAgICAgfHwg
KGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhT25seSAmJiAhbV9mcmFtZXNbaW5kZXhdLm1f
aGF2ZU1ldGFkYXRhKSkKLSAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgMCwgZnJhbWVDYWNoaW5n
KTsKKyAgICAgICAgfHwgKGNhY2hpbmcgPT0gSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFk
YXRhQW5kSW1hZ2UgJiYgIW1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpKQorICAgICAgICB8fCAo
Y2FjaGluZyA9PSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEgJiYgIW1fZnJhbWVz
W2luZGV4XS5oYXNNZXRhZGF0YSgpKSkKKyAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgMCwgY2Fj
aGluZyk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM4OCwxMCArMzY5LDkgQEAgTmF0aXZl
SW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgZmxv
YXQgcHJlc2VudGF0aW9uU2MKIAogICAgIC8vIFdlIG1heSBoYXZlIGNhY2hlZCBhIGZyYW1lIHdp
dGggYSBoaWdoZXIgc3Vic2FtcGxpbmcgbGV2ZWwsIGluIHdoaWNoIGNhc2Ugd2UgbmVlZCB0bwog
ICAgIC8vIHJlLWRlY29kZSB3aXRoIGEgbG93ZXIgbGV2ZWwuCi0gICAgaWYgKGluZGV4IDwgbV9m
cmFtZXMuc2l6ZSgpICYmIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlICYmIHN1YnNhbXBsaW5nTGV2
ZWwgPCBtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1wbGluZ0xldmVsKSB7CisgICAgaWYgKGluZGV4
IDwgbV9mcmFtZXMuc2l6ZSgpICYmIG1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpICYmIHN1YnNh
bXBsaW5nTGV2ZWwgPCBtX2ZyYW1lc1tpbmRleF0uc3Vic2FtcGxpbmdMZXZlbCgpKSB7CiAgICAg
ICAgIC8vIElmIHRoZSBpbWFnZSBpcyBhbHJlYWR5IGNhY2hlZCwgYnV0IGF0IHRvbyBzbWFsbCBh
IHNpemUsIHJlLWRlY29kZSBhIGxhcmdlciB2ZXJzaW9uLgotICAgICAgICBpbnQgc2l6ZUNoYW5n
ZSA9IC1tX2ZyYW1lc1tpbmRleF0ubV9mcmFtZUJ5dGVzOwotICAgICAgICBtX2ZyYW1lc1tpbmRl
eF0uY2xlYXIodHJ1ZSk7CisgICAgICAgIGludCBzaXplQ2hhbmdlID0gLW1fZnJhbWVzW2luZGV4
XS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6RW1wdHkpOwogICAgICAgICBpbnZhbGlk
YXRlUGxhdGZvcm1EYXRhKCk7CiAgICAgICAgIG1fZGVjb2RlZFNpemUgKz0gc2l6ZUNoYW5nZTsK
ICAgICAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKQEAgLTM5OSw0MCArMzc5LDcyIEBAIE5hdGl2
ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIGZs
b2F0IHByZXNlbnRhdGlvblNjCiAgICAgfQogCiAgICAgLy8gSWYgd2UgaGF2ZW4ndCBmZXRjaGVk
IGEgZnJhbWUgeWV0LCBkbyBzby4KLSAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8
ICFtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKLSAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgc3Vi
c2FtcGxpbmdMZXZlbCwgQ2FjaGVNZXRhZGF0YUFuZEZyYW1lKTsKKyAgICBpZiAoaW5kZXggPj0g
bV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0uaGFzSW1hZ2UoKSkKKyAgICAgICAg
Y2FjaGVGcmFtZShpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hp
bmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOworCisgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5pbWFn
ZSgpOworfQorICAgIAorTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKCkK
K3sKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCk7Cit9CisgICAgCitOYXRpdmVJbWFn
ZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkK
K3sKKyAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7CisgICAgCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGF1dG8gaW1hZ2UgPSBmcmFtZUlt
YWdlQXRJbmRleChpKTsKKyAgICAgICAgaWYgKGltYWdlICYmIFBsYXRmb3JtSW1hZ2UoaW1hZ2Up
LnNpemUoKSA9PSBzaXplKQorICAgICAgICAgICAgcmV0dXJuIGltYWdlOworICAgIH0KKyAgICAK
KyAgICAvLyBGYWxsYmFjayB0byB0aGUgZmlyc3QgZnJhbWUgaW1hZ2UgaWYgd2UgY2FuJ3QgZmlu
ZCB0aGUgcmlnaHQgc2l6ZQorICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKTsKK30KKyAg
ICAKK05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpCit7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKK30K
IAotICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZTsKK1ZlY3RvcjxOYXRpdmVJbWFn
ZVB0cj4gQml0bWFwSW1hZ2U6OmZyYW1lc05hdGl2ZUltYWdlcygpCit7CisgICAgVmVjdG9yPE5h
dGl2ZUltYWdlUHRyPiBpbWFnZXM7CisgICAgc2l6ZV90IGNvdW50ID0gZnJhbWVDb3VudCgpOwor
ICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBp
ZiAoYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpKQorICAgICAgICAgICAgaW1hZ2Vz
LmFwcGVuZChpbWFnZSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBpbWFnZXM7CiB9CiAKIGJv
b2wgQml0bWFwSW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogewot
ICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQor
ICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hp
bmc6Ok1ldGFkYXRhKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG1fZnJh
bWVzW2luZGV4XS5tX2lzQ29tcGxldGU7CisgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5pc0Nv
bXBsZXRlKCk7CiB9CiAKIGZsb2F0IEJpdG1hcEltYWdlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChz
aXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBDYWNo
ZU1ldGFkYXRhT25seSkpCisgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBJbWFn
ZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEpKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9kdXJhdGlvbjsKLX0KLQotTmF0aXZlSW1hZ2VQdHIg
Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKLXsKLSAgICByZXR1cm4g
ZnJhbWVJbWFnZUF0SW5kZXgoY3VycmVudEZyYW1lKCkpOworICAgIHJldHVybiBtX2ZyYW1lc1tp
bmRleF0uZHVyYXRpb24oKTsKIH0KIAogYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVIYXNBbHBoYUF0
SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRl
eCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQorICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRl
eCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBpZiAobV9mcmFtZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRhKQotICAgICAgICBy
ZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faGFzQWxwaGE7CisgICAgaWYgKG1fZnJhbWVzW2luZGV4
XS5oYXNNZXRhZGF0YSgpKQorICAgICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLmhhc0FscGhh
KCk7CiAKICAgICByZXR1cm4gbV9zb3VyY2UuZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5kZXgpOwog
fQpAQCAtNDQ0LDExICs0NTYsMTEgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Y3VycmVudEZyYW1lS25v
d25Ub0JlT3BhcXVlKCkKIAogSW1hZ2VPcmllbnRhdGlvbiBCaXRtYXBJbWFnZTo6ZnJhbWVPcmll
bnRhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICghZW5zdXJlRnJhbWVJc0Nh
Y2hlZChpbmRleCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQorICAgIGlmICghZW5zdXJlRnJhbWVJc0Nh
Y2hlZChpbmRleCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhKSkKICAgICAgICAg
cmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsKIAotICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9o
YXZlTWV0YWRhdGEpCi0gICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9vcmllbnRhdGlv
bjsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhdLmhhc01ldGFkYXRhKCkpCisgICAgICAgIHJldHVy
biBtX2ZyYW1lc1tpbmRleF0ub3JpZW50YXRpb24oKTsKIAogICAgIHJldHVybiBtX3NvdXJjZS5v
cmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOwogfQpAQCAtNzAwLDE3ICs3MTIsNTYgQEAgQ29sb3Ig
Qml0bWFwSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcigpCiAgICAgICAgIHJldHVybiBDb2xv
cigpOwogICAgIAogICAgIEFTU0VSVChtX2ZyYW1lcy5zaXplKCkpOwotICAgIG1fc29saWRDb2xv
ciA9IE5hdGl2ZUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IobV9mcmFtZXNbMF0ubV9pbWFn
ZS5nZXQoKSk7CisgICAgbV9zb2xpZENvbG9yID0gbV9mcmFtZXNbMF0uc2luZ2xlUGl4ZWxTb2xp
ZENvbG9yKCk7CiAgICAgCiAgICAgQVNTRVJUKG1fc29saWRDb2xvcik7CiAgICAgcmV0dXJuIG1f
c29saWRDb2xvci52YWx1ZSgpOwogfQogICAgIAorYm9vbCBCaXRtYXBJbWFnZTo6aXNBbG1vc3RT
b2xpZENvbG9yKCkKK3sKKyAgICBpZiAoZnJhbWVDb3VudCgpICE9IDEpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiBlbnN1cmVGcmFtZUlzQ2FjaGVkKDApICYmIG1fZnJhbWVz
WzBdLmlzQWxtb3N0U29saWRDb2xvcigpOworfQorICAgIAogYm9vbCBCaXRtYXBJbWFnZTo6Y2Fu
QW5pbWF0ZSgpCiB7CiAgICAgcmV0dXJuIHNob3VsZEFuaW1hdGUoKSAmJiBmcmFtZUNvdW50KCkg
PiAxOwogfQogCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBD
b21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUsIEltYWdlT3JpZW50YXRpb25EZXNj
cmlwdGlvbiBkZXNjcmlwdGlvbikKK3sKKyAgICBpZiAoZGVzdFJlY3QuaXNFbXB0eSgpIHx8IHNy
Y1JlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgc3RhcnRBbmltYXRpb24oRG9Ob3RDYXRjaFVwKTsKKyNlbHNlCisgICAgc3RhcnRBbmltYXRp
b24oKTsKKyNlbmRpZgorICAgIAorICAgIENvbG9yIGNvbG9yID0gc2luZ2xlUGl4ZWxTb2xpZENv
bG9yKCk7CisgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICBmaWxsV2l0aFNvbGlk
Q29sb3IoY29udGV4dCwgZGVzdFJlY3QsIGNvbG9yLCBvcCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZy
YW1lLCBQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKGNvbnRleHQsIGRlc3RSZWN0LCBz
cmNSZWN0KSk7CisgICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3Qg
aGF2ZSBhbiBpbWFnZSB5ZXQuCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBJbWFnZU9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKGRlc2NyaXB0aW9uLmltYWdlT3JpZW50YXRpb24oKSk7CisgICAg
aWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdl
T3JpZW50YXRpb24pCisgICAgICAgIG9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5k
ZXgobV9jdXJyZW50RnJhbWUpOworICAgIAorICAgIFBsYXRmb3JtSW1hZ2UoaW1hZ2UpLmRyYXco
Y29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG1fc2l6ZSwgb3AsIG1vZGUsIG9yaWVudGF0aW9u
KTsKKyAgICAKKyAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQorICAgICAgICBpbWFnZU9ic2VydmVy
KCktPmRpZERyYXcodGhpcyk7Cit9CisgICAgCiB2b2lkIEJpdG1hcEltYWdlOjpkdW1wKFRleHRT
dHJlYW0mIHRzKSBjb25zdAogewogICAgIEltYWdlOjpkdW1wKHRzKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCmluZGV4IDA3NTg5MjljZDg3ZmFk
YWNmMDJiNmVkOGVlYWZlN2RlZmQ2NmYwYzUuLjIyMThjODI0YjUyOGZkNjM5YmFiMTM4ZGVjYzk4
Yjk4MTZhMTY4MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuaApAQCAtMjgsMTEgKzI4LDEzIEBACiAjaWZuZGVmIEJpdG1hcEltYWdlX2gKICNk
ZWZpbmUgQml0bWFwSW1hZ2VfaAogCi0jaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJDb2xv
ci5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2VGcmFtZURhdGEuaCIKICNp
bmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKICNp
bmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgogCiAjaWYgVVNF
KENHKSB8fCBVU0UoQVBQS0lUKQogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTQ3LDYz
ICs0OSw5IEBAIHR5cGVkZWYgc3RydWN0IEhCSVRNQVBfXyAqSEJJVE1BUDsKICNlbmRpZgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgc3RydWN0IEZyYW1lRGF0YTsKLX0KLQotbmFtZXNwYWNl
IFdURiB7Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgVmVjdG9yVHJhaXRzPFdlYkNvcmU6OkZyYW1l
RGF0YT4gOiBwdWJsaWMgU2ltcGxlQ2xhc3NWZWN0b3JUcmFpdHMgewotICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBjYW5Jbml0aWFsaXplV2l0aE1lbXNldCA9IGZhbHNlOyAvLyBOb3QgYWxsIEZy
YW1lRGF0YSBtZW1iZXJzIGluaXRpYWxpemUgdG8gMC4KLSAgICB9OwotfQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIFRpbWVyOwogCi1uYW1lc3BhY2UgTmF0aXZlSW1hZ2UgewotICAg
IEludFNpemUgc2l6ZShjb25zdCBOYXRpdmVJbWFnZVB0ciYpOwotICAgIGJvb2wgaGFzQWxwaGEo
Y29uc3QgTmF0aXZlSW1hZ2VQdHImKTsKLSAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3Io
Y29uc3QgTmF0aXZlSW1hZ2VQdHImKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBGcmFtZURhdGEgQ2xhc3MKLS8vID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdHJ1Y3QgRnJhbWVE
YXRhIHsKLXB1YmxpYzoKLSAgICBGcmFtZURhdGEoKQotICAgICAgICA6IG1faGF2ZU1ldGFkYXRh
KGZhbHNlKQotICAgICAgICAsIG1faXNDb21wbGV0ZShmYWxzZSkKLSAgICAgICAgLCBtX2hhc0Fs
cGhhKHRydWUpCi0gICAgewotICAgIH0KLQotICAgIH5GcmFtZURhdGEoKQotICAgIHsgCi0gICAg
ICAgIGNsZWFyKHRydWUpOwotICAgIH0KLQotICAgIC8vIENsZWFyIHRoZSBjYWNoZWQgaW1hZ2Ug
ZGF0YSBvbiB0aGUgZnJhbWUsIGFuZCAob3B0aW9uYWxseSkgdGhlIG1ldGFkYXRhLgotICAgIC8v
IFJldHVybnMgd2hldGhlciB0aGVyZSB3YXMgY2FjaGVkIGltYWdlIGRhdGEgdG8gY2xlYXIuCi0g
ICAgYm9vbCBjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpOwotICAgIAotICAgIHVuc2lnbmVkIHVz
ZWRGcmFtZUJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZSA/IG1fZnJhbWVCeXRlcyA6IDA7
IH0KLQotICAgIE5hdGl2ZUltYWdlUHRyIG1faW1hZ2U7Ci0gICAgSW1hZ2VPcmllbnRhdGlvbiBt
X29yaWVudGF0aW9uIHsgRGVmYXVsdEltYWdlT3JpZW50YXRpb24gfTsKLSAgICBTdWJzYW1wbGlu
Z0xldmVsIG1fc3Vic2FtcGxpbmdMZXZlbCB7IDAgfTsKLSAgICBmbG9hdCBtX2R1cmF0aW9uIHsg
MCB9OwotICAgIGJvb2wgbV9oYXZlTWV0YWRhdGEgOiAxOwotICAgIGJvb2wgbV9pc0NvbXBsZXRl
IDogMTsKLSAgICBib29sIG1faGFzQWxwaGEgOiAxOwotICAgIHVuc2lnbmVkIG1fZnJhbWVCeXRl
cyB7IDAgfTsKLX07Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS8vIEJpdG1hcEltYWdlIENsYXNzCi0vLyA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KIGNsYXNzIEJpdG1hcEltYWdlIGZpbmFs
IDogcHVibGljIEltYWdlIHsKICAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7CiAgICAg
ZnJpZW5kIGNsYXNzIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOwpAQCAtMTU1LDEyICsxMDMsNiBA
QCBwdWJsaWM6CiAgICAgQ0ZEYXRhUmVmIGdldFRJRkZSZXByZXNlbnRhdGlvbigpIG92ZXJyaWRl
OwogI2VuZGlmCiAKLSNpZiBVU0UoQ0cpCi0gICAgV0VCQ09SRV9FWFBPUlQgQ0dJbWFnZVJlZiBn
ZXRDR0ltYWdlUmVmKCkgb3ZlcnJpZGU7Ci0gICAgQ0dJbWFnZVJlZiBnZXRGaXJzdENHSW1hZ2VS
ZWZPZlNpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwotICAgIFJldGFpblB0cjxDRkFycmF5
UmVmPiBnZXRDR0ltYWdlQXJyYXkoKSBvdmVycmlkZTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0o
V0lOKQogICAgIGJvb2wgZ2V0SEJJVE1BUChIQklUTUFQKSBvdmVycmlkZTsKICAgICBib29sIGdl
dEhCSVRNQVBPZlNpemUoSEJJVE1BUCwgY29uc3QgSW50U2l6ZSopIG92ZXJyaWRlOwpAQCAtMTc0
LDggKzExNiwxMyBAQCBwdWJsaWM6CiAgICAgRXZhc19PYmplY3QqIGdldEV2YXNPYmplY3QoRXZh
cyopIG92ZXJyaWRlOwogI2VuZGlmCiAKKyAgICBXRUJDT1JFX0VYUE9SVCBOYXRpdmVJbWFnZVB0
ciBuYXRpdmVJbWFnZSgpIG92ZXJyaWRlOworICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdl
T2ZTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKICAgICBOYXRpdmVJbWFnZVB0ciBuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIG92ZXJyaWRlOwogICAgIEltYWdlT3JpZW50YXRpb24g
b3JpZW50YXRpb25Gb3JDdXJyZW50RnJhbWUoKSBvdmVycmlkZSB7IHJldHVybiBmcmFtZU9yaWVu
dGF0aW9uQXRJbmRleChjdXJyZW50RnJhbWUoKSk7IH0KKyAgICBWZWN0b3I8TmF0aXZlSW1hZ2VQ
dHI+IGZyYW1lc05hdGl2ZUltYWdlcygpIG92ZXJyaWRlOworICAgIAorICAgIFdFQkNPUkVfRVhQ
T1JUIGJvb2wgaXNBbG1vc3RTb2xpZENvbG9yKCk7CiAKICAgICBib29sIGN1cnJlbnRGcmFtZUtu
b3duVG9CZU9wYXF1ZSgpIG92ZXJyaWRlOwogCkBAIC0yMTUsNyArMTYyLDYgQEAgcHJvdGVjdGVk
OgogICAgIHNpemVfdCBmcmFtZUNvdW50KCk7CiAKICAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUlt
YWdlQXRJbmRleChzaXplX3QsIGZsb2F0IHByZXNlbnRhdGlvblNjYWxlSGludCA9IDEpOwotICAg
IE5hdGl2ZUltYWdlUHRyIGNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCk7CiAK
ICAgICBib29sIGhhdmVGcmFtZUltYWdlQXRJbmRleChzaXplX3QpOwogCkBAIC0yMjUsMTEgKzE3
MSwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBmcmFtZU9yaWVudGF0aW9u
QXRJbmRleChzaXplX3QpOwogCiAgICAgLy8gRGVjb2RlcyBhbmQgY2FjaGVzIGEgZnJhbWUuIE5l
dmVyIGFjY2Vzc2VkIGV4Y2VwdCBpbnRlcm5hbGx5LgotICAgIGVudW0gSW1hZ2VGcmFtZUNhY2hp
bmcgeyBDYWNoZU1ldGFkYXRhT25seSwgQ2FjaGVNZXRhZGF0YUFuZEZyYW1lIH07Ci0gICAgdm9p
ZCBjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZUNh
Y2hpbmcgPSBDYWNoZU1ldGFkYXRhQW5kRnJhbWUpOworICAgIHZvaWQgY2FjaGVGcmFtZShzaXpl
X3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nID0gSW1h
Z2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOwogCiAgICAgLy8gQ2FsbGVk
IGJlZm9yZSBhY2Nlc3NpbmcgbV9mcmFtZXNbaW5kZXhdIGZvciBpbmZvIHdpdGhvdXQgZGVjb2Rp
bmcuIFJldHVybnMgZmFsc2Ugb24gaW5kZXggb3V0IG9mIGJvdW5kcy4KLSAgICBib29sIGVuc3Vy
ZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4LCBJbWFnZUZyYW1lQ2FjaGluZyA9IENhY2hlTWV0
YWRhdGFBbmRGcmFtZSk7CisgICAgYm9vbCBlbnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVfdCBpbmRl
eCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgPSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0
YWRhdGFBbmRJbWFnZSk7CiAKICAgICAvLyBDYWxsZWQgdG8gaW52YWxpZGF0ZSBjYWNoZWQgZGF0
YS4gV2hlbiB8ZGVzdHJveUFsbHwgaXMgdHJ1ZSwgd2Ugd2lwZSBvdXQKICAgICAvLyB0aGUgZW50
aXJlIGZyYW1lIGJ1ZmZlciBjYWNoZSBhbmQgdGVsbCB0aGUgaW1hZ2Ugc291cmNlIHRvIGRlc3Ry
b3kKQEAgLTI5Miw3ICsyMzcsNyBAQCBwcml2YXRlOgogICAgIG11dGFibGUgSW50U2l6ZSBtX3Np
emVSZXNwZWN0aW5nT3JpZW50YXRpb247CiAKICAgICBzaXplX3QgbV9jdXJyZW50RnJhbWUgeyAw
IH07IC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBmcmFtZSBvZiBhbmltYXRpb24uCi0gICAg
VmVjdG9yPEZyYW1lRGF0YSwgMT4gbV9mcmFtZXM7IC8vIEFuIGFycmF5IG9mIHRoZSBjYWNoZWQg
ZnJhbWVzIG9mIHRoZSBhbmltYXRpb24uIFdlIGhhdmUgdG8gcmVmIGZyYW1lcyB0byBwaW4gdGhl
bSBpbiB0aGUgY2FjaGUuCisgICAgVmVjdG9yPEltYWdlRnJhbWVEYXRhLCAxPiBtX2ZyYW1lczsg
Ly8gQW4gYXJyYXkgb2YgdGhlIGNhY2hlZCBmcmFtZXMgb2YgdGhlIGFuaW1hdGlvbi4gV2UgaGF2
ZSB0byByZWYgZnJhbWVzIHRvIHBpbiB0aGVtIGluIHRoZSBjYWNoZS4KIAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxUaW1lcj4gbV9mcmFtZVRpbWVyOwogICAgIGludCBtX3JlcGV0aXRpb25Db3VudCB7
IGNBbmltYXRpb25Ob25lIH07IC8vIEhvdyBtYW55IHRvdGFsIGFuaW1hdGlvbiBsb29wcyB3ZSBz
aG91bGQgZG8uIFRoaXMgd2lsbCBiZSBjQW5pbWF0aW9uTm9uZSBpZiB0aGlzIGltYWdlIHR5cGUg
aXMgaW5jYXBhYmxlIG9mIGFuaW1hdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwUGl4ZWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTY4MWU0YTZjNGNjMDlmZTk0YmRk
ODE0NWQxMDRiZjBiZmQyZTlmMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oCkBAIC0wLDAgKzEsMTczIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6
ZS5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQml0bWFwUGl4ZWxzIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gY3JlYXRlKGNvbnN0
IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPEJpdG1hcFBpeGVscz4oc2l6ZSwgcHJlbXVsdGlwbHlBbHBo
YSk7CisgICAgfQorCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxCaXRtYXBQaXhlbHM+IGNy
ZWF0ZShjb25zdCBCaXRtYXBQaXhlbHMmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8Qml0bWFwUGl4ZWxzPihvdGhlcik7CisgICAgfQorCisgICAgQml0bWFw
UGl4ZWxzKGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSA9IHRydWUp
CisgICAgICAgIDogbV9wcmVtdWx0aXBseUFscGhhKHByZW11bHRpcGx5QWxwaGEpCisgICAgewor
ICAgICAgICBBU1NFUlQoIXNpemUuaXNFbXB0eSgpKTsKKyAgICAgICAgc2V0U2l6ZShzaXplKTsK
KyAgICB9CisKKyAgICBCaXRtYXBQaXhlbHMoY29uc3QgQml0bWFwUGl4ZWxzJiBvdGhlcikKKyAg
ICB7CisgICAgICAgIGlmICh0aGlzID09ICZvdGhlcikKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgICAgIG1fYmFja2luZ1N0b3JlID0gb3RoZXIubV9iYWNraW5nU3RvcmU7Cisg
ICAgICAgIG1fcGl4ZWxzID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOworICAgICAgICBtX3NpemUg
PSBvdGhlci5tX3NpemU7CisgICAgICAgIG1fcHJlbXVsdGlwbHlBbHBoYSA9IG90aGVyLm1fcHJl
bXVsdGlwbHlBbHBoYTsKKyAgICB9CisKKyAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBt
X3NpemUud2lkdGgoKTsgfQorICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUu
aGVpZ2h0KCk7IH0KKworICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlKCkgY29uc3Q7CisKKyAgICBi
b29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAgIGlmICghbV9i
YWNraW5nU3RvcmUudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUuYXJlYSgpKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIG1fYmFja2luZ1N0b3JlLnJlc2l6ZShz
aXplLmFyZWEoKSk7CisgICAgICAgIG1fcGl4ZWxzID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOwor
ICAgICAgICBtX3NpemUgPSBzaXplOworICAgICAgICBjbGVhcigpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBSR0JBMzIqIGF0KGludCB4LCBpbnQgeSkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3BpeGVscyArIHkgKiBtX3NpemUud2lkdGgoKSArIHg7CisgICAg
fQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtZW1zZXQobV9waXhlbHMsIDAs
IG1fc2l6ZS5hcmVhKCkgKiBzaXplb2YoUkdCQTMyKSk7CisgICAgfQorCisgICAgdm9pZCBjbGVh
clJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIGlmIChyZWN0LmlzRW1w
dHkoKSB8fCBpbkJvdW5kcyhyZWN0KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgIHNpemVfdCByZWN0V2lkdGhJbkJ5dGVzID0gcmVjdC53aWR0aCgpICogc2l6ZW9mKFJH
QkEzMik7CisgICAgICAgIFJHQkEzMiogc3RhcnQgPSBhdChyZWN0LngoKSwgcmVjdC55KCkpOwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QuaGVpZ2h0KCk7ICsraSkgeworICAgICAg
ICAgICAgbWVtc2V0KHN0YXJ0LCAwLCByZWN0V2lkdGhJbkJ5dGVzKTsKKyAgICAgICAgICAgIHN0
YXJ0ICs9IG1fc2l6ZS53aWR0aCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCByZXBl
YXRGaXJzdFJvdyhjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHJlY3Qu
aXNFbXB0eSgpIHx8IGluQm91bmRzKHJlY3QpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkgKiBzaXpl
b2YoUkdCQTMyKTsKKyAgICAgICAgUkdCQTMyKiBzcmMgPSBhdChyZWN0LngoKSwgcmVjdC55KCkp
OworICAgICAgICBSR0JBMzIqIGRlc3QgPSBzcmMgKyBtX3NpemUud2lkdGgoKTsKKyAgICAgICAg
Zm9yIChpbnQgaSA9IDE7IGkgPCByZWN0LmhlaWdodCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1l
bWNweShkZXN0LCBzcmMsIHJlY3RXaWR0aEluQnl0ZXMpOworICAgICAgICAgICAgZGVzdCArPSBt
X3NpemUud2lkdGgoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgc2V0UkdCQShpbnQg
eCwgaW50IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEp
CisgICAgeworICAgICAgICBzZXRSR0JBKGF0KHgsIHkpLCByLCBnLCBiLCBhKTsKKyAgICB9CisK
KyAgICB2b2lkIHNldFJHQkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1
bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5
QWxwaGEgfHwgYSA+PSAyNTUpCisgICAgICAgICAgICAqZGVzdCA9IG1ha2VSR0JBKHIsIGcsIGIs
IGEpOworICAgICAgICBlbHNlIGlmICghYSkKKyAgICAgICAgICAgICpkZXN0ID0gMDsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgKmRlc3QgPSBtYWtlUHJlbXVsdGlwbGllZFJHQkEociwgZywg
YiwgYSk7CisgICAgfQorCisgICAgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVk
IHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAgeworICAgICAgICBp
ZiAoIWEpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoYSA+PSAy
NTUgfHwgIWFscGhhQ2hhbm5lbCgqZGVzdCkpIHsKKyAgICAgICAgICAgIHNldFJHQkEoZGVzdCwg
ciwgZywgYiwgYSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKQorICAgICAgICAgICAgKmRlc3QgPSBtYWtl
UHJlbXVsdGlwbGllZFJHQkEocmVkQ2hhbm5lbCgqZGVzdCksIGdyZWVuQ2hhbm5lbCgqZGVzdCks
IGJsdWVDaGFubmVsKCpkZXN0KSwgYWxwaGFDaGFubmVsKCpkZXN0KSk7CisgICAgICAgIAorICAg
ICAgICBSR0JBMzIgc3JjID0gbWFrZVJHQkEociwgZywgYiwgYSk7CisgICAgICAgICpkZXN0ID0g
Q29sb3IoKmRlc3QpLmJsZW5kKHNyYykucmdiKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIW1f
cHJlbXVsdGlwbHlBbHBoYSkKKyAgICAgICAgICAgICpkZXN0ID0gbWFrZVVuUHJlbXVsdGlwbGll
ZFJHQkEocmVkQ2hhbm5lbCgqZGVzdCksIGdyZWVuQ2hhbm5lbCgqZGVzdCksIGJsdWVDaGFubmVs
KCpkZXN0KSwgYWxwaGFDaGFubmVsKCpkZXN0KSk7CisgICAgfQorCisgICAgYm9vbCBpbkJvdW5k
cyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSW50
UmVjdChJbnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHBvaW50KTsKKyAgICB9CisKKyAgICBi
b29sIGluQm91bmRzKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHJlY3QpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBWZWN0b3I8UkdCQTMyPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBSR0JB
MzIqIG1fcGl4ZWxzIHsgbnVsbHB0ciB9OworICAgIEludFNpemUgbV9zaXplOworICAgIGJvb2wg
bV9wcmVtdWx0aXBseUFscGhhIHsgdHJ1ZSB9OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCmluZGV4IDRlMjVhYTZmZDc0ZDFlNDZjNTQxNjE0OThi
YzE3MmJmNjAwODc1ZDEuLjQzOWY1YTYzYzdiZWJlNTYwNDJiMjRlN2Q3MmVjY2VjZjM2YzQwYzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKQEAgLTQ5LDYg
KzQ5LDQwIEBAIGNvbnN0IFJHQkEzMiBDb2xvcjo6dHJhbnNwYXJlbnQ7CiBzdGF0aWMgY29uc3Qg
UkdCQTMyIGxpZ2h0ZW5lZEJsYWNrID0gMHhGRjU0NTQ1NDsKIHN0YXRpYyBjb25zdCBSR0JBMzIg
ZGFya2VuZWRXaGl0ZSA9IDB4RkZBQkFCQUI7CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbXVs
dGlwbHkyNTUodW5zaWduZWQgYykKK3sKKyAgICAvLyBjICogMjU1CisgICAgLy8gICA9IGMgKiAo
MjU2IC0gMSkKKyAgICAvLyAgID0gYyAqIDI1NiAtIGMKKyAgICByZXR1cm4gKGMgPDwgOCkgLSBj
OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRpdmlkZTI1NSh1bnNpZ25lZCBjKQorewor
ICAgIC8vIGMgLyAyNTUKKyAgICAvLyAgID0gYyAvIDI1NiAqICgxICsgMSAvIDI1NSkKKyAgICAv
LyAgID0gKGMgKyBjIC8gMjU1KSAvIDI1NgorICAgIC8vICAgPSAoYyArIChjICsgYyAvIDI1NSkg
LyAyNTYpIC8gMjU2CisgICAgLy8gICA9IChjICsgYyAvIDI1NiArIGMgLyAoMjU1IHggMjU2KSkg
LyAyNTYKKyAgICAvLyAgfj0gKGMgKyBjIC8gMjU2ICsgMSkgLyAyNTYKKyAgICByZXR1cm4gKGMg
KyAoYyA+PiA4KSArIDEpID4+IDg7Cit9CisgICAgCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRp
dmlkZUNlaWwodW5zaWduZWQgYywgdW5zaWduZWQgZCkKK3sKKyAgICByZXR1cm4gKGMgKyBkIC0g
MSkgLyBkOworfQorICAgIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBwcmVtdWx0aXBsaWVkQ2hh
bm5lbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBhKQoreworICAgIHJldHVybiBkaXZpZGUyNTUoYyAq
IGEpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHVucHJlbXVsdGlwbGllZENoYW5uZWwo
dW5zaWduZWQgYywgdW5zaWduZWQgYSkKK3sKKyAgICByZXR1cm4gZGl2aWRlQ2VpbChtdWx0aXBs
eTI1NShjKSwgYSk7Cit9CisgICAgCiBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBi
KQogewogICAgIHJldHVybiAweEZGMDAwMDAwIHwgc3RkOjptYXgoMCwgc3RkOjptaW4ociwgMjU1
KSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAyNTUpKSA8PCA4IHwgc3RkOjptYXgo
MCwgc3RkOjptaW4oYiwgMjU1KSk7CkBAIC01OSw2ICs5MywxNiBAQCBSR0JBMzIgbWFrZVJHQkEo
aW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCiAgICAgcmV0dXJuIHN0ZDo6bWF4KDAsIHN0ZDo6
bWluKGEsIDI1NSkpIDw8IDI0IHwgc3RkOjptYXgoMCwgc3RkOjptaW4ociwgMjU1KSkgPDwgMTYg
fCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAyNTUpKSA8PCA4IHwgc3RkOjptYXgoMCwgc3RkOjpt
aW4oYiwgMjU1KSk7CiB9CiAKK1JHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGlu
dCBnLCBpbnQgYiwgaW50IGEpCit7CisgICAgcmV0dXJuIG1ha2VSR0JBKHByZW11bHRpcGxpZWRD
aGFubmVsKHIsIGEpLCBwcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBhKSwgcHJlbXVsdGlwbGllZENo
YW5uZWwoYiwgYSksIGEpOworfQorICAgIAorUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRSR0JB
KGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQoreworICAgIHJldHVybiBtYWtlUkdCQSh1bnBy
ZW11bHRpcGxpZWRDaGFubmVsKHIsIGEpLCB1bnByZW11bHRpcGxpZWRDaGFubmVsKGcsIGEpLCB1
bnByZW11bHRpcGxpZWRDaGFubmVsKGIsIGEpLCBhKTsKK30KKyAgICAKIHN0YXRpYyBpbnQgY29s
b3JGbG9hdFRvUkdCQUJ5dGUoZmxvYXQgZikKIHsKICAgICAvLyBXZSB1c2UgbHJvdW5kZiBhbmQg
MjU1IGluc3RlYWQgb2YgbmV4dGFmdGVyZigyNTYsIDApIHRvIG1hdGNoIENHJ3Mgcm91bmRpbmcK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCmluZGV4IGRkMjYyNzBiYjQ2
NjBiMzNhZTA3MGU4Yzk0NDUyMGQ3Mjg0NTRiOGEuLmE1NDUzMmM3NzU1YTdjODc2OTM2MjQwY2Fl
NGVjMzdhNGRhMGQwNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
aApAQCAtNTQsNiArNTQsOCBAQCB0eXBlZGVmIHVuc2lnbmVkIFJHQkEzMjsgLy8gRGVwcmVjYXRl
ZDogVHlwZSBmb3IgYW4gUkdCQSBxdWFkcnVwbGV0LiBVc2UgUkdCQSBjbAogCiBXRUJDT1JFX0VY
UE9SVCBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBiKTsKIFdFQkNPUkVfRVhQT1JU
IFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7CitXRUJDT1JFX0VY
UE9SVCBSR0JBMzIgbWFrZVByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGlu
dCBhKTsKK1dFQkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQg
ciwgaW50IGcsIGludCBiLCBpbnQgYSk7CiAKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBjb2xvcldp
dGhPdmVycmlkZUFscGhhKFJHQkEzMiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSk7CiBXRUJD
T1JFX0VYUE9SVCBSR0JBMzIgY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIE9w
dGlvbmFsPGZsb2F0PiBvdmVycmlkZUFscGhhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZS5oCmluZGV4IDdhMjk5OTJmNzcxODhlMDM4MjhkODBhNjViOGJlMmNkOGRjMmRl
NzYuLjhlN2I1MmIxZjRmMzFjNzRhM2NiMmExMzIxNWRhNzdhMmIxOGMwN2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaApAQCAtMTM3LDggKzEzNywxMSBAQCBwdWJs
aWM6CiAKICAgICBlbnVtIFRpbGVSdWxlIHsgU3RyZXRjaFRpbGUsIFJvdW5kVGlsZSwgU3BhY2VU
aWxlLCBSZXBlYXRUaWxlIH07CiAKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUlt
YWdlKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0
aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50U2l6ZSYpIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICB2
aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgeyByZXR1
cm4gbnVsbHB0cjsgfQogICAgIHZpcnR1YWwgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkZv
ckN1cnJlbnRGcmFtZSgpIHsgcmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsgfQorICAgIHZpcnR1
YWwgVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBmcmFtZXNOYXRpdmVJbWFnZXMoKSB7IHJldHVybiB7
IH07IH0KIAogICAgIC8vIEFjY2Vzc29ycyBmb3IgbmF0aXZlIGltYWdlIGZvcm1hdHMuCiAKQEAg
LTE1MCwxMiArMTUzLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgQ0ZEYXRhUmVmIGdldFRJRkZS
ZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCi0jaWYgVVNFKENH
KQotICAgIHZpcnR1YWwgQ0dJbWFnZVJlZiBnZXRDR0ltYWdlUmVmKCkgeyByZXR1cm4gbnVsbHB0
cjsgfQotICAgIHZpcnR1YWwgQ0dJbWFnZVJlZiBnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUoY29u
c3QgSW50U2l6ZSYpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIFJldGFpblB0cjxD
RkFycmF5UmVmPiBnZXRDR0ltYWdlQXJyYXkoKSB7IHJldHVybiBudWxscHRyOyB9Ci0jZW5kaWYK
LQogI2lmIFBMQVRGT1JNKFdJTikKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SEJJVE1BUChIQklUTUFQ
KSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBnZXRIQklUTUFQT2ZTaXplKEhC
SVRNQVAsIGNvbnN0IEludFNpemUqKSB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTc5LDYgKzE3Niw4
IEBAIHB1YmxpYzoKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgdmlydHVhbCBib29sIG5vdFNv
bGlkQ29sb3IoKSB7IHJldHVybiB0cnVlOyB9CiAjZW5kaWYKKyAgICAKKyAgICB2aXJ0dWFsIHZv
aWQgbGF5b3V0SWZOZWVkZWQoKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRleHRTdHJl
YW0mKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VGcmFtZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VGcmFtZURhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmZDIwY2Y4ZTYxZjRiMWExZmUwOGViMzMy
YjcxNjU3ZjAxNDhjMTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5jcHAKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkltYWdlRnJhbWVEYXRhLmgiCisKKyNpbmNsdWRlICJDb2xvci5oIgorCisj
aWYgVVNFKENHKQorI2luY2x1ZGUgIkltYWdlRGVjb2RlckNHLmgiCisjZWxzZQorI2luY2x1ZGUg
IkltYWdlRGVjb2Rlci5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VGcmFtZURhdGE6OkltYWdlRnJhbWVEYXRhKCkK
K3sKK30KKworSW1hZ2VGcmFtZURhdGE6OkltYWdlRnJhbWVEYXRhKE5hdGl2ZUltYWdlUHRyJiYg
aW1hZ2UpCisgICAgOiBtX3N0YXR1cyhEZWNvZGluZ1N0YXR1czo6Q29tcGxldGUpCisgICAgLCBt
X2ltYWdlKFdURk1vdmUoaW1hZ2UpKQoreworICAgIG1fc2l6ZSA9IFBsYXRmb3JtSW1hZ2UobV9p
bWFnZSkuc2l6ZSgpOworICAgIG1faGFzQWxwaGEgPSBQbGF0Zm9ybUltYWdlKG1faW1hZ2UpLmhh
c0FscGhhKCk7Cit9CisKK0ltYWdlRnJhbWVEYXRhOjpJbWFnZUZyYW1lRGF0YShJbWFnZURlY29k
ZXImIGRlY29kZXIsIHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xl
dmVsLCBDYWNoaW5nIGZyYW1lQ2FjaGluZykKK3sKKyAgICBBU1NFUlQoZnJhbWVDYWNoaW5nID09
IENhY2hpbmc6Ok1ldGFkYXRhIHx8IGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YUFu
ZEltYWdlKTsKKyAgICAKKyAgICBpZiAoZnJhbWVDYWNoaW5nID09IENhY2hpbmc6OkltYWdlIHx8
IGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YUFuZEltYWdlKSB7CisgICAgICAgIG1f
aW1hZ2UgPSBkZWNvZGVyLmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGluZGV4LCBzdWJzYW1wbGlu
Z0xldmVsKTsKKyAgICAgICAgbV9zdWJzYW1wbGluZ0xldmVsID0gc3Vic2FtcGxpbmdMZXZlbDsK
KyAgICB9CisgICAgCisgICAgaWYgKGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YSB8
fCBmcmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSkgeworICAgICAgICBt
X29yaWVudGF0aW9uID0gZGVjb2Rlci5vcmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOworICAgICAg
ICBtX3N0YXR1cyA9IGRlY29kZXIuZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCkgPyBEZWNv
ZGluZ1N0YXR1czo6Q29tcGxldGUgOiBEZWNvZGluZ1N0YXR1czo6UGFydGlhbDsKKyAgICAgICAg
CisgICAgICAgIGlmIChkZWNvZGVyLnJlcGV0aXRpb25Db3VudCgpICE9IGNBbmltYXRpb25Ob25l
KQorICAgICAgICAgICAgbV9kdXJhdGlvbiA9IGRlY29kZXIuZnJhbWVEdXJhdGlvbkF0SW5kZXgo
aW5kZXgpOworICAgICAgICAKKyAgICAgICAgbV9oYXNBbHBoYSA9IGRlY29kZXIuZnJhbWVIYXNB
bHBoYUF0SW5kZXgoaW5kZXgpOworICAgICAgICBtX3NpemUgPSBkZWNvZGVyLmZyYW1lU2l6ZUF0
SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOworICAgIH0KK30KKworSW1hZ2VGcmFtZURh
dGE6On5JbWFnZUZyYW1lRGF0YSgpCit7CisgICAgY2xlYXJTdWJJbWFnZXMoKTsKK30KKyAgICAK
K0ltYWdlRnJhbWVEYXRhJiBJbWFnZUZyYW1lRGF0YTo6b3BlcmF0b3I9KGNvbnN0IEltYWdlRnJh
bWVEYXRhJiBvdGhlcikKK3sKKyAgICBpZiAodGhpcyA9PSAmb3RoZXIpCisgICAgICAgIHJldHVy
biAqdGhpczsKKworICAgIG1fc3RhdHVzID0gb3RoZXIubV9zdGF0dXM7CisgICAgbV9zaXplID0g
b3RoZXIubV9zaXplOworICAgIG1faW1hZ2UgPSBvdGhlci5tX2ltYWdlOworICAgIAorICAgIG1f
cGl4ZWxzID0gb3RoZXIucGl4ZWxzKCkgPyBCaXRtYXBQaXhlbHM6OmNyZWF0ZSgqb3RoZXIucGl4
ZWxzKCkpIDogbnVsbHB0cjsKKyAgICAKKyAgICBtX29yaWVudGF0aW9uID0gb3RoZXIubV9vcmll
bnRhdGlvbjsKKyAgICBtX3N1YnNhbXBsaW5nTGV2ZWwgPSBvdGhlci5tX3N1YnNhbXBsaW5nTGV2
ZWw7CisgICAgbV9kdXJhdGlvbiA9IG90aGVyLm1fZHVyYXRpb247CisgICAgbV9oYXNBbHBoYSA9
IG90aGVyLm1faGFzQWxwaGE7CisgICAgcmV0dXJuICp0aGlzOworfQorCit2b2lkIEltYWdlRnJh
bWVEYXRhOjpjbGVhclN1YkltYWdlcygpCit7CisgICAgaWYgKCFtX2ltYWdlKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5jbGVhclN1YkltYWdlcygp
OworfQorCit1bnNpZ25lZCBJbWFnZUZyYW1lRGF0YTo6Y2xlYXIoQ2FjaGluZyBmcmFtZUNhY2hp
bmcpCit7CisgICAgQVNTRVJUKGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpFbXB0eSB8fCBmcmFt
ZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGEpOworICAgIAorICAgIHVuc2lnbmVkIGZyYW1l
Qnl0ZXMgPSB0aGlzLT5mcmFtZUJ5dGVzKCk7CisgICAgCisgICAgY2xlYXJTdWJJbWFnZXMoKTsK
KyAgICAKKyAgICBpZiAoZnJhbWVDYWNoaW5nID09IENhY2hpbmc6OkVtcHR5KQorICAgICAgICAq
dGhpcyA9IEltYWdlRnJhbWVEYXRhKCk7CisgICAgZWxzZQorICAgICAgICBtX2ltYWdlID0gbnVs
bHB0cjsKKyAgICAKKyAgICByZXR1cm4gZnJhbWVCeXRlczsKK30KKworQ29sb3IgSW1hZ2VGcmFt
ZURhdGE6OnNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKCFoYXNJbWFn
ZSgpIHx8IG1fc2l6ZSAhPSBJbnRTaXplKDEsIDEpKQorICAgICAgICByZXR1cm4gQ29sb3IoKTsK
KyAgICAKKyAgICByZXR1cm4gUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5zaW5nbGVQaXhlbFNvbGlk
Q29sb3IoKTsKK30KKworYm9vbCBJbWFnZUZyYW1lRGF0YTo6aXNBbG1vc3RTb2xpZENvbG9yKCkg
Y29uc3QKK3sKKyAgICBpZiAoIWhhc0ltYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICByZXR1cm4gUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5pc0FsbW9zdFNvbGlkQ29sb3Io
KTsKK30KKyAgICAKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlRnJhbWVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUZyYW1lRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIxMTI2MTNhNDVlNTMzYmE0YThkNTFlZTZjZTg3
ZDQyODRiM2NmNzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUZyYW1lRGF0YS5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJCaXRtYXBQaXhlbHMuaCIKKyNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCisjaW5jbHVk
ZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgQ29sb3I7CitjbGFzcyBJbWFnZURlY29kZXI7CisKKy8vIFN1YnNh
bXBsaW5nTGV2ZWwuIDAgaXMgbm8gc3Vic2FtcGxpbmcsIDEgaXMgaGFsZiBkaW1lbnNpb25zIG9u
IGVhY2ggYXhpcyBldGMuCit1c2luZyBTdWJzYW1wbGluZ0xldmVsID0gdWludDhfdDsKKworZW51
bSA6IFN1YnNhbXBsaW5nTGV2ZWwgeworICAgIE1pblN1YnNhbXBsaW5nTGV2ZWwgPSAwLAorICAg
IE1heFN1YnNhbXBsaW5nTGV2ZWwgPSAzLAorICAgIERlZmF1bHRTdWJzYW1wbGluZ0xldmVsID0g
TWluU3Vic2FtcGxpbmdMZXZlbAorfTsKKworY2xhc3MgSW1hZ2VGcmFtZURhdGEgeworcHVibGlj
OgorICAgIGVudW0gY2xhc3MgQ2FjaGluZyB7IEVtcHR5LCBNZXRhZGF0YSwgSW1hZ2UsIE1ldGFk
YXRhQW5kSW1hZ2UgfTsKKyAgICBlbnVtIGNsYXNzIERlY29kaW5nU3RhdHVzIHsgRW1wdHksIFBh
cnRpYWwsIENvbXBsZXRlIH07CisgICAgCisgICAgSW1hZ2VGcmFtZURhdGEoKTsKKyAgICBJbWFn
ZUZyYW1lRGF0YShOYXRpdmVJbWFnZVB0ciYmKTsKKyAgICBJbWFnZUZyYW1lRGF0YShJbWFnZURl
Y29kZXImLCBzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgPSBEZWZhdWx0U3Vic2FtcGxp
bmdMZXZlbCwgQ2FjaGluZyA9IENhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOworICAgIEltYWdl
RnJhbWVEYXRhKGNvbnN0IEltYWdlRnJhbWVEYXRhJiBvdGhlcikgeyBvcGVyYXRvcj0ob3RoZXIp
OyB9CisKKyAgICB+SW1hZ2VGcmFtZURhdGEoKTsKKworICAgIEltYWdlRnJhbWVEYXRhJiBvcGVy
YXRvcj0oY29uc3QgSW1hZ2VGcmFtZURhdGEmIG90aGVyKTsKKyAgICAKKyAgICB1bnNpZ25lZCBj
bGVhcihDYWNoaW5nKTsKKyAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdDsK
KyAgICBib29sIGlzQWxtb3N0U29saWRDb2xvcigpIGNvbnN0OworICAgIAorICAgIERlY29kaW5n
U3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CisgICAgYm9vbCBpc0Nv
bXBsZXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6OkNvbXBs
ZXRlOyB9CisgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAg
dW5zaWduZWQgZnJhbWVCeXRlcygpIGNvbnN0IHsgcmV0dXJuIGhhc0ltYWdlKCkgPyBtX3NpemUu
YXJlYSgpICogNCA6IDA7IH0KKyAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZSgpIGNvbnN0IHsgcmV0
dXJuIG1faW1hZ2U7IH0KKyAgICBCaXRtYXBQaXhlbHMqIHBpeGVscygpIGNvbnN0IHsgcmV0dXJu
IG1fcGl4ZWxzID8gbV9waXhlbHMuZ2V0KCkgOiBudWxscHRyOyB9CisgICAgCisgICAgSW1hZ2VP
cmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZW50YXRpb247IH0K
KyAgICBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwoKSBjb25zdCB7IHJldHVybiBt
X3N1YnNhbXBsaW5nTGV2ZWw7IH0KKyAgICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZHVyYXRpb247IH0KKyAgICAKKyAgICBib29sIGhhc0FscGhhKCkgY29uc3QgeyByZXR1cm4g
bV9oYXNBbHBoYTsgfQorICAgIGJvb2wgaGFzSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdl
OyB9CisgICAgYm9vbCBoYXNNZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuICFtX3NpemUuaXNFbXB0
eSgpOyB9CisgICAgYm9vbCBoYXNQaXhlbHMoKSBjb25zdCB7IHJldHVybiBwaXhlbHMoKTsgfQor
ICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIGNsZWFyU3ViSW1hZ2VzKCk7CisgICAgCisgICAgRGVj
b2RpbmdTdGF0dXMgbV9zdGF0dXMgeyBEZWNvZGluZ1N0YXR1czo6RW1wdHkgfTsKKyAgICBJbnRT
aXplIG1fc2l6ZTsKKyAgICBOYXRpdmVJbWFnZVB0ciBtX2ltYWdlOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxCaXRtYXBQaXhlbHM+IG1fcGl4ZWxzOworICAgIAorICAgIEltYWdlT3JpZW50YXRpb24g
bV9vcmllbnRhdGlvbiB7IERlZmF1bHRJbWFnZU9yaWVudGF0aW9uIH07CisgICAgU3Vic2FtcGxp
bmdMZXZlbCBtX3N1YnNhbXBsaW5nTGV2ZWwgeyAwIH07CisgICAgZmxvYXQgbV9kdXJhdGlvbiB7
IDAgfTsKKyAgICBib29sIG1faGFzQWxwaGEgeyB0cnVlIH07Cit9OworICAgIAorfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCmluZGV4IGRk
ZDhhNTViYTA5MDZjNTg2NmExOTJjZjhlNDE0ZWE3MDdiNzI4YWMuLjgyZjZlMmQ2ZTQ1NDMzZGEx
YTdkNTZiMzcwZGZhNjFhNGM0MTkxMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKQEAgLTIyNCw2ICsyMjQsMTEgQEAgTmF0aXZlSW1h
Z2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwg
U3Vic2FtcGxpbmdMZXYKICAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSA/IG1fZGVjb2Rlci0+Y3Jl
YXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpIDogbnVsbHB0cjsK
IH0KIAorSW1hZ2VGcmFtZURhdGEgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lRGF0YUF0SW5kZXgo
c2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlRnJh
bWVEYXRhOjpDYWNoaW5nIGNhY2hpbmcpCit7CisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkgPyBJ
bWFnZUZyYW1lRGF0YSgqbV9kZWNvZGVyLCBpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgY2FjaGlu
ZykgOiBJbWFnZUZyYW1lRGF0YSgpOworfQorICAgIAogdm9pZCBJbWFnZVNvdXJjZTo6ZHVtcChU
ZXh0U3RyZWFtJiB0cykgY29uc3QKIHsKICAgICBpZiAobV9hbGxvd1N1YnNhbXBsaW5nKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKaW5kZXggNjAz
NTczOWI3ZThiMDk2ZGM4ZGZlOWM1MzBhNDJjNmYyOTFiZGEwMC4uYTQwYzdjZTkzMDdjZGFkZjA3
OWFiNzAxYTgyNzk5YjY5MDUyOWQ0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaWZuZGVmIEltYWdlU291
cmNlX2gKICNkZWZpbmUgSW1hZ2VTb3VyY2VfaAogCisjaW5jbHVkZSAiSW1hZ2VGcmFtZURhdGEu
aCIKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIK
ICNpbmNsdWRlICJOYXRpdmVJbWFnZVB0ci5oIgpAQCAtNjMsOSArNjQsNiBAQCBjb25zdCBpbnQg
Y0FuaW1hdGlvbkxvb3BPbmNlID0gMDsKIGNvbnN0IGludCBjQW5pbWF0aW9uTG9vcEluZmluaXRl
ID0gLTE7CiBjb25zdCBpbnQgY0FuaW1hdGlvbk5vbmUgPSAtMjsKIAotLy8gU3Vic2FtcGxpbmdM
ZXZlbC4gMCBpcyBubyBzdWJzYW1wbGluZywgMSBpcyBoYWxmIGRpbWVuc2lvbnMgb24gZWFjaCBh
eGlzIGV0Yy4KLXR5cGVkZWYgc2hvcnQgU3Vic2FtcGxpbmdMZXZlbDsKLQogY2xhc3MgSW1hZ2VT
b3VyY2UgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlU291cmNlKTsKICAgICBmcmll
bmQgY2xhc3MgQml0bWFwSW1hZ2U7CkBAIC0xMzIsMTggKzEzMCwxOSBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBhbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoc2l6ZV90KSBjb25zdDsKICAgICAK
ICAgICAvLyBTaXplIG9mIG9wdGlvbmFsbHkgc3Vic2FtcGxlZCBmcmFtZS4KLSAgICBJbnRTaXpl
IGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gMCwgUmVzcGVjdElt
YWdlT3JpZW50YXRpb25FbnVtID0gRG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikgY29uc3Q7
CisgICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9
IERlZmF1bHRTdWJzYW1wbGluZ0xldmVsLCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0gPSBE
b05vdFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKSBjb25zdDsKICAgICAKICAgICAvLyBSZXR1cm4g
dGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgZGVjb2RlZCBmcmFtZS4gSWYgdGhlIGZyYW1lIGlz
IG5vdCB5ZXQKICAgICAvLyBkZWNvZGVkIHRoZW4gcmV0dXJuIDAuCi0gICAgdW5zaWduZWQgZnJh
bWVCeXRlc0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gMCkgY29uc3Q7CisgICAg
dW5zaWduZWQgZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gRGVm
YXVsdFN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0OwogICAgIAogICAgIGZsb2F0IGZyYW1lRHVyYXRp
b25BdEluZGV4KHNpemVfdCk7CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkF0SW5k
ZXgoc2l6ZV90KSBjb25zdDsgLy8gRVhJRiBpbWFnZSBvcmllbnRhdGlvbgogICAgIAogICAgIC8v
IENhbGxlcnMgc2hvdWxkIG5vdCBjYWxsIHRoaXMgYWZ0ZXIgY2FsbGluZyBjbGVhcigpIHdpdGgg
YSBoaWdoZXIgaW5kZXg7CiAgICAgLy8gc2VlIGNvbW1lbnRzIG9uIGNsZWFyKCkgYWJvdmUuCi0g
ICAgTmF0aXZlSW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1w
bGluZ0xldmVsID0gMCk7CisgICAgTmF0aXZlSW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0SW5k
ZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gRGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwpOwor
ICAgIEltYWdlRnJhbWVEYXRhIGNyZWF0ZUZyYW1lRGF0YUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1w
bGluZ0xldmVsID0gRGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlRnJhbWVEYXRhOjpDYWNo
aW5nID0gSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOwogICAgIAog
cHJpdmF0ZToKICAgICB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmFiN2FlYTQ4OWYzZWIyYTgyODc3MWMyMTAzZThkNGQwYmUxN2JlNWQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlLmgK
QEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKyNpbmNs
dWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb2xvcjsKK2NsYXNzIEZsb2F0UmVjdDsKK2Ns
YXNzIEludFNpemU7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CisKK2NsYXNzIFBsYXRmb3JtSW1h
Z2UgeworcHVibGljOgorICAgIFBsYXRmb3JtSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGlt
YWdlKQorICAgICAgICA6IG1faW1hZ2UoaW1hZ2UpCisgICAgeworICAgIH0KKworICAgIGJvb2wg
aXNOaWwoKSBjb25zdCB7IHJldHVybiAhbV9pbWFnZTsgfQorICAgIHZvaWQgY2xlYXJTdWJJbWFn
ZXMoKTsKKworICAgIEludFNpemUgc2l6ZSgpIGNvbnN0OworICAgIGJvb2wgaGFzQWxwaGEoKSBj
b25zdDsKKyAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdDsKKyAgICBib29s
IGlzQWxtb3N0U29saWRDb2xvcigpIGNvbnN0OworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEludFNpemUmIHNyY1NpemUsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUsIGNv
bnN0IEltYWdlT3JpZW50YXRpb24mKSBjb25zdDsKKworICAgIHN0YXRpYyBmbG9hdCBzdWJzYW1w
bGluZ1NjYWxlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCk7CisKK3ByaXZhdGU6CisjaWYgVVNFKENHKQorICAgIENH
SW1hZ2VSZWYgY2dJbWFnZVJlZigpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UgPyBtX2ltYWdlLmdl
dCgpIDogbnVsbHB0cjsgfQorI2VuZGlmCisgICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsKK307
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbQppbmRleCBmNGMxNDU3YmJiMjU1NzU0ZjAw
YTA2MjVlZTgzZTA0ZGE3YzZlZmNmLi5kNTIwZjVkNTg1YWM2MGRiYWVlMjU1ZTFiODNjMjRkYzY4
NzIxMGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCkBAIC0yMTIsNyArMjEyLDcgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnVwZGF0ZURpc3BsYXlN
b2RlKCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgbV9wYXVzZWRJbWFnZSA9IGltYWdlLT5nZXRDR0ltYWdlUmVmKCk7
CisgICAgICAgICAgICAgICAgbV9wYXVzZWRJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgpOwogICAgICAgICAgICAgICAgIGlmICghbV9wYXVzZWRJbWFnZSkgewogICAg
ICAgICAgICAgICAgICAgICBtX2Rpc3BsYXlNb2RlID0gUGFpbnRJdEJsYWNrOwogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDE3NzIyYmVjNTNhYjhhMDhhOGRhODUyOGI5ZTBkN2M0ZDBjZDQxMzUu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCaXRtYXBJ
bWFnZS5oIgotCi0jaWYgVVNFKENBSVJPKQotCi0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIK
LSNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fp
cm8uaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIE5hdGl2ZUltYWdlIHsKLQotSW50U2l6ZSBzaXplKGNv
bnN0IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiBpbWFnZSkKLXsKLSAgICByZXR1cm4gY2Fpcm9T
dXJmYWNlU2l6ZShpbWFnZS5nZXQoKSk7Ci19Ci0KLWJvb2wgaGFzQWxwaGEoY29uc3QgUmVmUHRy
PGNhaXJvX3N1cmZhY2VfdD4mIGltYWdlKQotewotICAgIHJldHVybiBjYWlyb19zdXJmYWNlX2dl
dF9jb250ZW50KGltYWdlLmdldCgpKSAhPSBDQUlST19DT05URU5UX0NPTE9SOwotfQotCi1Db2xv
ciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoY29uc3QgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mIGlt
YWdlKQotewotICAgIEFTU0VSVChpbWFnZSk7Ci0gICAgCi0gICAgaWYgKE5hdGl2ZUltYWdlOjpz
aXplKGltYWdlKSAhPSBJbnRTaXplKDEsIDEpKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKLQot
ICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKGltYWdlLmdldCgpKSAhPSBDQUlST19TVVJG
QUNFX1RZUEVfSU1BR0UpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotCi0gICAgUkdCQTMyKiBw
aXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFJHQkEzMio+KGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2RhdGEoaW1hZ2UuZ2V0KCkpKTsKLSAgICByZXR1cm4gY29sb3JGcm9tUHJlbXVsdGlwbGll
ZEFSR0IoKnBpeGVsKTsKLX0KLQotfQotCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCwKLSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFn
ZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pCi17Ci0gICAgaWYgKCFkc3Qud2lk
dGgoKSB8fCAhZHN0LmhlaWdodCgpIHx8ICFzcmMud2lkdGgoKSB8fCAhc3JjLmhlaWdodCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBzdGFydEFuaW1hdGlvbigpOwotCi0gICAgYXV0byBzdXJm
YWNlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwotICAgIGlmICghc3VyZmFj
ZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCi0gICAg
ICAgIHJldHVybjsKLQotICAgIENvbG9yIGNvbG9yID0gc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCk7
Ci0gICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3Io
Y29udGV4dCwgZHN0LCBjb2xvciwgb3ApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Y29udGV4dC5zYXZlKCk7Ci0KLSAgICAvLyBTZXQgdGhlIGNvbXBvc2l0aW5nIG9wZXJhdGlvbi4K
LSAgICBpZiAob3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciAmJiBibGVuZE1vZGUgPT0gQmxlbmRN
b2RlTm9ybWFsICYmICFmcmFtZUhhc0FscGhhQXRJbmRleChtX2N1cnJlbnRGcmFtZSkpCi0gICAg
ICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOwotICAgIGVs
c2UKLSAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3AsIGJsZW5kTW9kZSk7
Ci0KLSNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQotICAgIEludFNpemUg
c2NhbGVkU2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUoc3VyZmFjZS5nZXQoKSk7Ci0gICAgRmxvYXRS
ZWN0IGFkanVzdGVkU3JjUmVjdCA9IGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGxpbmcoc3Jj
LCBzY2FsZWRTaXplKTsKLSNlbHNlCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdChzcmMp
OwotI2VuZGlmCi0KLSAgICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3JpZW50YXRpb24oZGVzY3Jp
cHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKTsKLSAgICBpZiAoZGVzY3JpcHRpb24ucmVzcGVjdElt
YWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikKLSAgICAgICAgZnJh
bWVPcmllbnRhdGlvbiA9IGZyYW1lT3JpZW50YXRpb25BdEluZGV4KG1fY3VycmVudEZyYW1lKTsK
LQotICAgIEZsb2F0UmVjdCBkc3RSZWN0ID0gZHN0OwotCi0gICAgaWYgKGZyYW1lT3JpZW50YXRp
b24gIT0gRGVmYXVsdEltYWdlT3JpZW50YXRpb24pIHsKLSAgICAgICAgLy8gSW1hZ2VPcmllbnRh
dGlvbiBleHBlY3RzIHRoZSBvcmlnaW4gdG8gYmUgYXQgKDAsIDApLgotICAgICAgICBjb250ZXh0
LnRyYW5zbGF0ZShkc3RSZWN0LngoKSwgZHN0UmVjdC55KCkpOwotICAgICAgICBkc3RSZWN0LnNl
dExvY2F0aW9uKEZsb2F0UG9pbnQoKSk7Ci0gICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKGZyYW1l
T3JpZW50YXRpb24udHJhbnNmb3JtRnJvbURlZmF1bHQoZHN0UmVjdC5zaXplKCkpKTsKLSAgICAg
ICAgaWYgKGZyYW1lT3JpZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSkgewotICAgICAgICAg
ICAgLy8gVGhlIGRlc3RpbmF0aW9uIHJlY3RhbmdsZSB3aWxsIGhhdmUgaXQncyB3aWR0aCBhbmQg
aGVpZ2h0IGFscmVhZHkgcmV2ZXJzZWQgZm9yIHRoZSBvcmllbnRhdGlvbiBvZgotICAgICAgICAg
ICAgLy8gdGhlIGltYWdlLCBhcyBpdCB3YXMgbmVlZGVkIGZvciBwYWdlIGxheW91dCwgc28gd2Ug
bmVlZCB0byByZXZlcnNlIGl0IGJhY2sgaGVyZS4KLSAgICAgICAgICAgIGRzdFJlY3QgPSBGbG9h
dFJlY3QoZHN0UmVjdC54KCksIGRzdFJlY3QueSgpLCBkc3RSZWN0LmhlaWdodCgpLCBkc3RSZWN0
LndpZHRoKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29udGV4dC5wbGF0Zm9ybUNvbnRl
eHQoKS0+ZHJhd1N1cmZhY2VUb0NvbnRleHQoc3VyZmFjZS5nZXQoKSwgZHN0UmVjdCwgYWRqdXN0
ZWRTcmNSZWN0LCBjb250ZXh0KTsKLQotICAgIGNvbnRleHQucmVzdG9yZSgpOwotCi0gICAgaWYg
KGltYWdlT2JzZXJ2ZXIoKSkKLSAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMp
OwotfQotCi1ib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQotewotICAg
IGlmIChjbGVhck1ldGFkYXRhKQotICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOwotCi0g
ICAgaWYgKG1faW1hZ2UpIHsKLSAgICAgICAgbV9pbWFnZSA9IG51bGxwdHI7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjcwYWRhZWMyNzBlMzFiMDU0YWZjNWY2NmQ0ODI4OGFlYmYwNjFlM2EKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
bGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybUltYWdlLmgiCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJDYWly
b1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCisjaW5jbHVk
ZSA8Y2Fpcm8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFBsYXRmb3JtSW1hZ2U6
OmNsZWFyU3ViSW1hZ2VzKCkKK3sKK30KKworSW50U2l6ZSBQbGF0Zm9ybUltYWdlOjpzaXplKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gaXNOaWwoKSA/IEludFNpemUoKSA6IGNhaXJvU3VyZmFjZVNp
emUobV9pbWFnZS5nZXQoKSk7Cit9CisKK2Jvb2wgUGxhdGZvcm1JbWFnZTo6aGFzQWxwaGEoKSBj
b25zdAoreworICAgIHJldHVybiBpc05pbCgpIHx8IGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQo
bV9pbWFnZS5nZXQoKSkgIT0gQ0FJUk9fQ09OVEVOVF9DT0xPUjsKK30KKworQ29sb3IgUGxhdGZv
cm1JbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3QKK3sKKyAgICBpZiAoaXNOaWwo
KSB8fCBzaXplKCkgIT0gSW50U2l6ZSgxLCAxKSkKKyAgICAgICAgcmV0dXJuIENvbG9yKCk7CisK
KyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShtX2ltYWdlLmdldCgpKSAhPSBDQUlST19T
VVJGQUNFX1RZUEVfSU1BR0UpCisgICAgICAgIHJldHVybiBDb2xvcigpOworCisgICAgUkdCQTMy
KiBwaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFJHQkEzMio+KGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X2RhdGEobV9pbWFnZS5nZXQoKSkpOworICAgIHJldHVybiBjb2xvckZyb21QcmVtdWx0
aXBsaWVkQVJHQigqcGl4ZWwpOworfQorCitib29sIFBsYXRmb3JtSW1hZ2U6OmlzQWxtb3N0U29s
aWRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitmbG9hdCBQbGF0Zm9y
bUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0UmVjdCYpCit7CisgICAgcmV0dXJuIDE7Cit9CisKK3ZvaWQgUGxhdGZv
cm1JbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50U2l6ZSYsIENvbXBv
c2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSwgY29uc3QgSW1hZ2VPcmllbnRhdGlvbiYg
b3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgY29udGV4dC5zYXZlKCk7CisgICAgCisgICAgLy8g
U2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCisgICAgaWYgKG9wID09IENvbXBvc2l0ZVNv
dXJjZU92ZXIgJiYgbW9kZSA9PSBCbGVuZE1vZGVOb3JtYWwgJiYgIWhhc0FscGhhKCkpCisgICAg
ICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOworICAgIGVs
c2UKKyAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3AsIG1vZGUpOworICAg
ICAgICAKKyNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQorICAgIEludFNp
emUgc2NhbGVkU2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUobV9pbWFnZS5nZXQoKSk7CisgICAgRmxv
YXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGxpbmco
c3JjUmVjdCwgc2NhbGVkU2l6ZSk7CisjZWxzZQorICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1Jl
Y3Qoc3JjUmVjdCk7CisjZW5kaWYKKyAgICAgICAgCisgICAgRmxvYXRSZWN0IGFkanVzdGVkRGVz
dFJlY3QgPSBkZXN0UmVjdDsKKyAgICAgICAgCisgICAgaWYgKG9yaWVudGF0aW9uICE9IERlZmF1
bHRJbWFnZU9yaWVudGF0aW9uKSB7CisgICAgICAgIC8vIEltYWdlT3JpZW50YXRpb24gZXhwZWN0
cyB0aGUgb3JpZ2luIHRvIGJlIGF0ICgwLCAwKS4KKyAgICAgICAgY29udGV4dC50cmFuc2xhdGUo
ZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCkpOworICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNl
dExvY2F0aW9uKEZsb2F0UG9pbnQoKSk7CisgICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKG9yaWVu
dGF0aW9uLnRyYW5zZm9ybUZyb21EZWZhdWx0KGFkanVzdGVkRGVzdFJlY3Quc2l6ZSgpKSk7Cisg
ICAgICAgIGlmIChvcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpKSB7CisgICAgICAgICAg
ICAvLyBUaGUgZGVzdGluYXRpb24gcmVjdGFuZ2xlIHdpbGwgaGF2ZSBpdCdzIHdpZHRoIGFuZCBo
ZWlnaHQgYWxyZWFkeSByZXZlcnNlZCBmb3IgdGhlIG9yaWVudGF0aW9uIG9mCisgICAgICAgICAg
ICAvLyB0aGUgaW1hZ2UsIGFzIGl0IHdhcyBuZWVkZWQgZm9yIHBhZ2UgbGF5b3V0LCBzbyB3ZSBu
ZWVkIHRvIHJldmVyc2UgaXQgYmFjayBoZXJlLgorICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVj
dC5zZXRTaXplKGFkanVzdGVkRGVzdFJlY3Quc2l6ZSgpLnRyYW5zcG9zZWRTaXplKCkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1N1cmZh
Y2VUb0NvbnRleHQobV9pbWFnZS5nZXQoKSwgYWRqdXN0ZWREZXN0UmVjdCwgYWRqdXN0ZWRTcmNS
ZWN0LCBjb250ZXh0KTsKKworICAgIGNvbnRleHQucmVzdG9yZSgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwM2M4MWExNzBiZTc5YWU2YmU2Y2FjZGM5OWY0YzM5OGNhYWY0
MjZkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMjA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkJpdG1hcEltYWdlLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJDb3JlR3JhcGhpY3NT
UEkuaCIKLSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJHZW9tZXRyeVV0
aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVkZSAiSW1h
Z2VPYnNlcnZlci5oIgotI2luY2x1ZGUgIlN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCIKLSNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLSNpZiBVU0UoQVBQS0lUKQotI2luY2x1ZGUgPEFwcGxp
Y2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgotI2VuZGlmCi0KLSNpZiBQTEFU
Rk9STShDT0NPQSkKLSNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0jZW5kaWYK
LQotI2lmIFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2Vi
S2l0U3lzdGVtSW50ZXJmYWNlLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1u
YW1lc3BhY2UgTmF0aXZlSW1hZ2UgewotCi1JbnRTaXplIHNpemUoY29uc3QgUmV0YWluUHRyPENH
SW1hZ2VSZWY+JiBpbWFnZSkKLXsKLSAgICBBU1NFUlQoaW1hZ2UpOwotICAgIHJldHVybiBJbnRT
aXplKENHSW1hZ2VHZXRXaWR0aChpbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2Uu
Z2V0KCkpKTsKLX0KLQotYm9vbCBoYXNBbHBoYShjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4m
KQotewotICAgIC8vIEZJWE1FOiBBbnN3ZXIgY29ycmVjdGx5IHRoZSBxdWVzdGlvbjogZG9lcyB0
aGUgQ0dJbWFnZVJlZiBoYXZlIGFscGhhIGNoYW5ubmVsPwotICAgIHJldHVybiB0cnVlOwotfQot
ICAgIAotQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKGNvbnN0IFJldGFpblB0cjxDR0ltYWdl
UmVmPiYgaW1hZ2UpCi17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICAKLSAgICBpZiAoTmF0aXZl
SW1hZ2U6OnNpemUoaW1hZ2UpICE9IEludFNpemUoMSwgMSkpCi0gICAgICAgIHJldHVybiBDb2xv
cigpOwotICAgIAotICAgIHVuc2lnbmVkIGNoYXIgcGl4ZWxbNF07IC8vIFJHQkEKLSAgICBhdXRv
IGJpdG1hcENvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShwaXhlbCwgMSwg
MSwgOCwgc2l6ZW9mKHBpeGVsKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwKLSAgICAgICAga0NHSW1h
Z2VBbHBoYVByZW11bHRpcGxpZWRMYXN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcpKTsKLQot
ICAgIGlmICghYml0bWFwQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0gICAgCi0g
ICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGJpdG1hcENvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9k
ZUNvcHkpOwotICAgIENHQ29udGV4dERyYXdJbWFnZShiaXRtYXBDb250ZXh0LmdldCgpLCBDR1Jl
Y3RNYWtlKDAsIDAsIDEsIDEpLCBpbWFnZS5nZXQoKSk7Ci0gICAgCi0gICAgaWYgKCFwaXhlbFsz
XSkKLSAgICAgICAgcmV0dXJuIENvbG9yKDAsIDAsIDAsIDApOwotCi0gICAgcmV0dXJuIENvbG9y
KHBpeGVsWzBdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICogMjU1IC8gcGl4ZWxbM10sIHBp
eGVsWzJdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKLX0KLQotfQotCi1ib29sIEZyYW1l
RGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQotewotICAgIGlmIChjbGVhck1ldGFkYXRh
KQotICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOwotCi0gICAgbV9zdWJzYW1wbGluZ0xl
dmVsID0gMDsKLQotICAgIGlmIChtX2ltYWdlKSB7Ci0jaWYgQ0FDSEVfU1VCSU1BR0VTCi0gICAg
ICAgIHN1YmltYWdlQ2FjaGUoKS5jbGVhckltYWdlKG1faW1hZ2UuZ2V0KCkpOwotI2VuZGlmCi0g
ICAgICAgIG1faW1hZ2UgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1DR0ltYWdlUmVmIEJpdG1hcEltYWdlOjpnZXRDR0ltYWdl
UmVmKCkKLXsKLSAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCkuZ2V0KCk7Ci19Ci0KLUNH
SW1hZ2VSZWYgQml0bWFwSW1hZ2U6OmdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6ZShjb25zdCBJbnRT
aXplJiBzaXplKQotewotICAgIHNpemVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgQ0dJbWFnZVJlZiBjZ0lt
YWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkuZ2V0KCk7Ci0gICAgICAgIGlmIChjZ0ltYWdlICYm
IEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGNnSW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGNnSW1h
Z2UpKSA9PSBzaXplKQotICAgICAgICAgICAgcmV0dXJuIGNnSW1hZ2U7Ci0gICAgfQotCi0gICAg
Ly8gRmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgQ0dJbWFnZVJlZiBpZiB3ZSBjYW4ndCBmaW5kIHRo
ZSByaWdodCBzaXplCi0gICAgcmV0dXJuIGdldENHSW1hZ2VSZWYoKTsKLX0KLQotUmV0YWluUHRy
PENGQXJyYXlSZWY+IEJpdG1hcEltYWdlOjpnZXRDR0ltYWdlQXJyYXkoKQotewotICAgIHNpemVf
dCBjb3VudCA9IGZyYW1lQ291bnQoKTsKLSAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAKLSAgICBDRk11dGFibGVBcnJheVJlZiBhcnJheSA9IENGQXJyYXlDcmVh
dGVNdXRhYmxlKE5VTEwsIGNvdW50LCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKENHSW1hZ2VSZWYg
Y3VyckZyYW1lID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkuZ2V0KCkpCi0gICAgICAgICAgICBDRkFy
cmF5QXBwZW5kVmFsdWUoYXJyYXksIGN1cnJGcmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBhZG9w
dENGKGFycmF5KTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQm
IGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3AsIEJsZW5kTW9kZSBibGVuZE1vZGUsIElt
YWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikKLXsKLSNpZiBQTEFURk9STShJ
T1MpCi0gICAgc3RhcnRBbmltYXRpb24oRG9Ob3RDYXRjaFVwKTsKLSNlbHNlCi0gICAgc3RhcnRB
bmltYXRpb24oKTsKLSNlbmRpZgotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwot
ICAgIC8vIE5ldmVyIHVzZSBzdWJzYW1wbGVkIGltYWdlcyBmb3IgZHJhd2luZyBpbnRvIFBERiBj
b250ZXh0cy4KLSAgICBpZiAod2tDR0NvbnRleHRJc1BERkNvbnRleHQoY3R4dC5wbGF0Zm9ybUNv
bnRleHQoKSkpCi0gICAgICAgIGltYWdlID0gY29weVVuc2NhbGVkRnJhbWVJbWFnZUF0SW5kZXgo
bV9jdXJyZW50RnJhbWUpOwotICAgIGVsc2UgewotICAgICAgICBDR1JlY3QgdHJhbnNmb3JtZWRE
ZXN0aW5hdGlvblJlY3QgPSBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShkZXN0UmVjdCwgQ0dD
b250ZXh0R2V0Q1RNKGN0eHQucGxhdGZvcm1Db250ZXh0KCkpKTsKLSAgICAgICAgZmxvYXQgc3Vi
c2FtcGxpbmdTY2FsZSA9IHN0ZDo6bWluPGZsb2F0PigxLCBzdGQ6Om1heCh0cmFuc2Zvcm1lZERl
c3RpbmF0aW9uUmVjdC5zaXplLndpZHRoIC8gc3JjUmVjdC53aWR0aCgpLCB0cmFuc2Zvcm1lZERl
c3RpbmF0aW9uUmVjdC5zaXplLmhlaWdodCAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsKLQotICAgICAg
ICBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lLCBzdWJzYW1wbGluZ1Nj
YWxlKTsKLSAgICB9Ci0KLSAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3
b24ndCBoYXZlIGFuIGltYWdlIHlldC4KLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIENvbG9y
IGNvbG9yID0gc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCk7Ci0gICAgaWYgKGNvbG9yLmlzVmFsaWQo
KSkgewotICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwgZGVzdFJlY3QsIGNvbG9yLCBj
b21wb3NpdGVPcCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBTdWJzYW1wbGlu
ZyBtYXkgaGF2ZSBnaXZlbiB1cyBhbiBpbWFnZSB0aGF0IGlzIHNtYWxsZXIgdGhhbiBzaXplKCku
Ci0gICAgSW50U2l6ZSBpbWFnZVNpemUoQ0dJbWFnZUdldFdpZHRoKGltYWdlLmdldCgpKSwgQ0dJ
bWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSkpOwotICAgIAotICAgIC8vIHNyY1JlY3QgaXMgaW4g
dGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB1bnN1YnNhbXBsZWQgaW1hZ2UsIHNvIHdlIGhhdmUgdG8g
bWFwIGl0IHRvIHRoZSBzdWJzYW1wbGVkIGltYWdlLgotICAgIEZsb2F0UmVjdCBzY2FsZWRTcmNS
ZWN0ID0gc3JjUmVjdDsKLSAgICBpZiAoaW1hZ2VTaXplICE9IG1fc2l6ZSkgewotICAgICAgICBG
bG9hdFJlY3Qgb3JpZ2luYWxJbWFnZUJvdW5kcyhGbG9hdFBvaW50KCksIG1fc2l6ZSk7Ci0gICAg
ICAgIEZsb2F0UmVjdCBzdWJzYW1wbGVkSW1hZ2VCb3VuZHMoRmxvYXRQb2ludCgpLCBpbWFnZVNp
emUpOwotICAgICAgICBzY2FsZWRTcmNSZWN0ID0gbWFwUmVjdChzcmNSZWN0LCBvcmlnaW5hbElt
YWdlQm91bmRzLCBzdWJzYW1wbGVkSW1hZ2VCb3VuZHMpOwotICAgIH0KLSAgICAKLSAgICBJbWFn
ZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uOwotICAgIGlmIChkZXNjcmlwdGlvbi5yZXNwZWN0SW1h
Z2VPcmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQotICAgICAgICBvcmll
bnRhdGlvbiA9IGZyYW1lT3JpZW50YXRpb25BdEluZGV4KG1fY3VycmVudEZyYW1lKTsKLQotICAg
IGN0eHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzY2FsZWRT
cmNSZWN0LCBjb21wb3NpdGVPcCwgYmxlbmRNb2RlLCBvcmllbnRhdGlvbik7Ci0KLSAgICBpZiAo
aW1hZ2VPYnNlcnZlcigpKQotICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7
Ci19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBCaXRtYXBJbWFnZTo6Y29weVVuc2NhbGVkRnJh
bWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4KQotewotICAgIGlmIChpbmRleCA+PSBmcmFtZUNv
dW50KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGluZGV4ID49IG1fZnJh
bWVzLnNpemUoKSB8fCAhbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2UpCi0gICAgICAgIGNhY2hlRnJh
bWUoaW5kZXgsIDApOwotCi0gICAgaWYgKCFtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1wbGluZ0xl
dmVsKQotICAgICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2U7Ci0KLSAgICByZXR1
cm4gbV9zb3VyY2UuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgpOwotfQotCi19Ci0KLSNl
bmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXR0ZXJuQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUGF0dGVybkNHLmNwcAppbmRleCBiNDI4ZDUwZDk0YmY5MjQyODAzMjg3ZDJlZWMxNmJkNjlj
NTI4ZDkyLi4zZGFhMTM5YWI3ZWE1YjQyMTU3Nzg4MzVkMzUzZDhhZGI1ZjBjNzVlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKQEAg
LTcyLDcgKzcyLDcgQEAgQ0dQYXR0ZXJuUmVmIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVy
bihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRyYW4KICAgICAvLyBJZiB3ZSdyZSBy
ZXBlYXRpbmcgaW4gYm90aCBkaXJlY3Rpb25zLCB3ZSBjYW4gdXNlIGltYWdlLWJhY2tlZCBwYXR0
ZXJucwogICAgIC8vIGluc3RlYWQgb2YgY3VzdG9tIHBhdHRlcm5zLCBhbmQgYXZvaWQgdGlsaW5n
LWVkZ2UgcGl4ZWwgY3JhY2tzLgogICAgIGlmIChtX3JlcGVhdFggJiYgbV9yZXBlYXRZKQotICAg
ICAgICByZXR1cm4gd2tDR1BhdHRlcm5DcmVhdGVXaXRoSW1hZ2VBbmRUcmFuc2Zvcm0odGlsZUlt
YWdlKCktPmdldENHSW1hZ2VSZWYoKSwgcGF0dGVyblRyYW5zZm9ybSwgd2tQYXR0ZXJuVGlsaW5n
Q29uc3RhbnRTcGFjaW5nKTsKKyAgICAgICAgcmV0dXJuIHdrQ0dQYXR0ZXJuQ3JlYXRlV2l0aElt
YWdlQW5kVHJhbnNmb3JtKHRpbGVJbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmdldCgpLCBwYXR0ZXJu
VHJhbnNmb3JtLCB3a1BhdHRlcm5UaWxpbmdDb25zdGFudFNwYWNpbmcpOwogCiAgICAgLy8gSWYg
RkxUX01BWCBzaG91bGQgYWxzbyBiZSB1c2VkIGZvciB4U3RlcCBvciB5U3RlcCwgbm90aGluZyBp
cyByZW5kZXJlZC4gVXNpbmcgZnJhY3Rpb25zIG9mIEZMVF9NQVggYWxzbwogICAgIC8vIHJlc3Vs
dCBpbiBub3RoaW5nIGJlaW5nIHJlbmRlcmVkLgpAQCAtODMsNyArODMsNyBAQCBDR1BhdHRlcm5S
ZWYgUGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dXNlclNwYWNlVHJhbgogICAgIENHRmxvYXQgeVN0ZXAgPSBtX3JlcGVhdFkgPyB0aWxlUmVjdC5o
ZWlnaHQoKSA6ICgxIDw8IDIyKTsKIAogICAgIC8vIFRoZSBwYXR0ZXJuIHdpbGwgcmVsZWFzZSB0
aGUgQ0dJbWFnZVJlZiB3aGVuIGl0J3MgZG9uZSByZW5kZXJpbmcgaW4gcGF0dGVyblJlbGVhc2VD
YWxsYmFjawotICAgIENHSW1hZ2VSZWYgcGxhdGZvcm1JbWFnZSA9IENHSW1hZ2VSZXRhaW4odGls
ZUltYWdlKCktPmdldENHSW1hZ2VSZWYoKSk7CisgICAgQ0dJbWFnZVJlZiBwbGF0Zm9ybUltYWdl
ID0gdGlsZUltYWdlKCktPm5hdGl2ZUltYWdlKCkubGVha1JlZigpOwogCiAgICAgY29uc3QgQ0dQ
YXR0ZXJuQ2FsbGJhY2tzIHBhdHRlcm5DYWxsYmFja3MgPSB7IDAsIHBhdHRlcm5DYWxsYmFjaywg
cGF0dGVyblJlbGVhc2VDYWxsYmFjayB9OwogICAgIHJldHVybiBDR1BhdHRlcm5DcmVhdGUocGxh
dGZvcm1JbWFnZSwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHhTdGVwLCB5U3RlcCwga0NH
UGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2luZywgVFJVRSwgJnBhdHRlcm5DYWxsYmFja3MpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1J
bWFnZUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BsYXRmb3Jt
SW1hZ2VDRy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWZiMmRlMGVhMTJkYTIxNGYxMDQ2YzM5NjJlOGVhYjUz
YzY0NDEyNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiQ29s
b3IuaCIKKyNpbmNsdWRlICJDb3JlR3JhcGhpY3NTUEkuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKKyNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dENHLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlN1YmltYWdlQ2FjaGVX
aXRoVGltZXIuaCIKKworI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1J
bnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworICAgIAordm9pZCBQbGF0Zm9ybUltYWdlOjpjbGVhclN1YkltYWdlcygpCit7Cisj
aWYgQ0FDSEVfU1VCSU1BR0VTCisgICAgaWYgKCFpc05pbCgpKQorICAgICAgICBzdWJpbWFnZUNh
Y2hlKCkuY2xlYXJJbWFnZShjZ0ltYWdlUmVmKCkpOworI2VuZGlmCit9CisKK0ludFNpemUgUGxh
dGZvcm1JbWFnZTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzTmlsKCkgPyBJbnRTaXpl
KCkgOiBJbnRTaXplKENHSW1hZ2VHZXRXaWR0aChjZ0ltYWdlUmVmKCkpLCBDR0ltYWdlR2V0SGVp
Z2h0KGNnSW1hZ2VSZWYoKSkpOworfQorCitib29sIFBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKCkg
Y29uc3QKK3sKKyAgICAvLyBGSVhNRTogQW5zd2VyIGNvcnJlY3RseSB0aGUgcXVlc3Rpb246IGRv
ZXMgdGhlIENHSW1hZ2VSZWYgaGF2ZSBhbHBoYSBjaGFubm5lbD8KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworQ29sb3IgUGxhdGZvcm1JbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3QK
K3sKKyAgICBpZiAoaXNOaWwoKSB8fCBzaXplKCkgIT0gSW50U2l6ZSgxLCAxKSkKKyAgICAgICAg
cmV0dXJuIENvbG9yKCk7CisgICAgCisgICAgdW5zaWduZWQgY2hhciBwaXhlbFs0XTsgLy8gUkdC
QQorICAgIGF1dG8gYml0bWFwQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRl
KHBpeGVsLCAxLCAxLCA4LCBzaXplb2YocGl4ZWwpLCBzUkdCQ29sb3JTcGFjZVJlZigpLAorICAg
ICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIz
MkJpZykpOworICAgIAorICAgIGlmICghYml0bWFwQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIENv
bG9yKCk7CisgICAgCisgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGJpdG1hcENvbnRleHQuZ2V0
KCksIGtDR0JsZW5kTW9kZUNvcHkpOworICAgIENHQ29udGV4dERyYXdJbWFnZShiaXRtYXBDb250
ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIDEsIDEpLCBjZ0ltYWdlUmVmKCkpOworICAgIAor
ICAgIGlmICghcGl4ZWxbM10pCisgICAgICAgIHJldHVybiBDb2xvcigwLCAwLCAwLCAwKTsKKyAg
ICAKKyAgICByZXR1cm4gQ29sb3IocGl4ZWxbMF0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMV0g
KiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMl0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbM10pOwor
fQorICAgIAorYm9vbCBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKSBjb25zdAor
eworICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBjZ0ltYWdlUmVmKCk7CisgICAgQVNTRVJUKENHSW1h
Z2VHZXRCaXRzUGVyQ29tcG9uZW50KGltYWdlKSA9PSA4KTsKKyAgICAKKyAgICBDR0JpdG1hcElu
Zm8gaW1hZ2VJbmZvID0gQ0dJbWFnZUdldEJpdG1hcEluZm8oaW1hZ2UpOworICAgIGlmICghKGlt
YWdlSW5mbyAmIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlKSB8fCAoaW1hZ2VJbmZvICYga0NH
Qml0bWFwQWxwaGFJbmZvTWFzaykgIT0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCkg
eworICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYmVpbmcgYWJsZSB0byBoYW5kbGUgb3RoZXIg
cGl4ZWwgZm9ybWF0cy4KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHdpZHRoID0gQ0dJbWFnZUdldFdp
ZHRoKGltYWdlKTsKKyAgICBzaXplX3QgaGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChpbWFnZSk7
CisgICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0gQ0dJbWFnZUdldEJ5dGVzUGVyUm93KGltYWdlKTsK
KyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBwcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRh
UHJvdmlkZXJDb3B5RGF0YShDR0ltYWdlR2V0RGF0YVByb3ZpZGVyKGltYWdlKSkpOworICAgIGNv
bnN0IFVJbnQ4KiBkYXRhID0gQ0ZEYXRhR2V0Qnl0ZVB0cihwcm92aWRlci5nZXQoKSk7CisgICAg
CisgICAgLy8gT3ZlcmxheSBhIGdyaWQgb2Ygc2FtcGxpbmcgZG90cyBvbiB0b3Agb2YgYSBncmF5
c2NhbGUgdmVyc2lvbiBvZiB0aGUgaW1hZ2UuCisgICAgLy8gRm9yIHRoZSBpbnRlcmlvciBwb2lu
dHMsIGNhbGN1bGF0ZSB0aGUgZGlmZmVyZW5jZSBpbiBsdW1pbmFuY2UgYW1vbmcgdGhlIHNhbXBs
ZSBwb2ludAorICAgIC8vIGFuZCBpdHMgc3Vycm91bmRzIHBvaW50cywgc2NhbGVkIGJ5IHRyYW5z
cGFyZW5jeS4KKyAgICBjb25zdCB1bnNpZ25lZCBzYW1wbGVSb3dzID0gNzsKKyAgICBjb25zdCB1
bnNpZ25lZCBzYW1wbGVDb2xzID0gNzsKKyAgICAvLyBGSVhNRTogUmVmaW5lIHRoZSBwcm9wZXIg
bnVtYmVyIG9mIHNhbXBsZXMsIGFuZCBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgYXNwZWN0IHJhdGlv
cy4KKyAgICBpZiAod2lkdGggPCBzYW1wbGVDb2xzIHx8IGhlaWdodCA8IHNhbXBsZVJvd3MpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBFbnN1cmUgdGhhdCB0aGUgbGFzdCBy
b3cvY29sdW1uIGxhbmQgb24gdGhlIGltYWdlIHBlcmltZXRlci4KKyAgICBjb25zdCBmbG9hdCBz
dHJpZGVXaWR0aCA9IHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCAtIDEpIC8gKHNhbXBsZUNvbHMg
LSAxKTsKKyAgICBjb25zdCBmbG9hdCBzdHJpZGVIZWlnaHQgPSBzdGF0aWNfY2FzdDxmbG9hdD4o
aGVpZ2h0IC0gMSkgLyAoc2FtcGxlUm93cyAtIDEpOworICAgIGZsb2F0IHNhbXBsZXNbc2FtcGxl
Um93c11bc2FtcGxlQ29sc107CisgICAgCisgICAgLy8gRmluZCB0aGUgbHVtaW5hbmNlIG9mIHRo
ZSBzYW1wbGUgcG9pbnRzLgorICAgIGZsb2F0IHkgPSAwOworICAgIGNvbnN0IFVJbnQ4KiByb3cg
PSBkYXRhOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzYW1wbGVSb3dzOyArK2kpIHsK
KyAgICAgICAgZmxvYXQgeCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBz
YW1wbGVDb2xzOyArK2opIHsKKyAgICAgICAgICAgIGNvbnN0IFVJbnQ4KiBwMCA9IHJvdyArIChz
dGF0aWNfY2FzdDxpbnQ+KHggKyAuNSkpICogNDsKKyAgICAgICAgICAgIC8vIFIgRyBCIEEKKyAg
ICAgICAgICAgIHNhbXBsZXNbaV1bal0gPSAoMC4yMTI1ICogKnAwICsgMC43MTU0ICogKihwMCsx
KSArIDAuMDcyMSAqICoocDArMikpICogKihwMCszKSAvIDI1NTsKKyAgICAgICAgICAgIHggKz0g
c3RyaWRlV2lkdGg7CisgICAgICAgIH0KKyAgICAgICAgeSArPSBzdHJpZGVIZWlnaHQ7CisgICAg
ICAgIHJvdyA9IGRhdGEgKyAoc3RhdGljX2Nhc3Q8aW50Pih5ICsgLjUpKSAqIGJ5dGVzUGVyUm93
OworICAgIH0KKyAgICAKKyAgICAvLyBEZXRlcm1pbmUgdGhlIGltYWdlIHNjb3JlLgorICAgIGZs
b2F0IGFjY3VtU2NvcmUgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzYW1wbGVS
b3dzIC0gMTsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDE7IGogPCBzYW1wbGVD
b2xzIC0gMTsgKytqKSB7CisgICAgICAgICAgICBmbG9hdCBkaWZmID0gc2FtcGxlc1tpIC0gMV1b
al0gKyBzYW1wbGVzW2kgKyAxXVtqXSArIHNhbXBsZXNbaV1baiAtIDFdICsgc2FtcGxlc1tpXVtq
ICsgMV0gLSA0ICogc2FtcGxlc1tpXVtqXTsKKyAgICAgICAgICAgIGFjY3VtU2NvcmUgKz0gZGlm
ZiAqIGRpZmY7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gVGhlIHNjb3JlIGZvciBh
IGdpdmVuIHNhbXBsZSBjYW4gYmUgd2l0aGluIHRoZSByYW5nZSBvZiAwIGFuZCAyNTVeMi4KKyAg
ICByZXR1cm4gYWNjdW1TY29yZSA8IDI1MDAgKiAoc2FtcGxlUm93cyAtIDIpICogKHNhbXBsZUNv
bHMgLSAyKTsKK30KKworZmxvYXQgUGxhdGZvcm1JbWFnZTo6c3Vic2FtcGxpbmdTY2FsZShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCkKK3sKKyAgICAvLyBOZXZlciB1c2Ugc3Vic2FtcGxlZCBpbWFnZXMg
Zm9yIGRyYXdpbmcgaW50byBQREYgY29udGV4dHMuCisgICAgaWYgKHdrQ0dDb250ZXh0SXNQREZD
b250ZXh0KGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpKQorICAgICAgICByZXR1cm4gMTsKKyAg
ICAKKyAgICBDR1JlY3QgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3QgPSBDR1JlY3RBcHBseUFm
ZmluZVRyYW5zZm9ybShkZXN0UmVjdCwgQ0dDb250ZXh0R2V0Q1RNKGNvbnRleHQucGxhdGZvcm1D
b250ZXh0KCkpKTsKKyAgICByZXR1cm4gc3RkOjptaW48ZmxvYXQ+KDEsIHN0ZDo6bWF4KHRyYW5z
Zm9ybWVkRGVzdGluYXRpb25SZWN0LnNpemUud2lkdGggLyBzcmNSZWN0LndpZHRoKCksIHRyYW5z
Zm9ybWVkRGVzdGluYXRpb25SZWN0LnNpemUuaGVpZ2h0IC8gc3JjUmVjdC5oZWlnaHQoKSkpOwor
fQorCit2b2lkIFBsYXRmb3JtSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEludFNpemUmIHNyY1NpemUsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSwg
Y29uc3QgSW1hZ2VPcmllbnRhdGlvbiYgb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgLy8gU3Vi
c2FtcGxpbmcgbWF5IGhhdmUgZ2l2ZW4gdXMgYW4gaW1hZ2UgdGhhdCBpcyBzbWFsbGVyIHRoYW4g
c2l6ZSgpLgorICAgIEludFNpemUgc3Vic2FtcGxlZEltYWdlU2l6ZSA9IHNpemUoKTsKKyAgICAK
KyAgICAvLyBzcmNSZWN0IGlzIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgdW5zdWJzYW1wbGVk
IGltYWdlLCBzbyB3ZSBoYXZlIHRvIG1hcCBpdCB0byB0aGUgc3Vic2FtcGxlZCBpbWFnZS4KKyAg
ICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBpZiAoc3Vic2FtcGxl
ZEltYWdlU2l6ZSAhPSBzcmNTaXplKQorICAgICAgICBhZGp1c3RlZFNyY1JlY3QgPSBtYXBSZWN0
KHNyY1JlY3QsIEZsb2F0UmVjdCh7IH0sIHNyY1NpemUpLCBGbG9hdFJlY3QoeyB9LCBzdWJzYW1w
bGVkSW1hZ2VTaXplKSk7CisgICAgCisgICAgY29udGV4dC5kcmF3TmF0aXZlSW1hZ2UobV9pbWFn
ZSwgc3Vic2FtcGxlZEltYWdlU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3AsIG1v
ZGUsIG9yaWVudGF0aW9uKTsKK30KKyAgICAKK30KKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1RleHRUcmFja1Jl
cHJlc2VudGF0aW9uQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tCmluZGV4IDg5NzIwZDE3MzY1ZGE3
ZThiYTg0NjlkNTI5NDU0OGQ1MTg0N2E3ZmUuLjQ0NzZmYzVmODdjMzQ5ODhmNmQ5YWQ1NWVlYmQ4
ZDFiOWJiMDIyZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5t
bQpAQCAtMTI5LDcgKzEyOSw3IEBAIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2E6On5UZXh0
VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hKCkKIHZvaWQgVGV4dFRyYWNrUmVwcmVzZW50YXRpb25D
b2NvYTo6dXBkYXRlKCkKIHsKICAgICBpZiAoYXV0byByZXByZXNlbnRhdGlvbiA9IG1fY2xpZW50
LmNyZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2UoKSkKLSAgICAgICAgW21fbGF5ZXIu
Z2V0KCkgc2V0Q29udGVudHM6KGlkKXJlcHJlc2VudGF0aW9uLT5nZXRDR0ltYWdlUmVmKCldOwor
ICAgICAgICBbbV9sYXllci5nZXQoKSBzZXRDb250ZW50czooaWQpcmVwcmVzZW50YXRpb24tPm5h
dGl2ZUltYWdlKCkuZ2V0KCldOwogfQogCiB2b2lkIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29j
b2E6OnNldENvbnRlbnRTY2FsZShmbG9hdCBzY2FsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQppbmRleCAwMWViNmRkMzAwNDNhMjI1Mjkx
NzZmZDkxMjExN2RjNTc3NmMxN2JhLi5kYzFjN2M3MDk1ZDk0NGM0YzYyZjFmZTA5MzU3MDJhMTNj
N2M3YTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
SW1hZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0lt
YWdlTWFjLm1tCkBAIC04NSwzMSArODUsMjIgQEAgQ0ZEYXRhUmVmIEJpdG1hcEltYWdlOjpnZXRU
SUZGUmVwcmVzZW50YXRpb24oKQogICAgIGlmIChtX3RpZmZSZXApCiAgICAgICAgIHJldHVybiBt
X3RpZmZSZXAuZ2V0KCk7CiAKLSAgICB1bnNpZ25lZCBudW1GcmFtZXMgPSBmcmFtZUNvdW50KCk7
CisgICAgYXV0byBuYXRpdmVJbWFnZXMgPSB0aGlzLT5mcmFtZXNOYXRpdmVJbWFnZXMoKTsKIAot
ICAgIC8vIElmIG51bUZyYW1lcyBpcyB6ZXJvLCB3ZSBrbm93IGZvciBjZXJ0YWluIHRoaXMgaW1h
Z2UgZG9lc24ndCBoYXZlIHZhbGlkIGRhdGEKKyAgICAvLyBJZiBmcmFtZXNJbWFnZXMuc2l6ZSgp
IGlzIHplcm8sIHdlIGtub3cgZm9yIGNlcnRhaW4gdGhpcyBpbWFnZSBkb2Vzbid0IGhhdmUgdmFs
aWQgZGF0YQogICAgIC8vIEV2ZW4gdGhvdWdoIHRoZSBjYWxsIHRvIENHSW1hZ2VEZXN0aW5hdGlv
bkNyZWF0ZVdpdGhEYXRhIHdpbGwgZmFpbCBhbmQgd2UnbGwgaGFuZGxlIGl0IGdyYWNlZnVsbHks
CiAgICAgLy8gaW4gY2VydGFpbiBjaXJjdW1zdGFuY2VzIHRoYXQgY2FsbCB3aWxsIHNwYW0gdGhl
IGNvbnNvbGUgd2l0aCBhbiBlcnJvciBtZXNzYWdlCi0gICAgaWYgKCFudW1GcmFtZXMpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgVmVjdG9yPENHSW1hZ2VSZWY+IGltYWdlczsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRnJhbWVzOyArK2kgKSB7Ci0gICAgICAgIENHSW1hZ2VS
ZWYgY2dJbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpOwotICAgICAgICBpZiAoY2dJ
bWFnZSkKLSAgICAgICAgICAgIGltYWdlcy5hcHBlbmQoY2dJbWFnZSk7Ci0gICAgfQotCi0gICAg
dW5zaWduZWQgbnVtVmFsaWRGcmFtZXMgPSBpbWFnZXMuc2l6ZSgpOworICAgIGlmICghbmF0aXZl
SW1hZ2VzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZXRhaW5QdHI8
Q0ZNdXRhYmxlRGF0YVJlZj4gZGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAw
KSk7Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VEZXN0aW5hdGlvblJlZj4gZGVzdGluYXRpb24gPSBh
ZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEuZ2V0KCksIGtVVFR5
cGVUSUZGLCBudW1WYWxpZEZyYW1lcywgMCkpOworICAgIFJldGFpblB0cjxDR0ltYWdlRGVzdGlu
YXRpb25SZWY+IGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVX
aXRoRGF0YShkYXRhLmdldCgpLCBrVVRUeXBlVElGRiwgbmF0aXZlSW1hZ2VzLnNpemUoKSwgMCkp
OwogCiAgICAgaWYgKCFkZXN0aW5hdGlvbikKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVZhbGlkRnJh
bWVzOyArK2kpCi0gICAgICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9u
LmdldCgpLCBpbWFnZXNbaV0sIDApOworICAgIGZvciAoYXV0byBuYXRpdmVJbWFnZSA6IG5hdGl2
ZUltYWdlcykKKyAgICAgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRpb24u
Z2V0KCksIG5hdGl2ZUltYWdlLmdldCgpLCAwKTsKIAogICAgIENHSW1hZ2VEZXN0aW5hdGlvbkZp
bmFsaXplKGRlc3RpbmF0aW9uLmdldCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAKaW5kZXggMjE3NTNiZDA3
OGExYzU1YzMyNzE5YzE0ODQ2ZjBmNmI5OTc1ZjhmZC4uYzAwZmI3ZDMzZDBlNjE4ZTI5ZjE0Mjkw
ZTU4ZTlkMjllNDQ5MjgyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCkBAIC0xNDIsNiArMTQyLDcgQEAgSW1h
Z2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0IEltYWdlRnJhbWUmIG90aGVyKQog
ICAgICAgICByZXR1cm4gKnRoaXM7CiAKICAgICBjb3B5Qml0bWFwRGF0YShvdGhlcik7CisgICAg
c2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7CiAgICAgc2V0T3JpZ2luYWxGcmFtZVJlY3Qo
b3RoZXIub3JpZ2luYWxGcmFtZVJlY3QoKSk7CiAgICAgc2V0U3RhdHVzKG90aGVyLnN0YXR1cygp
KTsKICAgICBzZXREdXJhdGlvbihvdGhlci5kdXJhdGlvbigpKTsKQEAgLTE1Miw4ICsxNTMsNyBA
QCBJbWFnZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYgb3Ro
ZXIpCiAKIHZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXJQaXhlbERhdGEoKQogewotICAgIG1fYmFja2lu
Z1N0b3JlLmNsZWFyKCk7Ci0gICAgbV9ieXRlcyA9IDA7CisgICAgbV9waXhlbHMgPSBudWxscHRy
OwogICAgIG1fc3RhdHVzID0gRnJhbWVFbXB0eTsKICAgICAvLyBOT1RFOiBEbyBub3QgcmVzZXQg
b3RoZXIgbWVtYmVycyBoZXJlOyBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoKSBjYWxscyB0aGlzCiAg
ICAgLy8gdG8gZnJlZSB0aGUgYml0bWFwIGRhdGEsIGJ1dCBvdGhlciBmdW5jdGlvbnMgbGlrZSBp
bml0RnJhbWVCdWZmZXIoKSBhbmQKQEAgLTE2MywyNCArMTYzLDE2IEBAIHZvaWQgSW1hZ2VGcmFt
ZTo6Y2xlYXJQaXhlbERhdGEoKQogCiB2b2lkIEltYWdlRnJhbWU6Onplcm9GaWxsUGl4ZWxEYXRh
KCkKIHsKLSAgICBtZW1zZXQobV9ieXRlcywgMCwgbV9zaXplLndpZHRoKCkgKiBtX3NpemUuaGVp
Z2h0KCkgKiBzaXplb2YoUGl4ZWxEYXRhKSk7CisgICAgbV9waXhlbHMuY2xlYXIoKTsKICAgICBt
X2hhc0FscGhhID0gdHJ1ZTsKIH0KIAogdm9pZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbEZyYW1lUmVj
dChjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIEFTU0VSVChJbnRSZWN0KEludFBvaW50KCks
IG1fc2l6ZSkuY29udGFpbnMocmVjdCkpOwotCiAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBzaXplX3QgcmVjdFdpZHRoSW5CeXRlcyA9IHJlY3Qud2lkdGgo
KSAqIHNpemVvZihQaXhlbERhdGEpOwotICAgIFBpeGVsRGF0YSogc3RhcnQgPSBtX2J5dGVzICsg
KHJlY3QueSgpICogd2lkdGgoKSkgKyByZWN0LngoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IHJlY3QuaGVpZ2h0KCk7ICsraSkgewotICAgICAgICBtZW1zZXQoc3RhcnQsIDAsIHJlY3RXaWR0
aEluQnl0ZXMpOwotICAgICAgICBzdGFydCArPSB3aWR0aCgpOwotICAgIH0KLQorICAgIG1fcGl4
ZWxzLmNsZWFyUmVjdChyZWN0KTsKICAgICBzZXRIYXNBbHBoYSh0cnVlKTsKIH0KIApAQCAtMTg5
LDI1ICsxODEsMjMgQEAgYm9vbCBJbWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YShjb25zdCBJbWFn
ZUZyYW1lJiBvdGhlcikKICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCi0gICAgbV9iYWNraW5nU3RvcmUgPSBvdGhlci5tX2JhY2tpbmdTdG9yZTsKLSAgICBt
X2J5dGVzID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOwotICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6
ZTsKLSAgICBzZXRIYXNBbHBoYShvdGhlci5tX2hhc0FscGhhKTsKKyAgICBpZiAob3RoZXIubV9w
aXhlbHMpCisgICAgICAgIG1fcGl4ZWxzID0gQml0bWFwUGl4ZWxzOjpjcmVhdGUoKm90aGVyLm1f
cGl4ZWxzKTsKKyAgICBlbHNlCisgICAgICAgIG1fcGl4ZWxzID0gbnVsbHB0cjsKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAogYm9vbCBJbWFnZUZyYW1lOjpzZXRTaXplKGludCBuZXdXaWR0aCwgaW50
IG5ld0hlaWdodCkKIHsKLSAgICBBU1NFUlQoIXdpZHRoKCkgJiYgIWhlaWdodCgpKTsKLSAgICBz
aXplX3QgYmFja2luZ1N0b3JlU2l6ZSA9IG5ld1dpZHRoICogbmV3SGVpZ2h0OwotICAgIGlmICgh
bV9iYWNraW5nU3RvcmUudHJ5UmVzZXJ2ZUNhcGFjaXR5KGJhY2tpbmdTdG9yZVNpemUpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9iYWNraW5nU3RvcmUucmVzaXplKGJhY2tpbmdTdG9y
ZVNpemUpOwotICAgIG1fYnl0ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7Ci0gICAgbV9zaXpl
ID0gSW50U2l6ZShuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKKyAgICBBU1NFUlQoIW1fcGl4ZWxzKTsK
KyAgICBtX3BpeGVscyA9IEJpdG1hcFBpeGVsczo6Y3JlYXRlKEludFNpemUobmV3V2lkdGgsIG5l
d0hlaWdodCksIG1fcHJlbXVsdGlwbHlBbHBoYSk7CisgICAgcmV0dXJuIG1fcGl4ZWxzOworfQog
Ci0gICAgemVyb0ZpbGxQaXhlbERhdGEoKTsKLSAgICByZXR1cm4gdHJ1ZTsKK3ZvaWQgSW1hZ2VG
cmFtZTo6Y29weVJvd05UaW1lcyhpbnQgc3RhcnRYLCBpbnQgZW5kWCwgaW50IHN0YXJ0WSwgaW50
IGVuZFkpCit7CisgICAgbV9waXhlbHMtPnJlcGVhdEZpcnN0Um93KEludFJlY3Qoc3RhcnRYLCBz
dGFydFksIGVuZFggLXN0YXJ0WCAsIGVuZFkgLSBzdGFydFkpKTsKIH0KIAogYm9vbCBJbWFnZUZy
YW1lOjpoYXNBbHBoYSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCmluZGV4IDJmOGVlZTE3ODFkMTYyZDg2YzQ5
ZmUxZGFjNzJhMmU3ZTQwYTVkNmQuLmQ3NjZiYzA2Y2IyYTY4YzBhOGIxYjZkOTYxNzU0MTAwMDg4
Y2MzZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L0ltYWdlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL0ltYWdlRGVjb2Rlci5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNwcmFnbWEgb25jZQogCisj
aW5jbHVkZSAiQml0bWFwUGl4ZWxzLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUg
IkltYWdlU291cmNlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKQEAgLTU3LDcgKzU4
LDYgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICAgICAgRGlz
cG9zZU92ZXJ3cml0ZVByZXZpb3VzICAvLyBDbGVhciBmcmFtZSB0byBwcmV2aW91cyBmcmFtZWJ1
ZmZlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb250ZW50cwog
ICAgICAgICB9OwotICAgICAgICB0eXBlZGVmIHVuc2lnbmVkIFBpeGVsRGF0YTsKIAogICAgICAg
ICBJbWFnZUZyYW1lKCk7CiAKQEAgLTgwLDE3ICs4MCw3IEBAIHVzaW5nIENvbG9yUHJvZmlsZSA9
IFZlY3RvcjxjaGFyPjsKICAgICAgICAgLy8gQ29waWVzIHRoZSBwaXhlbCBkYXRhIGF0IFsoc3Rh
cnRYLCBzdGFydFkpLCAoZW5kWCwgc3RhcnRZKSkgdG8gdGhlCiAgICAgICAgIC8vIHNhbWUgWC1j
b29yZGluYXRlcyBvbiBlYWNoIHN1YnNlcXVlbnQgcm93IHVwIHRvIGJ1dCBub3QgaW5jbHVkaW5n
CiAgICAgICAgIC8vIGVuZFkuCi0gICAgICAgIHZvaWQgY29weVJvd05UaW1lcyhpbnQgc3RhcnRY
LCBpbnQgZW5kWCwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IEFTU0VSVChzdGFydFggPCB3aWR0aCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChlbmRYIDw9IHdp
ZHRoKCkpOwotICAgICAgICAgICAgQVNTRVJUKHN0YXJ0WSA8IGhlaWdodCgpKTsKLSAgICAgICAg
ICAgIEFTU0VSVChlbmRZIDw9IGhlaWdodCgpKTsKLSAgICAgICAgICAgIGNvbnN0IGludCByb3dC
eXRlcyA9IChlbmRYIC0gc3RhcnRYKSAqIHNpemVvZihQaXhlbERhdGEpOwotICAgICAgICAgICAg
Y29uc3QgUGl4ZWxEYXRhKiBjb25zdCBzdGFydEFkZHIgPSBnZXRBZGRyKHN0YXJ0WCwgc3RhcnRZ
KTsKLSAgICAgICAgICAgIGZvciAoaW50IGRlc3RZID0gc3RhcnRZICsgMTsgZGVzdFkgPCBlbmRZ
OyArK2Rlc3RZKQotICAgICAgICAgICAgICAgIG1lbWNweShnZXRBZGRyKHN0YXJ0WCwgZGVzdFkp
LCBzdGFydEFkZHIsIHJvd0J5dGVzKTsKLSAgICAgICAgfQorICAgICAgICB2b2lkIGNvcHlSb3dO
VGltZXMoaW50IHN0YXJ0WCwgaW50IGVuZFgsIGludCBzdGFydFksIGludCBlbmRZKTsKIAogICAg
ICAgICAvLyBBbGxvY2F0ZXMgc3BhY2UgZm9yIHRoZSBwaXhlbCBkYXRhLiAgTXVzdCBiZSBjYWxs
ZWQgYmVmb3JlIGFueSBwaXhlbHMKICAgICAgICAgLy8gYXJlIHdyaXR0ZW4uICBNdXN0IG9ubHkg
YmUgY2FsbGVkIG9uY2UuICBSZXR1cm5zIHdoZXRoZXIgYWxsb2NhdGlvbgpAQCAtMTAwLDcgKzkw
LDcgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICAvLyBSZXR1
cm5zIGEgY2FsbGVyLW93bmVkIHBvaW50ZXIgdG8gdGhlIHVuZGVybHlpbmcgbmF0aXZlIGltYWdl
IGRhdGEuCiAgICAgICAgIC8vIChBY3R1YWwgdXNlOiBUaGlzIHBvaW50ZXIgd2lsbCBiZSBvd25l
ZCBieSBCaXRtYXBJbWFnZSBhbmQgZnJlZWQgaW4KICAgICAgICAgLy8gRnJhbWVEYXRhOjpjbGVh
cigpKS4KLSAgICAgICAgTmF0aXZlSW1hZ2VQdHIgYXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0Owor
ICAgICAgICBOYXRpdmVJbWFnZVB0ciBhc05ld05hdGl2ZUltYWdlKCkgY29uc3QgeyByZXR1cm4g
bV9waXhlbHMuaW1hZ2UoKTsgfQogCiAgICAgICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdDsKICAg
ICAgICAgY29uc3QgSW50UmVjdCYgb3JpZ2luYWxGcmFtZVJlY3QoKSBjb25zdCB7IHJldHVybiBt
X29yaWdpbmFsRnJhbWVSZWN0OyB9CkBAIC0xMTksMTAxICsxMDksNDQgQEAgdXNpbmcgQ29sb3JQ
cm9maWxlID0gVmVjdG9yPGNoYXI+OwogCiAgICAgICAgIGlubGluZSB2b2lkIHNldFJHQkEoaW50
IHgsIGludCB5LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBh
KQogICAgICAgICB7Ci0gICAgICAgICAgICBzZXRSR0JBKGdldEFkZHIoeCwgeSksIHIsIGcsIGIs
IGEpOworICAgICAgICAgICAgbV9waXhlbHMuc2V0UkdCQSh4LCB5LCByLCBnLCBiLCBhKTsKICAg
ICAgICAgfQogCi0gICAgICAgIGlubGluZSBQaXhlbERhdGEqIGdldEFkZHIoaW50IHgsIGludCB5
KQorICAgICAgICBpbmxpbmUgUkdCQTMyKiBnZXRBZGRyKGludCB4LCBpbnQgeSkKICAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXMgKyAoeSAqIHdpZHRoKCkpICsgeDsKKyAgICAg
ICAgICAgIHJldHVybiBtX3BpeGVscy5hdCh4LCB5KTsKICAgICAgICAgfQogCiAgICAgICAgIGlu
bGluZSBib29sIGhhc1BpeGVsRGF0YSgpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBtX2J5dGVzOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVXNlIGZpeCBwb2ludCBtdWx0
aXBsaWVyIGluc3RlYWQgb2YgaW50ZWdlciBkaXZpc2lvbiBvciBmbG9hdGluZyBwb2ludCBtYXRo
LgotICAgICAgICAvLyBUaGlzIG11bHRpcGxlciBwcm9kdWNlcyBleGFjdGx5IHRoZSBzYW1lIHJl
c3VsdCBmb3IgYWxsIHZhbHVlcyBpbiByYW5nZSAwIC0gMjU1LgotICAgICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgZml4UG9pbnRTaGlmdCA9IDI0OwotICAgICAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgZml4UG9pbnRNdWx0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDEuMCAvIDI1NS4wICog
KDEgPDwgZml4UG9pbnRTaGlmdCkpICsgMTsKLSAgICAgICAgLy8gTXVsdGlwbGllcyB1bnNpZ25l
ZCB2YWx1ZSBieSBmaXhwb2ludCB2YWx1ZSBhbmQgY29udmVydHMgYmFjayB0byB1bnNpZ25lZC4K
LSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZpeFBvaW50VW5zaWduZWRNdWx0aXBseSh1bnNpZ25l
ZCBmaXhlZCwgdW5zaWduZWQgdikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICAoZml4
ZWQgKiB2KSA+PiBmaXhQb2ludFNoaWZ0OworICAgICAgICAgICAgcmV0dXJuIG1fcGl4ZWxzLmdl
dCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaW5saW5lIHZvaWQgc2V0UkdCQShQaXhlbERhdGEq
IGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisg
ICAgICAgIGlubGluZSB2b2lkIHNldFJHQkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNp
Z25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQogICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAobV9wcmVtdWx0aXBseUFscGhhICYmIGEgPCAyNTUpIHsKLSAgICAgICAgICAgICAgICBpZiAo
IWEpIHsKLSAgICAgICAgICAgICAgICAgICAgKmRlc3QgPSAwOwotICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdW5zaWduZWQg
YWxwaGFNdWx0ID0gYSAqIGZpeFBvaW50TXVsdDsKLSAgICAgICAgICAgICAgICByID0gZml4UG9p
bnRVbnNpZ25lZE11bHRpcGx5KHIsIGFscGhhTXVsdCk7Ci0gICAgICAgICAgICAgICAgZyA9IGZp
eFBvaW50VW5zaWduZWRNdWx0aXBseShnLCBhbHBoYU11bHQpOwotICAgICAgICAgICAgICAgIGIg
PSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkoYiwgYWxwaGFNdWx0KTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICpkZXN0ID0gKGEgPDwgMjQgfCByIDw8IDE2IHwgZyA8PCA4IHwgYik7Cisg
ICAgICAgICAgICBtX3BpeGVscy5zZXRSR0JBKGRlc3QsIHIsIGcsIGIsIGEpOwogICAgICAgICB9
CiAKICNpZiBFTkFCTEUoQVBORykKLSAgICAgICAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBkaXZp
ZGUyNTUodW5zaWduZWQgYSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIChhICsgKGEg
Pj4gOCkgKyAxKSA+PiA4OwotICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5lIHZvaWQgb3ZlclJH
QkEoUGl4ZWxEYXRhKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1
bnNpZ25lZCBhKQorICAgICAgICBpbmxpbmUgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVu
c2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIGlmICghYSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
ICAgIGlmIChhIDwgMjU1KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgYURlc3QgPSAoKCpk
ZXN0KSA+PiAyNCkgJiAyNTU7Ci0gICAgICAgICAgICAgICAgaWYgKGFEZXN0KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIHJEZXN0ID0gKCgqZGVzdCkgPj4gMTYpICYgMjU1OwotICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBnRGVzdCA9ICgoKmRlc3QpID4+IDgpICYgMjU1Owot
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBiRGVzdCA9ICgqZGVzdCkgJiAyNTU7Ci0gICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFBdXggPSAyNTUgLSBhOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAg
ckRlc3QgPSBkaXZpZGUyNTUockRlc3QgKiBhRGVzdCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBnRGVzdCA9IGRpdmlkZTI1NShnRGVzdCAqIGFEZXN0KTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJEZXN0ID0gZGl2aWRlMjU1KGJEZXN0ICogYURlc3QpOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBkaXZpZGUyNTUociAqIGEgKyByRGVzdCAqIGFB
dXgpOwotICAgICAgICAgICAgICAgICAgICBnID0gZGl2aWRlMjU1KGcgKiBhICsgZ0Rlc3QgKiBh
QXV4KTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IGRpdmlkZTI1NShiICogYSArIGJEZXN0ICog
YUF1eCk7Ci0gICAgICAgICAgICAgICAgICAgIGEgKz0gZGl2aWRlMjU1KGFEZXN0ICogYUF1eCk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICByID0gKHIgKiAyNTUgKyBhIC0gMSkgLyBhOwotICAgICAgICAgICAg
ICAgICAgICAgICAgZyA9IChnICogMjU1ICsgYSAtIDEpIC8gYTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGIgPSAoYiAqIDI1NSArIGEgLSAxKSAvIGE7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSkgewotICAgICAg
ICAgICAgICAgICAgICByID0gZGl2aWRlMjU1KHIgKiBhKTsKLSAgICAgICAgICAgICAgICAgICAg
ZyA9IGRpdmlkZTI1NShnICogYSk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSBkaXZpZGUyNTUo
YiAqIGEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpk
ZXN0ID0gKGEgPDwgMjQgfCByIDw8IDE2IHwgZyA8PCA4IHwgYik7CisgICAgICAgICAgICBtX3Bp
eGVscy5vdmVyUkdCQShkZXN0LCByLCBnLCBiLCBhKTsKICAgICAgICAgfQogI2VuZGlmCiAKICAg
ICBwcml2YXRlOgogICAgICAgICBpbnQgd2lkdGgoKSBjb25zdAogICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gbV9zaXplLndpZHRoKCk7CisgICAgICAgICAgICByZXR1cm4gbV9waXhlbHMu
d2lkdGgoKTsKICAgICAgICAgfQogCiAgICAgICAgIGludCBoZWlnaHQoKSBjb25zdAogICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9zaXplLmhlaWdodCgpOworICAgICAgICAgICAgcmV0
dXJuIG1fcGl4ZWxzLmhlaWdodCgpOwogICAgICAgICB9CiAKLSAgICAgICAgVmVjdG9yPFBpeGVs
RGF0YT4gbV9iYWNraW5nU3RvcmU7Ci0gICAgICAgIFBpeGVsRGF0YSogbV9ieXRlczsgLy8gVGhl
IG1lbW9yeSBpcyBiYWNrZWQgYnkgbV9iYWNraW5nU3RvcmUuCi0gICAgICAgIEludFNpemUgbV9z
aXplOworICAgICAgICBCaXRtYXBQaXhlbHMgbV9waXhlbHM7CisKICAgICAgICAgLy8gRklYTUU6
IERvIHdlIG5lZWQgbV9jb2xvclByb2ZpbGUgYW55bW9yZT8KICAgICAgICAgQ29sb3JQcm9maWxl
IG1fY29sb3JQcm9maWxlOwogICAgICAgICBib29sIG1faGFzQWxwaGE7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHND
YWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9C
aXRtYXBQaXhlbHNDYWlyby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2ZjNjJhMzdkODE0NWNkZDA3YTE1NGVk
OGY3NDExZGVjYTQ2ZjBmMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcApAQCAtMCwwICsx
LDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQml0bWFwUGl4ZWxzLmgiCisKKyNpbmNsdWRl
IDxjYWlyby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK05hdGl2ZUltYWdlUHRyIEJpdG1h
cFBpeGVsczo6aW1hZ2UoKSBjb25zdAoreworICAgIHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFn
ZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZCBjaGFyKj4oY29uc3RfY2FzdDxQaXhlbERhdGEqPihtX3BpeGVscykpLAorICAgICAgICBD
QUlST19GT1JNQVRfQVJHQjMyLCB3aWR0aCgpLCBoZWlnaHQoKSwgd2lkdGgoKSAqIHNpemVvZihS
R0JBMzIpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJv
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdl
RGVjb2RlckNhaXJvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2I0MTI5NWY4
NTczNThmYmJmMzVjMWIwNTI1ZThkNmNjMzUyMGY1OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0MCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCi0KLSNpbmNsdWRl
IDxjYWlyby5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLU5hdGl2ZUltYWdlUHRyIEltYWdl
RnJhbWU6OmFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdAotewotICAgIHJldHVybiBhZG9wdFJlZihj
YWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgKLSAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4oY29uc3RfY2FzdDxQaXhlbERhdGEqPihtX2J5dGVzKSksCi0g
ICAgICAgIENBSVJPX0ZPUk1BVF9BUkdCMzIsIHdpZHRoKCksIGhlaWdodCgpLCB3aWR0aCgpICog
c2l6ZW9mKFBpeGVsRGF0YSkpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGlt
ZVZpZGVvU291cmNlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tCmluZGV4IDIxNmNkMDkzZjI2NDY3Y2Jh
ODhhNDNmNjkzYWJmNGNmNTFkZDFhNGQuLmQxMTQ1NGIwNWVmODg5OTNhNjI4OTM4OTZiYzBjMTE3
MjhjNWVkNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0KQEAg
LTg3LDcgKzg3LDcgQEAgdm9pZCBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6dXBkYXRlUGxh
dGZvcm1MYXllcigpIGNvbnN0CiAgICAgICAgIGlmICghaW1hZ2UpCiAgICAgICAgICAgICBicmVh
azsKIAotICAgICAgICBtX3ByZXZpZXdJbWFnZSA9IGltYWdlLT5nZXRDR0ltYWdlUmVmKCk7Cisg
ICAgICAgIG1fcHJldmlld0ltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlKCk7CiAgICAgICAgIGlm
ICghbV9wcmV2aWV3SW1hZ2UpCiAgICAgICAgICAgICBicmVhazsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAKaW5kZXggMzZjZDY1MTZlODBmMTc0
OGJmZWFiNzdhOTMwMjcxYzEyMWRlODAxOS4uNGI0ZTM3NzllOTZmNzhjNjU0MGE1M2M0NDc4YzNi
ZmQ5MzVmNTNlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJ
bWFnZUNHV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdl
Q0dXaW4uY3BwCkBAIC0xMzYsOSArMTM2LDkgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFn
ZUZyb21JbWFnZShJbWFnZSogaW1nLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24pCiAgICAg
Q0dDb250ZXh0U2NhbGVDVE0oZHJhd0NvbnRleHQsIDEsIC0xKTsKICAgICBDR0NvbnRleHRTZXRG
aWxsQ29sb3IoZHJhd0NvbnRleHQsIHdoaXRlKTsKICAgICBDR0NvbnRleHRGaWxsUmVjdChkcmF3
Q29udGV4dCwgcmVjdCk7Ci0gICAgaWYgKGF1dG8gc3JjSW1hZ2UgPSBpbWctPmdldENHSW1hZ2VS
ZWYoKSkgeworICAgIGlmIChhdXRvIHNyY0ltYWdlID0gaW1nLT5uYXRpdmVJbWFnZSgpKSB7CiAg
ICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShkcmF3Q29udGV4dCwga0NHQmxlbmRNb2RlTm9y
bWFsKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGRyYXdDb250ZXh0LCByZWN0LCBzcmNJ
bWFnZSk7CisgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShkcmF3Q29udGV4dCwgcmVjdCwgc3Jj
SW1hZ2UuZ2V0KCkpOwogICAgIH0KICAgICBDR0NvbnRleHRSZWxlYXNlKGRyYXdDb250ZXh0KTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDYWNoZS5tbSBiL1NvdXJj
ZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0KaW5kZXggYjY1OWQ2ZGJmOWFkNjk5OWMzYWM5
NjJkZTk1MTU3ODA5N2UxZjNiMS4uN2M1ZWQyMTBkZGIyYTMyYTc2NjY3NGMxMjBkOTk0YzJmYTQ3
ZTdmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDYWNoZS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNhY2hlLm1tCkBAIC0yMDQsNyArMjA0LDcgQEAg
KyAoQ0dJbWFnZVJlZilpbWFnZUZvclVSTDooTlNVUkwgKil1cmwKICAgICBXZWJDb3JlOjpDYWNo
ZWRJbWFnZSYgY2FjaGVkSW1hZ2UgPSBkb3duY2FzdDxXZWJDb3JlOjpDYWNoZWRJbWFnZT4oKmNh
Y2hlZFJlc291cmNlKTsKICAgICBpZiAoIWNhY2hlZEltYWdlLmhhc0ltYWdlKCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBjYWNoZWRJbWFnZS5pbWFnZSgpLT5nZXRDR0lt
YWdlUmVmKCk7CisgICAgcmV0dXJuIGNhY2hlZEltYWdlLmltYWdlKCktPm5hdGl2ZUltYWdlKCku
Z2V0KCk7CiB9CiAKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0YWJhc2VDRy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0YWJhc2VDRy5jcHAKaW5kZXggMGY2
ZGU3YTE0NmE2MTFhNTJhYTFlNTM5MDE5ZmE2YzFjNDY3MjVhZS4uMzA1NjMzNmNiNjZmZTRhZjE4
YmRjNTI5YWNhMmY4ZmM4ODFkZmU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9jZy9XS0ljb25EYXRhYmFzZUNHLmNwcApAQCAtMzcsMTIgKzM3LDIzIEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogQ0dJbWFnZVJlZiBXS0ljb25EYXRhYmFzZVRyeUdl
dENHSW1hZ2VGb3JVUkwoV0tJY29uRGF0YWJhc2VSZWYgaWNvbkRhdGFiYXNlUmVmLCBXS1VSTFJl
ZiB1cmxSZWYsIFdLU2l6ZSBzaXplKQogewogICAgIEltYWdlKiBpbWFnZSA9IHRvSW1wbChpY29u
RGF0YWJhc2VSZWYpLT5pbWFnZUZvclBhZ2VVUkwodG9XVEZTdHJpbmcodXJsUmVmKSk7Ci0gICAg
cmV0dXJuIGltYWdlID8gaW1hZ2UtPmdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6ZShJbnRTaXplKHN0
YXRpY19jYXN0PGludD4oc2l6ZS53aWR0aCksIHN0YXRpY19jYXN0PGludD4oc2l6ZS5oZWlnaHQp
KSkgOiAwOworICAgIHJldHVybiBpbWFnZSA/IGltYWdlLT5uYXRpdmVJbWFnZU9mU2l6ZShJbnRT
aXplKHN0YXRpY19jYXN0PGludD4oc2l6ZS53aWR0aCksIHN0YXRpY19jYXN0PGludD4oc2l6ZS5o
ZWlnaHQpKSkuZ2V0KCkgOiBudWxscHRyOwogfQogCiBDRkFycmF5UmVmIFdLSWNvbkRhdGFiYXNl
VHJ5Q29weUNHSW1hZ2VBcnJheUZvclVSTChXS0ljb25EYXRhYmFzZVJlZiBpY29uRGF0YWJhc2VS
ZWYsIFdLVVJMUmVmIHVybFJlZikKIHsKICAgICBJbWFnZSogaW1hZ2UgPSB0b0ltcGwoaWNvbkRh
dGFiYXNlUmVmKS0+aW1hZ2VGb3JQYWdlVVJMKHRvV1RGU3RyaW5nKHVybFJlZikpOwotICAgIHJl
dHVybiBpbWFnZSA/IGltYWdlLT5nZXRDR0ltYWdlQXJyYXkoKS5sZWFrUmVmKCkgOiAwOworICAg
IGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBuYXRpdmVJ
bWFnZXMgPSBpbWFnZS0+ZnJhbWVzTmF0aXZlSW1hZ2VzKCk7CisgICAgaWYgKCFuYXRpdmVJbWFn
ZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBDRk11dGFibGVB
cnJheVJlZiBhcnJheSA9IENGQXJyYXlDcmVhdGVNdXRhYmxlKG51bGxwdHIsIG5hdGl2ZUltYWdl
cy5zaXplKCksICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpOworICAgIGZvciAoYXV0byBuYXRpdmVJ
bWFnZSA6IG5hdGl2ZUltYWdlcykKKyAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5LCBu
YXRpdmVJbWFnZS5nZXQoKSk7CisgICAgCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENGQXJyYXlS
ZWY+KENGUmV0YWluKGFycmF5KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KaW5kZXggZGM3OTgzYWI5
ODhjMmQwNGExNzMwZWUxMzczMDNjMjQ0MTYxNTE5Ny4uZmJjM2U1ZDRjNTQzMDFjZTkyMTdhNDBm
OGQwOGJkNTgzNTI3ODdjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KQEAgLTQwNzEsNyArNDA3MSw3IEBA
IC0gKFVJSW1hZ2UgKilfcHJlc2VudGF0aW9uU25hcHNob3RGb3JQcmV2aWV3SXRlbUNvbnRyb2xs
ZXI6KFVJUHJldmlld0l0ZW1Db250cm9sCiB7CiAgICAgaWYgKCFfcG9zaXRpb25JbmZvcm1hdGlv
bi5saW5rSW5kaWNhdG9yLmNvbnRlbnRJbWFnZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgcmV0dXJuIFtbW1VJSW1hZ2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTpfcG9zaXRpb25JbmZv
cm1hdGlvbi5saW5rSW5kaWNhdG9yLmNvbnRlbnRJbWFnZS0+Z2V0Q0dJbWFnZVJlZigpXSBhdXRv
cmVsZWFzZV07CisgICAgcmV0dXJuIFtbW1VJSW1hZ2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTpf
cG9zaXRpb25JbmZvcm1hdGlvbi5saW5rSW5kaWNhdG9yLmNvbnRlbnRJbWFnZS0+bmF0aXZlSW1h
Z2UoKS5nZXQoKV0gYXV0b3JlbGVhc2VdOwogfQogCiAtIChOU0FycmF5ICopX3ByZXNlbnRhdGlv
blJlY3RzRm9yUHJldmlld0l0ZW1Db250cm9sbGVyOihVSVByZXZpZXdJdGVtQ29udHJvbGxlciAq
KWNvbnRyb2xsZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5WaWV3LmNwcAppbmRleCA5YTMzZjdjYzdkYzdjN2Q3MmY5ZGE3NDMwOThiN2RiY2E4MjQwOWNm
Li5hNTMyNTEwNjc4YjlmNTM1MTQ1OGEzOGE5ZjQyMzM3NDdkMDM1ZjVjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCkBAIC0xNzI3LDY5
ICsxNzI3LDYgQEAgdm9pZCBQbHVnaW5WaWV3Ojp3aW5kb3dlZFBsdWdpblZpc2liaWxpdHlEaWRD
aGFuZ2UoYm9vbCBpc1Zpc2libGUsIHVpbnQ2NF90IHdpbmQKIH0KICNlbmRpZgogCi0jaWYgUExB
VEZPUk0oQ09DT0EpCi1zdGF0aWMgYm9vbCBpc0FsbW9zdFNvbGlkQ29sb3IoQml0bWFwSW1hZ2Uq
IGJpdG1hcCkKLXsKLSAgICBDR0ltYWdlUmVmIGltYWdlID0gYml0bWFwLT5nZXRDR0ltYWdlUmVm
KCk7Ci0gICAgQVNTRVJUKENHSW1hZ2VHZXRCaXRzUGVyQ29tcG9uZW50KGltYWdlKSA9PSA4KTsK
LQotICAgIENHQml0bWFwSW5mbyBpbWFnZUluZm8gPSBDR0ltYWdlR2V0Qml0bWFwSW5mbyhpbWFn
ZSk7Ci0gICAgaWYgKCEoaW1hZ2VJbmZvICYga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUpIHx8
IChpbWFnZUluZm8gJiBrQ0dCaXRtYXBBbHBoYUluZm9NYXNrKSAhPSBrQ0dJbWFnZUFscGhhUHJl
bXVsdGlwbGllZEZpcnN0KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBiZWluZyBhYmxl
IHRvIGhhbmRsZSBvdGhlciBwaXhlbCBmb3JtYXRzLgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHNpemVfdCB3aWR0aCA9
IENHSW1hZ2VHZXRXaWR0aChpbWFnZSk7Ci0gICAgc2l6ZV90IGhlaWdodCA9IENHSW1hZ2VHZXRI
ZWlnaHQoaW1hZ2UpOwotICAgIHNpemVfdCBieXRlc1BlclJvdyA9IENHSW1hZ2VHZXRCeXRlc1Bl
clJvdyhpbWFnZSk7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBwcm92aWRlciA9IGFkb3B0
Q0YoQ0dEYXRhUHJvdmlkZXJDb3B5RGF0YShDR0ltYWdlR2V0RGF0YVByb3ZpZGVyKGltYWdlKSkp
OwotICAgIGNvbnN0IFVJbnQ4KiBkYXRhID0gQ0ZEYXRhR2V0Qnl0ZVB0cihwcm92aWRlci5nZXQo
KSk7Ci0KLSAgICAvLyBPdmVybGF5IGEgZ3JpZCBvZiBzYW1wbGluZyBkb3RzIG9uIHRvcCBvZiBh
IGdyYXlzY2FsZSB2ZXJzaW9uIG9mIHRoZSBpbWFnZS4KLSAgICAvLyBGb3IgdGhlIGludGVyaW9y
IHBvaW50cywgY2FsY3VsYXRlIHRoZSBkaWZmZXJlbmNlIGluIGx1bWluYW5jZSBhbW9uZyB0aGUg
c2FtcGxlIHBvaW50Ci0gICAgLy8gYW5kIGl0cyBzdXJyb3VuZHMgcG9pbnRzLCBzY2FsZWQgYnkg
dHJhbnNwYXJlbmN5LgotICAgIGNvbnN0IHVuc2lnbmVkIHNhbXBsZVJvd3MgPSA3OwotICAgIGNv
bnN0IHVuc2lnbmVkIHNhbXBsZUNvbHMgPSA3OwotICAgIC8vIEZJWE1FOiBSZWZpbmUgdGhlIHBy
b3BlciBudW1iZXIgb2Ygc2FtcGxlcywgYW5kIGFjY29tbW9kYXRlIGRpZmZlcmVudCBhc3BlY3Qg
cmF0aW9zLgotICAgIGlmICh3aWR0aCA8IHNhbXBsZUNvbHMgfHwgaGVpZ2h0IDwgc2FtcGxlUm93
cykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRW5zdXJlIHRoYXQgdGhlIGxhc3Qg
cm93L2NvbHVtbiBsYW5kIG9uIHRoZSBpbWFnZSBwZXJpbWV0ZXIuCi0gICAgY29uc3QgZmxvYXQg
c3RyaWRlV2lkdGggPSBzdGF0aWNfY2FzdDxmbG9hdD4od2lkdGggLSAxKSAvIChzYW1wbGVDb2xz
IC0gMSk7Ci0gICAgY29uc3QgZmxvYXQgc3RyaWRlSGVpZ2h0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGhlaWdodCAtIDEpIC8gKHNhbXBsZVJvd3MgLSAxKTsKLSAgICBmbG9hdCBzYW1wbGVzW3NhbXBs
ZVJvd3NdW3NhbXBsZUNvbHNdOwotCi0gICAgLy8gRmluZCB0aGUgbHVtaW5hbmNlIG9mIHRoZSBz
YW1wbGUgcG9pbnRzLgotICAgIGZsb2F0IHkgPSAwOwotICAgIGNvbnN0IFVJbnQ4KiByb3cgPSBk
YXRhOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzYW1wbGVSb3dzOyArK2kpIHsKLSAg
ICAgICAgZmxvYXQgeCA9IDA7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBzYW1w
bGVDb2xzOyArK2opIHsKLSAgICAgICAgICAgIGNvbnN0IFVJbnQ4KiBwMCA9IHJvdyArIChzdGF0
aWNfY2FzdDxpbnQ+KHggKyAuNSkpICogNDsKLSAgICAgICAgICAgIC8vIFIgRyBCIEEKLSAgICAg
ICAgICAgIHNhbXBsZXNbaV1bal0gPSAoMC4yMTI1ICogKnAwICsgMC43MTU0ICogKihwMCsxKSAr
IDAuMDcyMSAqICoocDArMikpICogKihwMCszKSAvIDI1NTsKLSAgICAgICAgICAgIHggKz0gc3Ry
aWRlV2lkdGg7Ci0gICAgICAgIH0KLSAgICAgICAgeSArPSBzdHJpZGVIZWlnaHQ7Ci0gICAgICAg
IHJvdyA9IGRhdGEgKyAoc3RhdGljX2Nhc3Q8aW50Pih5ICsgLjUpKSAqIGJ5dGVzUGVyUm93Owot
ICAgIH0KLQotICAgIC8vIERldGVybWluZSB0aGUgaW1hZ2Ugc2NvcmUuCi0gICAgZmxvYXQgYWNj
dW1TY29yZSA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNhbXBsZVJvd3MgLSAx
OyArK2kpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMTsgaiA8IHNhbXBsZUNvbHMgLSAx
OyArK2opIHsKLSAgICAgICAgICAgIGZsb2F0IGRpZmYgPSBzYW1wbGVzW2kgLSAxXVtqXSArIHNh
bXBsZXNbaSArIDFdW2pdICsgc2FtcGxlc1tpXVtqIC0gMV0gKyBzYW1wbGVzW2ldW2ogKyAxXSAt
IDQgKiBzYW1wbGVzW2ldW2pdOwotICAgICAgICAgICAgYWNjdW1TY29yZSArPSBkaWZmICogZGlm
ZjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZSBzY29yZSBmb3IgYSBnaXZlbiBzYW1w
bGUgY2FuIGJlIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgMCBhbmQgMjU1XjIuCi0gICAgcmV0dXJuIGFj
Y3VtU2NvcmUgPCAyNTAwICogKHNhbXBsZVJvd3MgLSAyKSAqIChzYW1wbGVDb2xzIC0gMik7Ci19
Ci0jZW5kaWYKLQogdm9pZCBQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRpbWVyRmlyZWQoKQog
ewogI2lmIEVOQUJMRShQUklNQVJZX1NOQVBTSE9UVEVEX1BMVUdJTl9IRVVSSVNUSUMpCkBAIC0x
ODA5LDcgKzE3NDYsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnBsdWdpblNuYXBzaG90VGltZXJGaXJl
ZCgpCiAKICAgICAgICAgaWYgKHNuYXBzaG90SW1hZ2UpIHsKICNpZiBFTkFCTEUoUFJJTUFSWV9T
TkFQU0hPVFRFRF9QTFVHSU5fSEVVUklTVElDKQotICAgICAgICAgICAgYm9vbCBzbmFwc2hvdElz
QWxtb3N0U29saWRDb2xvciA9IGlzQWxtb3N0U29saWRDb2xvcihkb3duY2FzdDxCaXRtYXBJbWFn
ZT4oc25hcHNob3RJbWFnZS5nZXQoKSkpOworICAgICAgICAgICAgYm9vbCBzbmFwc2hvdElzQWxt
b3N0U29saWRDb2xvciA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8Qml0bWFwSW1hZ2U+KHNuYXBzaG90
SW1hZ2UpLT5pc0FsbW9zdFNvbGlkQ29sb3IoKTsKICAgICAgICAgICAgIHNuYXBzaG90Rm91bmQg
PSAhc25hcHNob3RJc0FsbW9zdFNvbGlkQ29sb3I7CiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283431</attachid>
            <date>2016-07-12 11:25:39 -0700</date>
            <delta_ts>2016-07-12 11:35:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159679-20160712112456.patch</filename>
            <type>text/plain</type>
            <size>127787</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzMTAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWM1YmQ5YmQwNmExOWJl
NWNhMDJjNTE3MmQ2ZWYyZWJiZmVjMWMxOS4uNmFlYzQ3MmY4YWVjOGUwNjRkNGYyZmQwODAyYTBm
MWM0NTU4YjI4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxMyBAQAorMjAxNi0wNy0xMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0
IHRoZSBwaXhlbCBkYXRhIG9mIEltYWdlRnJhbWUgdG8gYSBzZXBhcmF0ZSBjbGFzcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5Njc5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgcGl4ZWwg
ZGF0YSBtYW5pcHVsYXRpb24gcGFydCBpbiBJbWFnZUZyYW1lIGludG8gYSBzZXBhcmF0ZSBjbGFz
cworICAgICAgICBhbmQgdGhlbiBtYWtlIGl0IG9wdGlvbmFsIChhbGxvY2F0ZWQgb24gZGVtYW5k
KS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2lu
Q2Fpcm8uY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFBpeGVsczo6Qml0bWFwUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBp
eGVsczo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpoZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFBpeGVsczo6YXQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmNsZWFyUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OnJlcGVhdEZpcnN0Um93KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcFBpeGVsczo6c2V0UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQ
aXhlbHM6Om92ZXJSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6aW5Cb3Vu
ZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Om11bHRpcGx5MjU1KToKKyAgICAgICAgKFdlYkNvcmU6OmRpdmlkZTI1NSk6CisgICAg
ICAgIChXZWJDb3JlOjpkaXZpZGVDZWlsKToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxp
ZWRDaGFubmVsKToKKyAgICAgICAgKFdlYkNvcmU6OnVucHJlbXVsdGlwbGllZENoYW5uZWwpOgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZVByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VVblByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6cGl4ZWxzKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWVEYXRhOjpoYXNQaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y2xlYXJQaXhl
bERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGxQaXhlbERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGxGcmFtZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weUJpdG1hcERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojpjb3B5Um93TlRpbWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0UkdCQSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpnZXRBZGRyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6Omhhc1BpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpvdmVyUkdC
QSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjp3aWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
Y29weVJvd05UaW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpm
aXhQb2ludFVuc2lnbmVkTXVsdGlwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6ZGl2aWRlMjU1KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5j
cHAuCisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmltYWdlKToKKworMjAxNi0wNy0x
MSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAgICAg
IFJlbmFtZSBGcmFtZURhdGEgdG8gSW1hZ2VGcmFtZURhdGEgYW5kIG1vdmUgaXQgdG8gYSBzZXBh
cmF0ZSBmaWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTU0NDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNb3ZlIEltYWdlRnJhbWVEYXRhIHRvIGEgc2VwYXJhdGUgZmlsZSBzbyBpdCBjYW4gYmUgY2Fj
aGVkIGJ5IEltYWdlU291cmNlCisgICAgICAgIGFuZCB3aWxsIHN0aWxsIGJlIGNvbnN1bWVkIGJ5
IEJpdG1hcEltYWdlLiBNYWtlIHRoZSBkYXRhIG1lbWJlcnMgb2YgSW1hZ2VGcmFtZURhdGEKKyAg
ICAgICAgYmUgcHJpdmF0ZSBhbmQgYWRkIGdldHRlcnMgdG8gcmV0dXJuIHRoZWlyIHZhbHVlcy4K
KworICAgICAgICBObyBuZXcgdGVzdHMgLS0gQ29kZSByZWZhY3RvcmluZywgbm8gYmVoYXZpb3Ig
Y2hhbmdlLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Jp
dG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aGF2ZUZyYW1lSW1hZ2VBdEluZGV4
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNz
YXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6ZW5zdXJlRnJhbWVJc0NhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcElt
YWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6ZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6aXNBbG1vc3RTb2xpZENvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRt
YXBJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpGcmFtZURhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp+RnJhbWVEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6dXNlZEZyYW1lQnl0ZXMpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZURhdGFBdEluZGV4KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ltYWdlRnJhbWVEYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lRGF0YTo6SW1hZ2VGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURh
dGE6On5JbWFnZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6
Y2xlYXJTdWJJbWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmNsZWFy
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpzaW5nbGVQaXhlbFNvbGlkQ29s
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmlzQWxtb3N0U29saWRDb2xv
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW1hZ2VGcmFtZURhdGEuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6c3RhdHVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWVEYXRhOjppc0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWVEYXRhOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpm
cmFtZUJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjppbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6b3JpZW50YXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OnN1YnNhbXBsaW5nTGV2ZWwpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZURhdGE6OmR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWVEYXRhOjpoYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6
aGFzSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6Omhhc01ldGFkYXRh
KToKKworMjAxNi0wNi0yNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUs
Y29tPgorCisgICAgICAgIEludHJvZHVjZSBQbGF0Zm9ybUltYWdlIGFuZCBtYWtlIGl0IGlzIGEg
d3JhcHBlciBmb3IgTmF0aXZlSW1hZ2VQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1ODY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyByZWZhY3RvcmluZyBp
cyB0byBtb3ZlIHRoZSBwbGF0Zm9ybSBpbWFnZSBkZXBlbmRlbnQKKyAgICAgICAgY29kZSBmcm9t
IEJpdG1hcEltYWdlIHRvIFBsYXRmb3JtSW1hZ2UuIFBsYXRmb3JtSW1hZ2UgaXMgcmVzcG9uc2li
bGUgb2YgCisgICAgICAgIGRyYXdpbmcgdGhlIGltYWdlIGFuZCBhbnN3ZXJpbmcgTmF0aXZlSW1h
Z2VQdHIgcXVlc3Rpb25zIHdoZW4gYW4gSW1hZ2VEZWNvZGVyCisgICAgICAgIGlzIG5vdCBhdmFp
bGFibGUuIEFwYXJ0IGZyb20gZHJhd2luZyB0aGUgaW1hZ2UsIHRoZSBxdWVyeSBmdW5jdGlvbnMg
d2lsbCBiZQorICAgICAgICBjYWxsZWQgb25seSB3aGVuIGNvbnN0cnVjdGluZyBhIEZyYW1lRGF0
YSBzbyB3ZSB3aWxsIGtlZXAgZXZlcnl0aGluZyBhcyBhCisgICAgICAgIE5hdGl2ZUltYWdlUHRy
LiBCdXQgd2Ugd2lsbCBjYXN0IHRoZSBOYXRpdmVJbWFnZVB0ciB0byBQbGF0Zm9ybUltYWdlIHdo
ZW4KKyAgICAgICAgYSBwbGF0Zm9ybSBkZXBlbmRlbnQgZnVuY3Rpb24gaXMgbmVlZGVkLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cyAtLSBDb2RlIHJlZmFjdG9yaW5nLCBubyBiZWhhdmlvciBjaGFu
Z2UuCisKKyAgICAgICAgKiBQbGF0Zm9ybUFwcGxlV2luLmNtYWtlOgorICAgICAgICAqIFBsYXRm
b3JtRWZsLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBs
YXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2luQ2Fpcm8uY21ha2U6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRp
bmdzL29iamMvRE9NLm1tOgorICAgICAgICAoLVtET01Ob2RlIGdldFByZXZpZXdTbmFwc2hvdElt
YWdlOmFuZFJlY3RzOl0pOgorICAgICAgICAqIHBhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cu
bW06CisgICAgICAgICgtW1dlYlRleHRJbmRpY2F0b3JWaWV3IGluaXRXaXRoRnJhbWU6dGV4dElu
ZGljYXRvcjptYXJnaW46b2Zmc2V0Ol0pOgorICAgICAgICAoY3JlYXRlQ29udGVudENyb3NzZmFk
ZUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpu
YXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZy
YW1lc05hdGl2ZUltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6c2luZ2xl
UGl4ZWxTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppc0FsbW9z
dFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZURhdGE6OkZyYW1lRGF0YSk6CisgICAgICAgIG1faGFzQWxwaGEgY2FuIGJlIGluaXRp
YWxpemVkIHdpdGggZmFsc2UgYmVjYXVzZSBpdCBpcyBhY2Nlc3NlZCBvbmx5IGluCisgICAgICAg
IEJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleCgpIGFuZCBpdCBpcyBndWFyZGVkIGJ5
IG1faGF2ZU1ldGFkYXRhLgorICAgICAgICBCb3RoIG1faGF2ZU1ldGFkYXRhIGFuZCBtX2hhc0Fs
cGhhIGFyZSBzZXQgaW4gQml0bWFwSW1hZ2UgY29uc3RydWN0b3IKKyAgICAgICAgYW5kIGluIEJp
dG1hcEltYWdlOjpjYWNoZUZyYW1lKCkuCisKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6
fkZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OmNsZWFyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6
Om5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpuYXRpdmVJbWFnZU9mU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZnJhbWVzTmF0aXZlSW1hZ2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlOjpnZXRDR0ltYWdlUmVmKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlOjpnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2U6OmdldENHSW1hZ2VBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtSW1hZ2U6OlBsYXRmb3JtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1JbWFnZTo6aXNOaWwpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6Y2dJ
bWFnZVJlZik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjp1cGRhdGVEaXNwbGF5TW9k
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJv
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0JpdG1hcEltYWdlQ2Fpcm8uY3BwLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6
Y2xlYXJTdWJJbWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6c2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpoYXNBbHBoYSk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6aXNBbG1vc3RTb2xpZENvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1JbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
Qml0bWFwSW1hZ2VDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUGF0dGVybkNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm46OmNyZWF0ZVBsYXRm
b3JtUGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFn
ZUNHLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpjbGVhclN1
YkltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IpOiBNb3ZlZCBmcm9tIFBsdWdpblZp
ZXcuY3BwIHNpbmNlIFBsYXRmb3JtSW1hZ2UgaXMgd2hhdCB0aGlzIGZ1bmN0aW9uIGJlbG9uZ3Mg
dG8uCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKTog
UmV0dXJucyB0aGUgc3ViLXNhbXBsaW5nIHNjYWxlIGJhc2VkIG9uIHRoZSBjb250ZXh0IHNjYWxp
bmcuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpkcmF3KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tOgor
ICAgICAgICAoVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYTo6dXBkYXRlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW06CisgICAgICAgIChX
ZWJDb3JlOjpNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6dXBkYXRlUGxhdGZvcm1MYXllcik6
CisgICAgICAgICogcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZSk6CisKIDIwMTYtMDctMTEgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBTcGVlY2ggU3ludGhlc2lzOiBnZXR0aW5n
IGxpc3Qgb2Ygdm9pY2VzIG5vIGxvbmdlciB3b3JrcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IGMxYmMw
YmJkZTM2MTI1YzQ2MmJmNDgxZGRhZDVkZDJmODI3ZDUyMzkuLjE4ZDFlYmViZWU5MjBiMmYyOWVm
MzI4NzdkZWQyZTFlY2ZmOTdkNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAor
MjAxNi0wNy0xMSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgor
CisgICAgICAgIEludHJvZHVjZSBQbGF0Zm9ybUltYWdlIGFuZCBtYWtlIGl0IGlzIGEgd3JhcHBl
ciBmb3IgTmF0aXZlSW1hZ2VQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1ODY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogTWlzYy9XZWJDYWNoZS5tbToKKyAgICAgICAgKCtbV2ViQ2FjaGUgaW1h
Z2VGb3JVUkw6XSk6CisKIDIwMTYtMDctMTEgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxl
LmNvbT4KIAogICAgICAgICBBZGQgc3ludGhldGljIGNsaWNrIG9yaWdpbiB0byBXS05hdmlnYXRp
b25BY3Rpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYjQ3ZTJjZWE3OWE4ZGQ3YzUzMzVkMmNkNThlNzk2MTUz
MzVjNTAyYy4uZjFmMTY3MjU4NGMwZWU4MTg1OGE3ZTk2NTUzYWNkOWNkMGFjNmZlZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE2LTA3LTExICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
Ym91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgSW50cm9kdWNlIFBsYXRmb3JtSW1hZ2Ug
YW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVyIGZvciBOYXRpdmVJbWFnZVB0cgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvY2cv
V0tJY29uRGF0YWJhc2VDRy5jcHA6CisgICAgICAgIChXS0ljb25EYXRhYmFzZVRyeUdldENHSW1h
Z2VGb3JVUkwpOgorICAgICAgICAoV0tJY29uRGF0YWJhc2VUcnlDb3B5Q0dJbWFnZUFycmF5Rm9y
VVJMKToKKyAgICAgICAgSXQgd2FzIHRoZSBvbmx5IHBsYWNlIGluIHRoZSBjb2RlIHdoaWNoIHVz
ZXMgQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VBcnJheSgpLgorICAgICAgICBDYWxsIEJpdG1hcElt
YWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMoKSBpbnN0ZWFkIGFuZCBmb3JtIHRoZSByZXR1cm5lZAor
ICAgICAgICBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGJ1aWxkIHRoZSBDRkFycmF5UmVmLgorICAg
ICAgICAKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcHJlc2VudGF0aW9uU25hcHNob3RGb3JQcmV2
aWV3SXRlbUNvbnRyb2xsZXI6XSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRp
bWVyRmlyZWQpOgorICAgICAgICAKKyAgICAgICAgKFdlYktpdDo6aXNBbG1vc3RTb2xpZENvbG9y
KTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSB0aGUgc3RhdGljIGZ1bmN0aW9uIGlzQWxtb3N0U29s
aWRDb2xvciB0byBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKS4KKwogMjAxNi0w
Ny0xMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFtXSzJdW2lP
U10gSW50ZXJtaXR0ZW50IGNyYXNoIGluIFtVSUFwcGxpY2F0aW9uIGJlZ2luQmFja2dyb3VuZFRh
c2tXaXRoTmFtZV0gZXhwaXJhdGlvbiBoYW5kbGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGU3
OGIwNDJiMTA0MDFlMWY0ZWUzYTJhYjFhMDUyYzIxOGMzYTExZTMuLjIyNmVjOWI4NGU3MjJmZmYz
ZTJmMDRkY2U3ZGI3MGUzZGQ0YjgzYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMjI2LDYg
KzIyMjYsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSVNP
VlRUQ3VlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJh
bWVEYXRhLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT3JpZW50YXRpb24uY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UG9pbnQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxl
V2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCA1
ZmY5OTFmZjdkYTMwOGJiOTE4MmVjZTNiZjEyMTczMGE1NDhkMjg3Li5iYWUzMWVhZjg2ZTdmY2E5
MDU4MjUwOTJhYTM4YTc4YzExZTQyMjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4u
Y21ha2UKQEAgLTU1LDcgKzU1LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XS0NBQ0ZWaWV3TGF5ZXJUcmVlSG9zdC5jcHAKIAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFBv
aW50Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwCkBAIC03
NSw2ICs3NCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UGF0aENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtl
CmluZGV4IDUxNDUwNGU2ZWMyNWFhNWU0M2I5OTM5OGQ1ZTM1Y2VlZWE3NjZhYTQuLjY0YWUxNzEw
ODlkY2JmMGNkNDViNzBhOWI4ZjcwZWZhOWZmZGVkYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNt
YWtlCkBAIC0xMjIsNyArMTIyLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNwcAogCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1wbC5jcHAKLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ZvbnRDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJm
YnV6ek5HLmNwcApAQCAtMTM0LDYgKzEzMyw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNF
UwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QYXR0ZXJuQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Bs
YXRmb3JtUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNh
aXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RyYW5zZm9ybWF0aW9uTWF0cml4
Q2Fpcm8uY3BwCkBAIC0xNzksOSArMTc5LDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MveDExL1BsYXRmb3JtRGlzcGxheVgxMS5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy94MTEvWFVuaXF1ZVJlc291cmNlLmNwcAogCi0gICAgcGxhdGZvcm0v
aW1hZ2UtZW5jb2RlcnMvSlBFR0ltYWdlRW5jb2Rlci5jcHAKKyAgICBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHAKIAotICAgIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2ltYWdl
LWVuY29kZXJzL0pQRUdJbWFnZUVuY29kZXIuY3BwCiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2Vm
bC9OZXR3b3JrU3RhdGVOb3RpZmllckVmbC5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpp
bmRleCA2NDVhZGQxY2UzODg4OGIwNGQ0YTJkODlhZGEwYTdjNmRlMTk5ODZiLi5kMzFmNTcwNmE2
OTU5YjIzMWI1YmZiMjJmMDdkMTg0M2FlODYxYTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFr
ZQpAQCAtMTAxLDcgKzEwMSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1wbC5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9YMTEu
Y3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9GbG9hdFJlY3RDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9Gb250Q2Fpcm8uY3BwCkBAIC0xMTUsNiArMTE0LDcgQEAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vUGxhdGZvcm1QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vUmVmUHRyQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3Jt
YXRpb25NYXRyaXhDYWlyby5jcHAKQEAgLTE0OSw3ICsxNDksNyBAQCBsaXN0KEFQUEVORCBXZWJD
b3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAogICAg
IHBsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuY3BwCiAKLSAgICBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHAKIAogICAgIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL2d0ay9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZUd0ay5jcHAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bU1hYy5jbWFrZQppbmRleCA5ZjZmNDk2YjZjYzRlZjZlNGI3NGQ4NGFjMGFhOWRlYTU1YTAyMzdi
Li40ZGRlZDMwODhmNGYzOTZmZWY0NDRlN2VlNjVjNjQxMDY1OGY1ODQxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybU1hYy5jbWFrZQpAQCAtMzk3LDcgKzM5Nyw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1dlYlN5c3RlbUJhY2tkcm9wTGF5
ZXIubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9XZWJUaWxlZEJhY2tpbmdMYXll
ci5tbQogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0Zsb2F0UG9pbnRDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5j
cHAKQEAgLTQxNyw2ICs0MTYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL1BhdGhDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cu
Y3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFnZUNHLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1N1YmltYWdlQ2FjaGVXaXRoVGltZXIuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtV2luQ2Fpcm8uY21ha2UKaW5kZXggMmM1NTNiMDU1MWRhZDY5YWExOTlkOTYwZjU1MjM0
M2Q5MjBmMDdiMy4uMzQyYWE5MjczMmZkOGY5MmU4NWNmYTYyNmQ1NTU3MGVmNjZiNmE2OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCkBAIC0yMSw3ICsyMSw2IEBAIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCiAKLSAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0Zsb2F0UmVjdENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRD
YWlyby5jcHAKQEAgLTM0LDYgKzMzLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
bGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZv
cm1QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8u
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3JtYXRpb25NYXRyaXhDYWly
by5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAK
IAotICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNw
cAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNw
cAogCiAgICAgcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb25TdHViLmNwcAog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggYzExYmM0N2U1Y2FkNjMwYTM2NTdjZGUxYWQ5ZjdiNzZhMGE1NWM2Ni4uZmYyYTQ5OGJh
OTZiODFkYTAzZjgxYTMwMWE4NWJlMzc0ZDBlYzY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQ4NCw3ICsxNDg0LDcgQEAK
IAkJMzc1Q0QyMzIxMTlENDNDODAwQTJBODU5IC8qIEh5cGhlbmF0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzVDRDIzMTExOUQ0M0M4MDBBMkE4
NTkgLyogSHlwaGVuYXRpb24uaCAqLzsgfTsKIAkJMzc2RENDRTExM0I0Rjk2NjAwMkVCRUZDIC8q
IFRleHRSdW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzc2RENDRTAxM0I0Rjk2NjAwMkVCRUZDIC8qIFRleHRSdW4uY3BwICovOyB9OwogCQkzNzc0
QUJBNTBGQTIxRUI0MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzc0QUJBMzBGQTIxRUI0
MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3
IC8qIEJpdG1hcEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3Bw
ICovOyB9OworCQkzNzdBM0E5MDE1RUZDRTlCMDA1OUY1QzcgLyogUGxhdGZvcm1JbWFnZUNHLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3N0EzQThG
MTVFRkNFOUEwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwICovOyB9OwogCQkzNzkxOUMy
MzBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzkxOUMyMTBCN0QxODg2MDBBNTY5OTgg
LyogUG9zaXRpb25JdGVyYXRvci5jcHAgKi87IH07CiAJCTM3OTE5QzI0MEI3RDE4ODYwMEE1Njk5
OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzNzkxOUMyMjBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTM3OTI5MTdBMTk4
NUVGMzkwMEY0QjY2MSAvKiBDcmVkZW50aWFsQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc5MjkxNzgxOTg1RUYzOTAwRjRCNjYxIC8qIENyZWRl
bnRpYWxCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTIzMjUsMTAgKzIzMjUsMTQgQEAKIAkJNTNFRDNGREYxNjdBODhFNzAwNjc2MkU2IC8q
IEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFRDNGREQxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJu
YWxTZXR0aW5nc0dlbmVyYXRlZC5oICovOyB9OwogCQk1M0VGNzY2QjE2NTMwQTYxMDA0Q0JFNDkg
LyogU2V0dGluZ3NNYWNyb3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzRUY3NjZBMTY1MzBBNjEwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oICov
OyB9OwogCQk1M0VGNzY2QzE2NTMxOTk0MDA0Q0JFNDkgLyogU2V0dGluZ3NNYWNyb3MuaCBpbiBD
b3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzRUY3NjZBMTY1MzBBNjEwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oICovOyB9OworCQk1
NTA0RTRDQjFEMzU1N0IyMDBGRTUwODggLyogQml0bWFwUGl4ZWxzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTA0RTRDQTFEMzU1MzJEMDBGRTUwODgg
LyogQml0bWFwUGl4ZWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTUwQTBCQzkwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzcw
ODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovOyB9OwogCQk1NTBBMEJDQTA4
NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxp
ZmllZE5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1NTVCODdFQzFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU1Qjg3RUExQ0FBRjBB
QjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLzsgfTsKIAkJNTU1Qjg3RUQxQ0FBRjBB
QjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNv
ZGVyQ0cuaCAqLzsgfTsKKwkJNTU3NEYwODcxRDAyNzkwOTAwQjlGMTRDIC8qIFBsYXRmb3JtSW1h
Z2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1NzRG
MDg1MUQwMjc0NDQwMEI5RjE0QyAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTVDQkE2QTExRDFERjJFMTAwNDUxODYw
IC8qIEltYWdlRnJhbWVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU1Q0JBNjlGMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1lRGF0YS5j
cHAgKi87IH07CisJCTU1Q0JBNkEyMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1lRGF0YS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVDQkE2QTAx
RDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTcyQTdGMjExQzZFNTcxOTAwOUM2MTQ5IC8q
IFNpbXVsYXRlZENsaWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NzJBN0YyMDFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCAqLzsg
fTsKIAkJNTcyQTdGMjMxQzZFNUE2NjAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MkE3RjIyMUM2RTVB
NjYwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5jcHAgKi87IH07CiAJCTU3RUY1RTYwMUQyMEM4
MzkwMDE3MUU2MCAvKiBUZXh0Q29kZWNSZXBsYWNlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdFRjVFNUYxRDIwQzgzOTAwMTcxRTYwIC8qIFRl
eHRDb2RlY1JlcGxhY2VtZW50LmggKi87IH07CkBAIC05MDYxLDcgKzkwNjUsNyBAQAogCQkzNzZE
Q0NFMDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUZXh0UnVuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzc3MkIwOTUxNjUzNTg1NjAwMEE0OUNBIC8qIFBvcHVwT3BlbmluZ09ic2VydmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvcHVwT3BlbmluZ09ic2VydmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NzRBQkEzMEZBMjFFQjQwMEFEN0RFOSAvKiBP
dmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdG1hcEltYWdlQ0cuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogUGxhdGZv
cm1JbWFnZUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsYXRm
b3JtSW1hZ2VDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3OTE5QzIxMEI3
RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQb3NpdGlvbkl0ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzc5MTlDMjIwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvc2l0aW9uSXRlcmF0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc5MjkxNzgxOTg1RUYzOTAwRjRCNjYx
IC8qIENyZWRlbnRpYWxCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENy
ZWRlbnRpYWxCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05OTg5LDEwICs5
OTkzLDE0IEBACiAJCTUzRUQzRkRDMTY3QTg4RTcwMDY3NjJFNiAvKiBKU0ludGVybmFsU2V0dGlu
Z3NHZW5lcmF0ZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJ
bnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTNFRDNGREQxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRl
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVybmFsU2V0dGluZ3NH
ZW5lcmF0ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNFRjc2NkExNjUzMEE2
MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNldHRpbmdzTWFjcm9zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1
MDRFNENBMUQzNTUzMkQwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Qml0bWFwUGl4ZWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1MEEwQkM3MDg1
RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllZE5hbWUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTUw
QTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTU1
Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2Rl
ckNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1NzRGMDg1MUQwMjc0NDQwMEI5RjE0QyAv
KiBQbGF0Zm9ybUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVDQkE2OUYxRDFERjJFMTAwNDUxODYwIC8qIEltYWdl
RnJhbWVEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdl
RnJhbWVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVDQkE2QTAxRDFE
RjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlRnJhbWVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTU1RDQwOEY3MUE3QzYzMTgwMEM3ODQ1MCAvKiBTVkdJbWFnZUNsaWVudHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHSW1hZ2VDbGllbnRzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTU3MkE3RjIwMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGlj
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW11bGF0ZWRDbGljay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzJBN0YyMjFDNkU1QTY2MDA5QzYxNDkgLyog
U2ltdWxhdGVkQ2xpY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2ltdWxhdGVkQ2xpY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIwMjQs
NyArMjIwMzIsNiBAQAogCQlCMjc1MzUyOTBCMDUzODE0MDAyQ0U2NEYgLyogY2cgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTM3N0EzQThGMTVFRkNFOUEw
MDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCAqLywKIAkJCQkwRkNGMzMyMzBGMkI5NzE1MDA0
QjY3OTUgLyogQ29sb3JDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRGIC8q
IEZsb2F0UG9pbnRDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEZs
b2F0UmVjdENHLmNwcCAqLywKQEAgLTIyMDUxLDYgKzIyMDU4LDcgQEAKIAkJCQlBODBBMzhGRDBF
NTBDQzgyMDBBMjVFQkMgLyogUGF0dGVybkNHLmNwcCAqLywKIAkJCQlCMjc1MzUzNjBCMDUzODE0
MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5jcHAgKi8sCiAJCQkJQjI3NTM1MzcwQjA1Mzgx
NDAwMkNFNjRGIC8qIFBERkRvY3VtZW50SW1hZ2UuaCAqLywKKwkJCQkzNzdBM0E4RjE1RUZDRTlB
MDA1OUY1QzcgLyogUGxhdGZvcm1JbWFnZUNHLmNwcCAqLywKIAkJCQkxRkM0MEZCODE2NTVDNTkx
MDA0MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAgKi8sCiAJCQkJMUZDNDBGQjcx
NjU1QzU5MTAwNDBGMjlFIC8qIFN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCAqLywKIAkJCQlCMjc1
MzUyQTBCMDUzODE0MDAyQ0U2NEYgLyogVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAgKi8sCkBA
IC0yMjExOCw2ICsyMjEyNiw3IEBACiAJCQkJQkVGMjlFRTkxNzE1REQwOTAwQzRCNEM5IC8qIEF1
ZGlvVHJhY2tQcml2YXRlLmggKi8sCiAJCQkJQTg5OTQzMjcwQjQyMzM4NzAwRDdDODAyIC8qIEJp
dG1hcEltYWdlLmNwcCAqLywKIAkJCQlBODk5NDMyNjBCNDIzMzg3MDBEN0M4MDIgLyogQml0bWFw
SW1hZ2UuaCAqLywKKwkJCQk1NTA0RTRDQTFEMzU1MzJEMDBGRTUwODggLyogQml0bWFwUGl4ZWxz
LmggKi8sCiAJCQkJQ0RERTAyRTkxOEIzREZDNzAwQ0Y3RkYxIC8qIENETVNlc3Npb24uaCAqLywK
IAkJCQlCMjc1MzUzODBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3IuY3BwICovLAogCQkJCUIyNzUz
NTM5MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5oICovLApAQCAtMjIyMDIsNiArMjIyMTEsOCBA
QAogCQkJCTQzRDI1OTc2MTNDODE2RjQwMDYwODU1OSAvKiBJbWFnZUJ1ZmZlci5jcHAgKi8sCiAJ
CQkJQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8sCiAJCQkJMjJC
RDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovLAorCQkJCTU1Q0JB
NjlGMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1lRGF0YS5jcHAgKi8sCisJCQkJNTVDQkE2
QTAxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggKi8sCiAJCQkJQkM3RjQ0QTcw
QjlFMzI0RTAwQTlEMDgxIC8qIEltYWdlT2JzZXJ2ZXIuaCAqLywKIAkJCQlBODc0OEQ3NDEyQ0Mz
Rjg5MDAxRkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5jcHAgKi8sCiAJCQkJQTg3NDhENjYxMkND
Mzc2MzAwMUZCQTQxIC8qIEltYWdlT3JpZW50YXRpb24uaCAqLywKQEAgLTIyMjUxLDYgKzIyMjYy
LDcgQEAKIAkJCQkyRDUwMDJGQTFCNTZENzk5MDAyMEFBRjcgLyogUGF0aFV0aWxpdGllcy5oICov
LAogCQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLywKIAkJCQlB
OEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oICovLAorCQkJCTU1NzRGMDg1MUQw
Mjc0NDQwMEI5RjE0QyAvKiBQbGF0Zm9ybUltYWdlLmggKi8sCiAJCQkJMDU2MkY5NjAxNTczRjg4
RjAwMzFDQTE2IC8qIFBsYXRmb3JtTGF5ZXIuaCAqLywKIAkJCQlDRUVGQ0Q3QjE5REIzM0RDMDAz
ODc2RDcgLyogUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmggKi8sCiAJCQkJMDcyODQ3RTIx
NkVCQzVCMDAwNDNDRkE0IC8qIFBsYXRmb3JtVGV4dFRyYWNrLmggKi8sCkBAIC0yNjAxOCw2ICsy
NjAzMCw3IEBACiAJCQkJODVFNzExQjkwQUM1RDUzNTAwNTMyNzBGIC8qIERPTUhUTUxNYXBFbGVt
ZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTE1NzlGMEMwM0JCRDMwMDhCQjBF
RSAvKiBET01IVE1MTWFycXVlZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTE1NkVB
MEMwM0I3NDEwMDhCQjBFRSAvKiBET01IVE1MTWFycXVlZUVsZW1lbnRJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNTU3NEYwODcxRDAyNzkwOTAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTJERUM2NjU1MUM4MkQwNDEwMDk5ODQ2QSAvKiBET01IVE1M
TWVkaWFFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyREVDNjY1MTFDODJEMDE2MDA5OTg0
NkEgLyogRE9NSFRNTE1lZGlhRWxlbWVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NUJBNEQxMzBBQTY4ODY4MDA4ODA1MkQgLyogRE9NSFRNTE1lbnVFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKQEAgLTI2NDU5LDYgKzI2NDcyLDcgQEAKIAkJCQlEMzU5RDc4QTEyOUNBMjcxMDAwNkU1
RDIgLyogSFRNTERldGFpbHNFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEVBNzlGQTBB
MTkxNkRGMDBBOEVGNUYgLyogSFRNTERpcmVjdG9yeUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4RUE3Q0I3MEExOTJCOUMwMEE4RUY1RiAvKiBIVE1MRGl2RWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNTVDQkE2QTIxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEVBNzlGNzBBMTkxNkRGMDBBOEVGNUYgLyogSFRNTERMaXN0
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk4RTUwODI0NUU1OTAwMUU5QUJDIC8q
IEhUTUxEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc3QjM4NjcxMjI4ODNFOTAwQjgx
RkY4IC8qIEhUTUxEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODM1OSw2ICsy
ODM3Myw3IEBACiAJCQkJQjIyMjc5OTMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0FuaW1hdGVNb3Rp
b25FbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk5NTBEMDBCRjIyMDA3MUI3ODIg
LyogU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3
OTk4MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdBbmltYXRpb25FbGVtZW50LmggaW4gSGVhZGVycyAq
LywKKwkJCQk1NTA0RTRDQjFEMzU1N0IyMDBGRTUwODggLyogQml0bWFwUGl4ZWxzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0MzlEMzM0NTEzQTY5MTFDMDBDMjBGNEYgLyogU1ZHQW5pbWF0b3JGYWN0
b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEZCM0Y4NDEzQkM3NTRDMDA5OUZDMTggLyogU1ZH
QXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5OUMwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR0NpcmNsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjk0
MTEsNyArMjk0MjYsNyBAQAogCQkJCUZEQzU0RjA0MTM5OUIwREEwMDhEOTExNyAvKiBCaXF1YWRG
aWx0ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MDI2MTJCMDI2NzYwMEMxQTM1
OSAvKiBCaXF1YWRQcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg5OTQzMjkwQjQy
MzM4ODAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTM3N0Ez
QTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTM3N0EzQTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTc2RDZDNzgxMjJCOEEzRDAwMUZEMUY3IC8qIEJsb2IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMkVERUYxRjMxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JEYXRhLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUUxRDMxQ0RDMTkxOTYwMjAwMDEwMDVBMyAvKiBCbG9iRGF0YUZp
bGVSZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTc3NCw2ICsyOTc4OSw3IEBACiAJ
CQkJMkUyRDk5RTgxMEUyQkMxQzAwNDk2MzM3IC8qIERPTUJsb2IubW0gaW4gU291cmNlcyAqLywK
IAkJCQk4NTA4OUNEODBBOThDNDI4MDBBMjc1QUEgLyogRE9NQ0RBVEFTZWN0aW9uLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJODVBQ0E5ODcwQTlCNTIwMzAwNjcxRTkwIC8qIERPTUNoYXJhY3RlckRh
dGEubW0gaW4gU291cmNlcyAqLywKKwkJCQk1NUNCQTZBMTFEMURGMkUxMDA0NTE4NjAgLyogSW1h
Z2VGcmFtZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODUwODlDREEwQTk4QzQyODAwQTI3
NUFBIC8qIERPTUNvbW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk5NzhEMDdCRTE0NUEwRjZD
MDA5NjkwOEQgLyogRE9NQ29yZUV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NThD
MzhBNjBBQThGMjA0MDBCMTg3QTQgLyogRE9NQ291bnRlci5tbSBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQppbmRleCA0MDExZWEzZmQ4YzA0Njk3NGM1NWQ0OGUz
OTZmMWI4M2I4MWYzMzVkLi5hNWFjNGYwNWFlMzM5YThkNjQ3MDZjMTBmYzBmN2FmNDA0MjU2MjNj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQpAQCAtNjA2LDcgKzYwNiw3IEBAIC0g
KHZvaWQpZ2V0UHJldmlld1NuYXBzaG90SW1hZ2U6KENHSW1hZ2VSZWYqKWNnSW1hZ2UgYW5kUmVj
dHM6KE5TQXJyYXkgKiopcmVjdHMKIAogICAgIGlmICh0ZXh0SW5kaWNhdG9yKSB7CiAgICAgICAg
IGlmIChJbWFnZSogaW1hZ2UgPSB0ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2UoKSkKLSAgICAg
ICAgICAgICpjZ0ltYWdlID0gKENHSW1hZ2VSZWYpQ0ZBdXRvcmVsZWFzZShDR0ltYWdlUmV0YWlu
KGltYWdlLT5nZXRDR0ltYWdlUmVmKCkpKTsKKyAgICAgICAgICAgICpjZ0ltYWdlID0gaW1hZ2Ut
Pm5hdGl2ZUltYWdlKCkuYXV0b3JlbGVhc2UoKTsKICAgICB9CiAKICAgICBSZXRhaW5QdHI8TlNN
dXRhYmxlQXJyYXk+IHJlY3RBcnJheSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdF0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRv
cldpbmRvdy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cu
bW0KaW5kZXggMzY0YTlhODdjZTZmMDY2Mzk0OGI4ODQ2ZThlMmNlNmQxOTBmMjQ4OS4uYTc0ZGE4
NWFjZWNhM2M2Njk4ZGQxNTZhYjMxYTZjOTcxYTM1NGU2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCkBAIC0xNjIsOSArMTYyLDkgQEAgLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSB0ZXh0SW5kaWNhdG9yOihQ
YXNzUmVmUHRyPFRleHRJbmRpY2EKICAgICBjb250ZW50c0ltYWdlTG9naWNhbFNpemUuc2NhbGUo
MSAvIF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VTY2FsZUZhY3RvcigpKTsKICAgICBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZTsKICAgICBpZiAoaW5kaWNhdG9yV2FudHND
b250ZW50Q3Jvc3NmYWRlKCpfdGV4dEluZGljYXRvcikpCi0gICAgICAgIGNvbnRlbnRzSW1hZ2Ug
PSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlV2l0aEhpZ2hsaWdodCgpLT5nZXRDR0ltYWdl
UmVmKCk7CisgICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudElt
YWdlV2l0aEhpZ2hsaWdodCgpLT5uYXRpdmVJbWFnZSgpOwogICAgIGVsc2UKLSAgICAgICAgY29u
dGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2UoKS0+Z2V0Q0dJbWFnZVJl
ZigpOworICAgICAgICBjb250ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFn
ZSgpLT5uYXRpdmVJbWFnZSgpOwogCiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBib3Vu
Y2VMYXllcnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKIApAQCAt
MjY1LDcgKzI2NSw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0FLZXlmcmFtZUFuaW1hdGlvbj4gY3Jl
YXRlQm91bmNlQW5pbWF0aW9uKENGVGltZUludGVydmFsIGR1cmF0CiBzdGF0aWMgUmV0YWluUHRy
PENBQmFzaWNBbmltYXRpb24+IGNyZWF0ZUNvbnRlbnRDcm9zc2ZhZGVBbmltYXRpb24oQ0ZUaW1l
SW50ZXJ2YWwgZHVyYXRpb24sIFRleHRJbmRpY2F0b3ImIHRleHRJbmRpY2F0b3IpCiB7CiAgICAg
UmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGNyb3NzZmFkZUFuaW1hdGlvbiA9IFtDQUJhc2lj
QW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAiY29udGVudHMiXTsKLSAgICBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZSA9IHRleHRJbmRpY2F0b3IuY29udGVudEltYWdl
KCktPmdldENHSW1hZ2VSZWYoKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJ
bWFnZSA9IHRleHRJbmRpY2F0b3IuY29udGVudEltYWdlKCktPm5hdGl2ZUltYWdlKCk7CiAgICAg
W2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRUb1ZhbHVlOihpZCljb250ZW50c0ltYWdlLmdldCgpXTsK
ICAgICBbY3Jvc3NmYWRlQW5pbWF0aW9uIHNldEZpbGxNb2RlOmtDQUZpbGxNb2RlRm9yd2FyZHNd
OwogICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0UmVtb3ZlZE9uQ29tcGxldGlvbjpOT107CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKaW5k
ZXggNDYwZDFiODU2Yjc3YjdjZjRlYzY4OTY1ODFiODMzZDNlN2Y5NzAxNC4uZmM2NDlkMTBhYWI5
YzEzZmZmMjkzMDU1YTcwN2NiNzQ1Mzc0NjkxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcApAQCAtNjgsMTUgKzY4LDEzIEBAIEJpdG1h
cEltYWdlOjpCaXRtYXBJbWFnZShOYXRpdmVJbWFnZVB0ciYmIGltYWdlLCBJbWFnZU9ic2VydmVy
KiBvYnNlcnZlcikKICAgICAsIG1faGF2ZUZyYW1lQ291bnQodHJ1ZSkKICAgICAsIG1fYW5pbWF0
aW9uRmluaXNoZWRXaGVuQ2F0Y2hpbmdVcChmYWxzZSkKIHsKKyAgICBtX2ZyYW1lcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KDEpOworICAgIG1fZnJhbWVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3Zl
KGltYWdlKSk7CisgICAgCiAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhIGRlY29kZXIsIHdl
IGNhbid0IGZpZ3VyZSBvdXQgdGhlIGltYWdlIG9yaWVudGF0aW9uLgogICAgIC8vIFNldCBtX3Np
emVSZXNwZWN0aW5nT3JpZW50YXRpb24gdG8gYmUgdGhlIHNhbWUgYXMgbV9zaXplIHNvIGl0J3Mg
bm90IDB4MC4KLSAgICBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBtX3NpemUgPSBOYXRp
dmVJbWFnZTo6c2l6ZShpbWFnZSk7CisgICAgbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uID0g
bV9zaXplID0gbV9mcmFtZXNbMF0uc2l6ZSgpOwogICAgIG1fZGVjb2RlZFNpemUgPSBtX3NpemUu
YXJlYSgpICogNDsKLSAgICAKLSAgICBtX2ZyYW1lcy5ncm93KDEpOwotICAgIG1fZnJhbWVzWzBd
Lm1faGFzQWxwaGEgPSBOYXRpdmVJbWFnZTo6aGFzQWxwaGEoaW1hZ2UpOwotICAgIG1fZnJhbWVz
WzBdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKLSAgICBtX2ZyYW1lc1swXS5tX2ltYWdlID0gV1RG
TW92ZShpbWFnZSk7CiB9CiAKIEJpdG1hcEltYWdlOjp+Qml0bWFwSW1hZ2UoKQpAQCAtMTA1LDcg
KzEwMyw3IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmhhdmVGcmFtZUltYWdlQXRJbmRleChzaXplX3Qg
aW5kZXgpCiAgICAgaWYgKGluZGV4ID49IG1fZnJhbWVzLnNpemUoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOworICAgIHJldHVy
biBtX2ZyYW1lc1tpbmRleF0uaGFzSW1hZ2UoKTsKIH0KIAogYm9vbCBCaXRtYXBJbWFnZTo6aGFz
U2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdApAQCAtMTI1LDkgKzEyMyw3IEBAIHZvaWQgQml0
bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGRlc3Ryb3lBbGwpCiAgICAgICAgIC8v
IFRoZSB1bmRlcmx5aW5nIGZyYW1lIGlzbid0IGFjdHVhbGx5IGNoYW5naW5nICh3ZSdyZSBqdXN0
IHRyeWluZyB0bwogICAgICAgICAvLyBzYXZlIHRoZSBtZW1vcnkgZm9yIHRoZSBmcmFtZWJ1ZmZl
ciBkYXRhKSwgc28gd2UgZG9uJ3QgbmVlZCB0byBjbGVhcgogICAgICAgICAvLyB0aGUgbWV0YWRh
dGEuCi0gICAgICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMgPSBtX2ZyYW1lc1tpXS5tX2ZyYW1lQnl0
ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1tpXS5jbGVhcihmYWxzZSkpCi0gICAgICAgICAgICBm
cmFtZUJ5dGVzQ2xlYXJlZCArPSBmcmFtZUJ5dGVzOworICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJl
ZCArPSBtX2ZyYW1lc1tpXS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEp
OwogICAgIH0KIAogICAgIG1fc291cmNlLmNsZWFyKGRlc3Ryb3lBbGwsIGNsZWFyQmVmb3JlRnJh
bWUsIGRhdGEoKSwgbV9hbGxEYXRhUmVjZWl2ZWQpOwpAQCAtMTUwLDggKzE0Niw4IEBAIHZvaWQg
Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KGJvb2wgZGVzdHJveUFs
bCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgYWxsRnJhbWVCeXRlcyA9IDA7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAg
YWxsRnJhbWVCeXRlcyArPSBtX2ZyYW1lc1tpXS51c2VkRnJhbWVCeXRlcygpOworICAgIGZvciAo
YXV0byYgZnJhbWUgOiBtX2ZyYW1lcykKKyAgICAgICAgYWxsRnJhbWVCeXRlcyArPSBmcmFtZS5m
cmFtZUJ5dGVzKCk7CiAKICAgICBpZiAoYWxsRnJhbWVCeXRlcyA+IGxhcmdlQW5pbWF0aW9uQ3V0
b2ZmKSB7CiAgICAgICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZSAlcCBkZXN0cm95RGVjb2Rl
ZERhdGFJZk5lY2Vzc2FyeSBkZXN0cm95aW5nRGF0YTogYWxsRnJhbWVCeXRlcz0ldSBjdXRvZmY9
JXUiLCB0aGlzLCBhbGxGcmFtZUJ5dGVzLCBsYXJnZUFuaW1hdGlvbkN1dG9mZik7CkBAIC0xNzcs
NyArMTczLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJveU1ldGFkYXRhQW5kTm90aWZ5KHVu
c2lnbmVkIGZyYW1lQnl0ZXNDbGVhcmVkLCBDbGVhcmVkU28KICAgICAgICAgaW1hZ2VPYnNlcnZl
cigpLT5kZWNvZGVkU2l6ZUNoYW5nZWQodGhpcywgLXNhZmVDYXN0PGludD4oZnJhbWVCeXRlc0Ns
ZWFyZWQpKTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgs
IFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZUNhY2hpbmcgZnJh
bWVDYWNoaW5nKQordm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgsIFN1
YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcg
Y2FjaGluZykKIHsKICAgICBzaXplX3QgbnVtRnJhbWVzID0gZnJhbWVDb3VudCgpOwogICAgIEFT
U0VSVChtX2RlY29kZWRTaXplID09IDAgfHwgbnVtRnJhbWVzID4gMSk7CkBAIC0xODUsMjUgKzE4
MSwxMiBAQCB2b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vic2Ft
cGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbQogICAgIGlmIChtX2ZyYW1lcy5zaXplKCkg
PCBudW1GcmFtZXMpCiAgICAgICAgIG1fZnJhbWVzLmdyb3cobnVtRnJhbWVzKTsKIAotICAgIGlm
IChmcmFtZUNhY2hpbmcgPT0gQ2FjaGVNZXRhZGF0YUFuZEZyYW1lKSB7Ci0gICAgICAgIG1fZnJh
bWVzW2luZGV4XS5tX2ltYWdlID0gbV9zb3VyY2UuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5k
ZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOwotICAgICAgICBtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1w
bGluZ0xldmVsID0gc3Vic2FtcGxpbmdMZXZlbDsKLSAgICB9Ci0KLSAgICBtX2ZyYW1lc1tpbmRl
eF0ubV9vcmllbnRhdGlvbiA9IG1fc291cmNlLm9yaWVudGF0aW9uQXRJbmRleChpbmRleCk7Ci0g
ICAgbV9mcmFtZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKLSAgICBtX2ZyYW1lc1tp
bmRleF0ubV9pc0NvbXBsZXRlID0gbV9zb3VyY2UuZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRl
eCk7CisgICAgbV9mcmFtZXNbaW5kZXhdID0gbV9zb3VyY2UuY3JlYXRlRnJhbWVEYXRhQXRJbmRl
eChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgY2FjaGluZyk7CiAKLSAgICBpZiAocmVwZXRpdGlv
bkNvdW50KGZhbHNlKSAhPSBjQW5pbWF0aW9uTm9uZSkKLSAgICAgICAgbV9mcmFtZXNbaW5kZXhd
Lm1fZHVyYXRpb24gPSBtX3NvdXJjZS5mcmFtZUR1cmF0aW9uQXRJbmRleChpbmRleCk7CisgICAg
TE9HKEltYWdlcywgIkJpdG1hcEltYWdlICVwIGNhY2hlRnJhbWUgJWx1ICglcyV1IGJ5dGVzLCBj
b21wbGV0ZSAlZCkiLCB0aGlzLCBpbmRleCwgY2FjaGluZyA9PSBJbWFnZUZyYW1lRGF0YTo6Q2Fj
aGluZzo6TWV0YWRhdGEgPyAibWV0YWRhdGEgb25seSwgIiA6ICIiLCBtX2ZyYW1lc1tpbmRleF0u
ZnJhbWVCeXRlcygpLCBtX2ZyYW1lc1tpbmRleF0uaXNDb21wbGV0ZSgpKTsKIAotICAgIG1fZnJh
bWVzW2luZGV4XS5tX2hhc0FscGhhID0gbV9zb3VyY2UuZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5k
ZXgpOwotICAgIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXMgPSBtX3NvdXJjZS5mcmFtZUJ5
dGVzQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7Ci0KLSAgICBMT0coSW1hZ2VzLCAi
Qml0bWFwSW1hZ2UgJXAgY2FjaGVGcmFtZSAlbHUgKCVzJXUgYnl0ZXMsIGNvbXBsZXRlICVkKSIs
IHRoaXMsIGluZGV4LCBmcmFtZUNhY2hpbmcgPT0gQ2FjaGVNZXRhZGF0YU9ubHkgPyAibWV0YWRh
dGEgb25seSwgIiA6ICIiLCBtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZUJ5dGVzLCBtX2ZyYW1lc1tp
bmRleF0ubV9pc0NvbXBsZXRlKTsKLQotICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkg
ewotICAgICAgICBpbnQgZGVsdGFCeXRlcyA9IHNhZmVDYXN0PGludD4obV9mcmFtZXNbaW5kZXhd
Lm1fZnJhbWVCeXRlcyk7CisgICAgaWYgKG1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpKSB7Cisg
ICAgICAgIGludCBkZWx0YUJ5dGVzID0gc2FmZUNhc3Q8aW50PihtX2ZyYW1lc1tpbmRleF0uZnJh
bWVCeXRlcygpKTsKICAgICAgICAgbV9kZWNvZGVkU2l6ZSArPSBkZWx0YUJ5dGVzOwogICAgICAg
ICAvLyBUaGUgZnVsbHktZGVjb2RlZCBmcmFtZSB3aWxsIHN1YnN1bWUgdGhlIHBhcnRpYWxseSBk
ZWNvZGVkIGRhdGEgdXNlZAogICAgICAgICAvLyB0byBkZXRlcm1pbmUgaW1hZ2UgcHJvcGVydGll
cy4KQEAgLTI4OCwyMSArMjcxLDE5IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKGJv
b2wgYWxsRGF0YVJlY2VpdmVkKQogICAgIC8vIGZyYW1lIGFmZmVjdGVkIGJ5IGFwcGVuZGluZyBu
ZXcgZGF0YSBoZXJlLiBUaHVzIHdlIGhhdmUgdG8gY2xlYXIgYWxsIHRoZQogICAgIC8vIGluY29t
cGxldGUgZnJhbWVzIHRvIGJlIHNhZmUuCiAgICAgdW5zaWduZWQgZnJhbWVCeXRlc0NsZWFyZWQg
PSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmFtZXMuc2l6ZSgpOyArK2kpIHsK
KyAgICBmb3IgKGF1dG8mIGZyYW1lIDogbV9mcmFtZXMpIHsKICAgICAgICAgLy8gTk9URTogRG9u
J3QgY2FsbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KCkgaGVyZSwgdGhhdCB3aWxsIHRyeSB0bwog
ICAgICAgICAvLyBkZWNvZGUgYW55IHVuY2FjaGVkIChpLmUuIG5ldmVyLWRlY29kZWQgb3IKICAg
ICAgICAgLy8gY2xlYXJlZC1vbi1hLXByZXZpb3VzLXBhc3MpIGZyYW1lcyEKLSAgICAgICAgdW5z
aWduZWQgZnJhbWVCeXRlcyA9IG1fZnJhbWVzW2ldLm1fZnJhbWVCeXRlczsKLSAgICAgICAgaWYg
KG1fZnJhbWVzW2ldLm1faGF2ZU1ldGFkYXRhICYmICFtX2ZyYW1lc1tpXS5tX2lzQ29tcGxldGUp
Ci0gICAgICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSAobV9mcmFtZXNbaV0uY2xlYXIodHJ1
ZSkgPyBmcmFtZUJ5dGVzIDogMCk7CisgICAgICAgIGlmIChmcmFtZS5oYXNNZXRhZGF0YSgpICYm
ICFmcmFtZS5pc0NvbXBsZXRlKCkpCisgICAgICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSBm
cmFtZS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6RW1wdHkpOwogICAgIH0KICAgICBk
ZXN0cm95TWV0YWRhdGFBbmROb3RpZnkoZnJhbWVCeXRlc0NsZWFyZWQsIENsZWFyZWRTb3VyY2U6
Ok5vKTsKICNlbHNlCiAgICAgLy8gRklYTUU6IHdoeSBpcyB0aGlzIGRpZmZlcmVudCBmb3IgaU9T
PwogICAgIGludCBkZWx0YUJ5dGVzID0gMDsKICAgICBpZiAoIW1fZnJhbWVzLmlzRW1wdHkoKSkg
ewotICAgICAgICBpbnQgYnl0ZXMgPSBtX2ZyYW1lc1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5tX2Zy
YW1lQnl0ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5jbGVh
cih0cnVlKSkgeworICAgICAgICBpZiAoaW50IGJ5dGVzID0gbV9mcmFtZXNbbV9mcmFtZXMuc2l6
ZSgpIC0gMV0uY2xlYXIoSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6OkVtcHR5KSkgewogICAgICAg
ICAgICAgZGVsdGFCeXRlcyArPSBieXRlczsKICAgICAgICAgICAgIGRlbHRhQnl0ZXMgKz0gbV9k
ZWNvZGVkUHJvcGVydGllc1NpemU7CiAgICAgICAgICAgICBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6
ZSA9IDA7CkBAIC0zNjYsMTUgKzM0NywxNSBAQCBib29sIEJpdG1hcEltYWdlOjppc1NpemVBdmFp
bGFibGUoKQogICAgIHJldHVybiBtX3NpemVBdmFpbGFibGU7CiB9CiAKLWJvb2wgQml0bWFwSW1h
Z2U6OmVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4LCBJbWFnZUZyYW1lQ2FjaGluZyBm
cmFtZUNhY2hpbmcpCitib29sIEJpdG1hcEltYWdlOjplbnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVf
dCBpbmRleCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgY2FjaGluZykKIHsKICAgICBpZiAoaW5k
ZXggPj0gZnJhbWVDb3VudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoaW5k
ZXggPj0gbV9mcmFtZXMuc2l6ZSgpCi0gICAgICAgIHx8IChmcmFtZUNhY2hpbmcgPT0gQ2FjaGVN
ZXRhZGF0YUFuZEZyYW1lICYmICFtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKLSAgICAgICAgfHwg
KGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhT25seSAmJiAhbV9mcmFtZXNbaW5kZXhdLm1f
aGF2ZU1ldGFkYXRhKSkKLSAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgMCwgZnJhbWVDYWNoaW5n
KTsKKyAgICAgICAgfHwgKGNhY2hpbmcgPT0gSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFk
YXRhQW5kSW1hZ2UgJiYgIW1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpKQorICAgICAgICB8fCAo
Y2FjaGluZyA9PSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEgJiYgIW1fZnJhbWVz
W2luZGV4XS5oYXNNZXRhZGF0YSgpKSkKKyAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgMCwgY2Fj
aGluZyk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM4OCwxMCArMzY5LDkgQEAgTmF0aXZl
SW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgZmxv
YXQgcHJlc2VudGF0aW9uU2MKIAogICAgIC8vIFdlIG1heSBoYXZlIGNhY2hlZCBhIGZyYW1lIHdp
dGggYSBoaWdoZXIgc3Vic2FtcGxpbmcgbGV2ZWwsIGluIHdoaWNoIGNhc2Ugd2UgbmVlZCB0bwog
ICAgIC8vIHJlLWRlY29kZSB3aXRoIGEgbG93ZXIgbGV2ZWwuCi0gICAgaWYgKGluZGV4IDwgbV9m
cmFtZXMuc2l6ZSgpICYmIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlICYmIHN1YnNhbXBsaW5nTGV2
ZWwgPCBtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1wbGluZ0xldmVsKSB7CisgICAgaWYgKGluZGV4
IDwgbV9mcmFtZXMuc2l6ZSgpICYmIG1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpICYmIHN1YnNh
bXBsaW5nTGV2ZWwgPCBtX2ZyYW1lc1tpbmRleF0uc3Vic2FtcGxpbmdMZXZlbCgpKSB7CiAgICAg
ICAgIC8vIElmIHRoZSBpbWFnZSBpcyBhbHJlYWR5IGNhY2hlZCwgYnV0IGF0IHRvbyBzbWFsbCBh
IHNpemUsIHJlLWRlY29kZSBhIGxhcmdlciB2ZXJzaW9uLgotICAgICAgICBpbnQgc2l6ZUNoYW5n
ZSA9IC1tX2ZyYW1lc1tpbmRleF0ubV9mcmFtZUJ5dGVzOwotICAgICAgICBtX2ZyYW1lc1tpbmRl
eF0uY2xlYXIodHJ1ZSk7CisgICAgICAgIGludCBzaXplQ2hhbmdlID0gLW1fZnJhbWVzW2luZGV4
XS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6RW1wdHkpOwogICAgICAgICBpbnZhbGlk
YXRlUGxhdGZvcm1EYXRhKCk7CiAgICAgICAgIG1fZGVjb2RlZFNpemUgKz0gc2l6ZUNoYW5nZTsK
ICAgICAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKQEAgLTM5OSw0MCArMzc5LDcyIEBAIE5hdGl2
ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIGZs
b2F0IHByZXNlbnRhdGlvblNjCiAgICAgfQogCiAgICAgLy8gSWYgd2UgaGF2ZW4ndCBmZXRjaGVk
IGEgZnJhbWUgeWV0LCBkbyBzby4KLSAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8
ICFtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKLSAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgc3Vi
c2FtcGxpbmdMZXZlbCwgQ2FjaGVNZXRhZGF0YUFuZEZyYW1lKTsKKyAgICBpZiAoaW5kZXggPj0g
bV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0uaGFzSW1hZ2UoKSkKKyAgICAgICAg
Y2FjaGVGcmFtZShpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hp
bmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOworCisgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5pbWFn
ZSgpOworfQorICAgIAorTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKCkK
K3sKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCk7Cit9CisgICAgCitOYXRpdmVJbWFn
ZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkK
K3sKKyAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7CisgICAgCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGF1dG8gaW1hZ2UgPSBmcmFtZUlt
YWdlQXRJbmRleChpKTsKKyAgICAgICAgaWYgKGltYWdlICYmIFBsYXRmb3JtSW1hZ2UoaW1hZ2Up
LnNpemUoKSA9PSBzaXplKQorICAgICAgICAgICAgcmV0dXJuIGltYWdlOworICAgIH0KKyAgICAK
KyAgICAvLyBGYWxsYmFjayB0byB0aGUgZmlyc3QgZnJhbWUgaW1hZ2UgaWYgd2UgY2FuJ3QgZmlu
ZCB0aGUgcmlnaHQgc2l6ZQorICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKTsKK30KKyAg
ICAKK05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpCit7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKK30K
IAotICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZTsKK1ZlY3RvcjxOYXRpdmVJbWFn
ZVB0cj4gQml0bWFwSW1hZ2U6OmZyYW1lc05hdGl2ZUltYWdlcygpCit7CisgICAgVmVjdG9yPE5h
dGl2ZUltYWdlUHRyPiBpbWFnZXM7CisgICAgc2l6ZV90IGNvdW50ID0gZnJhbWVDb3VudCgpOwor
ICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBp
ZiAoYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpKQorICAgICAgICAgICAgaW1hZ2Vz
LmFwcGVuZChpbWFnZSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBpbWFnZXM7CiB9CiAKIGJv
b2wgQml0bWFwSW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogewot
ICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQor
ICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hp
bmc6Ok1ldGFkYXRhKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG1fZnJh
bWVzW2luZGV4XS5tX2lzQ29tcGxldGU7CisgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5pc0Nv
bXBsZXRlKCk7CiB9CiAKIGZsb2F0IEJpdG1hcEltYWdlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChz
aXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBDYWNo
ZU1ldGFkYXRhT25seSkpCisgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBJbWFn
ZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEpKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9kdXJhdGlvbjsKLX0KLQotTmF0aXZlSW1hZ2VQdHIg
Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKLXsKLSAgICByZXR1cm4g
ZnJhbWVJbWFnZUF0SW5kZXgoY3VycmVudEZyYW1lKCkpOworICAgIHJldHVybiBtX2ZyYW1lc1tp
bmRleF0uZHVyYXRpb24oKTsKIH0KIAogYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVIYXNBbHBoYUF0
SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRl
eCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQorICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRl
eCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBpZiAobV9mcmFtZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRhKQotICAgICAgICBy
ZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faGFzQWxwaGE7CisgICAgaWYgKG1fZnJhbWVzW2luZGV4
XS5oYXNNZXRhZGF0YSgpKQorICAgICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLmhhc0FscGhh
KCk7CiAKICAgICByZXR1cm4gbV9zb3VyY2UuZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5kZXgpOwog
fQpAQCAtNDQ0LDExICs0NTYsMTEgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Y3VycmVudEZyYW1lS25v
d25Ub0JlT3BhcXVlKCkKIAogSW1hZ2VPcmllbnRhdGlvbiBCaXRtYXBJbWFnZTo6ZnJhbWVPcmll
bnRhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICghZW5zdXJlRnJhbWVJc0Nh
Y2hlZChpbmRleCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQorICAgIGlmICghZW5zdXJlRnJhbWVJc0Nh
Y2hlZChpbmRleCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhKSkKICAgICAgICAg
cmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsKIAotICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9o
YXZlTWV0YWRhdGEpCi0gICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9vcmllbnRhdGlv
bjsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhdLmhhc01ldGFkYXRhKCkpCisgICAgICAgIHJldHVy
biBtX2ZyYW1lc1tpbmRleF0ub3JpZW50YXRpb24oKTsKIAogICAgIHJldHVybiBtX3NvdXJjZS5v
cmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOwogfQpAQCAtNzAwLDE3ICs3MTIsNTYgQEAgQ29sb3Ig
Qml0bWFwSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcigpCiAgICAgICAgIHJldHVybiBDb2xv
cigpOwogICAgIAogICAgIEFTU0VSVChtX2ZyYW1lcy5zaXplKCkpOwotICAgIG1fc29saWRDb2xv
ciA9IE5hdGl2ZUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IobV9mcmFtZXNbMF0ubV9pbWFn
ZS5nZXQoKSk7CisgICAgbV9zb2xpZENvbG9yID0gbV9mcmFtZXNbMF0uc2luZ2xlUGl4ZWxTb2xp
ZENvbG9yKCk7CiAgICAgCiAgICAgQVNTRVJUKG1fc29saWRDb2xvcik7CiAgICAgcmV0dXJuIG1f
c29saWRDb2xvci52YWx1ZSgpOwogfQogICAgIAorYm9vbCBCaXRtYXBJbWFnZTo6aXNBbG1vc3RT
b2xpZENvbG9yKCkKK3sKKyAgICBpZiAoZnJhbWVDb3VudCgpICE9IDEpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiBlbnN1cmVGcmFtZUlzQ2FjaGVkKDApICYmIG1fZnJhbWVz
WzBdLmlzQWxtb3N0U29saWRDb2xvcigpOworfQorICAgIAogYm9vbCBCaXRtYXBJbWFnZTo6Y2Fu
QW5pbWF0ZSgpCiB7CiAgICAgcmV0dXJuIHNob3VsZEFuaW1hdGUoKSAmJiBmcmFtZUNvdW50KCkg
PiAxOwogfQogCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBD
b21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUsIEltYWdlT3JpZW50YXRpb25EZXNj
cmlwdGlvbiBkZXNjcmlwdGlvbikKK3sKKyAgICBpZiAoZGVzdFJlY3QuaXNFbXB0eSgpIHx8IHNy
Y1JlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgc3RhcnRBbmltYXRpb24oRG9Ob3RDYXRjaFVwKTsKKyNlbHNlCisgICAgc3RhcnRBbmltYXRp
b24oKTsKKyNlbmRpZgorICAgIAorICAgIENvbG9yIGNvbG9yID0gc2luZ2xlUGl4ZWxTb2xpZENv
bG9yKCk7CisgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICBmaWxsV2l0aFNvbGlk
Q29sb3IoY29udGV4dCwgZGVzdFJlY3QsIGNvbG9yLCBvcCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZy
YW1lLCBQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKGNvbnRleHQsIGRlc3RSZWN0LCBz
cmNSZWN0KSk7CisgICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3Qg
aGF2ZSBhbiBpbWFnZSB5ZXQuCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBJbWFnZU9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKGRlc2NyaXB0aW9uLmltYWdlT3JpZW50YXRpb24oKSk7CisgICAg
aWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdl
T3JpZW50YXRpb24pCisgICAgICAgIG9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5k
ZXgobV9jdXJyZW50RnJhbWUpOworICAgIAorICAgIFBsYXRmb3JtSW1hZ2UoaW1hZ2UpLmRyYXco
Y29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG1fc2l6ZSwgb3AsIG1vZGUsIG9yaWVudGF0aW9u
KTsKKyAgICAKKyAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQorICAgICAgICBpbWFnZU9ic2VydmVy
KCktPmRpZERyYXcodGhpcyk7Cit9CisgICAgCiB2b2lkIEJpdG1hcEltYWdlOjpkdW1wKFRleHRT
dHJlYW0mIHRzKSBjb25zdAogewogICAgIEltYWdlOjpkdW1wKHRzKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCmluZGV4IDA3NTg5MjljZDg3ZmFk
YWNmMDJiNmVkOGVlYWZlN2RlZmQ2NmYwYzUuLjIyMThjODI0YjUyOGZkNjM5YmFiMTM4ZGVjYzk4
Yjk4MTZhMTY4MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuaApAQCAtMjgsMTEgKzI4LDEzIEBACiAjaWZuZGVmIEJpdG1hcEltYWdlX2gKICNk
ZWZpbmUgQml0bWFwSW1hZ2VfaAogCi0jaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJDb2xv
ci5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2VGcmFtZURhdGEuaCIKICNp
bmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKICNp
bmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgogCiAjaWYgVVNF
KENHKSB8fCBVU0UoQVBQS0lUKQogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTQ3LDYz
ICs0OSw5IEBAIHR5cGVkZWYgc3RydWN0IEhCSVRNQVBfXyAqSEJJVE1BUDsKICNlbmRpZgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgc3RydWN0IEZyYW1lRGF0YTsKLX0KLQotbmFtZXNwYWNl
IFdURiB7Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgVmVjdG9yVHJhaXRzPFdlYkNvcmU6OkZyYW1l
RGF0YT4gOiBwdWJsaWMgU2ltcGxlQ2xhc3NWZWN0b3JUcmFpdHMgewotICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBjYW5Jbml0aWFsaXplV2l0aE1lbXNldCA9IGZhbHNlOyAvLyBOb3QgYWxsIEZy
YW1lRGF0YSBtZW1iZXJzIGluaXRpYWxpemUgdG8gMC4KLSAgICB9OwotfQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIFRpbWVyOwogCi1uYW1lc3BhY2UgTmF0aXZlSW1hZ2UgewotICAg
IEludFNpemUgc2l6ZShjb25zdCBOYXRpdmVJbWFnZVB0ciYpOwotICAgIGJvb2wgaGFzQWxwaGEo
Y29uc3QgTmF0aXZlSW1hZ2VQdHImKTsKLSAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3Io
Y29uc3QgTmF0aXZlSW1hZ2VQdHImKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBGcmFtZURhdGEgQ2xhc3MKLS8vID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdHJ1Y3QgRnJhbWVE
YXRhIHsKLXB1YmxpYzoKLSAgICBGcmFtZURhdGEoKQotICAgICAgICA6IG1faGF2ZU1ldGFkYXRh
KGZhbHNlKQotICAgICAgICAsIG1faXNDb21wbGV0ZShmYWxzZSkKLSAgICAgICAgLCBtX2hhc0Fs
cGhhKHRydWUpCi0gICAgewotICAgIH0KLQotICAgIH5GcmFtZURhdGEoKQotICAgIHsgCi0gICAg
ICAgIGNsZWFyKHRydWUpOwotICAgIH0KLQotICAgIC8vIENsZWFyIHRoZSBjYWNoZWQgaW1hZ2Ug
ZGF0YSBvbiB0aGUgZnJhbWUsIGFuZCAob3B0aW9uYWxseSkgdGhlIG1ldGFkYXRhLgotICAgIC8v
IFJldHVybnMgd2hldGhlciB0aGVyZSB3YXMgY2FjaGVkIGltYWdlIGRhdGEgdG8gY2xlYXIuCi0g
ICAgYm9vbCBjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpOwotICAgIAotICAgIHVuc2lnbmVkIHVz
ZWRGcmFtZUJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZSA/IG1fZnJhbWVCeXRlcyA6IDA7
IH0KLQotICAgIE5hdGl2ZUltYWdlUHRyIG1faW1hZ2U7Ci0gICAgSW1hZ2VPcmllbnRhdGlvbiBt
X29yaWVudGF0aW9uIHsgRGVmYXVsdEltYWdlT3JpZW50YXRpb24gfTsKLSAgICBTdWJzYW1wbGlu
Z0xldmVsIG1fc3Vic2FtcGxpbmdMZXZlbCB7IDAgfTsKLSAgICBmbG9hdCBtX2R1cmF0aW9uIHsg
MCB9OwotICAgIGJvb2wgbV9oYXZlTWV0YWRhdGEgOiAxOwotICAgIGJvb2wgbV9pc0NvbXBsZXRl
IDogMTsKLSAgICBib29sIG1faGFzQWxwaGEgOiAxOwotICAgIHVuc2lnbmVkIG1fZnJhbWVCeXRl
cyB7IDAgfTsKLX07Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS8vIEJpdG1hcEltYWdlIENsYXNzCi0vLyA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KIGNsYXNzIEJpdG1hcEltYWdlIGZpbmFs
IDogcHVibGljIEltYWdlIHsKICAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7CiAgICAg
ZnJpZW5kIGNsYXNzIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOwpAQCAtMTU1LDEyICsxMDMsNiBA
QCBwdWJsaWM6CiAgICAgQ0ZEYXRhUmVmIGdldFRJRkZSZXByZXNlbnRhdGlvbigpIG92ZXJyaWRl
OwogI2VuZGlmCiAKLSNpZiBVU0UoQ0cpCi0gICAgV0VCQ09SRV9FWFBPUlQgQ0dJbWFnZVJlZiBn
ZXRDR0ltYWdlUmVmKCkgb3ZlcnJpZGU7Ci0gICAgQ0dJbWFnZVJlZiBnZXRGaXJzdENHSW1hZ2VS
ZWZPZlNpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwotICAgIFJldGFpblB0cjxDRkFycmF5
UmVmPiBnZXRDR0ltYWdlQXJyYXkoKSBvdmVycmlkZTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0o
V0lOKQogICAgIGJvb2wgZ2V0SEJJVE1BUChIQklUTUFQKSBvdmVycmlkZTsKICAgICBib29sIGdl
dEhCSVRNQVBPZlNpemUoSEJJVE1BUCwgY29uc3QgSW50U2l6ZSopIG92ZXJyaWRlOwpAQCAtMTc0
LDggKzExNiwxMyBAQCBwdWJsaWM6CiAgICAgRXZhc19PYmplY3QqIGdldEV2YXNPYmplY3QoRXZh
cyopIG92ZXJyaWRlOwogI2VuZGlmCiAKKyAgICBXRUJDT1JFX0VYUE9SVCBOYXRpdmVJbWFnZVB0
ciBuYXRpdmVJbWFnZSgpIG92ZXJyaWRlOworICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdl
T2ZTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKICAgICBOYXRpdmVJbWFnZVB0ciBuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIG92ZXJyaWRlOwogICAgIEltYWdlT3JpZW50YXRpb24g
b3JpZW50YXRpb25Gb3JDdXJyZW50RnJhbWUoKSBvdmVycmlkZSB7IHJldHVybiBmcmFtZU9yaWVu
dGF0aW9uQXRJbmRleChjdXJyZW50RnJhbWUoKSk7IH0KKyAgICBWZWN0b3I8TmF0aXZlSW1hZ2VQ
dHI+IGZyYW1lc05hdGl2ZUltYWdlcygpIG92ZXJyaWRlOworICAgIAorICAgIFdFQkNPUkVfRVhQ
T1JUIGJvb2wgaXNBbG1vc3RTb2xpZENvbG9yKCk7CiAKICAgICBib29sIGN1cnJlbnRGcmFtZUtu
b3duVG9CZU9wYXF1ZSgpIG92ZXJyaWRlOwogCkBAIC0yMTUsNyArMTYyLDYgQEAgcHJvdGVjdGVk
OgogICAgIHNpemVfdCBmcmFtZUNvdW50KCk7CiAKICAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUlt
YWdlQXRJbmRleChzaXplX3QsIGZsb2F0IHByZXNlbnRhdGlvblNjYWxlSGludCA9IDEpOwotICAg
IE5hdGl2ZUltYWdlUHRyIGNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCk7CiAK
ICAgICBib29sIGhhdmVGcmFtZUltYWdlQXRJbmRleChzaXplX3QpOwogCkBAIC0yMjUsMTEgKzE3
MSwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBmcmFtZU9yaWVudGF0aW9u
QXRJbmRleChzaXplX3QpOwogCiAgICAgLy8gRGVjb2RlcyBhbmQgY2FjaGVzIGEgZnJhbWUuIE5l
dmVyIGFjY2Vzc2VkIGV4Y2VwdCBpbnRlcm5hbGx5LgotICAgIGVudW0gSW1hZ2VGcmFtZUNhY2hp
bmcgeyBDYWNoZU1ldGFkYXRhT25seSwgQ2FjaGVNZXRhZGF0YUFuZEZyYW1lIH07Ci0gICAgdm9p
ZCBjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZUNh
Y2hpbmcgPSBDYWNoZU1ldGFkYXRhQW5kRnJhbWUpOworICAgIHZvaWQgY2FjaGVGcmFtZShzaXpl
X3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nID0gSW1h
Z2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOwogCiAgICAgLy8gQ2FsbGVk
IGJlZm9yZSBhY2Nlc3NpbmcgbV9mcmFtZXNbaW5kZXhdIGZvciBpbmZvIHdpdGhvdXQgZGVjb2Rp
bmcuIFJldHVybnMgZmFsc2Ugb24gaW5kZXggb3V0IG9mIGJvdW5kcy4KLSAgICBib29sIGVuc3Vy
ZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4LCBJbWFnZUZyYW1lQ2FjaGluZyA9IENhY2hlTWV0
YWRhdGFBbmRGcmFtZSk7CisgICAgYm9vbCBlbnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVfdCBpbmRl
eCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgPSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0
YWRhdGFBbmRJbWFnZSk7CiAKICAgICAvLyBDYWxsZWQgdG8gaW52YWxpZGF0ZSBjYWNoZWQgZGF0
YS4gV2hlbiB8ZGVzdHJveUFsbHwgaXMgdHJ1ZSwgd2Ugd2lwZSBvdXQKICAgICAvLyB0aGUgZW50
aXJlIGZyYW1lIGJ1ZmZlciBjYWNoZSBhbmQgdGVsbCB0aGUgaW1hZ2Ugc291cmNlIHRvIGRlc3Ry
b3kKQEAgLTI5Miw3ICsyMzcsNyBAQCBwcml2YXRlOgogICAgIG11dGFibGUgSW50U2l6ZSBtX3Np
emVSZXNwZWN0aW5nT3JpZW50YXRpb247CiAKICAgICBzaXplX3QgbV9jdXJyZW50RnJhbWUgeyAw
IH07IC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBmcmFtZSBvZiBhbmltYXRpb24uCi0gICAg
VmVjdG9yPEZyYW1lRGF0YSwgMT4gbV9mcmFtZXM7IC8vIEFuIGFycmF5IG9mIHRoZSBjYWNoZWQg
ZnJhbWVzIG9mIHRoZSBhbmltYXRpb24uIFdlIGhhdmUgdG8gcmVmIGZyYW1lcyB0byBwaW4gdGhl
bSBpbiB0aGUgY2FjaGUuCisgICAgVmVjdG9yPEltYWdlRnJhbWVEYXRhLCAxPiBtX2ZyYW1lczsg
Ly8gQW4gYXJyYXkgb2YgdGhlIGNhY2hlZCBmcmFtZXMgb2YgdGhlIGFuaW1hdGlvbi4gV2UgaGF2
ZSB0byByZWYgZnJhbWVzIHRvIHBpbiB0aGVtIGluIHRoZSBjYWNoZS4KIAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxUaW1lcj4gbV9mcmFtZVRpbWVyOwogICAgIGludCBtX3JlcGV0aXRpb25Db3VudCB7
IGNBbmltYXRpb25Ob25lIH07IC8vIEhvdyBtYW55IHRvdGFsIGFuaW1hdGlvbiBsb29wcyB3ZSBz
aG91bGQgZG8uIFRoaXMgd2lsbCBiZSBjQW5pbWF0aW9uTm9uZSBpZiB0aGlzIGltYWdlIHR5cGUg
aXMgaW5jYXBhYmxlIG9mIGFuaW1hdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwUGl4ZWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTY4MWU0YTZjNGNjMDlmZTk0YmRk
ODE0NWQxMDRiZjBiZmQyZTlmMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oCkBAIC0wLDAgKzEsMTczIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6
ZS5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQml0bWFwUGl4ZWxzIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gY3JlYXRlKGNvbnN0
IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPEJpdG1hcFBpeGVscz4oc2l6ZSwgcHJlbXVsdGlwbHlBbHBo
YSk7CisgICAgfQorCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxCaXRtYXBQaXhlbHM+IGNy
ZWF0ZShjb25zdCBCaXRtYXBQaXhlbHMmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8Qml0bWFwUGl4ZWxzPihvdGhlcik7CisgICAgfQorCisgICAgQml0bWFw
UGl4ZWxzKGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSA9IHRydWUp
CisgICAgICAgIDogbV9wcmVtdWx0aXBseUFscGhhKHByZW11bHRpcGx5QWxwaGEpCisgICAgewor
ICAgICAgICBBU1NFUlQoIXNpemUuaXNFbXB0eSgpKTsKKyAgICAgICAgc2V0U2l6ZShzaXplKTsK
KyAgICB9CisKKyAgICBCaXRtYXBQaXhlbHMoY29uc3QgQml0bWFwUGl4ZWxzJiBvdGhlcikKKyAg
ICB7CisgICAgICAgIGlmICh0aGlzID09ICZvdGhlcikKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgICAgIG1fYmFja2luZ1N0b3JlID0gb3RoZXIubV9iYWNraW5nU3RvcmU7Cisg
ICAgICAgIG1fcGl4ZWxzID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOworICAgICAgICBtX3NpemUg
PSBvdGhlci5tX3NpemU7CisgICAgICAgIG1fcHJlbXVsdGlwbHlBbHBoYSA9IG90aGVyLm1fcHJl
bXVsdGlwbHlBbHBoYTsKKyAgICB9CisKKyAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBt
X3NpemUud2lkdGgoKTsgfQorICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUu
aGVpZ2h0KCk7IH0KKworICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlKCkgY29uc3Q7CisKKyAgICBi
b29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAgIGlmICghbV9i
YWNraW5nU3RvcmUudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUuYXJlYSgpKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIG1fYmFja2luZ1N0b3JlLnJlc2l6ZShz
aXplLmFyZWEoKSk7CisgICAgICAgIG1fcGl4ZWxzID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOwor
ICAgICAgICBtX3NpemUgPSBzaXplOworICAgICAgICBjbGVhcigpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBSR0JBMzIqIGF0KGludCB4LCBpbnQgeSkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3BpeGVscyArIHkgKiBtX3NpemUud2lkdGgoKSArIHg7CisgICAg
fQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtZW1zZXQobV9waXhlbHMsIDAs
IG1fc2l6ZS5hcmVhKCkgKiBzaXplb2YoUkdCQTMyKSk7CisgICAgfQorCisgICAgdm9pZCBjbGVh
clJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIGlmIChyZWN0LmlzRW1w
dHkoKSB8fCBpbkJvdW5kcyhyZWN0KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgIHNpemVfdCByZWN0V2lkdGhJbkJ5dGVzID0gcmVjdC53aWR0aCgpICogc2l6ZW9mKFJH
QkEzMik7CisgICAgICAgIFJHQkEzMiogc3RhcnQgPSBhdChyZWN0LngoKSwgcmVjdC55KCkpOwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QuaGVpZ2h0KCk7ICsraSkgeworICAgICAg
ICAgICAgbWVtc2V0KHN0YXJ0LCAwLCByZWN0V2lkdGhJbkJ5dGVzKTsKKyAgICAgICAgICAgIHN0
YXJ0ICs9IG1fc2l6ZS53aWR0aCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCByZXBl
YXRGaXJzdFJvdyhjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHJlY3Qu
aXNFbXB0eSgpIHx8IGluQm91bmRzKHJlY3QpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkgKiBzaXpl
b2YoUkdCQTMyKTsKKyAgICAgICAgUkdCQTMyKiBzcmMgPSBhdChyZWN0LngoKSwgcmVjdC55KCkp
OworICAgICAgICBSR0JBMzIqIGRlc3QgPSBzcmMgKyBtX3NpemUud2lkdGgoKTsKKyAgICAgICAg
Zm9yIChpbnQgaSA9IDE7IGkgPCByZWN0LmhlaWdodCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1l
bWNweShkZXN0LCBzcmMsIHJlY3RXaWR0aEluQnl0ZXMpOworICAgICAgICAgICAgZGVzdCArPSBt
X3NpemUud2lkdGgoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgc2V0UkdCQShpbnQg
eCwgaW50IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEp
CisgICAgeworICAgICAgICBzZXRSR0JBKGF0KHgsIHkpLCByLCBnLCBiLCBhKTsKKyAgICB9CisK
KyAgICB2b2lkIHNldFJHQkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1
bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5
QWxwaGEgfHwgYSA+PSAyNTUpCisgICAgICAgICAgICAqZGVzdCA9IG1ha2VSR0JBKHIsIGcsIGIs
IGEpOworICAgICAgICBlbHNlIGlmICghYSkKKyAgICAgICAgICAgICpkZXN0ID0gMDsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgKmRlc3QgPSBtYWtlUHJlbXVsdGlwbGllZFJHQkEociwgZywg
YiwgYSk7CisgICAgfQorCisgICAgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVk
IHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAgeworICAgICAgICBp
ZiAoIWEpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoYSA+PSAy
NTUgfHwgIWFscGhhQ2hhbm5lbCgqZGVzdCkpIHsKKyAgICAgICAgICAgIHNldFJHQkEoZGVzdCwg
ciwgZywgYiwgYSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKQorICAgICAgICAgICAgKmRlc3QgPSBtYWtl
UHJlbXVsdGlwbGllZFJHQkEocmVkQ2hhbm5lbCgqZGVzdCksIGdyZWVuQ2hhbm5lbCgqZGVzdCks
IGJsdWVDaGFubmVsKCpkZXN0KSwgYWxwaGFDaGFubmVsKCpkZXN0KSk7CisgICAgICAgIAorICAg
ICAgICBSR0JBMzIgc3JjID0gbWFrZVJHQkEociwgZywgYiwgYSk7CisgICAgICAgICpkZXN0ID0g
Q29sb3IoKmRlc3QpLmJsZW5kKHNyYykucmdiKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIW1f
cHJlbXVsdGlwbHlBbHBoYSkKKyAgICAgICAgICAgICpkZXN0ID0gbWFrZVVuUHJlbXVsdGlwbGll
ZFJHQkEocmVkQ2hhbm5lbCgqZGVzdCksIGdyZWVuQ2hhbm5lbCgqZGVzdCksIGJsdWVDaGFubmVs
KCpkZXN0KSwgYWxwaGFDaGFubmVsKCpkZXN0KSk7CisgICAgfQorCisgICAgYm9vbCBpbkJvdW5k
cyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSW50
UmVjdChJbnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHBvaW50KTsKKyAgICB9CisKKyAgICBi
b29sIGluQm91bmRzKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHJlY3QpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBWZWN0b3I8UkdCQTMyPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBSR0JB
MzIqIG1fcGl4ZWxzIHsgbnVsbHB0ciB9OworICAgIEludFNpemUgbV9zaXplOworICAgIGJvb2wg
bV9wcmVtdWx0aXBseUFscGhhIHsgdHJ1ZSB9OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCmluZGV4IDRlMjVhYTZmZDc0ZDFlNDZjNTQxNjE0OThi
YzE3MmJmNjAwODc1ZDEuLjQzOWY1YTYzYzdiZWJlNTYwNDJiMjRlN2Q3MmVjY2VjZjM2YzQwYzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKQEAgLTQ5LDYg
KzQ5LDQwIEBAIGNvbnN0IFJHQkEzMiBDb2xvcjo6dHJhbnNwYXJlbnQ7CiBzdGF0aWMgY29uc3Qg
UkdCQTMyIGxpZ2h0ZW5lZEJsYWNrID0gMHhGRjU0NTQ1NDsKIHN0YXRpYyBjb25zdCBSR0JBMzIg
ZGFya2VuZWRXaGl0ZSA9IDB4RkZBQkFCQUI7CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbXVs
dGlwbHkyNTUodW5zaWduZWQgYykKK3sKKyAgICAvLyBjICogMjU1CisgICAgLy8gICA9IGMgKiAo
MjU2IC0gMSkKKyAgICAvLyAgID0gYyAqIDI1NiAtIGMKKyAgICByZXR1cm4gKGMgPDwgOCkgLSBj
OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRpdmlkZTI1NSh1bnNpZ25lZCBjKQorewor
ICAgIC8vIGMgLyAyNTUKKyAgICAvLyAgID0gYyAvIDI1NiAqICgxICsgMSAvIDI1NSkKKyAgICAv
LyAgID0gKGMgKyBjIC8gMjU1KSAvIDI1NgorICAgIC8vICAgPSAoYyArIChjICsgYyAvIDI1NSkg
LyAyNTYpIC8gMjU2CisgICAgLy8gICA9IChjICsgYyAvIDI1NiArIGMgLyAoMjU1IHggMjU2KSkg
LyAyNTYKKyAgICAvLyAgfj0gKGMgKyBjIC8gMjU2ICsgMSkgLyAyNTYKKyAgICByZXR1cm4gKGMg
KyAoYyA+PiA4KSArIDEpID4+IDg7Cit9CisgICAgCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRp
dmlkZUNlaWwodW5zaWduZWQgYywgdW5zaWduZWQgZCkKK3sKKyAgICByZXR1cm4gKGMgKyBkIC0g
MSkgLyBkOworfQorICAgIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBwcmVtdWx0aXBsaWVkQ2hh
bm5lbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBhKQoreworICAgIHJldHVybiBkaXZpZGUyNTUoYyAq
IGEpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHVucHJlbXVsdGlwbGllZENoYW5uZWwo
dW5zaWduZWQgYywgdW5zaWduZWQgYSkKK3sKKyAgICByZXR1cm4gZGl2aWRlQ2VpbChtdWx0aXBs
eTI1NShjKSwgYSk7Cit9CisgICAgCiBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBi
KQogewogICAgIHJldHVybiAweEZGMDAwMDAwIHwgc3RkOjptYXgoMCwgc3RkOjptaW4ociwgMjU1
KSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAyNTUpKSA8PCA4IHwgc3RkOjptYXgo
MCwgc3RkOjptaW4oYiwgMjU1KSk7CkBAIC01OSw2ICs5MywxNiBAQCBSR0JBMzIgbWFrZVJHQkEo
aW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCiAgICAgcmV0dXJuIHN0ZDo6bWF4KDAsIHN0ZDo6
bWluKGEsIDI1NSkpIDw8IDI0IHwgc3RkOjptYXgoMCwgc3RkOjptaW4ociwgMjU1KSkgPDwgMTYg
fCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAyNTUpKSA8PCA4IHwgc3RkOjptYXgoMCwgc3RkOjpt
aW4oYiwgMjU1KSk7CiB9CiAKK1JHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGlu
dCBnLCBpbnQgYiwgaW50IGEpCit7CisgICAgcmV0dXJuIG1ha2VSR0JBKHByZW11bHRpcGxpZWRD
aGFubmVsKHIsIGEpLCBwcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBhKSwgcHJlbXVsdGlwbGllZENo
YW5uZWwoYiwgYSksIGEpOworfQorICAgIAorUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRSR0JB
KGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQoreworICAgIHJldHVybiBtYWtlUkdCQSh1bnBy
ZW11bHRpcGxpZWRDaGFubmVsKHIsIGEpLCB1bnByZW11bHRpcGxpZWRDaGFubmVsKGcsIGEpLCB1
bnByZW11bHRpcGxpZWRDaGFubmVsKGIsIGEpLCBhKTsKK30KKyAgICAKIHN0YXRpYyBpbnQgY29s
b3JGbG9hdFRvUkdCQUJ5dGUoZmxvYXQgZikKIHsKICAgICAvLyBXZSB1c2UgbHJvdW5kZiBhbmQg
MjU1IGluc3RlYWQgb2YgbmV4dGFmdGVyZigyNTYsIDApIHRvIG1hdGNoIENHJ3Mgcm91bmRpbmcK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCmluZGV4IGRkMjYyNzBiYjQ2
NjBiMzNhZTA3MGU4Yzk0NDUyMGQ3Mjg0NTRiOGEuLmE1NDUzMmM3NzU1YTdjODc2OTM2MjQwY2Fl
NGVjMzdhNGRhMGQwNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
aApAQCAtNTQsNiArNTQsOCBAQCB0eXBlZGVmIHVuc2lnbmVkIFJHQkEzMjsgLy8gRGVwcmVjYXRl
ZDogVHlwZSBmb3IgYW4gUkdCQSBxdWFkcnVwbGV0LiBVc2UgUkdCQSBjbAogCiBXRUJDT1JFX0VY
UE9SVCBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBiKTsKIFdFQkNPUkVfRVhQT1JU
IFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7CitXRUJDT1JFX0VY
UE9SVCBSR0JBMzIgbWFrZVByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGlu
dCBhKTsKK1dFQkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQg
ciwgaW50IGcsIGludCBiLCBpbnQgYSk7CiAKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBjb2xvcldp
dGhPdmVycmlkZUFscGhhKFJHQkEzMiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSk7CiBXRUJD
T1JFX0VYUE9SVCBSR0JBMzIgY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIE9w
dGlvbmFsPGZsb2F0PiBvdmVycmlkZUFscGhhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZS5oCmluZGV4IDdhMjk5OTJmNzcxODhlMDM4MjhkODBhNjViOGJlMmNkOGRjMmRl
NzYuLjhlN2I1MmIxZjRmMzFjNzRhM2NiMmExMzIxNWRhNzdhMmIxOGMwN2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaApAQCAtMTM3LDggKzEzNywxMSBAQCBwdWJs
aWM6CiAKICAgICBlbnVtIFRpbGVSdWxlIHsgU3RyZXRjaFRpbGUsIFJvdW5kVGlsZSwgU3BhY2VU
aWxlLCBSZXBlYXRUaWxlIH07CiAKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUlt
YWdlKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0
aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50U2l6ZSYpIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICB2
aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgeyByZXR1
cm4gbnVsbHB0cjsgfQogICAgIHZpcnR1YWwgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkZv
ckN1cnJlbnRGcmFtZSgpIHsgcmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsgfQorICAgIHZpcnR1
YWwgVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBmcmFtZXNOYXRpdmVJbWFnZXMoKSB7IHJldHVybiB7
IH07IH0KIAogICAgIC8vIEFjY2Vzc29ycyBmb3IgbmF0aXZlIGltYWdlIGZvcm1hdHMuCiAKQEAg
LTE1MCwxMiArMTUzLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgQ0ZEYXRhUmVmIGdldFRJRkZS
ZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCi0jaWYgVVNFKENH
KQotICAgIHZpcnR1YWwgQ0dJbWFnZVJlZiBnZXRDR0ltYWdlUmVmKCkgeyByZXR1cm4gbnVsbHB0
cjsgfQotICAgIHZpcnR1YWwgQ0dJbWFnZVJlZiBnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUoY29u
c3QgSW50U2l6ZSYpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIFJldGFpblB0cjxD
RkFycmF5UmVmPiBnZXRDR0ltYWdlQXJyYXkoKSB7IHJldHVybiBudWxscHRyOyB9Ci0jZW5kaWYK
LQogI2lmIFBMQVRGT1JNKFdJTikKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SEJJVE1BUChIQklUTUFQ
KSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBnZXRIQklUTUFQT2ZTaXplKEhC
SVRNQVAsIGNvbnN0IEludFNpemUqKSB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTc5LDYgKzE3Niw4
IEBAIHB1YmxpYzoKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgdmlydHVhbCBib29sIG5vdFNv
bGlkQ29sb3IoKSB7IHJldHVybiB0cnVlOyB9CiAjZW5kaWYKKyAgICAKKyAgICB2aXJ0dWFsIHZv
aWQgbGF5b3V0SWZOZWVkZWQoKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRleHRTdHJl
YW0mKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VGcmFtZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VGcmFtZURhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmZDIwY2Y4ZTYxZjRiMWExZmUwOGViMzMy
YjcxNjU3ZjAxNDhjMTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5jcHAKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkltYWdlRnJhbWVEYXRhLmgiCisKKyNpbmNsdWRlICJDb2xvci5oIgorCisj
aWYgVVNFKENHKQorI2luY2x1ZGUgIkltYWdlRGVjb2RlckNHLmgiCisjZWxzZQorI2luY2x1ZGUg
IkltYWdlRGVjb2Rlci5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VGcmFtZURhdGE6OkltYWdlRnJhbWVEYXRhKCkK
K3sKK30KKworSW1hZ2VGcmFtZURhdGE6OkltYWdlRnJhbWVEYXRhKE5hdGl2ZUltYWdlUHRyJiYg
aW1hZ2UpCisgICAgOiBtX3N0YXR1cyhEZWNvZGluZ1N0YXR1czo6Q29tcGxldGUpCisgICAgLCBt
X2ltYWdlKFdURk1vdmUoaW1hZ2UpKQoreworICAgIG1fc2l6ZSA9IFBsYXRmb3JtSW1hZ2UobV9p
bWFnZSkuc2l6ZSgpOworICAgIG1faGFzQWxwaGEgPSBQbGF0Zm9ybUltYWdlKG1faW1hZ2UpLmhh
c0FscGhhKCk7Cit9CisKK0ltYWdlRnJhbWVEYXRhOjpJbWFnZUZyYW1lRGF0YShJbWFnZURlY29k
ZXImIGRlY29kZXIsIHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xl
dmVsLCBDYWNoaW5nIGZyYW1lQ2FjaGluZykKK3sKKyAgICBBU1NFUlQoZnJhbWVDYWNoaW5nID09
IENhY2hpbmc6Ok1ldGFkYXRhIHx8IGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YUFu
ZEltYWdlKTsKKyAgICAKKyAgICBpZiAoZnJhbWVDYWNoaW5nID09IENhY2hpbmc6OkltYWdlIHx8
IGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YUFuZEltYWdlKSB7CisgICAgICAgIG1f
aW1hZ2UgPSBkZWNvZGVyLmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGluZGV4LCBzdWJzYW1wbGlu
Z0xldmVsKTsKKyAgICAgICAgbV9zdWJzYW1wbGluZ0xldmVsID0gc3Vic2FtcGxpbmdMZXZlbDsK
KyAgICB9CisgICAgCisgICAgaWYgKGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YSB8
fCBmcmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSkgeworICAgICAgICBt
X29yaWVudGF0aW9uID0gZGVjb2Rlci5vcmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOworICAgICAg
ICBtX3N0YXR1cyA9IGRlY29kZXIuZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCkgPyBEZWNv
ZGluZ1N0YXR1czo6Q29tcGxldGUgOiBEZWNvZGluZ1N0YXR1czo6UGFydGlhbDsKKyAgICAgICAg
CisgICAgICAgIGlmIChkZWNvZGVyLnJlcGV0aXRpb25Db3VudCgpICE9IGNBbmltYXRpb25Ob25l
KQorICAgICAgICAgICAgbV9kdXJhdGlvbiA9IGRlY29kZXIuZnJhbWVEdXJhdGlvbkF0SW5kZXgo
aW5kZXgpOworICAgICAgICAKKyAgICAgICAgbV9oYXNBbHBoYSA9IGRlY29kZXIuZnJhbWVIYXNB
bHBoYUF0SW5kZXgoaW5kZXgpOworICAgICAgICBtX3NpemUgPSBkZWNvZGVyLmZyYW1lU2l6ZUF0
SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOworICAgIH0KK30KKworSW1hZ2VGcmFtZURh
dGE6On5JbWFnZUZyYW1lRGF0YSgpCit7CisgICAgY2xlYXJTdWJJbWFnZXMoKTsKK30KKyAgICAK
K0ltYWdlRnJhbWVEYXRhJiBJbWFnZUZyYW1lRGF0YTo6b3BlcmF0b3I9KGNvbnN0IEltYWdlRnJh
bWVEYXRhJiBvdGhlcikKK3sKKyAgICBpZiAodGhpcyA9PSAmb3RoZXIpCisgICAgICAgIHJldHVy
biAqdGhpczsKKworICAgIG1fc3RhdHVzID0gb3RoZXIubV9zdGF0dXM7CisgICAgbV9zaXplID0g
b3RoZXIubV9zaXplOworICAgIG1faW1hZ2UgPSBvdGhlci5tX2ltYWdlOworICAgIAorICAgIG1f
cGl4ZWxzID0gb3RoZXIucGl4ZWxzKCkgPyBCaXRtYXBQaXhlbHM6OmNyZWF0ZSgqb3RoZXIucGl4
ZWxzKCkpIDogbnVsbHB0cjsKKyAgICAKKyAgICBtX29yaWVudGF0aW9uID0gb3RoZXIubV9vcmll
bnRhdGlvbjsKKyAgICBtX3N1YnNhbXBsaW5nTGV2ZWwgPSBvdGhlci5tX3N1YnNhbXBsaW5nTGV2
ZWw7CisgICAgbV9kdXJhdGlvbiA9IG90aGVyLm1fZHVyYXRpb247CisgICAgbV9oYXNBbHBoYSA9
IG90aGVyLm1faGFzQWxwaGE7CisgICAgcmV0dXJuICp0aGlzOworfQorCit2b2lkIEltYWdlRnJh
bWVEYXRhOjpjbGVhclN1YkltYWdlcygpCit7CisgICAgaWYgKCFtX2ltYWdlKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5jbGVhclN1YkltYWdlcygp
OworfQorCit1bnNpZ25lZCBJbWFnZUZyYW1lRGF0YTo6Y2xlYXIoQ2FjaGluZyBmcmFtZUNhY2hp
bmcpCit7CisgICAgQVNTRVJUKGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpFbXB0eSB8fCBmcmFt
ZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGEpOworICAgIAorICAgIHVuc2lnbmVkIGZyYW1l
Qnl0ZXMgPSB0aGlzLT5mcmFtZUJ5dGVzKCk7CisgICAgCisgICAgY2xlYXJTdWJJbWFnZXMoKTsK
KyAgICAKKyAgICBpZiAoZnJhbWVDYWNoaW5nID09IENhY2hpbmc6OkVtcHR5KQorICAgICAgICAq
dGhpcyA9IEltYWdlRnJhbWVEYXRhKCk7CisgICAgZWxzZQorICAgICAgICBtX2ltYWdlID0gbnVs
bHB0cjsKKyAgICAKKyAgICByZXR1cm4gZnJhbWVCeXRlczsKK30KKworQ29sb3IgSW1hZ2VGcmFt
ZURhdGE6OnNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKCFoYXNJbWFn
ZSgpIHx8IG1fc2l6ZSAhPSBJbnRTaXplKDEsIDEpKQorICAgICAgICByZXR1cm4gQ29sb3IoKTsK
KyAgICAKKyAgICByZXR1cm4gUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5zaW5nbGVQaXhlbFNvbGlk
Q29sb3IoKTsKK30KKworYm9vbCBJbWFnZUZyYW1lRGF0YTo6aXNBbG1vc3RTb2xpZENvbG9yKCkg
Y29uc3QKK3sKKyAgICBpZiAoIWhhc0ltYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICByZXR1cm4gUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5pc0FsbW9zdFNvbGlkQ29sb3Io
KTsKK30KKyAgICAKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlRnJhbWVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUZyYW1lRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIxMTI2MTNhNDVlNTMzYmE0YThkNTFlZTZjZTg3
ZDQyODRiM2NmNzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUZyYW1lRGF0YS5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJCaXRtYXBQaXhlbHMuaCIKKyNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCisjaW5jbHVk
ZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgQ29sb3I7CitjbGFzcyBJbWFnZURlY29kZXI7CisKKy8vIFN1YnNh
bXBsaW5nTGV2ZWwuIDAgaXMgbm8gc3Vic2FtcGxpbmcsIDEgaXMgaGFsZiBkaW1lbnNpb25zIG9u
IGVhY2ggYXhpcyBldGMuCit1c2luZyBTdWJzYW1wbGluZ0xldmVsID0gdWludDhfdDsKKworZW51
bSA6IFN1YnNhbXBsaW5nTGV2ZWwgeworICAgIE1pblN1YnNhbXBsaW5nTGV2ZWwgPSAwLAorICAg
IE1heFN1YnNhbXBsaW5nTGV2ZWwgPSAzLAorICAgIERlZmF1bHRTdWJzYW1wbGluZ0xldmVsID0g
TWluU3Vic2FtcGxpbmdMZXZlbAorfTsKKworY2xhc3MgSW1hZ2VGcmFtZURhdGEgeworcHVibGlj
OgorICAgIGVudW0gY2xhc3MgQ2FjaGluZyB7IEVtcHR5LCBNZXRhZGF0YSwgSW1hZ2UsIE1ldGFk
YXRhQW5kSW1hZ2UgfTsKKyAgICBlbnVtIGNsYXNzIERlY29kaW5nU3RhdHVzIHsgRW1wdHksIFBh
cnRpYWwsIENvbXBsZXRlIH07CisgICAgCisgICAgSW1hZ2VGcmFtZURhdGEoKTsKKyAgICBJbWFn
ZUZyYW1lRGF0YShOYXRpdmVJbWFnZVB0ciYmKTsKKyAgICBJbWFnZUZyYW1lRGF0YShJbWFnZURl
Y29kZXImLCBzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgPSBEZWZhdWx0U3Vic2FtcGxp
bmdMZXZlbCwgQ2FjaGluZyA9IENhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOworICAgIEltYWdl
RnJhbWVEYXRhKGNvbnN0IEltYWdlRnJhbWVEYXRhJiBvdGhlcikgeyBvcGVyYXRvcj0ob3RoZXIp
OyB9CisKKyAgICB+SW1hZ2VGcmFtZURhdGEoKTsKKworICAgIEltYWdlRnJhbWVEYXRhJiBvcGVy
YXRvcj0oY29uc3QgSW1hZ2VGcmFtZURhdGEmIG90aGVyKTsKKyAgICAKKyAgICB1bnNpZ25lZCBj
bGVhcihDYWNoaW5nKTsKKyAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdDsK
KyAgICBib29sIGlzQWxtb3N0U29saWRDb2xvcigpIGNvbnN0OworICAgIAorICAgIERlY29kaW5n
U3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CisgICAgYm9vbCBpc0Nv
bXBsZXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6OkNvbXBs
ZXRlOyB9CisgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAg
dW5zaWduZWQgZnJhbWVCeXRlcygpIGNvbnN0IHsgcmV0dXJuIGhhc0ltYWdlKCkgPyBtX3NpemUu
YXJlYSgpICogNCA6IDA7IH0KKyAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZSgpIGNvbnN0IHsgcmV0
dXJuIG1faW1hZ2U7IH0KKyAgICBCaXRtYXBQaXhlbHMqIHBpeGVscygpIGNvbnN0IHsgcmV0dXJu
IG1fcGl4ZWxzID8gbV9waXhlbHMuZ2V0KCkgOiBudWxscHRyOyB9CisgICAgCisgICAgSW1hZ2VP
cmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZW50YXRpb247IH0K
KyAgICBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwoKSBjb25zdCB7IHJldHVybiBt
X3N1YnNhbXBsaW5nTGV2ZWw7IH0KKyAgICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZHVyYXRpb247IH0KKyAgICAKKyAgICBib29sIGhhc0FscGhhKCkgY29uc3QgeyByZXR1cm4g
bV9oYXNBbHBoYTsgfQorICAgIGJvb2wgaGFzSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdl
OyB9CisgICAgYm9vbCBoYXNNZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuICFtX3NpemUuaXNFbXB0
eSgpOyB9CisgICAgYm9vbCBoYXNQaXhlbHMoKSBjb25zdCB7IHJldHVybiBwaXhlbHMoKTsgfQor
ICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIGNsZWFyU3ViSW1hZ2VzKCk7CisgICAgCisgICAgRGVj
b2RpbmdTdGF0dXMgbV9zdGF0dXMgeyBEZWNvZGluZ1N0YXR1czo6RW1wdHkgfTsKKyAgICBJbnRT
aXplIG1fc2l6ZTsKKyAgICBOYXRpdmVJbWFnZVB0ciBtX2ltYWdlOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxCaXRtYXBQaXhlbHM+IG1fcGl4ZWxzOworICAgIAorICAgIEltYWdlT3JpZW50YXRpb24g
bV9vcmllbnRhdGlvbiB7IERlZmF1bHRJbWFnZU9yaWVudGF0aW9uIH07CisgICAgU3Vic2FtcGxp
bmdMZXZlbCBtX3N1YnNhbXBsaW5nTGV2ZWwgeyAwIH07CisgICAgZmxvYXQgbV9kdXJhdGlvbiB7
IDAgfTsKKyAgICBib29sIG1faGFzQWxwaGEgeyB0cnVlIH07Cit9OworICAgIAorfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCmluZGV4IGRk
ZDhhNTViYTA5MDZjNTg2NmExOTJjZjhlNDE0ZWE3MDdiNzI4YWMuLjgyZjZlMmQ2ZTQ1NDMzZGEx
YTdkNTZiMzcwZGZhNjFhNGM0MTkxMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKQEAgLTIyNCw2ICsyMjQsMTEgQEAgTmF0aXZlSW1h
Z2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwg
U3Vic2FtcGxpbmdMZXYKICAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSA/IG1fZGVjb2Rlci0+Y3Jl
YXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpIDogbnVsbHB0cjsK
IH0KIAorSW1hZ2VGcmFtZURhdGEgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lRGF0YUF0SW5kZXgo
c2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlRnJh
bWVEYXRhOjpDYWNoaW5nIGNhY2hpbmcpCit7CisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkgPyBJ
bWFnZUZyYW1lRGF0YSgqbV9kZWNvZGVyLCBpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgY2FjaGlu
ZykgOiBJbWFnZUZyYW1lRGF0YSgpOworfQorICAgIAogdm9pZCBJbWFnZVNvdXJjZTo6ZHVtcChU
ZXh0U3RyZWFtJiB0cykgY29uc3QKIHsKICAgICBpZiAobV9hbGxvd1N1YnNhbXBsaW5nKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKaW5kZXggNjAz
NTczOWI3ZThiMDk2ZGM4ZGZlOWM1MzBhNDJjNmYyOTFiZGEwMC4uYTQwYzdjZTkzMDdjZGFkZjA3
OWFiNzAxYTgyNzk5YjY5MDUyOWQ0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaWZuZGVmIEltYWdlU291
cmNlX2gKICNkZWZpbmUgSW1hZ2VTb3VyY2VfaAogCisjaW5jbHVkZSAiSW1hZ2VGcmFtZURhdGEu
aCIKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIK
ICNpbmNsdWRlICJOYXRpdmVJbWFnZVB0ci5oIgpAQCAtNjMsOSArNjQsNiBAQCBjb25zdCBpbnQg
Y0FuaW1hdGlvbkxvb3BPbmNlID0gMDsKIGNvbnN0IGludCBjQW5pbWF0aW9uTG9vcEluZmluaXRl
ID0gLTE7CiBjb25zdCBpbnQgY0FuaW1hdGlvbk5vbmUgPSAtMjsKIAotLy8gU3Vic2FtcGxpbmdM
ZXZlbC4gMCBpcyBubyBzdWJzYW1wbGluZywgMSBpcyBoYWxmIGRpbWVuc2lvbnMgb24gZWFjaCBh
eGlzIGV0Yy4KLXR5cGVkZWYgc2hvcnQgU3Vic2FtcGxpbmdMZXZlbDsKLQogY2xhc3MgSW1hZ2VT
b3VyY2UgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlU291cmNlKTsKICAgICBmcmll
bmQgY2xhc3MgQml0bWFwSW1hZ2U7CkBAIC0xMzIsMTggKzEzMCwxOSBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBhbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoc2l6ZV90KSBjb25zdDsKICAgICAK
ICAgICAvLyBTaXplIG9mIG9wdGlvbmFsbHkgc3Vic2FtcGxlZCBmcmFtZS4KLSAgICBJbnRTaXpl
IGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gMCwgUmVzcGVjdElt
YWdlT3JpZW50YXRpb25FbnVtID0gRG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikgY29uc3Q7
CisgICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9
IERlZmF1bHRTdWJzYW1wbGluZ0xldmVsLCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0gPSBE
b05vdFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKSBjb25zdDsKICAgICAKICAgICAvLyBSZXR1cm4g
dGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgZGVjb2RlZCBmcmFtZS4gSWYgdGhlIGZyYW1lIGlz
IG5vdCB5ZXQKICAgICAvLyBkZWNvZGVkIHRoZW4gcmV0dXJuIDAuCi0gICAgdW5zaWduZWQgZnJh
bWVCeXRlc0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gMCkgY29uc3Q7CisgICAg
dW5zaWduZWQgZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gRGVm
YXVsdFN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0OwogICAgIAogICAgIGZsb2F0IGZyYW1lRHVyYXRp
b25BdEluZGV4KHNpemVfdCk7CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkF0SW5k
ZXgoc2l6ZV90KSBjb25zdDsgLy8gRVhJRiBpbWFnZSBvcmllbnRhdGlvbgogICAgIAogICAgIC8v
IENhbGxlcnMgc2hvdWxkIG5vdCBjYWxsIHRoaXMgYWZ0ZXIgY2FsbGluZyBjbGVhcigpIHdpdGgg
YSBoaWdoZXIgaW5kZXg7CiAgICAgLy8gc2VlIGNvbW1lbnRzIG9uIGNsZWFyKCkgYWJvdmUuCi0g
ICAgTmF0aXZlSW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1w
bGluZ0xldmVsID0gMCk7CisgICAgTmF0aXZlSW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0SW5k
ZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gRGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwpOwor
ICAgIEltYWdlRnJhbWVEYXRhIGNyZWF0ZUZyYW1lRGF0YUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1w
bGluZ0xldmVsID0gRGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlRnJhbWVEYXRhOjpDYWNo
aW5nID0gSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOwogICAgIAog
cHJpdmF0ZToKICAgICB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmFiN2FlYTQ4OWYzZWIyYTgyODc3MWMyMTAzZThkNGQwYmUxN2JlNWQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlLmgK
QEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKyNpbmNs
dWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb2xvcjsKK2NsYXNzIEZsb2F0UmVjdDsKK2Ns
YXNzIEludFNpemU7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CisKK2NsYXNzIFBsYXRmb3JtSW1h
Z2UgeworcHVibGljOgorICAgIFBsYXRmb3JtSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGlt
YWdlKQorICAgICAgICA6IG1faW1hZ2UoaW1hZ2UpCisgICAgeworICAgIH0KKworICAgIGJvb2wg
aXNOaWwoKSBjb25zdCB7IHJldHVybiAhbV9pbWFnZTsgfQorICAgIHZvaWQgY2xlYXJTdWJJbWFn
ZXMoKTsKKworICAgIEludFNpemUgc2l6ZSgpIGNvbnN0OworICAgIGJvb2wgaGFzQWxwaGEoKSBj
b25zdDsKKyAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdDsKKyAgICBib29s
IGlzQWxtb3N0U29saWRDb2xvcigpIGNvbnN0OworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEludFNpemUmIHNyY1NpemUsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUsIGNv
bnN0IEltYWdlT3JpZW50YXRpb24mKSBjb25zdDsKKworICAgIHN0YXRpYyBmbG9hdCBzdWJzYW1w
bGluZ1NjYWxlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCk7CisKK3ByaXZhdGU6CisjaWYgVVNFKENHKQorICAgIENH
SW1hZ2VSZWYgY2dJbWFnZVJlZigpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UgPyBtX2ltYWdlLmdl
dCgpIDogbnVsbHB0cjsgfQorI2VuZGlmCisgICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsKK307
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbQppbmRleCBmNGMxNDU3YmJiMjU1NzU0ZjAw
YTA2MjVlZTgzZTA0ZGE3YzZlZmNmLi5kNTIwZjVkNTg1YWM2MGRiYWVlMjU1ZTFiODNjMjRkYzY4
NzIxMGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCkBAIC0yMTIsNyArMjEyLDcgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnVwZGF0ZURpc3BsYXlN
b2RlKCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgbV9wYXVzZWRJbWFnZSA9IGltYWdlLT5nZXRDR0ltYWdlUmVmKCk7
CisgICAgICAgICAgICAgICAgbV9wYXVzZWRJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgpOwogICAgICAgICAgICAgICAgIGlmICghbV9wYXVzZWRJbWFnZSkgewogICAg
ICAgICAgICAgICAgICAgICBtX2Rpc3BsYXlNb2RlID0gUGFpbnRJdEJsYWNrOwogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDE3NzIyYmVjNTNhYjhhMDhhOGRhODUyOGI5ZTBkN2M0ZDBjZDQxMzUu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCaXRtYXBJ
bWFnZS5oIgotCi0jaWYgVVNFKENBSVJPKQotCi0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIK
LSNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fp
cm8uaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIE5hdGl2ZUltYWdlIHsKLQotSW50U2l6ZSBzaXplKGNv
bnN0IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiBpbWFnZSkKLXsKLSAgICByZXR1cm4gY2Fpcm9T
dXJmYWNlU2l6ZShpbWFnZS5nZXQoKSk7Ci19Ci0KLWJvb2wgaGFzQWxwaGEoY29uc3QgUmVmUHRy
PGNhaXJvX3N1cmZhY2VfdD4mIGltYWdlKQotewotICAgIHJldHVybiBjYWlyb19zdXJmYWNlX2dl
dF9jb250ZW50KGltYWdlLmdldCgpKSAhPSBDQUlST19DT05URU5UX0NPTE9SOwotfQotCi1Db2xv
ciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoY29uc3QgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mIGlt
YWdlKQotewotICAgIEFTU0VSVChpbWFnZSk7Ci0gICAgCi0gICAgaWYgKE5hdGl2ZUltYWdlOjpz
aXplKGltYWdlKSAhPSBJbnRTaXplKDEsIDEpKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKLQot
ICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKGltYWdlLmdldCgpKSAhPSBDQUlST19TVVJG
QUNFX1RZUEVfSU1BR0UpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotCi0gICAgUkdCQTMyKiBw
aXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFJHQkEzMio+KGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2RhdGEoaW1hZ2UuZ2V0KCkpKTsKLSAgICByZXR1cm4gY29sb3JGcm9tUHJlbXVsdGlwbGll
ZEFSR0IoKnBpeGVsKTsKLX0KLQotfQotCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCwKLSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFn
ZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pCi17Ci0gICAgaWYgKCFkc3Qud2lk
dGgoKSB8fCAhZHN0LmhlaWdodCgpIHx8ICFzcmMud2lkdGgoKSB8fCAhc3JjLmhlaWdodCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBzdGFydEFuaW1hdGlvbigpOwotCi0gICAgYXV0byBzdXJm
YWNlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwotICAgIGlmICghc3VyZmFj
ZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCi0gICAg
ICAgIHJldHVybjsKLQotICAgIENvbG9yIGNvbG9yID0gc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCk7
Ci0gICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3Io
Y29udGV4dCwgZHN0LCBjb2xvciwgb3ApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Y29udGV4dC5zYXZlKCk7Ci0KLSAgICAvLyBTZXQgdGhlIGNvbXBvc2l0aW5nIG9wZXJhdGlvbi4K
LSAgICBpZiAob3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciAmJiBibGVuZE1vZGUgPT0gQmxlbmRN
b2RlTm9ybWFsICYmICFmcmFtZUhhc0FscGhhQXRJbmRleChtX2N1cnJlbnRGcmFtZSkpCi0gICAg
ICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOwotICAgIGVs
c2UKLSAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3AsIGJsZW5kTW9kZSk7
Ci0KLSNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQotICAgIEludFNpemUg
c2NhbGVkU2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUoc3VyZmFjZS5nZXQoKSk7Ci0gICAgRmxvYXRS
ZWN0IGFkanVzdGVkU3JjUmVjdCA9IGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGxpbmcoc3Jj
LCBzY2FsZWRTaXplKTsKLSNlbHNlCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdChzcmMp
OwotI2VuZGlmCi0KLSAgICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3JpZW50YXRpb24oZGVzY3Jp
cHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKTsKLSAgICBpZiAoZGVzY3JpcHRpb24ucmVzcGVjdElt
YWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikKLSAgICAgICAgZnJh
bWVPcmllbnRhdGlvbiA9IGZyYW1lT3JpZW50YXRpb25BdEluZGV4KG1fY3VycmVudEZyYW1lKTsK
LQotICAgIEZsb2F0UmVjdCBkc3RSZWN0ID0gZHN0OwotCi0gICAgaWYgKGZyYW1lT3JpZW50YXRp
b24gIT0gRGVmYXVsdEltYWdlT3JpZW50YXRpb24pIHsKLSAgICAgICAgLy8gSW1hZ2VPcmllbnRh
dGlvbiBleHBlY3RzIHRoZSBvcmlnaW4gdG8gYmUgYXQgKDAsIDApLgotICAgICAgICBjb250ZXh0
LnRyYW5zbGF0ZShkc3RSZWN0LngoKSwgZHN0UmVjdC55KCkpOwotICAgICAgICBkc3RSZWN0LnNl
dExvY2F0aW9uKEZsb2F0UG9pbnQoKSk7Ci0gICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKGZyYW1l
T3JpZW50YXRpb24udHJhbnNmb3JtRnJvbURlZmF1bHQoZHN0UmVjdC5zaXplKCkpKTsKLSAgICAg
ICAgaWYgKGZyYW1lT3JpZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSkgewotICAgICAgICAg
ICAgLy8gVGhlIGRlc3RpbmF0aW9uIHJlY3RhbmdsZSB3aWxsIGhhdmUgaXQncyB3aWR0aCBhbmQg
aGVpZ2h0IGFscmVhZHkgcmV2ZXJzZWQgZm9yIHRoZSBvcmllbnRhdGlvbiBvZgotICAgICAgICAg
ICAgLy8gdGhlIGltYWdlLCBhcyBpdCB3YXMgbmVlZGVkIGZvciBwYWdlIGxheW91dCwgc28gd2Ug
bmVlZCB0byByZXZlcnNlIGl0IGJhY2sgaGVyZS4KLSAgICAgICAgICAgIGRzdFJlY3QgPSBGbG9h
dFJlY3QoZHN0UmVjdC54KCksIGRzdFJlY3QueSgpLCBkc3RSZWN0LmhlaWdodCgpLCBkc3RSZWN0
LndpZHRoKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29udGV4dC5wbGF0Zm9ybUNvbnRl
eHQoKS0+ZHJhd1N1cmZhY2VUb0NvbnRleHQoc3VyZmFjZS5nZXQoKSwgZHN0UmVjdCwgYWRqdXN0
ZWRTcmNSZWN0LCBjb250ZXh0KTsKLQotICAgIGNvbnRleHQucmVzdG9yZSgpOwotCi0gICAgaWYg
KGltYWdlT2JzZXJ2ZXIoKSkKLSAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMp
OwotfQotCi1ib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQotewotICAg
IGlmIChjbGVhck1ldGFkYXRhKQotICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOwotCi0g
ICAgaWYgKG1faW1hZ2UpIHsKLSAgICAgICAgbV9pbWFnZSA9IG51bGxwdHI7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjcwYWRhZWMyNzBlMzFiMDU0YWZjNWY2NmQ0ODI4OGFlYmYwNjFlM2EKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
bGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybUltYWdlLmgiCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJDYWly
b1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCisjaW5jbHVk
ZSA8Y2Fpcm8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFBsYXRmb3JtSW1hZ2U6
OmNsZWFyU3ViSW1hZ2VzKCkKK3sKK30KKworSW50U2l6ZSBQbGF0Zm9ybUltYWdlOjpzaXplKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gaXNOaWwoKSA/IEludFNpemUoKSA6IGNhaXJvU3VyZmFjZVNp
emUobV9pbWFnZS5nZXQoKSk7Cit9CisKK2Jvb2wgUGxhdGZvcm1JbWFnZTo6aGFzQWxwaGEoKSBj
b25zdAoreworICAgIHJldHVybiBpc05pbCgpIHx8IGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQo
bV9pbWFnZS5nZXQoKSkgIT0gQ0FJUk9fQ09OVEVOVF9DT0xPUjsKK30KKworQ29sb3IgUGxhdGZv
cm1JbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3QKK3sKKyAgICBpZiAoaXNOaWwo
KSB8fCBzaXplKCkgIT0gSW50U2l6ZSgxLCAxKSkKKyAgICAgICAgcmV0dXJuIENvbG9yKCk7CisK
KyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShtX2ltYWdlLmdldCgpKSAhPSBDQUlST19T
VVJGQUNFX1RZUEVfSU1BR0UpCisgICAgICAgIHJldHVybiBDb2xvcigpOworCisgICAgUkdCQTMy
KiBwaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFJHQkEzMio+KGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X2RhdGEobV9pbWFnZS5nZXQoKSkpOworICAgIHJldHVybiBjb2xvckZyb21QcmVtdWx0
aXBsaWVkQVJHQigqcGl4ZWwpOworfQorCitib29sIFBsYXRmb3JtSW1hZ2U6OmlzQWxtb3N0U29s
aWRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitmbG9hdCBQbGF0Zm9y
bUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0UmVjdCYpCit7CisgICAgcmV0dXJuIDE7Cit9CisKK3ZvaWQgUGxhdGZv
cm1JbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50U2l6ZSYsIENvbXBv
c2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSwgY29uc3QgSW1hZ2VPcmllbnRhdGlvbiYg
b3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgY29udGV4dC5zYXZlKCk7CisgICAgCisgICAgLy8g
U2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCisgICAgaWYgKG9wID09IENvbXBvc2l0ZVNv
dXJjZU92ZXIgJiYgbW9kZSA9PSBCbGVuZE1vZGVOb3JtYWwgJiYgIWhhc0FscGhhKCkpCisgICAg
ICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOworICAgIGVs
c2UKKyAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3AsIG1vZGUpOworICAg
ICAgICAKKyNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQorICAgIEludFNp
emUgc2NhbGVkU2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUobV9pbWFnZS5nZXQoKSk7CisgICAgRmxv
YXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGxpbmco
c3JjUmVjdCwgc2NhbGVkU2l6ZSk7CisjZWxzZQorICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1Jl
Y3Qoc3JjUmVjdCk7CisjZW5kaWYKKyAgICAgICAgCisgICAgRmxvYXRSZWN0IGFkanVzdGVkRGVz
dFJlY3QgPSBkZXN0UmVjdDsKKyAgICAgICAgCisgICAgaWYgKG9yaWVudGF0aW9uICE9IERlZmF1
bHRJbWFnZU9yaWVudGF0aW9uKSB7CisgICAgICAgIC8vIEltYWdlT3JpZW50YXRpb24gZXhwZWN0
cyB0aGUgb3JpZ2luIHRvIGJlIGF0ICgwLCAwKS4KKyAgICAgICAgY29udGV4dC50cmFuc2xhdGUo
ZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCkpOworICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNl
dExvY2F0aW9uKEZsb2F0UG9pbnQoKSk7CisgICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKG9yaWVu
dGF0aW9uLnRyYW5zZm9ybUZyb21EZWZhdWx0KGFkanVzdGVkRGVzdFJlY3Quc2l6ZSgpKSk7Cisg
ICAgICAgIGlmIChvcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpKSB7CisgICAgICAgICAg
ICAvLyBUaGUgZGVzdGluYXRpb24gcmVjdGFuZ2xlIHdpbGwgaGF2ZSBpdCdzIHdpZHRoIGFuZCBo
ZWlnaHQgYWxyZWFkeSByZXZlcnNlZCBmb3IgdGhlIG9yaWVudGF0aW9uIG9mCisgICAgICAgICAg
ICAvLyB0aGUgaW1hZ2UsIGFzIGl0IHdhcyBuZWVkZWQgZm9yIHBhZ2UgbGF5b3V0LCBzbyB3ZSBu
ZWVkIHRvIHJldmVyc2UgaXQgYmFjayBoZXJlLgorICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVj
dC5zZXRTaXplKGFkanVzdGVkRGVzdFJlY3Quc2l6ZSgpLnRyYW5zcG9zZWRTaXplKCkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1N1cmZh
Y2VUb0NvbnRleHQobV9pbWFnZS5nZXQoKSwgYWRqdXN0ZWREZXN0UmVjdCwgYWRqdXN0ZWRTcmNS
ZWN0LCBjb250ZXh0KTsKKworICAgIGNvbnRleHQucmVzdG9yZSgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwM2M4MWExNzBiZTc5YWU2YmU2Y2FjZGM5OWY0YzM5OGNhYWY0
MjZkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMjA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkJpdG1hcEltYWdlLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJDb3JlR3JhcGhpY3NT
UEkuaCIKLSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJHZW9tZXRyeVV0
aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVkZSAiSW1h
Z2VPYnNlcnZlci5oIgotI2luY2x1ZGUgIlN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCIKLSNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLSNpZiBVU0UoQVBQS0lUKQotI2luY2x1ZGUgPEFwcGxp
Y2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgotI2VuZGlmCi0KLSNpZiBQTEFU
Rk9STShDT0NPQSkKLSNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0jZW5kaWYK
LQotI2lmIFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2Vi
S2l0U3lzdGVtSW50ZXJmYWNlLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1u
YW1lc3BhY2UgTmF0aXZlSW1hZ2UgewotCi1JbnRTaXplIHNpemUoY29uc3QgUmV0YWluUHRyPENH
SW1hZ2VSZWY+JiBpbWFnZSkKLXsKLSAgICBBU1NFUlQoaW1hZ2UpOwotICAgIHJldHVybiBJbnRT
aXplKENHSW1hZ2VHZXRXaWR0aChpbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2Uu
Z2V0KCkpKTsKLX0KLQotYm9vbCBoYXNBbHBoYShjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4m
KQotewotICAgIC8vIEZJWE1FOiBBbnN3ZXIgY29ycmVjdGx5IHRoZSBxdWVzdGlvbjogZG9lcyB0
aGUgQ0dJbWFnZVJlZiBoYXZlIGFscGhhIGNoYW5ubmVsPwotICAgIHJldHVybiB0cnVlOwotfQot
ICAgIAotQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKGNvbnN0IFJldGFpblB0cjxDR0ltYWdl
UmVmPiYgaW1hZ2UpCi17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICAKLSAgICBpZiAoTmF0aXZl
SW1hZ2U6OnNpemUoaW1hZ2UpICE9IEludFNpemUoMSwgMSkpCi0gICAgICAgIHJldHVybiBDb2xv
cigpOwotICAgIAotICAgIHVuc2lnbmVkIGNoYXIgcGl4ZWxbNF07IC8vIFJHQkEKLSAgICBhdXRv
IGJpdG1hcENvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShwaXhlbCwgMSwg
MSwgOCwgc2l6ZW9mKHBpeGVsKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwKLSAgICAgICAga0NHSW1h
Z2VBbHBoYVByZW11bHRpcGxpZWRMYXN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcpKTsKLQot
ICAgIGlmICghYml0bWFwQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0gICAgCi0g
ICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGJpdG1hcENvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9k
ZUNvcHkpOwotICAgIENHQ29udGV4dERyYXdJbWFnZShiaXRtYXBDb250ZXh0LmdldCgpLCBDR1Jl
Y3RNYWtlKDAsIDAsIDEsIDEpLCBpbWFnZS5nZXQoKSk7Ci0gICAgCi0gICAgaWYgKCFwaXhlbFsz
XSkKLSAgICAgICAgcmV0dXJuIENvbG9yKDAsIDAsIDAsIDApOwotCi0gICAgcmV0dXJuIENvbG9y
KHBpeGVsWzBdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICogMjU1IC8gcGl4ZWxbM10sIHBp
eGVsWzJdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKLX0KLQotfQotCi1ib29sIEZyYW1l
RGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQotewotICAgIGlmIChjbGVhck1ldGFkYXRh
KQotICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOwotCi0gICAgbV9zdWJzYW1wbGluZ0xl
dmVsID0gMDsKLQotICAgIGlmIChtX2ltYWdlKSB7Ci0jaWYgQ0FDSEVfU1VCSU1BR0VTCi0gICAg
ICAgIHN1YmltYWdlQ2FjaGUoKS5jbGVhckltYWdlKG1faW1hZ2UuZ2V0KCkpOwotI2VuZGlmCi0g
ICAgICAgIG1faW1hZ2UgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1DR0ltYWdlUmVmIEJpdG1hcEltYWdlOjpnZXRDR0ltYWdl
UmVmKCkKLXsKLSAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCkuZ2V0KCk7Ci19Ci0KLUNH
SW1hZ2VSZWYgQml0bWFwSW1hZ2U6OmdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6ZShjb25zdCBJbnRT
aXplJiBzaXplKQotewotICAgIHNpemVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgQ0dJbWFnZVJlZiBjZ0lt
YWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkuZ2V0KCk7Ci0gICAgICAgIGlmIChjZ0ltYWdlICYm
IEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGNnSW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGNnSW1h
Z2UpKSA9PSBzaXplKQotICAgICAgICAgICAgcmV0dXJuIGNnSW1hZ2U7Ci0gICAgfQotCi0gICAg
Ly8gRmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgQ0dJbWFnZVJlZiBpZiB3ZSBjYW4ndCBmaW5kIHRo
ZSByaWdodCBzaXplCi0gICAgcmV0dXJuIGdldENHSW1hZ2VSZWYoKTsKLX0KLQotUmV0YWluUHRy
PENGQXJyYXlSZWY+IEJpdG1hcEltYWdlOjpnZXRDR0ltYWdlQXJyYXkoKQotewotICAgIHNpemVf
dCBjb3VudCA9IGZyYW1lQ291bnQoKTsKLSAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAKLSAgICBDRk11dGFibGVBcnJheVJlZiBhcnJheSA9IENGQXJyYXlDcmVh
dGVNdXRhYmxlKE5VTEwsIGNvdW50LCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKENHSW1hZ2VSZWYg
Y3VyckZyYW1lID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkuZ2V0KCkpCi0gICAgICAgICAgICBDRkFy
cmF5QXBwZW5kVmFsdWUoYXJyYXksIGN1cnJGcmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBhZG9w
dENGKGFycmF5KTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQm
IGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3AsIEJsZW5kTW9kZSBibGVuZE1vZGUsIElt
YWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikKLXsKLSNpZiBQTEFURk9STShJ
T1MpCi0gICAgc3RhcnRBbmltYXRpb24oRG9Ob3RDYXRjaFVwKTsKLSNlbHNlCi0gICAgc3RhcnRB
bmltYXRpb24oKTsKLSNlbmRpZgotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwot
ICAgIC8vIE5ldmVyIHVzZSBzdWJzYW1wbGVkIGltYWdlcyBmb3IgZHJhd2luZyBpbnRvIFBERiBj
b250ZXh0cy4KLSAgICBpZiAod2tDR0NvbnRleHRJc1BERkNvbnRleHQoY3R4dC5wbGF0Zm9ybUNv
bnRleHQoKSkpCi0gICAgICAgIGltYWdlID0gY29weVVuc2NhbGVkRnJhbWVJbWFnZUF0SW5kZXgo
bV9jdXJyZW50RnJhbWUpOwotICAgIGVsc2UgewotICAgICAgICBDR1JlY3QgdHJhbnNmb3JtZWRE
ZXN0aW5hdGlvblJlY3QgPSBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShkZXN0UmVjdCwgQ0dD
b250ZXh0R2V0Q1RNKGN0eHQucGxhdGZvcm1Db250ZXh0KCkpKTsKLSAgICAgICAgZmxvYXQgc3Vi
c2FtcGxpbmdTY2FsZSA9IHN0ZDo6bWluPGZsb2F0PigxLCBzdGQ6Om1heCh0cmFuc2Zvcm1lZERl
c3RpbmF0aW9uUmVjdC5zaXplLndpZHRoIC8gc3JjUmVjdC53aWR0aCgpLCB0cmFuc2Zvcm1lZERl
c3RpbmF0aW9uUmVjdC5zaXplLmhlaWdodCAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsKLQotICAgICAg
ICBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lLCBzdWJzYW1wbGluZ1Nj
YWxlKTsKLSAgICB9Ci0KLSAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3
b24ndCBoYXZlIGFuIGltYWdlIHlldC4KLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIENvbG9y
IGNvbG9yID0gc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCk7Ci0gICAgaWYgKGNvbG9yLmlzVmFsaWQo
KSkgewotICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwgZGVzdFJlY3QsIGNvbG9yLCBj
b21wb3NpdGVPcCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBTdWJzYW1wbGlu
ZyBtYXkgaGF2ZSBnaXZlbiB1cyBhbiBpbWFnZSB0aGF0IGlzIHNtYWxsZXIgdGhhbiBzaXplKCku
Ci0gICAgSW50U2l6ZSBpbWFnZVNpemUoQ0dJbWFnZUdldFdpZHRoKGltYWdlLmdldCgpKSwgQ0dJ
bWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSkpOwotICAgIAotICAgIC8vIHNyY1JlY3QgaXMgaW4g
dGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB1bnN1YnNhbXBsZWQgaW1hZ2UsIHNvIHdlIGhhdmUgdG8g
bWFwIGl0IHRvIHRoZSBzdWJzYW1wbGVkIGltYWdlLgotICAgIEZsb2F0UmVjdCBzY2FsZWRTcmNS
ZWN0ID0gc3JjUmVjdDsKLSAgICBpZiAoaW1hZ2VTaXplICE9IG1fc2l6ZSkgewotICAgICAgICBG
bG9hdFJlY3Qgb3JpZ2luYWxJbWFnZUJvdW5kcyhGbG9hdFBvaW50KCksIG1fc2l6ZSk7Ci0gICAg
ICAgIEZsb2F0UmVjdCBzdWJzYW1wbGVkSW1hZ2VCb3VuZHMoRmxvYXRQb2ludCgpLCBpbWFnZVNp
emUpOwotICAgICAgICBzY2FsZWRTcmNSZWN0ID0gbWFwUmVjdChzcmNSZWN0LCBvcmlnaW5hbElt
YWdlQm91bmRzLCBzdWJzYW1wbGVkSW1hZ2VCb3VuZHMpOwotICAgIH0KLSAgICAKLSAgICBJbWFn
ZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uOwotICAgIGlmIChkZXNjcmlwdGlvbi5yZXNwZWN0SW1h
Z2VPcmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQotICAgICAgICBvcmll
bnRhdGlvbiA9IGZyYW1lT3JpZW50YXRpb25BdEluZGV4KG1fY3VycmVudEZyYW1lKTsKLQotICAg
IGN0eHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzY2FsZWRT
cmNSZWN0LCBjb21wb3NpdGVPcCwgYmxlbmRNb2RlLCBvcmllbnRhdGlvbik7Ci0KLSAgICBpZiAo
aW1hZ2VPYnNlcnZlcigpKQotICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7
Ci19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBCaXRtYXBJbWFnZTo6Y29weVVuc2NhbGVkRnJh
bWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4KQotewotICAgIGlmIChpbmRleCA+PSBmcmFtZUNv
dW50KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGluZGV4ID49IG1fZnJh
bWVzLnNpemUoKSB8fCAhbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2UpCi0gICAgICAgIGNhY2hlRnJh
bWUoaW5kZXgsIDApOwotCi0gICAgaWYgKCFtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1wbGluZ0xl
dmVsKQotICAgICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2U7Ci0KLSAgICByZXR1
cm4gbV9zb3VyY2UuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgpOwotfQotCi19Ci0KLSNl
bmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXR0ZXJuQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUGF0dGVybkNHLmNwcAppbmRleCBiNDI4ZDUwZDk0YmY5MjQyODAzMjg3ZDJlZWMxNmJkNjlj
NTI4ZDkyLi4zZGFhMTM5YWI3ZWE1YjQyMTU3Nzg4MzVkMzUzZDhhZGI1ZjBjNzVlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKQEAg
LTcyLDcgKzcyLDcgQEAgQ0dQYXR0ZXJuUmVmIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVy
bihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRyYW4KICAgICAvLyBJZiB3ZSdyZSBy
ZXBlYXRpbmcgaW4gYm90aCBkaXJlY3Rpb25zLCB3ZSBjYW4gdXNlIGltYWdlLWJhY2tlZCBwYXR0
ZXJucwogICAgIC8vIGluc3RlYWQgb2YgY3VzdG9tIHBhdHRlcm5zLCBhbmQgYXZvaWQgdGlsaW5n
LWVkZ2UgcGl4ZWwgY3JhY2tzLgogICAgIGlmIChtX3JlcGVhdFggJiYgbV9yZXBlYXRZKQotICAg
ICAgICByZXR1cm4gd2tDR1BhdHRlcm5DcmVhdGVXaXRoSW1hZ2VBbmRUcmFuc2Zvcm0odGlsZUlt
YWdlKCktPmdldENHSW1hZ2VSZWYoKSwgcGF0dGVyblRyYW5zZm9ybSwgd2tQYXR0ZXJuVGlsaW5n
Q29uc3RhbnRTcGFjaW5nKTsKKyAgICAgICAgcmV0dXJuIHdrQ0dQYXR0ZXJuQ3JlYXRlV2l0aElt
YWdlQW5kVHJhbnNmb3JtKHRpbGVJbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmdldCgpLCBwYXR0ZXJu
VHJhbnNmb3JtLCB3a1BhdHRlcm5UaWxpbmdDb25zdGFudFNwYWNpbmcpOwogCiAgICAgLy8gSWYg
RkxUX01BWCBzaG91bGQgYWxzbyBiZSB1c2VkIGZvciB4U3RlcCBvciB5U3RlcCwgbm90aGluZyBp
cyByZW5kZXJlZC4gVXNpbmcgZnJhY3Rpb25zIG9mIEZMVF9NQVggYWxzbwogICAgIC8vIHJlc3Vs
dCBpbiBub3RoaW5nIGJlaW5nIHJlbmRlcmVkLgpAQCAtODMsNyArODMsNyBAQCBDR1BhdHRlcm5S
ZWYgUGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dXNlclNwYWNlVHJhbgogICAgIENHRmxvYXQgeVN0ZXAgPSBtX3JlcGVhdFkgPyB0aWxlUmVjdC5o
ZWlnaHQoKSA6ICgxIDw8IDIyKTsKIAogICAgIC8vIFRoZSBwYXR0ZXJuIHdpbGwgcmVsZWFzZSB0
aGUgQ0dJbWFnZVJlZiB3aGVuIGl0J3MgZG9uZSByZW5kZXJpbmcgaW4gcGF0dGVyblJlbGVhc2VD
YWxsYmFjawotICAgIENHSW1hZ2VSZWYgcGxhdGZvcm1JbWFnZSA9IENHSW1hZ2VSZXRhaW4odGls
ZUltYWdlKCktPmdldENHSW1hZ2VSZWYoKSk7CisgICAgQ0dJbWFnZVJlZiBwbGF0Zm9ybUltYWdl
ID0gdGlsZUltYWdlKCktPm5hdGl2ZUltYWdlKCkubGVha1JlZigpOwogCiAgICAgY29uc3QgQ0dQ
YXR0ZXJuQ2FsbGJhY2tzIHBhdHRlcm5DYWxsYmFja3MgPSB7IDAsIHBhdHRlcm5DYWxsYmFjaywg
cGF0dGVyblJlbGVhc2VDYWxsYmFjayB9OwogICAgIHJldHVybiBDR1BhdHRlcm5DcmVhdGUocGxh
dGZvcm1JbWFnZSwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHhTdGVwLCB5U3RlcCwga0NH
UGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2luZywgVFJVRSwgJnBhdHRlcm5DYWxsYmFja3MpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1J
bWFnZUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BsYXRmb3Jt
SW1hZ2VDRy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWZiMmRlMGVhMTJkYTIxNGYxMDQ2YzM5NjJlOGVhYjUz
YzY0NDEyNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiQ29s
b3IuaCIKKyNpbmNsdWRlICJDb3JlR3JhcGhpY3NTUEkuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKKyNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dENHLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlN1YmltYWdlQ2FjaGVX
aXRoVGltZXIuaCIKKworI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1J
bnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworICAgIAordm9pZCBQbGF0Zm9ybUltYWdlOjpjbGVhclN1YkltYWdlcygpCit7Cisj
aWYgQ0FDSEVfU1VCSU1BR0VTCisgICAgaWYgKCFpc05pbCgpKQorICAgICAgICBzdWJpbWFnZUNh
Y2hlKCkuY2xlYXJJbWFnZShjZ0ltYWdlUmVmKCkpOworI2VuZGlmCit9CisKK0ludFNpemUgUGxh
dGZvcm1JbWFnZTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzTmlsKCkgPyBJbnRTaXpl
KCkgOiBJbnRTaXplKENHSW1hZ2VHZXRXaWR0aChjZ0ltYWdlUmVmKCkpLCBDR0ltYWdlR2V0SGVp
Z2h0KGNnSW1hZ2VSZWYoKSkpOworfQorCitib29sIFBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKCkg
Y29uc3QKK3sKKyAgICAvLyBGSVhNRTogQW5zd2VyIGNvcnJlY3RseSB0aGUgcXVlc3Rpb246IGRv
ZXMgdGhlIENHSW1hZ2VSZWYgaGF2ZSBhbHBoYSBjaGFubm5lbD8KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworQ29sb3IgUGxhdGZvcm1JbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3QK
K3sKKyAgICBpZiAoaXNOaWwoKSB8fCBzaXplKCkgIT0gSW50U2l6ZSgxLCAxKSkKKyAgICAgICAg
cmV0dXJuIENvbG9yKCk7CisgICAgCisgICAgdW5zaWduZWQgY2hhciBwaXhlbFs0XTsgLy8gUkdC
QQorICAgIGF1dG8gYml0bWFwQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRl
KHBpeGVsLCAxLCAxLCA4LCBzaXplb2YocGl4ZWwpLCBzUkdCQ29sb3JTcGFjZVJlZigpLAorICAg
ICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIz
MkJpZykpOworICAgIAorICAgIGlmICghYml0bWFwQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIENv
bG9yKCk7CisgICAgCisgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGJpdG1hcENvbnRleHQuZ2V0
KCksIGtDR0JsZW5kTW9kZUNvcHkpOworICAgIENHQ29udGV4dERyYXdJbWFnZShiaXRtYXBDb250
ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIDEsIDEpLCBjZ0ltYWdlUmVmKCkpOworICAgIAor
ICAgIGlmICghcGl4ZWxbM10pCisgICAgICAgIHJldHVybiBDb2xvcigwLCAwLCAwLCAwKTsKKyAg
ICAKKyAgICByZXR1cm4gQ29sb3IocGl4ZWxbMF0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMV0g
KiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMl0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbM10pOwor
fQorICAgIAorYm9vbCBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKSBjb25zdAor
eworICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBjZ0ltYWdlUmVmKCk7CisgICAgQVNTRVJUKENHSW1h
Z2VHZXRCaXRzUGVyQ29tcG9uZW50KGltYWdlKSA9PSA4KTsKKyAgICAKKyAgICBDR0JpdG1hcElu
Zm8gaW1hZ2VJbmZvID0gQ0dJbWFnZUdldEJpdG1hcEluZm8oaW1hZ2UpOworICAgIGlmICghKGlt
YWdlSW5mbyAmIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlKSB8fCAoaW1hZ2VJbmZvICYga0NH
Qml0bWFwQWxwaGFJbmZvTWFzaykgIT0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCkg
eworICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYmVpbmcgYWJsZSB0byBoYW5kbGUgb3RoZXIg
cGl4ZWwgZm9ybWF0cy4KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHdpZHRoID0gQ0dJbWFnZUdldFdp
ZHRoKGltYWdlKTsKKyAgICBzaXplX3QgaGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChpbWFnZSk7
CisgICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0gQ0dJbWFnZUdldEJ5dGVzUGVyUm93KGltYWdlKTsK
KyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBwcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRh
UHJvdmlkZXJDb3B5RGF0YShDR0ltYWdlR2V0RGF0YVByb3ZpZGVyKGltYWdlKSkpOworICAgIGNv
bnN0IFVJbnQ4KiBkYXRhID0gQ0ZEYXRhR2V0Qnl0ZVB0cihwcm92aWRlci5nZXQoKSk7CisgICAg
CisgICAgLy8gT3ZlcmxheSBhIGdyaWQgb2Ygc2FtcGxpbmcgZG90cyBvbiB0b3Agb2YgYSBncmF5
c2NhbGUgdmVyc2lvbiBvZiB0aGUgaW1hZ2UuCisgICAgLy8gRm9yIHRoZSBpbnRlcmlvciBwb2lu
dHMsIGNhbGN1bGF0ZSB0aGUgZGlmZmVyZW5jZSBpbiBsdW1pbmFuY2UgYW1vbmcgdGhlIHNhbXBs
ZSBwb2ludAorICAgIC8vIGFuZCBpdHMgc3Vycm91bmRzIHBvaW50cywgc2NhbGVkIGJ5IHRyYW5z
cGFyZW5jeS4KKyAgICBjb25zdCB1bnNpZ25lZCBzYW1wbGVSb3dzID0gNzsKKyAgICBjb25zdCB1
bnNpZ25lZCBzYW1wbGVDb2xzID0gNzsKKyAgICAvLyBGSVhNRTogUmVmaW5lIHRoZSBwcm9wZXIg
bnVtYmVyIG9mIHNhbXBsZXMsIGFuZCBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgYXNwZWN0IHJhdGlv
cy4KKyAgICBpZiAod2lkdGggPCBzYW1wbGVDb2xzIHx8IGhlaWdodCA8IHNhbXBsZVJvd3MpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBFbnN1cmUgdGhhdCB0aGUgbGFzdCBy
b3cvY29sdW1uIGxhbmQgb24gdGhlIGltYWdlIHBlcmltZXRlci4KKyAgICBjb25zdCBmbG9hdCBz
dHJpZGVXaWR0aCA9IHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCAtIDEpIC8gKHNhbXBsZUNvbHMg
LSAxKTsKKyAgICBjb25zdCBmbG9hdCBzdHJpZGVIZWlnaHQgPSBzdGF0aWNfY2FzdDxmbG9hdD4o
aGVpZ2h0IC0gMSkgLyAoc2FtcGxlUm93cyAtIDEpOworICAgIGZsb2F0IHNhbXBsZXNbc2FtcGxl
Um93c11bc2FtcGxlQ29sc107CisgICAgCisgICAgLy8gRmluZCB0aGUgbHVtaW5hbmNlIG9mIHRo
ZSBzYW1wbGUgcG9pbnRzLgorICAgIGZsb2F0IHkgPSAwOworICAgIGNvbnN0IFVJbnQ4KiByb3cg
PSBkYXRhOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzYW1wbGVSb3dzOyArK2kpIHsK
KyAgICAgICAgZmxvYXQgeCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBz
YW1wbGVDb2xzOyArK2opIHsKKyAgICAgICAgICAgIGNvbnN0IFVJbnQ4KiBwMCA9IHJvdyArIChz
dGF0aWNfY2FzdDxpbnQ+KHggKyAuNSkpICogNDsKKyAgICAgICAgICAgIC8vIFIgRyBCIEEKKyAg
ICAgICAgICAgIHNhbXBsZXNbaV1bal0gPSAoMC4yMTI1ICogKnAwICsgMC43MTU0ICogKihwMCsx
KSArIDAuMDcyMSAqICoocDArMikpICogKihwMCszKSAvIDI1NTsKKyAgICAgICAgICAgIHggKz0g
c3RyaWRlV2lkdGg7CisgICAgICAgIH0KKyAgICAgICAgeSArPSBzdHJpZGVIZWlnaHQ7CisgICAg
ICAgIHJvdyA9IGRhdGEgKyAoc3RhdGljX2Nhc3Q8aW50Pih5ICsgLjUpKSAqIGJ5dGVzUGVyUm93
OworICAgIH0KKyAgICAKKyAgICAvLyBEZXRlcm1pbmUgdGhlIGltYWdlIHNjb3JlLgorICAgIGZs
b2F0IGFjY3VtU2NvcmUgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzYW1wbGVS
b3dzIC0gMTsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDE7IGogPCBzYW1wbGVD
b2xzIC0gMTsgKytqKSB7CisgICAgICAgICAgICBmbG9hdCBkaWZmID0gc2FtcGxlc1tpIC0gMV1b
al0gKyBzYW1wbGVzW2kgKyAxXVtqXSArIHNhbXBsZXNbaV1baiAtIDFdICsgc2FtcGxlc1tpXVtq
ICsgMV0gLSA0ICogc2FtcGxlc1tpXVtqXTsKKyAgICAgICAgICAgIGFjY3VtU2NvcmUgKz0gZGlm
ZiAqIGRpZmY7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gVGhlIHNjb3JlIGZvciBh
IGdpdmVuIHNhbXBsZSBjYW4gYmUgd2l0aGluIHRoZSByYW5nZSBvZiAwIGFuZCAyNTVeMi4KKyAg
ICByZXR1cm4gYWNjdW1TY29yZSA8IDI1MDAgKiAoc2FtcGxlUm93cyAtIDIpICogKHNhbXBsZUNv
bHMgLSAyKTsKK30KKworZmxvYXQgUGxhdGZvcm1JbWFnZTo6c3Vic2FtcGxpbmdTY2FsZShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCkKK3sKKyAgICAvLyBOZXZlciB1c2Ugc3Vic2FtcGxlZCBpbWFnZXMg
Zm9yIGRyYXdpbmcgaW50byBQREYgY29udGV4dHMuCisgICAgaWYgKHdrQ0dDb250ZXh0SXNQREZD
b250ZXh0KGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpKQorICAgICAgICByZXR1cm4gMTsKKyAg
ICAKKyAgICBDR1JlY3QgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3QgPSBDR1JlY3RBcHBseUFm
ZmluZVRyYW5zZm9ybShkZXN0UmVjdCwgQ0dDb250ZXh0R2V0Q1RNKGNvbnRleHQucGxhdGZvcm1D
b250ZXh0KCkpKTsKKyAgICByZXR1cm4gc3RkOjptaW48ZmxvYXQ+KDEsIHN0ZDo6bWF4KHRyYW5z
Zm9ybWVkRGVzdGluYXRpb25SZWN0LnNpemUud2lkdGggLyBzcmNSZWN0LndpZHRoKCksIHRyYW5z
Zm9ybWVkRGVzdGluYXRpb25SZWN0LnNpemUuaGVpZ2h0IC8gc3JjUmVjdC5oZWlnaHQoKSkpOwor
fQorCit2b2lkIFBsYXRmb3JtSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEludFNpemUmIHNyY1NpemUsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSwg
Y29uc3QgSW1hZ2VPcmllbnRhdGlvbiYgb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgLy8gU3Vi
c2FtcGxpbmcgbWF5IGhhdmUgZ2l2ZW4gdXMgYW4gaW1hZ2UgdGhhdCBpcyBzbWFsbGVyIHRoYW4g
c2l6ZSgpLgorICAgIEludFNpemUgc3Vic2FtcGxlZEltYWdlU2l6ZSA9IHNpemUoKTsKKyAgICAK
KyAgICAvLyBzcmNSZWN0IGlzIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgdW5zdWJzYW1wbGVk
IGltYWdlLCBzbyB3ZSBoYXZlIHRvIG1hcCBpdCB0byB0aGUgc3Vic2FtcGxlZCBpbWFnZS4KKyAg
ICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBpZiAoc3Vic2FtcGxl
ZEltYWdlU2l6ZSAhPSBzcmNTaXplKQorICAgICAgICBhZGp1c3RlZFNyY1JlY3QgPSBtYXBSZWN0
KHNyY1JlY3QsIEZsb2F0UmVjdCh7IH0sIHNyY1NpemUpLCBGbG9hdFJlY3QoeyB9LCBzdWJzYW1w
bGVkSW1hZ2VTaXplKSk7CisgICAgCisgICAgY29udGV4dC5kcmF3TmF0aXZlSW1hZ2UobV9pbWFn
ZSwgc3Vic2FtcGxlZEltYWdlU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3AsIG1v
ZGUsIG9yaWVudGF0aW9uKTsKK30KKyAgICAKK30KKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1RleHRUcmFja1Jl
cHJlc2VudGF0aW9uQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tCmluZGV4IDg5NzIwZDE3MzY1ZGE3
ZThiYTg0NjlkNTI5NDU0OGQ1MTg0N2E3ZmUuLjQ0NzZmYzVmODdjMzQ5ODhmNmQ5YWQ1NWVlYmQ4
ZDFiOWJiMDIyZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5t
bQpAQCAtMTI5LDcgKzEyOSw3IEBAIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2E6On5UZXh0
VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hKCkKIHZvaWQgVGV4dFRyYWNrUmVwcmVzZW50YXRpb25D
b2NvYTo6dXBkYXRlKCkKIHsKICAgICBpZiAoYXV0byByZXByZXNlbnRhdGlvbiA9IG1fY2xpZW50
LmNyZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2UoKSkKLSAgICAgICAgW21fbGF5ZXIu
Z2V0KCkgc2V0Q29udGVudHM6KGlkKXJlcHJlc2VudGF0aW9uLT5nZXRDR0ltYWdlUmVmKCldOwor
ICAgICAgICBbbV9sYXllci5nZXQoKSBzZXRDb250ZW50czooaWQpcmVwcmVzZW50YXRpb24tPm5h
dGl2ZUltYWdlKCkuZ2V0KCldOwogfQogCiB2b2lkIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29j
b2E6OnNldENvbnRlbnRTY2FsZShmbG9hdCBzY2FsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQppbmRleCAwMWViNmRkMzAwNDNhMjI1Mjkx
NzZmZDkxMjExN2RjNTc3NmMxN2JhLi5kYzFjN2M3MDk1ZDk0NGM0YzYyZjFmZTA5MzU3MDJhMTNj
N2M3YTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
SW1hZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0lt
YWdlTWFjLm1tCkBAIC04NSwzMSArODUsMjIgQEAgQ0ZEYXRhUmVmIEJpdG1hcEltYWdlOjpnZXRU
SUZGUmVwcmVzZW50YXRpb24oKQogICAgIGlmIChtX3RpZmZSZXApCiAgICAgICAgIHJldHVybiBt
X3RpZmZSZXAuZ2V0KCk7CiAKLSAgICB1bnNpZ25lZCBudW1GcmFtZXMgPSBmcmFtZUNvdW50KCk7
CisgICAgYXV0byBuYXRpdmVJbWFnZXMgPSB0aGlzLT5mcmFtZXNOYXRpdmVJbWFnZXMoKTsKIAot
ICAgIC8vIElmIG51bUZyYW1lcyBpcyB6ZXJvLCB3ZSBrbm93IGZvciBjZXJ0YWluIHRoaXMgaW1h
Z2UgZG9lc24ndCBoYXZlIHZhbGlkIGRhdGEKKyAgICAvLyBJZiBmcmFtZXNJbWFnZXMuc2l6ZSgp
IGlzIHplcm8sIHdlIGtub3cgZm9yIGNlcnRhaW4gdGhpcyBpbWFnZSBkb2Vzbid0IGhhdmUgdmFs
aWQgZGF0YQogICAgIC8vIEV2ZW4gdGhvdWdoIHRoZSBjYWxsIHRvIENHSW1hZ2VEZXN0aW5hdGlv
bkNyZWF0ZVdpdGhEYXRhIHdpbGwgZmFpbCBhbmQgd2UnbGwgaGFuZGxlIGl0IGdyYWNlZnVsbHks
CiAgICAgLy8gaW4gY2VydGFpbiBjaXJjdW1zdGFuY2VzIHRoYXQgY2FsbCB3aWxsIHNwYW0gdGhl
IGNvbnNvbGUgd2l0aCBhbiBlcnJvciBtZXNzYWdlCi0gICAgaWYgKCFudW1GcmFtZXMpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgVmVjdG9yPENHSW1hZ2VSZWY+IGltYWdlczsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRnJhbWVzOyArK2kgKSB7Ci0gICAgICAgIENHSW1hZ2VS
ZWYgY2dJbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpOwotICAgICAgICBpZiAoY2dJ
bWFnZSkKLSAgICAgICAgICAgIGltYWdlcy5hcHBlbmQoY2dJbWFnZSk7Ci0gICAgfQotCi0gICAg
dW5zaWduZWQgbnVtVmFsaWRGcmFtZXMgPSBpbWFnZXMuc2l6ZSgpOworICAgIGlmICghbmF0aXZl
SW1hZ2VzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZXRhaW5QdHI8
Q0ZNdXRhYmxlRGF0YVJlZj4gZGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAw
KSk7Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VEZXN0aW5hdGlvblJlZj4gZGVzdGluYXRpb24gPSBh
ZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEuZ2V0KCksIGtVVFR5
cGVUSUZGLCBudW1WYWxpZEZyYW1lcywgMCkpOworICAgIFJldGFpblB0cjxDR0ltYWdlRGVzdGlu
YXRpb25SZWY+IGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVX
aXRoRGF0YShkYXRhLmdldCgpLCBrVVRUeXBlVElGRiwgbmF0aXZlSW1hZ2VzLnNpemUoKSwgMCkp
OwogCiAgICAgaWYgKCFkZXN0aW5hdGlvbikKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVZhbGlkRnJh
bWVzOyArK2kpCi0gICAgICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9u
LmdldCgpLCBpbWFnZXNbaV0sIDApOworICAgIGZvciAoYXV0byBuYXRpdmVJbWFnZSA6IG5hdGl2
ZUltYWdlcykKKyAgICAgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRpb24u
Z2V0KCksIG5hdGl2ZUltYWdlLmdldCgpLCAwKTsKIAogICAgIENHSW1hZ2VEZXN0aW5hdGlvbkZp
bmFsaXplKGRlc3RpbmF0aW9uLmdldCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAKaW5kZXggMjE3NTNiZDA3
OGExYzU1YzMyNzE5YzE0ODQ2ZjBmNmI5OTc1ZjhmZC4uMGMwNjNlYmFlYjUzMThiMmM5Y2E3ZGU5
NzExMjMyMmRmZTgyOTE4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCkBAIC0xNDIsNiArMTQyLDcgQEAgSW1h
Z2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0IEltYWdlRnJhbWUmIG90aGVyKQog
ICAgICAgICByZXR1cm4gKnRoaXM7CiAKICAgICBjb3B5Qml0bWFwRGF0YShvdGhlcik7CisgICAg
c2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7CiAgICAgc2V0T3JpZ2luYWxGcmFtZVJlY3Qo
b3RoZXIub3JpZ2luYWxGcmFtZVJlY3QoKSk7CiAgICAgc2V0U3RhdHVzKG90aGVyLnN0YXR1cygp
KTsKICAgICBzZXREdXJhdGlvbihvdGhlci5kdXJhdGlvbigpKTsKQEAgLTE1Miw4ICsxNTMsNyBA
QCBJbWFnZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYgb3Ro
ZXIpCiAKIHZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXJQaXhlbERhdGEoKQogewotICAgIG1fYmFja2lu
Z1N0b3JlLmNsZWFyKCk7Ci0gICAgbV9ieXRlcyA9IDA7CisgICAgbV9waXhlbHMgPSBudWxscHRy
OwogICAgIG1fc3RhdHVzID0gRnJhbWVFbXB0eTsKICAgICAvLyBOT1RFOiBEbyBub3QgcmVzZXQg
b3RoZXIgbWVtYmVycyBoZXJlOyBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoKSBjYWxscyB0aGlzCiAg
ICAgLy8gdG8gZnJlZSB0aGUgYml0bWFwIGRhdGEsIGJ1dCBvdGhlciBmdW5jdGlvbnMgbGlrZSBp
bml0RnJhbWVCdWZmZXIoKSBhbmQKQEAgLTE2MywyNCArMTYzLDE2IEBAIHZvaWQgSW1hZ2VGcmFt
ZTo6Y2xlYXJQaXhlbERhdGEoKQogCiB2b2lkIEltYWdlRnJhbWU6Onplcm9GaWxsUGl4ZWxEYXRh
KCkKIHsKLSAgICBtZW1zZXQobV9ieXRlcywgMCwgbV9zaXplLndpZHRoKCkgKiBtX3NpemUuaGVp
Z2h0KCkgKiBzaXplb2YoUGl4ZWxEYXRhKSk7CisgICAgbV9waXhlbHMtPmNsZWFyKCk7CiAgICAg
bV9oYXNBbHBoYSA9IHRydWU7CiB9CiAKIHZvaWQgSW1hZ2VGcmFtZTo6emVyb0ZpbGxGcmFtZVJl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBBU1NFUlQoSW50UmVjdChJbnRQb2ludCgp
LCBtX3NpemUpLmNvbnRhaW5zKHJlY3QpKTsKLQogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRo
KCkgKiBzaXplb2YoUGl4ZWxEYXRhKTsKLSAgICBQaXhlbERhdGEqIHN0YXJ0ID0gbV9ieXRlcyAr
IChyZWN0LnkoKSAqIHdpZHRoKCkpICsgcmVjdC54KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCByZWN0LmhlaWdodCgpOyArK2kpIHsKLSAgICAgICAgbWVtc2V0KHN0YXJ0LCAwLCByZWN0V2lk
dGhJbkJ5dGVzKTsKLSAgICAgICAgc3RhcnQgKz0gd2lkdGgoKTsKLSAgICB9Ci0KKyAgICBtX3Bp
eGVscy0+Y2xlYXJSZWN0KHJlY3QpOwogICAgIHNldEhhc0FscGhhKHRydWUpOwogfQogCkBAIC0x
ODksMjUgKzE4MSwyMyBAQCBib29sIEltYWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKGNvbnN0IElt
YWdlRnJhbWUmIG90aGVyKQogICAgIGlmICh0aGlzID09ICZvdGhlcikKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKLSAgICBtX2JhY2tpbmdTdG9yZSA9IG90aGVyLm1fYmFja2luZ1N0b3JlOwotICAg
IG1fYnl0ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7Ci0gICAgbV9zaXplID0gb3RoZXIubV9z
aXplOwotICAgIHNldEhhc0FscGhhKG90aGVyLm1faGFzQWxwaGEpOworICAgIGlmIChvdGhlci5t
X3BpeGVscykKKyAgICAgICAgbV9waXhlbHMgPSBCaXRtYXBQaXhlbHM6OmNyZWF0ZSgqb3RoZXIt
Pm1fcGl4ZWxzLmdldCgpKTsKKyAgICBlbHNlCisgICAgICAgIG1fcGl4ZWxzID0gbnVsbHB0cjsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBJbWFnZUZyYW1lOjpzZXRTaXplKGludCBuZXdX
aWR0aCwgaW50IG5ld0hlaWdodCkKIHsKLSAgICBBU1NFUlQoIXdpZHRoKCkgJiYgIWhlaWdodCgp
KTsKLSAgICBzaXplX3QgYmFja2luZ1N0b3JlU2l6ZSA9IG5ld1dpZHRoICogbmV3SGVpZ2h0Owot
ICAgIGlmICghbV9iYWNraW5nU3RvcmUudHJ5UmVzZXJ2ZUNhcGFjaXR5KGJhY2tpbmdTdG9yZVNp
emUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9iYWNraW5nU3RvcmUucmVzaXplKGJh
Y2tpbmdTdG9yZVNpemUpOwotICAgIG1fYnl0ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7Ci0g
ICAgbV9zaXplID0gSW50U2l6ZShuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKKyAgICBBU1NFUlQoIW1f
cGl4ZWxzKTsKKyAgICBtX3BpeGVscyA9IEJpdG1hcFBpeGVsczo6Y3JlYXRlKEludFNpemUobmV3
V2lkdGgsIG5ld0hlaWdodCksIG1fcHJlbXVsdGlwbHlBbHBoYSk7CisgICAgcmV0dXJuIG1fcGl4
ZWxzOworfQogCi0gICAgemVyb0ZpbGxQaXhlbERhdGEoKTsKLSAgICByZXR1cm4gdHJ1ZTsKK3Zv
aWQgSW1hZ2VGcmFtZTo6Y29weVJvd05UaW1lcyhpbnQgc3RhcnRYLCBpbnQgZW5kWCwgaW50IHN0
YXJ0WSwgaW50IGVuZFkpCit7CisgICAgbV9waXhlbHMtPnJlcGVhdEZpcnN0Um93KEludFJlY3Qo
c3RhcnRYLCBzdGFydFksIGVuZFggLXN0YXJ0WCAsIGVuZFkgLSBzdGFydFkpKTsKIH0KIAogYm9v
bCBJbWFnZUZyYW1lOjpoYXNBbHBoYSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCmluZGV4IDJmOGVlZTE3ODFk
MTYyZDg2YzQ5ZmUxZGFjNzJhMmU3ZTQwYTVkNmQuLmQ3NjZiYzA2Y2IyYTY4YzBhOGIxYjZkOTYx
NzU0MTAwMDg4Y2MzZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNwcmFnbWEg
b25jZQogCisjaW5jbHVkZSAiQml0bWFwUGl4ZWxzLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgog
I2luY2x1ZGUgIkltYWdlU291cmNlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKQEAg
LTU3LDcgKzU4LDYgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAg
ICAgICAgRGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzICAvLyBDbGVhciBmcmFtZSB0byBwcmV2aW91
cyBmcmFtZWJ1ZmZlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBj
b250ZW50cwogICAgICAgICB9OwotICAgICAgICB0eXBlZGVmIHVuc2lnbmVkIFBpeGVsRGF0YTsK
IAogICAgICAgICBJbWFnZUZyYW1lKCk7CiAKQEAgLTgwLDE3ICs4MCw3IEBAIHVzaW5nIENvbG9y
UHJvZmlsZSA9IFZlY3RvcjxjaGFyPjsKICAgICAgICAgLy8gQ29waWVzIHRoZSBwaXhlbCBkYXRh
IGF0IFsoc3RhcnRYLCBzdGFydFkpLCAoZW5kWCwgc3RhcnRZKSkgdG8gdGhlCiAgICAgICAgIC8v
IHNhbWUgWC1jb29yZGluYXRlcyBvbiBlYWNoIHN1YnNlcXVlbnQgcm93IHVwIHRvIGJ1dCBub3Qg
aW5jbHVkaW5nCiAgICAgICAgIC8vIGVuZFkuCi0gICAgICAgIHZvaWQgY29weVJvd05UaW1lcyhp
bnQgc3RhcnRYLCBpbnQgZW5kWCwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVChzdGFydFggPCB3aWR0aCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChl
bmRYIDw9IHdpZHRoKCkpOwotICAgICAgICAgICAgQVNTRVJUKHN0YXJ0WSA8IGhlaWdodCgpKTsK
LSAgICAgICAgICAgIEFTU0VSVChlbmRZIDw9IGhlaWdodCgpKTsKLSAgICAgICAgICAgIGNvbnN0
IGludCByb3dCeXRlcyA9IChlbmRYIC0gc3RhcnRYKSAqIHNpemVvZihQaXhlbERhdGEpOwotICAg
ICAgICAgICAgY29uc3QgUGl4ZWxEYXRhKiBjb25zdCBzdGFydEFkZHIgPSBnZXRBZGRyKHN0YXJ0
WCwgc3RhcnRZKTsKLSAgICAgICAgICAgIGZvciAoaW50IGRlc3RZID0gc3RhcnRZICsgMTsgZGVz
dFkgPCBlbmRZOyArK2Rlc3RZKQotICAgICAgICAgICAgICAgIG1lbWNweShnZXRBZGRyKHN0YXJ0
WCwgZGVzdFkpLCBzdGFydEFkZHIsIHJvd0J5dGVzKTsKLSAgICAgICAgfQorICAgICAgICB2b2lk
IGNvcHlSb3dOVGltZXMoaW50IHN0YXJ0WCwgaW50IGVuZFgsIGludCBzdGFydFksIGludCBlbmRZ
KTsKIAogICAgICAgICAvLyBBbGxvY2F0ZXMgc3BhY2UgZm9yIHRoZSBwaXhlbCBkYXRhLiAgTXVz
dCBiZSBjYWxsZWQgYmVmb3JlIGFueSBwaXhlbHMKICAgICAgICAgLy8gYXJlIHdyaXR0ZW4uICBN
dXN0IG9ubHkgYmUgY2FsbGVkIG9uY2UuICBSZXR1cm5zIHdoZXRoZXIgYWxsb2NhdGlvbgpAQCAt
MTAwLDcgKzkwLDcgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAg
ICAvLyBSZXR1cm5zIGEgY2FsbGVyLW93bmVkIHBvaW50ZXIgdG8gdGhlIHVuZGVybHlpbmcgbmF0
aXZlIGltYWdlIGRhdGEuCiAgICAgICAgIC8vIChBY3R1YWwgdXNlOiBUaGlzIHBvaW50ZXIgd2ls
bCBiZSBvd25lZCBieSBCaXRtYXBJbWFnZSBhbmQgZnJlZWQgaW4KICAgICAgICAgLy8gRnJhbWVE
YXRhOjpjbGVhcigpKS4KLSAgICAgICAgTmF0aXZlSW1hZ2VQdHIgYXNOZXdOYXRpdmVJbWFnZSgp
IGNvbnN0OworICAgICAgICBOYXRpdmVJbWFnZVB0ciBhc05ld05hdGl2ZUltYWdlKCkgY29uc3Qg
eyByZXR1cm4gbV9waXhlbHMuaW1hZ2UoKTsgfQogCiAgICAgICAgIGJvb2wgaGFzQWxwaGEoKSBj
b25zdDsKICAgICAgICAgY29uc3QgSW50UmVjdCYgb3JpZ2luYWxGcmFtZVJlY3QoKSBjb25zdCB7
IHJldHVybiBtX29yaWdpbmFsRnJhbWVSZWN0OyB9CkBAIC0xMTksMTAxICsxMDksNDQgQEAgdXNp
bmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogCiAgICAgICAgIGlubGluZSB2b2lkIHNl
dFJHQkEoaW50IHgsIGludCB5LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1
bnNpZ25lZCBhKQogICAgICAgICB7Ci0gICAgICAgICAgICBzZXRSR0JBKGdldEFkZHIoeCwgeSks
IHIsIGcsIGIsIGEpOworICAgICAgICAgICAgbV9waXhlbHMuc2V0UkdCQSh4LCB5LCByLCBnLCBi
LCBhKTsKICAgICAgICAgfQogCi0gICAgICAgIGlubGluZSBQaXhlbERhdGEqIGdldEFkZHIoaW50
IHgsIGludCB5KQorICAgICAgICBpbmxpbmUgUkdCQTMyKiBnZXRBZGRyKGludCB4LCBpbnQgeSkK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXMgKyAoeSAqIHdpZHRoKCkpICsg
eDsKKyAgICAgICAgICAgIHJldHVybiBtX3BpeGVscy5hdCh4LCB5KTsKICAgICAgICAgfQogCiAg
ICAgICAgIGlubGluZSBib29sIGhhc1BpeGVsRGF0YSgpIGNvbnN0CiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBtX2J5dGVzOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVXNlIGZpeCBw
b2ludCBtdWx0aXBsaWVyIGluc3RlYWQgb2YgaW50ZWdlciBkaXZpc2lvbiBvciBmbG9hdGluZyBw
b2ludCBtYXRoLgotICAgICAgICAvLyBUaGlzIG11bHRpcGxlciBwcm9kdWNlcyBleGFjdGx5IHRo
ZSBzYW1lIHJlc3VsdCBmb3IgYWxsIHZhbHVlcyBpbiByYW5nZSAwIC0gMjU1LgotICAgICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgZml4UG9pbnRTaGlmdCA9IDI0OwotICAgICAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgZml4UG9pbnRNdWx0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDEuMCAv
IDI1NS4wICogKDEgPDwgZml4UG9pbnRTaGlmdCkpICsgMTsKLSAgICAgICAgLy8gTXVsdGlwbGll
cyB1bnNpZ25lZCB2YWx1ZSBieSBmaXhwb2ludCB2YWx1ZSBhbmQgY29udmVydHMgYmFjayB0byB1
bnNpZ25lZC4KLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZpeFBvaW50VW5zaWduZWRNdWx0aXBs
eSh1bnNpZ25lZCBmaXhlZCwgdW5zaWduZWQgdikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuICAoZml4ZWQgKiB2KSA+PiBmaXhQb2ludFNoaWZ0OworICAgICAgICAgICAgcmV0dXJuIG1f
cGl4ZWxzLmdldCgpOwogICAgICAgICB9CiAKLSAgICAgICAgaW5saW5lIHZvaWQgc2V0UkdCQShQ
aXhlbERhdGEqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2ln
bmVkIGEpCisgICAgICAgIGlubGluZSB2b2lkIHNldFJHQkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25l
ZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAobV9wcmVtdWx0aXBseUFscGhhICYmIGEgPCAyNTUpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoIWEpIHsKLSAgICAgICAgICAgICAgICAgICAgKmRlc3QgPSAwOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
dW5zaWduZWQgYWxwaGFNdWx0ID0gYSAqIGZpeFBvaW50TXVsdDsKLSAgICAgICAgICAgICAgICBy
ID0gZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KHIsIGFscGhhTXVsdCk7Ci0gICAgICAgICAgICAg
ICAgZyA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShnLCBhbHBoYU11bHQpOwotICAgICAgICAg
ICAgICAgIGIgPSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkoYiwgYWxwaGFNdWx0KTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICpkZXN0ID0gKGEgPDwgMjQgfCByIDw8IDE2IHwgZyA8PCA4
IHwgYik7CisgICAgICAgICAgICBtX3BpeGVscy5zZXRSR0JBKGRlc3QsIHIsIGcsIGIsIGEpOwog
ICAgICAgICB9CiAKICNpZiBFTkFCTEUoQVBORykKLSAgICAgICAgc3RhdGljIGlubGluZSB1bnNp
Z25lZCBkaXZpZGUyNTUodW5zaWduZWQgYSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IChhICsgKGEgPj4gOCkgKyAxKSA+PiA4OwotICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5lIHZv
aWQgb3ZlclJHQkEoUGl4ZWxEYXRhKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNp
Z25lZCBiLCB1bnNpZ25lZCBhKQorICAgICAgICBpbmxpbmUgdm9pZCBvdmVyUkdCQShSR0JBMzIq
IGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGlmICghYSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgICAgIGlmIChhIDwgMjU1KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgYURl
c3QgPSAoKCpkZXN0KSA+PiAyNCkgJiAyNTU7Ci0gICAgICAgICAgICAgICAgaWYgKGFEZXN0KSB7
Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJEZXN0ID0gKCgqZGVzdCkgPj4gMTYpICYg
MjU1OwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBnRGVzdCA9ICgoKmRlc3QpID4+IDgp
ICYgMjU1OwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBiRGVzdCA9ICgqZGVzdCkgJiAy
NTU7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFBdXggPSAyNTUgLSBhOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgckRlc3QgPSBkaXZpZGUyNTUockRlc3QgKiBhRGVzdCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBnRGVzdCA9IGRpdmlkZTI1NShnRGVzdCAqIGFEZXN0KTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGJEZXN0ID0gZGl2aWRlMjU1KGJEZXN0ICogYURlc3QpOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBkaXZpZGUyNTUociAqIGEgKyBy
RGVzdCAqIGFBdXgpOwotICAgICAgICAgICAgICAgICAgICBnID0gZGl2aWRlMjU1KGcgKiBhICsg
Z0Rlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IGRpdmlkZTI1NShiICogYSAr
IGJEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAgIGEgKz0gZGl2aWRlMjU1KGFEZXN0
ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICByID0gKHIgKiAyNTUgKyBhIC0gMSkgLyBhOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZyA9IChnICogMjU1ICsgYSAtIDEpIC8gYTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGIgPSAoYiAqIDI1NSArIGEgLSAxKSAvIGE7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSkg
ewotICAgICAgICAgICAgICAgICAgICByID0gZGl2aWRlMjU1KHIgKiBhKTsKLSAgICAgICAgICAg
ICAgICAgICAgZyA9IGRpdmlkZTI1NShnICogYSk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSBk
aXZpZGUyNTUoYiAqIGEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICpkZXN0ID0gKGEgPDwgMjQgfCByIDw8IDE2IHwgZyA8PCA4IHwgYik7CisgICAgICAg
ICAgICBtX3BpeGVscy5vdmVyUkdCQShkZXN0LCByLCBnLCBiLCBhKTsKICAgICAgICAgfQogI2Vu
ZGlmCiAKICAgICBwcml2YXRlOgogICAgICAgICBpbnQgd2lkdGgoKSBjb25zdAogICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gbV9zaXplLndpZHRoKCk7CisgICAgICAgICAgICByZXR1cm4g
bV9waXhlbHMud2lkdGgoKTsKICAgICAgICAgfQogCiAgICAgICAgIGludCBoZWlnaHQoKSBjb25z
dAogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9zaXplLmhlaWdodCgpOworICAgICAg
ICAgICAgcmV0dXJuIG1fcGl4ZWxzLmhlaWdodCgpOwogICAgICAgICB9CiAKLSAgICAgICAgVmVj
dG9yPFBpeGVsRGF0YT4gbV9iYWNraW5nU3RvcmU7Ci0gICAgICAgIFBpeGVsRGF0YSogbV9ieXRl
czsgLy8gVGhlIG1lbW9yeSBpcyBiYWNrZWQgYnkgbV9iYWNraW5nU3RvcmUuCi0gICAgICAgIElu
dFNpemUgbV9zaXplOworICAgICAgICBCaXRtYXBQaXhlbHMgbV9waXhlbHM7CisKICAgICAgICAg
Ly8gRklYTUU6IERvIHdlIG5lZWQgbV9jb2xvclByb2ZpbGUgYW55bW9yZT8KICAgICAgICAgQ29s
b3JQcm9maWxlIG1fY29sb3JQcm9maWxlOwogICAgICAgICBib29sIG1faGFzQWxwaGE7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9CaXRt
YXBQaXhlbHNDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2ZjNjJhMzdkODE0NWNk
ZDA3YTE1NGVkOGY3NDExZGVjYTQ2ZjBmMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcApA
QCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQml0bWFwUGl4ZWxzLmgiCisK
KyNpbmNsdWRlIDxjYWlyby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK05hdGl2ZUltYWdl
UHRyIEJpdG1hcFBpeGVsczo6aW1hZ2UoKSBjb25zdAoreworICAgIHJldHVybiBhZG9wdFJlZihj
YWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgKKyAgICAgICAgcmVpbnRlcnByZXRf
Y2FzdDx1bnNpZ25lZCBjaGFyKj4oY29uc3RfY2FzdDxQaXhlbERhdGEqPihtX3BpeGVscykpLAor
ICAgICAgICBDQUlST19GT1JNQVRfQVJHQjMyLCB3aWR0aCgpLCBoZWlnaHQoKSwgd2lkdGgoKSAq
IHNpemVvZihSR0JBMzIpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVj
b2RlckNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2Nh
aXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
N2I0MTI5NWY4NTczNThmYmJmMzVjMWIwNTI1ZThkNmNjMzUyMGY1OC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCi0K
LSNpbmNsdWRlIDxjYWlyby5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLU5hdGl2ZUltYWdl
UHRyIEltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdAotewotICAgIHJldHVybiBh
ZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgKLSAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oY29uc3RfY2FzdDxQaXhlbERhdGEqPihtX2J5
dGVzKSksCi0gICAgICAgIENBSVJPX0ZPUk1BVF9BUkdCMzIsIHdpZHRoKCksIGhlaWdodCgpLCB3
aWR0aCgpICogc2l6ZW9mKFBpeGVsRGF0YSkpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01v
Y2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tCmluZGV4IDIxNmNkMDkz
ZjI2NDY3Y2JhODhhNDNmNjkzYWJmNGNmNTFkZDFhNGQuLmQxMTQ1NGIwNWVmODg5OTNhNjI4OTM4
OTZiYzBjMTE3MjhjNWVkNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VN
YWMubW0KQEAgLTg3LDcgKzg3LDcgQEAgdm9pZCBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6
dXBkYXRlUGxhdGZvcm1MYXllcigpIGNvbnN0CiAgICAgICAgIGlmICghaW1hZ2UpCiAgICAgICAg
ICAgICBicmVhazsKIAotICAgICAgICBtX3ByZXZpZXdJbWFnZSA9IGltYWdlLT5nZXRDR0ltYWdl
UmVmKCk7CisgICAgICAgIG1fcHJldmlld0ltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlKCk7CiAg
ICAgICAgIGlmICghbV9wcmV2aWV3SW1hZ2UpCiAgICAgICAgICAgICBicmVhazsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAKaW5kZXggMzZjZDY1
MTZlODBmMTc0OGJmZWFiNzdhOTMwMjcxYzEyMWRlODAxOS4uNGI0ZTM3NzllOTZmNzhjNjU0MGE1
M2M0NDc4YzNiZmQ5MzVmNTNlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d2luL0RyYWdJbWFnZUNHV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4v
RHJhZ0ltYWdlQ0dXaW4uY3BwCkBAIC0xMzYsOSArMTM2LDkgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0
ZURyYWdJbWFnZUZyb21JbWFnZShJbWFnZSogaW1nLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRp
b24pCiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oZHJhd0NvbnRleHQsIDEsIC0xKTsKICAgICBDR0Nv
bnRleHRTZXRGaWxsQ29sb3IoZHJhd0NvbnRleHQsIHdoaXRlKTsKICAgICBDR0NvbnRleHRGaWxs
UmVjdChkcmF3Q29udGV4dCwgcmVjdCk7Ci0gICAgaWYgKGF1dG8gc3JjSW1hZ2UgPSBpbWctPmdl
dENHSW1hZ2VSZWYoKSkgeworICAgIGlmIChhdXRvIHNyY0ltYWdlID0gaW1nLT5uYXRpdmVJbWFn
ZSgpKSB7CiAgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShkcmF3Q29udGV4dCwga0NHQmxl
bmRNb2RlTm9ybWFsKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGRyYXdDb250ZXh0LCBy
ZWN0LCBzcmNJbWFnZSk7CisgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShkcmF3Q29udGV4dCwg
cmVjdCwgc3JjSW1hZ2UuZ2V0KCkpOwogICAgIH0KICAgICBDR0NvbnRleHRSZWxlYXNlKGRyYXdD
b250ZXh0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDYWNoZS5t
bSBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0KaW5kZXggYjY1OWQ2ZGJmOWFk
Njk5OWMzYWM5NjJkZTk1MTU3ODA5N2UxZjNiMS4uN2M1ZWQyMTBkZGIyYTMyYTc2NjY3NGMxMjBk
OTk0YzJmYTQ3ZTdmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDYWNo
ZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNhY2hlLm1tCkBAIC0yMDQsNyAr
MjA0LDcgQEAgKyAoQ0dJbWFnZVJlZilpbWFnZUZvclVSTDooTlNVUkwgKil1cmwKICAgICBXZWJD
b3JlOjpDYWNoZWRJbWFnZSYgY2FjaGVkSW1hZ2UgPSBkb3duY2FzdDxXZWJDb3JlOjpDYWNoZWRJ
bWFnZT4oKmNhY2hlZFJlc291cmNlKTsKICAgICBpZiAoIWNhY2hlZEltYWdlLmhhc0ltYWdlKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBjYWNoZWRJbWFnZS5pbWFnZSgp
LT5nZXRDR0ltYWdlUmVmKCk7CisgICAgcmV0dXJuIGNhY2hlZEltYWdlLmltYWdlKCktPm5hdGl2
ZUltYWdlKCkuZ2V0KCk7CiB9CiAKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0YWJhc2VDRy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0YWJhc2VDRy5jcHAK
aW5kZXggMGY2ZGU3YTE0NmE2MTFhNTJhYTFlNTM5MDE5ZmE2YzFjNDY3MjVhZS4uMzA1NjMzNmNi
NjZmZTRhZjE4YmRjNTI5YWNhMmY4ZmM4ODFkZmU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9jZy9XS0ljb25EYXRhYmFzZUNHLmNwcApAQCAtMzcsMTIg
KzM3LDIzIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogQ0dJbWFnZVJlZiBXS0ljb25EYXRh
YmFzZVRyeUdldENHSW1hZ2VGb3JVUkwoV0tJY29uRGF0YWJhc2VSZWYgaWNvbkRhdGFiYXNlUmVm
LCBXS1VSTFJlZiB1cmxSZWYsIFdLU2l6ZSBzaXplKQogewogICAgIEltYWdlKiBpbWFnZSA9IHRv
SW1wbChpY29uRGF0YWJhc2VSZWYpLT5pbWFnZUZvclBhZ2VVUkwodG9XVEZTdHJpbmcodXJsUmVm
KSk7Ci0gICAgcmV0dXJuIGltYWdlID8gaW1hZ2UtPmdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6ZShJ
bnRTaXplKHN0YXRpY19jYXN0PGludD4oc2l6ZS53aWR0aCksIHN0YXRpY19jYXN0PGludD4oc2l6
ZS5oZWlnaHQpKSkgOiAwOworICAgIHJldHVybiBpbWFnZSA/IGltYWdlLT5uYXRpdmVJbWFnZU9m
U2l6ZShJbnRTaXplKHN0YXRpY19jYXN0PGludD4oc2l6ZS53aWR0aCksIHN0YXRpY19jYXN0PGlu
dD4oc2l6ZS5oZWlnaHQpKSkuZ2V0KCkgOiBudWxscHRyOwogfQogCiBDRkFycmF5UmVmIFdLSWNv
bkRhdGFiYXNlVHJ5Q29weUNHSW1hZ2VBcnJheUZvclVSTChXS0ljb25EYXRhYmFzZVJlZiBpY29u
RGF0YWJhc2VSZWYsIFdLVVJMUmVmIHVybFJlZikKIHsKICAgICBJbWFnZSogaW1hZ2UgPSB0b0lt
cGwoaWNvbkRhdGFiYXNlUmVmKS0+aW1hZ2VGb3JQYWdlVVJMKHRvV1RGU3RyaW5nKHVybFJlZikp
OwotICAgIHJldHVybiBpbWFnZSA/IGltYWdlLT5nZXRDR0ltYWdlQXJyYXkoKS5sZWFrUmVmKCkg
OiAwOworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0
byBuYXRpdmVJbWFnZXMgPSBpbWFnZS0+ZnJhbWVzTmF0aXZlSW1hZ2VzKCk7CisgICAgaWYgKCFu
YXRpdmVJbWFnZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBD
Rk11dGFibGVBcnJheVJlZiBhcnJheSA9IENGQXJyYXlDcmVhdGVNdXRhYmxlKG51bGxwdHIsIG5h
dGl2ZUltYWdlcy5zaXplKCksICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpOworICAgIGZvciAoYXV0
byBuYXRpdmVJbWFnZSA6IG5hdGl2ZUltYWdlcykKKyAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVl
KGFycmF5LCBuYXRpdmVJbWFnZS5nZXQoKSk7CisgICAgCisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PENGQXJyYXlSZWY+KENGUmV0YWluKGFycmF5KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KaW5kZXgg
ZGM3OTgzYWI5ODhjMmQwNGExNzMwZWUxMzczMDNjMjQ0MTYxNTE5Ny4uZmJjM2U1ZDRjNTQzMDFj
ZTkyMTdhNDBmOGQwOGJkNTgzNTI3ODdjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KQEAgLTQwNzEsNyAr
NDA3MSw3IEBAIC0gKFVJSW1hZ2UgKilfcHJlc2VudGF0aW9uU25hcHNob3RGb3JQcmV2aWV3SXRl
bUNvbnRyb2xsZXI6KFVJUHJldmlld0l0ZW1Db250cm9sCiB7CiAgICAgaWYgKCFfcG9zaXRpb25J
bmZvcm1hdGlvbi5saW5rSW5kaWNhdG9yLmNvbnRlbnRJbWFnZSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgcmV0dXJuIFtbW1VJSW1hZ2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTpfcG9z
aXRpb25JbmZvcm1hdGlvbi5saW5rSW5kaWNhdG9yLmNvbnRlbnRJbWFnZS0+Z2V0Q0dJbWFnZVJl
ZigpXSBhdXRvcmVsZWFzZV07CisgICAgcmV0dXJuIFtbW1VJSW1hZ2UgYWxsb2NdIGluaXRXaXRo
Q0dJbWFnZTpfcG9zaXRpb25JbmZvcm1hdGlvbi5saW5rSW5kaWNhdG9yLmNvbnRlbnRJbWFnZS0+
bmF0aXZlSW1hZ2UoKS5nZXQoKV0gYXV0b3JlbGVhc2VdOwogfQogCiAtIChOU0FycmF5ICopX3By
ZXNlbnRhdGlvblJlY3RzRm9yUHJldmlld0l0ZW1Db250cm9sbGVyOihVSVByZXZpZXdJdGVtQ29u
dHJvbGxlciAqKWNvbnRyb2xsZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCA5YTMzZjdjYzdkYzdjN2Q3MmY5ZGE3NDMwOThiN2Ri
Y2E4MjQwOWNmLi5hNTMyNTEwNjc4YjlmNTM1MTQ1OGEzOGE5ZjQyMzM3NDdkMDM1ZjVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCkBA
IC0xNzI3LDY5ICsxNzI3LDYgQEAgdm9pZCBQbHVnaW5WaWV3Ojp3aW5kb3dlZFBsdWdpblZpc2li
aWxpdHlEaWRDaGFuZ2UoYm9vbCBpc1Zpc2libGUsIHVpbnQ2NF90IHdpbmQKIH0KICNlbmRpZgog
Ci0jaWYgUExBVEZPUk0oQ09DT0EpCi1zdGF0aWMgYm9vbCBpc0FsbW9zdFNvbGlkQ29sb3IoQml0
bWFwSW1hZ2UqIGJpdG1hcCkKLXsKLSAgICBDR0ltYWdlUmVmIGltYWdlID0gYml0bWFwLT5nZXRD
R0ltYWdlUmVmKCk7Ci0gICAgQVNTRVJUKENHSW1hZ2VHZXRCaXRzUGVyQ29tcG9uZW50KGltYWdl
KSA9PSA4KTsKLQotICAgIENHQml0bWFwSW5mbyBpbWFnZUluZm8gPSBDR0ltYWdlR2V0Qml0bWFw
SW5mbyhpbWFnZSk7Ci0gICAgaWYgKCEoaW1hZ2VJbmZvICYga0NHQml0bWFwQnl0ZU9yZGVyMzJM
aXR0bGUpIHx8IChpbWFnZUluZm8gJiBrQ0dCaXRtYXBBbHBoYUluZm9NYXNrKSAhPSBrQ0dJbWFn
ZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBi
ZWluZyBhYmxlIHRvIGhhbmRsZSBvdGhlciBwaXhlbCBmb3JtYXRzLgotICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHNpemVf
dCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0aChpbWFnZSk7Ci0gICAgc2l6ZV90IGhlaWdodCA9IENH
SW1hZ2VHZXRIZWlnaHQoaW1hZ2UpOwotICAgIHNpemVfdCBieXRlc1BlclJvdyA9IENHSW1hZ2VH
ZXRCeXRlc1BlclJvdyhpbWFnZSk7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBwcm92aWRl
ciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDb3B5RGF0YShDR0ltYWdlR2V0RGF0YVByb3ZpZGVy
KGltYWdlKSkpOwotICAgIGNvbnN0IFVJbnQ4KiBkYXRhID0gQ0ZEYXRhR2V0Qnl0ZVB0cihwcm92
aWRlci5nZXQoKSk7Ci0KLSAgICAvLyBPdmVybGF5IGEgZ3JpZCBvZiBzYW1wbGluZyBkb3RzIG9u
IHRvcCBvZiBhIGdyYXlzY2FsZSB2ZXJzaW9uIG9mIHRoZSBpbWFnZS4KLSAgICAvLyBGb3IgdGhl
IGludGVyaW9yIHBvaW50cywgY2FsY3VsYXRlIHRoZSBkaWZmZXJlbmNlIGluIGx1bWluYW5jZSBh
bW9uZyB0aGUgc2FtcGxlIHBvaW50Ci0gICAgLy8gYW5kIGl0cyBzdXJyb3VuZHMgcG9pbnRzLCBz
Y2FsZWQgYnkgdHJhbnNwYXJlbmN5LgotICAgIGNvbnN0IHVuc2lnbmVkIHNhbXBsZVJvd3MgPSA3
OwotICAgIGNvbnN0IHVuc2lnbmVkIHNhbXBsZUNvbHMgPSA3OwotICAgIC8vIEZJWE1FOiBSZWZp
bmUgdGhlIHByb3BlciBudW1iZXIgb2Ygc2FtcGxlcywgYW5kIGFjY29tbW9kYXRlIGRpZmZlcmVu
dCBhc3BlY3QgcmF0aW9zLgotICAgIGlmICh3aWR0aCA8IHNhbXBsZUNvbHMgfHwgaGVpZ2h0IDwg
c2FtcGxlUm93cykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRW5zdXJlIHRoYXQg
dGhlIGxhc3Qgcm93L2NvbHVtbiBsYW5kIG9uIHRoZSBpbWFnZSBwZXJpbWV0ZXIuCi0gICAgY29u
c3QgZmxvYXQgc3RyaWRlV2lkdGggPSBzdGF0aWNfY2FzdDxmbG9hdD4od2lkdGggLSAxKSAvIChz
YW1wbGVDb2xzIC0gMSk7Ci0gICAgY29uc3QgZmxvYXQgc3RyaWRlSGVpZ2h0ID0gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGhlaWdodCAtIDEpIC8gKHNhbXBsZVJvd3MgLSAxKTsKLSAgICBmbG9hdCBzYW1w
bGVzW3NhbXBsZVJvd3NdW3NhbXBsZUNvbHNdOwotCi0gICAgLy8gRmluZCB0aGUgbHVtaW5hbmNl
IG9mIHRoZSBzYW1wbGUgcG9pbnRzLgotICAgIGZsb2F0IHkgPSAwOwotICAgIGNvbnN0IFVJbnQ4
KiByb3cgPSBkYXRhOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzYW1wbGVSb3dzOyAr
K2kpIHsKLSAgICAgICAgZmxvYXQgeCA9IDA7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7
IGogPCBzYW1wbGVDb2xzOyArK2opIHsKLSAgICAgICAgICAgIGNvbnN0IFVJbnQ4KiBwMCA9IHJv
dyArIChzdGF0aWNfY2FzdDxpbnQ+KHggKyAuNSkpICogNDsKLSAgICAgICAgICAgIC8vIFIgRyBC
IEEKLSAgICAgICAgICAgIHNhbXBsZXNbaV1bal0gPSAoMC4yMTI1ICogKnAwICsgMC43MTU0ICog
KihwMCsxKSArIDAuMDcyMSAqICoocDArMikpICogKihwMCszKSAvIDI1NTsKLSAgICAgICAgICAg
IHggKz0gc3RyaWRlV2lkdGg7Ci0gICAgICAgIH0KLSAgICAgICAgeSArPSBzdHJpZGVIZWlnaHQ7
Ci0gICAgICAgIHJvdyA9IGRhdGEgKyAoc3RhdGljX2Nhc3Q8aW50Pih5ICsgLjUpKSAqIGJ5dGVz
UGVyUm93OwotICAgIH0KLQotICAgIC8vIERldGVybWluZSB0aGUgaW1hZ2Ugc2NvcmUuCi0gICAg
ZmxvYXQgYWNjdW1TY29yZSA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNhbXBs
ZVJvd3MgLSAxOyArK2kpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMTsgaiA8IHNhbXBs
ZUNvbHMgLSAxOyArK2opIHsKLSAgICAgICAgICAgIGZsb2F0IGRpZmYgPSBzYW1wbGVzW2kgLSAx
XVtqXSArIHNhbXBsZXNbaSArIDFdW2pdICsgc2FtcGxlc1tpXVtqIC0gMV0gKyBzYW1wbGVzW2ld
W2ogKyAxXSAtIDQgKiBzYW1wbGVzW2ldW2pdOwotICAgICAgICAgICAgYWNjdW1TY29yZSArPSBk
aWZmICogZGlmZjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZSBzY29yZSBmb3IgYSBn
aXZlbiBzYW1wbGUgY2FuIGJlIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgMCBhbmQgMjU1XjIuCi0gICAg
cmV0dXJuIGFjY3VtU2NvcmUgPCAyNTAwICogKHNhbXBsZVJvd3MgLSAyKSAqIChzYW1wbGVDb2xz
IC0gMik7Ci19Ci0jZW5kaWYKLQogdm9pZCBQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRpbWVy
RmlyZWQoKQogewogI2lmIEVOQUJMRShQUklNQVJZX1NOQVBTSE9UVEVEX1BMVUdJTl9IRVVSSVNU
SUMpCkBAIC0xODA5LDcgKzE3NDYsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnBsdWdpblNuYXBzaG90
VGltZXJGaXJlZCgpCiAKICAgICAgICAgaWYgKHNuYXBzaG90SW1hZ2UpIHsKICNpZiBFTkFCTEUo
UFJJTUFSWV9TTkFQU0hPVFRFRF9QTFVHSU5fSEVVUklTVElDKQotICAgICAgICAgICAgYm9vbCBz
bmFwc2hvdElzQWxtb3N0U29saWRDb2xvciA9IGlzQWxtb3N0U29saWRDb2xvcihkb3duY2FzdDxC
aXRtYXBJbWFnZT4oc25hcHNob3RJbWFnZS5nZXQoKSkpOworICAgICAgICAgICAgYm9vbCBzbmFw
c2hvdElzQWxtb3N0U29saWRDb2xvciA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8Qml0bWFwSW1hZ2U+
KHNuYXBzaG90SW1hZ2UpLT5pc0FsbW9zdFNvbGlkQ29sb3IoKTsKICAgICAgICAgICAgIHNuYXBz
aG90Rm91bmQgPSAhc25hcHNob3RJc0FsbW9zdFNvbGlkQ29sb3I7CiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283433</attachid>
            <date>2016-07-12 11:35:17 -0700</date>
            <delta_ts>2016-07-12 12:05:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159679-20160712113434.patch</filename>
            <type>text/plain</type>
            <size>127812</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzMTAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWM1YmQ5YmQwNmExOWJl
NWNhMDJjNTE3MmQ2ZWYyZWJiZmVjMWMxOS4uNmFlYzQ3MmY4YWVjOGUwNjRkNGYyZmQwODAyYTBm
MWM0NTU4YjI4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxMyBAQAorMjAxNi0wNy0xMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0
IHRoZSBwaXhlbCBkYXRhIG9mIEltYWdlRnJhbWUgdG8gYSBzZXBhcmF0ZSBjbGFzcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5Njc5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgcGl4ZWwg
ZGF0YSBtYW5pcHVsYXRpb24gcGFydCBpbiBJbWFnZUZyYW1lIGludG8gYSBzZXBhcmF0ZSBjbGFz
cworICAgICAgICBhbmQgdGhlbiBtYWtlIGl0IG9wdGlvbmFsIChhbGxvY2F0ZWQgb24gZGVtYW5k
KS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2lu
Q2Fpcm8uY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFBpeGVsczo6Qml0bWFwUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBp
eGVsczo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpoZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFBpeGVsczo6YXQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmNsZWFyUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OnJlcGVhdEZpcnN0Um93KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcFBpeGVsczo6c2V0UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQ
aXhlbHM6Om92ZXJSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6aW5Cb3Vu
ZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Om11bHRpcGx5MjU1KToKKyAgICAgICAgKFdlYkNvcmU6OmRpdmlkZTI1NSk6CisgICAg
ICAgIChXZWJDb3JlOjpkaXZpZGVDZWlsKToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxp
ZWRDaGFubmVsKToKKyAgICAgICAgKFdlYkNvcmU6OnVucHJlbXVsdGlwbGllZENoYW5uZWwpOgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZVByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VVblByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6cGl4ZWxzKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWVEYXRhOjpoYXNQaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y2xlYXJQaXhl
bERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGxQaXhlbERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGxGcmFtZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weUJpdG1hcERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojpjb3B5Um93TlRpbWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0UkdCQSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpnZXRBZGRyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6Omhhc1BpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpvdmVyUkdC
QSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjp3aWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
Y29weVJvd05UaW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpm
aXhQb2ludFVuc2lnbmVkTXVsdGlwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6ZGl2aWRlMjU1KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5j
cHAuCisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmltYWdlKToKKworMjAxNi0wNy0x
MSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAgICAg
IFJlbmFtZSBGcmFtZURhdGEgdG8gSW1hZ2VGcmFtZURhdGEgYW5kIG1vdmUgaXQgdG8gYSBzZXBh
cmF0ZSBmaWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTU0NDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNb3ZlIEltYWdlRnJhbWVEYXRhIHRvIGEgc2VwYXJhdGUgZmlsZSBzbyBpdCBjYW4gYmUgY2Fj
aGVkIGJ5IEltYWdlU291cmNlCisgICAgICAgIGFuZCB3aWxsIHN0aWxsIGJlIGNvbnN1bWVkIGJ5
IEJpdG1hcEltYWdlLiBNYWtlIHRoZSBkYXRhIG1lbWJlcnMgb2YgSW1hZ2VGcmFtZURhdGEKKyAg
ICAgICAgYmUgcHJpdmF0ZSBhbmQgYWRkIGdldHRlcnMgdG8gcmV0dXJuIHRoZWlyIHZhbHVlcy4K
KworICAgICAgICBObyBuZXcgdGVzdHMgLS0gQ29kZSByZWZhY3RvcmluZywgbm8gYmVoYXZpb3Ig
Y2hhbmdlLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Jp
dG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aGF2ZUZyYW1lSW1hZ2VBdEluZGV4
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNz
YXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6ZW5zdXJlRnJhbWVJc0NhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcElt
YWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6ZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6aXNBbG1vc3RTb2xpZENvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRt
YXBJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpGcmFtZURhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp+RnJhbWVEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6dXNlZEZyYW1lQnl0ZXMpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZURhdGFBdEluZGV4KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ltYWdlRnJhbWVEYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lRGF0YTo6SW1hZ2VGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURh
dGE6On5JbWFnZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6
Y2xlYXJTdWJJbWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmNsZWFy
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpzaW5nbGVQaXhlbFNvbGlkQ29s
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmlzQWxtb3N0U29saWRDb2xv
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW1hZ2VGcmFtZURhdGEuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6c3RhdHVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWVEYXRhOjppc0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWVEYXRhOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpm
cmFtZUJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjppbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6b3JpZW50YXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OnN1YnNhbXBsaW5nTGV2ZWwpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZURhdGE6OmR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWVEYXRhOjpoYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6
aGFzSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6Omhhc01ldGFkYXRh
KToKKworMjAxNi0wNi0yNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUs
Y29tPgorCisgICAgICAgIEludHJvZHVjZSBQbGF0Zm9ybUltYWdlIGFuZCBtYWtlIGl0IGlzIGEg
d3JhcHBlciBmb3IgTmF0aXZlSW1hZ2VQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1ODY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyByZWZhY3RvcmluZyBp
cyB0byBtb3ZlIHRoZSBwbGF0Zm9ybSBpbWFnZSBkZXBlbmRlbnQKKyAgICAgICAgY29kZSBmcm9t
IEJpdG1hcEltYWdlIHRvIFBsYXRmb3JtSW1hZ2UuIFBsYXRmb3JtSW1hZ2UgaXMgcmVzcG9uc2li
bGUgb2YgCisgICAgICAgIGRyYXdpbmcgdGhlIGltYWdlIGFuZCBhbnN3ZXJpbmcgTmF0aXZlSW1h
Z2VQdHIgcXVlc3Rpb25zIHdoZW4gYW4gSW1hZ2VEZWNvZGVyCisgICAgICAgIGlzIG5vdCBhdmFp
bGFibGUuIEFwYXJ0IGZyb20gZHJhd2luZyB0aGUgaW1hZ2UsIHRoZSBxdWVyeSBmdW5jdGlvbnMg
d2lsbCBiZQorICAgICAgICBjYWxsZWQgb25seSB3aGVuIGNvbnN0cnVjdGluZyBhIEZyYW1lRGF0
YSBzbyB3ZSB3aWxsIGtlZXAgZXZlcnl0aGluZyBhcyBhCisgICAgICAgIE5hdGl2ZUltYWdlUHRy
LiBCdXQgd2Ugd2lsbCBjYXN0IHRoZSBOYXRpdmVJbWFnZVB0ciB0byBQbGF0Zm9ybUltYWdlIHdo
ZW4KKyAgICAgICAgYSBwbGF0Zm9ybSBkZXBlbmRlbnQgZnVuY3Rpb24gaXMgbmVlZGVkLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cyAtLSBDb2RlIHJlZmFjdG9yaW5nLCBubyBiZWhhdmlvciBjaGFu
Z2UuCisKKyAgICAgICAgKiBQbGF0Zm9ybUFwcGxlV2luLmNtYWtlOgorICAgICAgICAqIFBsYXRm
b3JtRWZsLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBs
YXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2luQ2Fpcm8uY21ha2U6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRp
bmdzL29iamMvRE9NLm1tOgorICAgICAgICAoLVtET01Ob2RlIGdldFByZXZpZXdTbmFwc2hvdElt
YWdlOmFuZFJlY3RzOl0pOgorICAgICAgICAqIHBhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cu
bW06CisgICAgICAgICgtW1dlYlRleHRJbmRpY2F0b3JWaWV3IGluaXRXaXRoRnJhbWU6dGV4dElu
ZGljYXRvcjptYXJnaW46b2Zmc2V0Ol0pOgorICAgICAgICAoY3JlYXRlQ29udGVudENyb3NzZmFk
ZUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpu
YXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZy
YW1lc05hdGl2ZUltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6c2luZ2xl
UGl4ZWxTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppc0FsbW9z
dFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZURhdGE6OkZyYW1lRGF0YSk6CisgICAgICAgIG1faGFzQWxwaGEgY2FuIGJlIGluaXRp
YWxpemVkIHdpdGggZmFsc2UgYmVjYXVzZSBpdCBpcyBhY2Nlc3NlZCBvbmx5IGluCisgICAgICAg
IEJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleCgpIGFuZCBpdCBpcyBndWFyZGVkIGJ5
IG1faGF2ZU1ldGFkYXRhLgorICAgICAgICBCb3RoIG1faGF2ZU1ldGFkYXRhIGFuZCBtX2hhc0Fs
cGhhIGFyZSBzZXQgaW4gQml0bWFwSW1hZ2UgY29uc3RydWN0b3IKKyAgICAgICAgYW5kIGluIEJp
dG1hcEltYWdlOjpjYWNoZUZyYW1lKCkuCisKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6
fkZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OmNsZWFyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6
Om5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpuYXRpdmVJbWFnZU9mU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZnJhbWVzTmF0aXZlSW1hZ2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlOjpnZXRDR0ltYWdlUmVmKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlOjpnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2U6OmdldENHSW1hZ2VBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtSW1hZ2U6OlBsYXRmb3JtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1JbWFnZTo6aXNOaWwpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6Y2dJ
bWFnZVJlZik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjp1cGRhdGVEaXNwbGF5TW9k
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJv
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0JpdG1hcEltYWdlQ2Fpcm8uY3BwLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6
Y2xlYXJTdWJJbWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6c2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpoYXNBbHBoYSk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6aXNBbG1vc3RTb2xpZENvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1JbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
Qml0bWFwSW1hZ2VDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUGF0dGVybkNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm46OmNyZWF0ZVBsYXRm
b3JtUGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFn
ZUNHLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpjbGVhclN1
YkltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IpOiBNb3ZlZCBmcm9tIFBsdWdpblZp
ZXcuY3BwIHNpbmNlIFBsYXRmb3JtSW1hZ2UgaXMgd2hhdCB0aGlzIGZ1bmN0aW9uIGJlbG9uZ3Mg
dG8uCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKTog
UmV0dXJucyB0aGUgc3ViLXNhbXBsaW5nIHNjYWxlIGJhc2VkIG9uIHRoZSBjb250ZXh0IHNjYWxp
bmcuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpkcmF3KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tOgor
ICAgICAgICAoVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYTo6dXBkYXRlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW06CisgICAgICAgIChX
ZWJDb3JlOjpNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6dXBkYXRlUGxhdGZvcm1MYXllcik6
CisgICAgICAgICogcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZSk6CisKIDIwMTYtMDctMTEgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBTcGVlY2ggU3ludGhlc2lzOiBnZXR0aW5n
IGxpc3Qgb2Ygdm9pY2VzIG5vIGxvbmdlciB3b3JrcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IGMxYmMw
YmJkZTM2MTI1YzQ2MmJmNDgxZGRhZDVkZDJmODI3ZDUyMzkuLjE4ZDFlYmViZWU5MjBiMmYyOWVm
MzI4NzdkZWQyZTFlY2ZmOTdkNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAor
MjAxNi0wNy0xMSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgor
CisgICAgICAgIEludHJvZHVjZSBQbGF0Zm9ybUltYWdlIGFuZCBtYWtlIGl0IGlzIGEgd3JhcHBl
ciBmb3IgTmF0aXZlSW1hZ2VQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1ODY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogTWlzYy9XZWJDYWNoZS5tbToKKyAgICAgICAgKCtbV2ViQ2FjaGUgaW1h
Z2VGb3JVUkw6XSk6CisKIDIwMTYtMDctMTEgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxl
LmNvbT4KIAogICAgICAgICBBZGQgc3ludGhldGljIGNsaWNrIG9yaWdpbiB0byBXS05hdmlnYXRp
b25BY3Rpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYjQ3ZTJjZWE3OWE4ZGQ3YzUzMzVkMmNkNThlNzk2MTUz
MzVjNTAyYy4uZjFmMTY3MjU4NGMwZWU4MTg1OGE3ZTk2NTUzYWNkOWNkMGFjNmZlZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE2LTA3LTExICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
Ym91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgSW50cm9kdWNlIFBsYXRmb3JtSW1hZ2Ug
YW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVyIGZvciBOYXRpdmVJbWFnZVB0cgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvY2cv
V0tJY29uRGF0YWJhc2VDRy5jcHA6CisgICAgICAgIChXS0ljb25EYXRhYmFzZVRyeUdldENHSW1h
Z2VGb3JVUkwpOgorICAgICAgICAoV0tJY29uRGF0YWJhc2VUcnlDb3B5Q0dJbWFnZUFycmF5Rm9y
VVJMKToKKyAgICAgICAgSXQgd2FzIHRoZSBvbmx5IHBsYWNlIGluIHRoZSBjb2RlIHdoaWNoIHVz
ZXMgQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VBcnJheSgpLgorICAgICAgICBDYWxsIEJpdG1hcElt
YWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMoKSBpbnN0ZWFkIGFuZCBmb3JtIHRoZSByZXR1cm5lZAor
ICAgICAgICBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGJ1aWxkIHRoZSBDRkFycmF5UmVmLgorICAg
ICAgICAKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcHJlc2VudGF0aW9uU25hcHNob3RGb3JQcmV2
aWV3SXRlbUNvbnRyb2xsZXI6XSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRp
bWVyRmlyZWQpOgorICAgICAgICAKKyAgICAgICAgKFdlYktpdDo6aXNBbG1vc3RTb2xpZENvbG9y
KTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSB0aGUgc3RhdGljIGZ1bmN0aW9uIGlzQWxtb3N0U29s
aWRDb2xvciB0byBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKS4KKwogMjAxNi0w
Ny0xMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFtXSzJdW2lP
U10gSW50ZXJtaXR0ZW50IGNyYXNoIGluIFtVSUFwcGxpY2F0aW9uIGJlZ2luQmFja2dyb3VuZFRh
c2tXaXRoTmFtZV0gZXhwaXJhdGlvbiBoYW5kbGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGU3
OGIwNDJiMTA0MDFlMWY0ZWUzYTJhYjFhMDUyYzIxOGMzYTExZTMuLjIyNmVjOWI4NGU3MjJmZmYz
ZTJmMDRkY2U3ZGI3MGUzZGQ0YjgzYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMjI2LDYg
KzIyMjYsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSVNP
VlRUQ3VlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJh
bWVEYXRhLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT3JpZW50YXRpb24uY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UG9pbnQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxl
V2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCA1
ZmY5OTFmZjdkYTMwOGJiOTE4MmVjZTNiZjEyMTczMGE1NDhkMjg3Li5iYWUzMWVhZjg2ZTdmY2E5
MDU4MjUwOTJhYTM4YTc4YzExZTQyMjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4u
Y21ha2UKQEAgLTU1LDcgKzU1LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XS0NBQ0ZWaWV3TGF5ZXJUcmVlSG9zdC5jcHAKIAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFBv
aW50Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwCkBAIC03
NSw2ICs3NCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UGF0aENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtl
CmluZGV4IDUxNDUwNGU2ZWMyNWFhNWU0M2I5OTM5OGQ1ZTM1Y2VlZWE3NjZhYTQuLjY0YWUxNzEw
ODlkY2JmMGNkNDViNzBhOWI4ZjcwZWZhOWZmZGVkYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNt
YWtlCkBAIC0xMjIsNyArMTIyLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNwcAogCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1wbC5jcHAKLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ZvbnRDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJm
YnV6ek5HLmNwcApAQCAtMTM0LDYgKzEzMyw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNF
UwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QYXR0ZXJuQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Bs
YXRmb3JtUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNh
aXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RyYW5zZm9ybWF0aW9uTWF0cml4
Q2Fpcm8uY3BwCkBAIC0xNzksOSArMTc5LDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MveDExL1BsYXRmb3JtRGlzcGxheVgxMS5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy94MTEvWFVuaXF1ZVJlc291cmNlLmNwcAogCi0gICAgcGxhdGZvcm0v
aW1hZ2UtZW5jb2RlcnMvSlBFR0ltYWdlRW5jb2Rlci5jcHAKKyAgICBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHAKIAotICAgIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2ltYWdl
LWVuY29kZXJzL0pQRUdJbWFnZUVuY29kZXIuY3BwCiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2Vm
bC9OZXR3b3JrU3RhdGVOb3RpZmllckVmbC5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpp
bmRleCA2NDVhZGQxY2UzODg4OGIwNGQ0YTJkODlhZGEwYTdjNmRlMTk5ODZiLi5kMzFmNTcwNmE2
OTU5YjIzMWI1YmZiMjJmMDdkMTg0M2FlODYxYTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFr
ZQpAQCAtMTAxLDcgKzEwMSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1wbC5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9YMTEu
Y3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9GbG9hdFJlY3RDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9Gb250Q2Fpcm8uY3BwCkBAIC0xMTUsNiArMTE0LDcgQEAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vUGxhdGZvcm1QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vUmVmUHRyQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3Jt
YXRpb25NYXRyaXhDYWlyby5jcHAKQEAgLTE0OSw3ICsxNDksNyBAQCBsaXN0KEFQUEVORCBXZWJD
b3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAogICAg
IHBsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuY3BwCiAKLSAgICBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHAKIAogICAgIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL2d0ay9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZUd0ay5jcHAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bU1hYy5jbWFrZQppbmRleCA5ZjZmNDk2YjZjYzRlZjZlNGI3NGQ4NGFjMGFhOWRlYTU1YTAyMzdi
Li40ZGRlZDMwODhmNGYzOTZmZWY0NDRlN2VlNjVjNjQxMDY1OGY1ODQxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybU1hYy5jbWFrZQpAQCAtMzk3LDcgKzM5Nyw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1dlYlN5c3RlbUJhY2tkcm9wTGF5
ZXIubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9XZWJUaWxlZEJhY2tpbmdMYXll
ci5tbQogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0Zsb2F0UG9pbnRDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5j
cHAKQEAgLTQxNyw2ICs0MTYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL1BhdGhDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cu
Y3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFnZUNHLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1N1YmltYWdlQ2FjaGVXaXRoVGltZXIuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtV2luQ2Fpcm8uY21ha2UKaW5kZXggMmM1NTNiMDU1MWRhZDY5YWExOTlkOTYwZjU1MjM0
M2Q5MjBmMDdiMy4uMzQyYWE5MjczMmZkOGY5MmU4NWNmYTYyNmQ1NTU3MGVmNjZiNmE2OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCkBAIC0yMSw3ICsyMSw2IEBAIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCiAKLSAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0Zsb2F0UmVjdENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRD
YWlyby5jcHAKQEAgLTM0LDYgKzMzLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
bGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZv
cm1QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8u
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3JtYXRpb25NYXRyaXhDYWly
by5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAK
IAotICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNw
cAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNw
cAogCiAgICAgcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb25TdHViLmNwcAog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggYzExYmM0N2U1Y2FkNjMwYTM2NTdjZGUxYWQ5ZjdiNzZhMGE1NWM2Ni4uZmYyYTQ5OGJh
OTZiODFkYTAzZjgxYTMwMWE4NWJlMzc0ZDBlYzY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQ4NCw3ICsxNDg0LDcgQEAK
IAkJMzc1Q0QyMzIxMTlENDNDODAwQTJBODU5IC8qIEh5cGhlbmF0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzVDRDIzMTExOUQ0M0M4MDBBMkE4
NTkgLyogSHlwaGVuYXRpb24uaCAqLzsgfTsKIAkJMzc2RENDRTExM0I0Rjk2NjAwMkVCRUZDIC8q
IFRleHRSdW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzc2RENDRTAxM0I0Rjk2NjAwMkVCRUZDIC8qIFRleHRSdW4uY3BwICovOyB9OwogCQkzNzc0
QUJBNTBGQTIxRUI0MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzc0QUJBMzBGQTIxRUI0
MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3
IC8qIEJpdG1hcEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3Bw
ICovOyB9OworCQkzNzdBM0E5MDE1RUZDRTlCMDA1OUY1QzcgLyogUGxhdGZvcm1JbWFnZUNHLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3N0EzQThG
MTVFRkNFOUEwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwICovOyB9OwogCQkzNzkxOUMy
MzBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzkxOUMyMTBCN0QxODg2MDBBNTY5OTgg
LyogUG9zaXRpb25JdGVyYXRvci5jcHAgKi87IH07CiAJCTM3OTE5QzI0MEI3RDE4ODYwMEE1Njk5
OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzNzkxOUMyMjBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTM3OTI5MTdBMTk4
NUVGMzkwMEY0QjY2MSAvKiBDcmVkZW50aWFsQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc5MjkxNzgxOTg1RUYzOTAwRjRCNjYxIC8qIENyZWRl
bnRpYWxCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTIzMjUsMTAgKzIzMjUsMTQgQEAKIAkJNTNFRDNGREYxNjdBODhFNzAwNjc2MkU2IC8q
IEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFRDNGREQxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJu
YWxTZXR0aW5nc0dlbmVyYXRlZC5oICovOyB9OwogCQk1M0VGNzY2QjE2NTMwQTYxMDA0Q0JFNDkg
LyogU2V0dGluZ3NNYWNyb3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzRUY3NjZBMTY1MzBBNjEwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oICov
OyB9OwogCQk1M0VGNzY2QzE2NTMxOTk0MDA0Q0JFNDkgLyogU2V0dGluZ3NNYWNyb3MuaCBpbiBD
b3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzRUY3NjZBMTY1MzBBNjEwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oICovOyB9OworCQk1
NTA0RTRDQjFEMzU1N0IyMDBGRTUwODggLyogQml0bWFwUGl4ZWxzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTA0RTRDQTFEMzU1MzJEMDBGRTUwODgg
LyogQml0bWFwUGl4ZWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTUwQTBCQzkwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzcw
ODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovOyB9OwogCQk1NTBBMEJDQTA4
NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxp
ZmllZE5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1NTVCODdFQzFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU1Qjg3RUExQ0FBRjBB
QjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLzsgfTsKIAkJNTU1Qjg3RUQxQ0FBRjBB
QjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNv
ZGVyQ0cuaCAqLzsgfTsKKwkJNTU3NEYwODcxRDAyNzkwOTAwQjlGMTRDIC8qIFBsYXRmb3JtSW1h
Z2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1NzRG
MDg1MUQwMjc0NDQwMEI5RjE0QyAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTVDQkE2QTExRDFERjJFMTAwNDUxODYw
IC8qIEltYWdlRnJhbWVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU1Q0JBNjlGMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1lRGF0YS5j
cHAgKi87IH07CisJCTU1Q0JBNkEyMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1lRGF0YS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVDQkE2QTAx
RDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTcyQTdGMjExQzZFNTcxOTAwOUM2MTQ5IC8q
IFNpbXVsYXRlZENsaWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NzJBN0YyMDFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCAqLzsg
fTsKIAkJNTcyQTdGMjMxQzZFNUE2NjAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MkE3RjIyMUM2RTVB
NjYwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5jcHAgKi87IH07CiAJCTU3RUY1RTYwMUQyMEM4
MzkwMDE3MUU2MCAvKiBUZXh0Q29kZWNSZXBsYWNlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdFRjVFNUYxRDIwQzgzOTAwMTcxRTYwIC8qIFRl
eHRDb2RlY1JlcGxhY2VtZW50LmggKi87IH07CkBAIC05MDYxLDcgKzkwNjUsNyBAQAogCQkzNzZE
Q0NFMDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUZXh0UnVuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzc3MkIwOTUxNjUzNTg1NjAwMEE0OUNBIC8qIFBvcHVwT3BlbmluZ09ic2VydmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvcHVwT3BlbmluZ09ic2VydmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NzRBQkEzMEZBMjFFQjQwMEFEN0RFOSAvKiBP
dmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdG1hcEltYWdlQ0cuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogUGxhdGZv
cm1JbWFnZUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsYXRm
b3JtSW1hZ2VDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3OTE5QzIxMEI3
RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQb3NpdGlvbkl0ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzc5MTlDMjIwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvc2l0aW9uSXRlcmF0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc5MjkxNzgxOTg1RUYzOTAwRjRCNjYx
IC8qIENyZWRlbnRpYWxCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENy
ZWRlbnRpYWxCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05OTg5LDEwICs5
OTkzLDE0IEBACiAJCTUzRUQzRkRDMTY3QTg4RTcwMDY3NjJFNiAvKiBKU0ludGVybmFsU2V0dGlu
Z3NHZW5lcmF0ZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJ
bnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTNFRDNGREQxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRl
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVybmFsU2V0dGluZ3NH
ZW5lcmF0ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNFRjc2NkExNjUzMEE2
MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNldHRpbmdzTWFjcm9zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1
MDRFNENBMUQzNTUzMkQwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Qml0bWFwUGl4ZWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1MEEwQkM3MDg1
RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllZE5hbWUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTUw
QTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTU1
Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2Rl
ckNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1NzRGMDg1MUQwMjc0NDQwMEI5RjE0QyAv
KiBQbGF0Zm9ybUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVDQkE2OUYxRDFERjJFMTAwNDUxODYwIC8qIEltYWdl
RnJhbWVEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdl
RnJhbWVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVDQkE2QTAxRDFE
RjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlRnJhbWVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTU1RDQwOEY3MUE3QzYzMTgwMEM3ODQ1MCAvKiBTVkdJbWFnZUNsaWVudHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHSW1hZ2VDbGllbnRzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTU3MkE3RjIwMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGlj
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW11bGF0ZWRDbGljay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzJBN0YyMjFDNkU1QTY2MDA5QzYxNDkgLyog
U2ltdWxhdGVkQ2xpY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2ltdWxhdGVkQ2xpY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIwMjQs
NyArMjIwMzIsNiBAQAogCQlCMjc1MzUyOTBCMDUzODE0MDAyQ0U2NEYgLyogY2cgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTM3N0EzQThGMTVFRkNFOUEw
MDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCAqLywKIAkJCQkwRkNGMzMyMzBGMkI5NzE1MDA0
QjY3OTUgLyogQ29sb3JDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRGIC8q
IEZsb2F0UG9pbnRDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEZs
b2F0UmVjdENHLmNwcCAqLywKQEAgLTIyMDUxLDYgKzIyMDU4LDcgQEAKIAkJCQlBODBBMzhGRDBF
NTBDQzgyMDBBMjVFQkMgLyogUGF0dGVybkNHLmNwcCAqLywKIAkJCQlCMjc1MzUzNjBCMDUzODE0
MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5jcHAgKi8sCiAJCQkJQjI3NTM1MzcwQjA1Mzgx
NDAwMkNFNjRGIC8qIFBERkRvY3VtZW50SW1hZ2UuaCAqLywKKwkJCQkzNzdBM0E4RjE1RUZDRTlB
MDA1OUY1QzcgLyogUGxhdGZvcm1JbWFnZUNHLmNwcCAqLywKIAkJCQkxRkM0MEZCODE2NTVDNTkx
MDA0MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAgKi8sCiAJCQkJMUZDNDBGQjcx
NjU1QzU5MTAwNDBGMjlFIC8qIFN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCAqLywKIAkJCQlCMjc1
MzUyQTBCMDUzODE0MDAyQ0U2NEYgLyogVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAgKi8sCkBA
IC0yMjExOCw2ICsyMjEyNiw3IEBACiAJCQkJQkVGMjlFRTkxNzE1REQwOTAwQzRCNEM5IC8qIEF1
ZGlvVHJhY2tQcml2YXRlLmggKi8sCiAJCQkJQTg5OTQzMjcwQjQyMzM4NzAwRDdDODAyIC8qIEJp
dG1hcEltYWdlLmNwcCAqLywKIAkJCQlBODk5NDMyNjBCNDIzMzg3MDBEN0M4MDIgLyogQml0bWFw
SW1hZ2UuaCAqLywKKwkJCQk1NTA0RTRDQTFEMzU1MzJEMDBGRTUwODggLyogQml0bWFwUGl4ZWxz
LmggKi8sCiAJCQkJQ0RERTAyRTkxOEIzREZDNzAwQ0Y3RkYxIC8qIENETVNlc3Npb24uaCAqLywK
IAkJCQlCMjc1MzUzODBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3IuY3BwICovLAogCQkJCUIyNzUz
NTM5MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5oICovLApAQCAtMjIyMDIsNiArMjIyMTEsOCBA
QAogCQkJCTQzRDI1OTc2MTNDODE2RjQwMDYwODU1OSAvKiBJbWFnZUJ1ZmZlci5jcHAgKi8sCiAJ
CQkJQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8sCiAJCQkJMjJC
RDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovLAorCQkJCTU1Q0JB
NjlGMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1lRGF0YS5jcHAgKi8sCisJCQkJNTVDQkE2
QTAxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggKi8sCiAJCQkJQkM3RjQ0QTcw
QjlFMzI0RTAwQTlEMDgxIC8qIEltYWdlT2JzZXJ2ZXIuaCAqLywKIAkJCQlBODc0OEQ3NDEyQ0Mz
Rjg5MDAxRkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5jcHAgKi8sCiAJCQkJQTg3NDhENjYxMkND
Mzc2MzAwMUZCQTQxIC8qIEltYWdlT3JpZW50YXRpb24uaCAqLywKQEAgLTIyMjUxLDYgKzIyMjYy
LDcgQEAKIAkJCQkyRDUwMDJGQTFCNTZENzk5MDAyMEFBRjcgLyogUGF0aFV0aWxpdGllcy5oICov
LAogCQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLywKIAkJCQlB
OEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oICovLAorCQkJCTU1NzRGMDg1MUQw
Mjc0NDQwMEI5RjE0QyAvKiBQbGF0Zm9ybUltYWdlLmggKi8sCiAJCQkJMDU2MkY5NjAxNTczRjg4
RjAwMzFDQTE2IC8qIFBsYXRmb3JtTGF5ZXIuaCAqLywKIAkJCQlDRUVGQ0Q3QjE5REIzM0RDMDAz
ODc2RDcgLyogUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmggKi8sCiAJCQkJMDcyODQ3RTIx
NkVCQzVCMDAwNDNDRkE0IC8qIFBsYXRmb3JtVGV4dFRyYWNrLmggKi8sCkBAIC0yNjAxOCw2ICsy
NjAzMCw3IEBACiAJCQkJODVFNzExQjkwQUM1RDUzNTAwNTMyNzBGIC8qIERPTUhUTUxNYXBFbGVt
ZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTE1NzlGMEMwM0JCRDMwMDhCQjBF
RSAvKiBET01IVE1MTWFycXVlZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTE1NkVB
MEMwM0I3NDEwMDhCQjBFRSAvKiBET01IVE1MTWFycXVlZUVsZW1lbnRJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNTU3NEYwODcxRDAyNzkwOTAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTJERUM2NjU1MUM4MkQwNDEwMDk5ODQ2QSAvKiBET01IVE1M
TWVkaWFFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyREVDNjY1MTFDODJEMDE2MDA5OTg0
NkEgLyogRE9NSFRNTE1lZGlhRWxlbWVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NUJBNEQxMzBBQTY4ODY4MDA4ODA1MkQgLyogRE9NSFRNTE1lbnVFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKQEAgLTI2NDU5LDYgKzI2NDcyLDcgQEAKIAkJCQlEMzU5RDc4QTEyOUNBMjcxMDAwNkU1
RDIgLyogSFRNTERldGFpbHNFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEVBNzlGQTBB
MTkxNkRGMDBBOEVGNUYgLyogSFRNTERpcmVjdG9yeUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4RUE3Q0I3MEExOTJCOUMwMEE4RUY1RiAvKiBIVE1MRGl2RWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNTVDQkE2QTIxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEVBNzlGNzBBMTkxNkRGMDBBOEVGNUYgLyogSFRNTERMaXN0
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk4RTUwODI0NUU1OTAwMUU5QUJDIC8q
IEhUTUxEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc3QjM4NjcxMjI4ODNFOTAwQjgx
RkY4IC8qIEhUTUxEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODM1OSw2ICsy
ODM3Myw3IEBACiAJCQkJQjIyMjc5OTMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0FuaW1hdGVNb3Rp
b25FbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk5NTBEMDBCRjIyMDA3MUI3ODIg
LyogU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3
OTk4MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdBbmltYXRpb25FbGVtZW50LmggaW4gSGVhZGVycyAq
LywKKwkJCQk1NTA0RTRDQjFEMzU1N0IyMDBGRTUwODggLyogQml0bWFwUGl4ZWxzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0MzlEMzM0NTEzQTY5MTFDMDBDMjBGNEYgLyogU1ZHQW5pbWF0b3JGYWN0
b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEZCM0Y4NDEzQkM3NTRDMDA5OUZDMTggLyogU1ZH
QXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5OUMwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR0NpcmNsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjk0
MTEsNyArMjk0MjYsNyBAQAogCQkJCUZEQzU0RjA0MTM5OUIwREEwMDhEOTExNyAvKiBCaXF1YWRG
aWx0ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MDI2MTJCMDI2NzYwMEMxQTM1
OSAvKiBCaXF1YWRQcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg5OTQzMjkwQjQy
MzM4ODAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTM3N0Ez
QTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTM3N0EzQTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTc2RDZDNzgxMjJCOEEzRDAwMUZEMUY3IC8qIEJsb2IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMkVERUYxRjMxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JEYXRhLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUUxRDMxQ0RDMTkxOTYwMjAwMDEwMDVBMyAvKiBCbG9iRGF0YUZp
bGVSZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTc3NCw2ICsyOTc4OSw3IEBACiAJ
CQkJMkUyRDk5RTgxMEUyQkMxQzAwNDk2MzM3IC8qIERPTUJsb2IubW0gaW4gU291cmNlcyAqLywK
IAkJCQk4NTA4OUNEODBBOThDNDI4MDBBMjc1QUEgLyogRE9NQ0RBVEFTZWN0aW9uLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJODVBQ0E5ODcwQTlCNTIwMzAwNjcxRTkwIC8qIERPTUNoYXJhY3RlckRh
dGEubW0gaW4gU291cmNlcyAqLywKKwkJCQk1NUNCQTZBMTFEMURGMkUxMDA0NTE4NjAgLyogSW1h
Z2VGcmFtZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODUwODlDREEwQTk4QzQyODAwQTI3
NUFBIC8qIERPTUNvbW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk5NzhEMDdCRTE0NUEwRjZD
MDA5NjkwOEQgLyogRE9NQ29yZUV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NThD
MzhBNjBBQThGMjA0MDBCMTg3QTQgLyogRE9NQ291bnRlci5tbSBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQppbmRleCA0MDExZWEzZmQ4YzA0Njk3NGM1NWQ0OGUz
OTZmMWI4M2I4MWYzMzVkLi5hNWFjNGYwNWFlMzM5YThkNjQ3MDZjMTBmYzBmN2FmNDA0MjU2MjNj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQpAQCAtNjA2LDcgKzYwNiw3IEBAIC0g
KHZvaWQpZ2V0UHJldmlld1NuYXBzaG90SW1hZ2U6KENHSW1hZ2VSZWYqKWNnSW1hZ2UgYW5kUmVj
dHM6KE5TQXJyYXkgKiopcmVjdHMKIAogICAgIGlmICh0ZXh0SW5kaWNhdG9yKSB7CiAgICAgICAg
IGlmIChJbWFnZSogaW1hZ2UgPSB0ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2UoKSkKLSAgICAg
ICAgICAgICpjZ0ltYWdlID0gKENHSW1hZ2VSZWYpQ0ZBdXRvcmVsZWFzZShDR0ltYWdlUmV0YWlu
KGltYWdlLT5nZXRDR0ltYWdlUmVmKCkpKTsKKyAgICAgICAgICAgICpjZ0ltYWdlID0gaW1hZ2Ut
Pm5hdGl2ZUltYWdlKCkuYXV0b3JlbGVhc2UoKTsKICAgICB9CiAKICAgICBSZXRhaW5QdHI8TlNN
dXRhYmxlQXJyYXk+IHJlY3RBcnJheSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdF0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRv
cldpbmRvdy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cu
bW0KaW5kZXggMzY0YTlhODdjZTZmMDY2Mzk0OGI4ODQ2ZThlMmNlNmQxOTBmMjQ4OS4uYTc0ZGE4
NWFjZWNhM2M2Njk4ZGQxNTZhYjMxYTZjOTcxYTM1NGU2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCkBAIC0xNjIsOSArMTYyLDkgQEAgLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSB0ZXh0SW5kaWNhdG9yOihQ
YXNzUmVmUHRyPFRleHRJbmRpY2EKICAgICBjb250ZW50c0ltYWdlTG9naWNhbFNpemUuc2NhbGUo
MSAvIF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VTY2FsZUZhY3RvcigpKTsKICAgICBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZTsKICAgICBpZiAoaW5kaWNhdG9yV2FudHND
b250ZW50Q3Jvc3NmYWRlKCpfdGV4dEluZGljYXRvcikpCi0gICAgICAgIGNvbnRlbnRzSW1hZ2Ug
PSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlV2l0aEhpZ2hsaWdodCgpLT5nZXRDR0ltYWdl
UmVmKCk7CisgICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudElt
YWdlV2l0aEhpZ2hsaWdodCgpLT5uYXRpdmVJbWFnZSgpOwogICAgIGVsc2UKLSAgICAgICAgY29u
dGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2UoKS0+Z2V0Q0dJbWFnZVJl
ZigpOworICAgICAgICBjb250ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFn
ZSgpLT5uYXRpdmVJbWFnZSgpOwogCiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBib3Vu
Y2VMYXllcnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKIApAQCAt
MjY1LDcgKzI2NSw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0FLZXlmcmFtZUFuaW1hdGlvbj4gY3Jl
YXRlQm91bmNlQW5pbWF0aW9uKENGVGltZUludGVydmFsIGR1cmF0CiBzdGF0aWMgUmV0YWluUHRy
PENBQmFzaWNBbmltYXRpb24+IGNyZWF0ZUNvbnRlbnRDcm9zc2ZhZGVBbmltYXRpb24oQ0ZUaW1l
SW50ZXJ2YWwgZHVyYXRpb24sIFRleHRJbmRpY2F0b3ImIHRleHRJbmRpY2F0b3IpCiB7CiAgICAg
UmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGNyb3NzZmFkZUFuaW1hdGlvbiA9IFtDQUJhc2lj
QW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAiY29udGVudHMiXTsKLSAgICBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZSA9IHRleHRJbmRpY2F0b3IuY29udGVudEltYWdl
KCktPmdldENHSW1hZ2VSZWYoKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJ
bWFnZSA9IHRleHRJbmRpY2F0b3IuY29udGVudEltYWdlKCktPm5hdGl2ZUltYWdlKCk7CiAgICAg
W2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRUb1ZhbHVlOihpZCljb250ZW50c0ltYWdlLmdldCgpXTsK
ICAgICBbY3Jvc3NmYWRlQW5pbWF0aW9uIHNldEZpbGxNb2RlOmtDQUZpbGxNb2RlRm9yd2FyZHNd
OwogICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0UmVtb3ZlZE9uQ29tcGxldGlvbjpOT107CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKaW5k
ZXggNDYwZDFiODU2Yjc3YjdjZjRlYzY4OTY1ODFiODMzZDNlN2Y5NzAxNC4uZmM2NDlkMTBhYWI5
YzEzZmZmMjkzMDU1YTcwN2NiNzQ1Mzc0NjkxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcApAQCAtNjgsMTUgKzY4LDEzIEBAIEJpdG1h
cEltYWdlOjpCaXRtYXBJbWFnZShOYXRpdmVJbWFnZVB0ciYmIGltYWdlLCBJbWFnZU9ic2VydmVy
KiBvYnNlcnZlcikKICAgICAsIG1faGF2ZUZyYW1lQ291bnQodHJ1ZSkKICAgICAsIG1fYW5pbWF0
aW9uRmluaXNoZWRXaGVuQ2F0Y2hpbmdVcChmYWxzZSkKIHsKKyAgICBtX2ZyYW1lcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KDEpOworICAgIG1fZnJhbWVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3Zl
KGltYWdlKSk7CisgICAgCiAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhIGRlY29kZXIsIHdl
IGNhbid0IGZpZ3VyZSBvdXQgdGhlIGltYWdlIG9yaWVudGF0aW9uLgogICAgIC8vIFNldCBtX3Np
emVSZXNwZWN0aW5nT3JpZW50YXRpb24gdG8gYmUgdGhlIHNhbWUgYXMgbV9zaXplIHNvIGl0J3Mg
bm90IDB4MC4KLSAgICBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBtX3NpemUgPSBOYXRp
dmVJbWFnZTo6c2l6ZShpbWFnZSk7CisgICAgbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uID0g
bV9zaXplID0gbV9mcmFtZXNbMF0uc2l6ZSgpOwogICAgIG1fZGVjb2RlZFNpemUgPSBtX3NpemUu
YXJlYSgpICogNDsKLSAgICAKLSAgICBtX2ZyYW1lcy5ncm93KDEpOwotICAgIG1fZnJhbWVzWzBd
Lm1faGFzQWxwaGEgPSBOYXRpdmVJbWFnZTo6aGFzQWxwaGEoaW1hZ2UpOwotICAgIG1fZnJhbWVz
WzBdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKLSAgICBtX2ZyYW1lc1swXS5tX2ltYWdlID0gV1RG
TW92ZShpbWFnZSk7CiB9CiAKIEJpdG1hcEltYWdlOjp+Qml0bWFwSW1hZ2UoKQpAQCAtMTA1LDcg
KzEwMyw3IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmhhdmVGcmFtZUltYWdlQXRJbmRleChzaXplX3Qg
aW5kZXgpCiAgICAgaWYgKGluZGV4ID49IG1fZnJhbWVzLnNpemUoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOworICAgIHJldHVy
biBtX2ZyYW1lc1tpbmRleF0uaGFzSW1hZ2UoKTsKIH0KIAogYm9vbCBCaXRtYXBJbWFnZTo6aGFz
U2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdApAQCAtMTI1LDkgKzEyMyw3IEBAIHZvaWQgQml0
bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGRlc3Ryb3lBbGwpCiAgICAgICAgIC8v
IFRoZSB1bmRlcmx5aW5nIGZyYW1lIGlzbid0IGFjdHVhbGx5IGNoYW5naW5nICh3ZSdyZSBqdXN0
IHRyeWluZyB0bwogICAgICAgICAvLyBzYXZlIHRoZSBtZW1vcnkgZm9yIHRoZSBmcmFtZWJ1ZmZl
ciBkYXRhKSwgc28gd2UgZG9uJ3QgbmVlZCB0byBjbGVhcgogICAgICAgICAvLyB0aGUgbWV0YWRh
dGEuCi0gICAgICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMgPSBtX2ZyYW1lc1tpXS5tX2ZyYW1lQnl0
ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1tpXS5jbGVhcihmYWxzZSkpCi0gICAgICAgICAgICBm
cmFtZUJ5dGVzQ2xlYXJlZCArPSBmcmFtZUJ5dGVzOworICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJl
ZCArPSBtX2ZyYW1lc1tpXS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEp
OwogICAgIH0KIAogICAgIG1fc291cmNlLmNsZWFyKGRlc3Ryb3lBbGwsIGNsZWFyQmVmb3JlRnJh
bWUsIGRhdGEoKSwgbV9hbGxEYXRhUmVjZWl2ZWQpOwpAQCAtMTUwLDggKzE0Niw4IEBAIHZvaWQg
Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KGJvb2wgZGVzdHJveUFs
bCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgYWxsRnJhbWVCeXRlcyA9IDA7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAg
YWxsRnJhbWVCeXRlcyArPSBtX2ZyYW1lc1tpXS51c2VkRnJhbWVCeXRlcygpOworICAgIGZvciAo
YXV0byYgZnJhbWUgOiBtX2ZyYW1lcykKKyAgICAgICAgYWxsRnJhbWVCeXRlcyArPSBmcmFtZS5m
cmFtZUJ5dGVzKCk7CiAKICAgICBpZiAoYWxsRnJhbWVCeXRlcyA+IGxhcmdlQW5pbWF0aW9uQ3V0
b2ZmKSB7CiAgICAgICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZSAlcCBkZXN0cm95RGVjb2Rl
ZERhdGFJZk5lY2Vzc2FyeSBkZXN0cm95aW5nRGF0YTogYWxsRnJhbWVCeXRlcz0ldSBjdXRvZmY9
JXUiLCB0aGlzLCBhbGxGcmFtZUJ5dGVzLCBsYXJnZUFuaW1hdGlvbkN1dG9mZik7CkBAIC0xNzcs
NyArMTczLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJveU1ldGFkYXRhQW5kTm90aWZ5KHVu
c2lnbmVkIGZyYW1lQnl0ZXNDbGVhcmVkLCBDbGVhcmVkU28KICAgICAgICAgaW1hZ2VPYnNlcnZl
cigpLT5kZWNvZGVkU2l6ZUNoYW5nZWQodGhpcywgLXNhZmVDYXN0PGludD4oZnJhbWVCeXRlc0Ns
ZWFyZWQpKTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgs
IFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZUNhY2hpbmcgZnJh
bWVDYWNoaW5nKQordm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgsIFN1
YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcg
Y2FjaGluZykKIHsKICAgICBzaXplX3QgbnVtRnJhbWVzID0gZnJhbWVDb3VudCgpOwogICAgIEFT
U0VSVChtX2RlY29kZWRTaXplID09IDAgfHwgbnVtRnJhbWVzID4gMSk7CkBAIC0xODUsMjUgKzE4
MSwxMiBAQCB2b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vic2Ft
cGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbQogICAgIGlmIChtX2ZyYW1lcy5zaXplKCkg
PCBudW1GcmFtZXMpCiAgICAgICAgIG1fZnJhbWVzLmdyb3cobnVtRnJhbWVzKTsKIAotICAgIGlm
IChmcmFtZUNhY2hpbmcgPT0gQ2FjaGVNZXRhZGF0YUFuZEZyYW1lKSB7Ci0gICAgICAgIG1fZnJh
bWVzW2luZGV4XS5tX2ltYWdlID0gbV9zb3VyY2UuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5k
ZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOwotICAgICAgICBtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1w
bGluZ0xldmVsID0gc3Vic2FtcGxpbmdMZXZlbDsKLSAgICB9Ci0KLSAgICBtX2ZyYW1lc1tpbmRl
eF0ubV9vcmllbnRhdGlvbiA9IG1fc291cmNlLm9yaWVudGF0aW9uQXRJbmRleChpbmRleCk7Ci0g
ICAgbV9mcmFtZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKLSAgICBtX2ZyYW1lc1tp
bmRleF0ubV9pc0NvbXBsZXRlID0gbV9zb3VyY2UuZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRl
eCk7CisgICAgbV9mcmFtZXNbaW5kZXhdID0gbV9zb3VyY2UuY3JlYXRlRnJhbWVEYXRhQXRJbmRl
eChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgY2FjaGluZyk7CiAKLSAgICBpZiAocmVwZXRpdGlv
bkNvdW50KGZhbHNlKSAhPSBjQW5pbWF0aW9uTm9uZSkKLSAgICAgICAgbV9mcmFtZXNbaW5kZXhd
Lm1fZHVyYXRpb24gPSBtX3NvdXJjZS5mcmFtZUR1cmF0aW9uQXRJbmRleChpbmRleCk7CisgICAg
TE9HKEltYWdlcywgIkJpdG1hcEltYWdlICVwIGNhY2hlRnJhbWUgJWx1ICglcyV1IGJ5dGVzLCBj
b21wbGV0ZSAlZCkiLCB0aGlzLCBpbmRleCwgY2FjaGluZyA9PSBJbWFnZUZyYW1lRGF0YTo6Q2Fj
aGluZzo6TWV0YWRhdGEgPyAibWV0YWRhdGEgb25seSwgIiA6ICIiLCBtX2ZyYW1lc1tpbmRleF0u
ZnJhbWVCeXRlcygpLCBtX2ZyYW1lc1tpbmRleF0uaXNDb21wbGV0ZSgpKTsKIAotICAgIG1fZnJh
bWVzW2luZGV4XS5tX2hhc0FscGhhID0gbV9zb3VyY2UuZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5k
ZXgpOwotICAgIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXMgPSBtX3NvdXJjZS5mcmFtZUJ5
dGVzQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7Ci0KLSAgICBMT0coSW1hZ2VzLCAi
Qml0bWFwSW1hZ2UgJXAgY2FjaGVGcmFtZSAlbHUgKCVzJXUgYnl0ZXMsIGNvbXBsZXRlICVkKSIs
IHRoaXMsIGluZGV4LCBmcmFtZUNhY2hpbmcgPT0gQ2FjaGVNZXRhZGF0YU9ubHkgPyAibWV0YWRh
dGEgb25seSwgIiA6ICIiLCBtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZUJ5dGVzLCBtX2ZyYW1lc1tp
bmRleF0ubV9pc0NvbXBsZXRlKTsKLQotICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkg
ewotICAgICAgICBpbnQgZGVsdGFCeXRlcyA9IHNhZmVDYXN0PGludD4obV9mcmFtZXNbaW5kZXhd
Lm1fZnJhbWVCeXRlcyk7CisgICAgaWYgKG1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpKSB7Cisg
ICAgICAgIGludCBkZWx0YUJ5dGVzID0gc2FmZUNhc3Q8aW50PihtX2ZyYW1lc1tpbmRleF0uZnJh
bWVCeXRlcygpKTsKICAgICAgICAgbV9kZWNvZGVkU2l6ZSArPSBkZWx0YUJ5dGVzOwogICAgICAg
ICAvLyBUaGUgZnVsbHktZGVjb2RlZCBmcmFtZSB3aWxsIHN1YnN1bWUgdGhlIHBhcnRpYWxseSBk
ZWNvZGVkIGRhdGEgdXNlZAogICAgICAgICAvLyB0byBkZXRlcm1pbmUgaW1hZ2UgcHJvcGVydGll
cy4KQEAgLTI4OCwyMSArMjcxLDE5IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKGJv
b2wgYWxsRGF0YVJlY2VpdmVkKQogICAgIC8vIGZyYW1lIGFmZmVjdGVkIGJ5IGFwcGVuZGluZyBu
ZXcgZGF0YSBoZXJlLiBUaHVzIHdlIGhhdmUgdG8gY2xlYXIgYWxsIHRoZQogICAgIC8vIGluY29t
cGxldGUgZnJhbWVzIHRvIGJlIHNhZmUuCiAgICAgdW5zaWduZWQgZnJhbWVCeXRlc0NsZWFyZWQg
PSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmFtZXMuc2l6ZSgpOyArK2kpIHsK
KyAgICBmb3IgKGF1dG8mIGZyYW1lIDogbV9mcmFtZXMpIHsKICAgICAgICAgLy8gTk9URTogRG9u
J3QgY2FsbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KCkgaGVyZSwgdGhhdCB3aWxsIHRyeSB0bwog
ICAgICAgICAvLyBkZWNvZGUgYW55IHVuY2FjaGVkIChpLmUuIG5ldmVyLWRlY29kZWQgb3IKICAg
ICAgICAgLy8gY2xlYXJlZC1vbi1hLXByZXZpb3VzLXBhc3MpIGZyYW1lcyEKLSAgICAgICAgdW5z
aWduZWQgZnJhbWVCeXRlcyA9IG1fZnJhbWVzW2ldLm1fZnJhbWVCeXRlczsKLSAgICAgICAgaWYg
KG1fZnJhbWVzW2ldLm1faGF2ZU1ldGFkYXRhICYmICFtX2ZyYW1lc1tpXS5tX2lzQ29tcGxldGUp
Ci0gICAgICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSAobV9mcmFtZXNbaV0uY2xlYXIodHJ1
ZSkgPyBmcmFtZUJ5dGVzIDogMCk7CisgICAgICAgIGlmIChmcmFtZS5oYXNNZXRhZGF0YSgpICYm
ICFmcmFtZS5pc0NvbXBsZXRlKCkpCisgICAgICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSBm
cmFtZS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6RW1wdHkpOwogICAgIH0KICAgICBk
ZXN0cm95TWV0YWRhdGFBbmROb3RpZnkoZnJhbWVCeXRlc0NsZWFyZWQsIENsZWFyZWRTb3VyY2U6
Ok5vKTsKICNlbHNlCiAgICAgLy8gRklYTUU6IHdoeSBpcyB0aGlzIGRpZmZlcmVudCBmb3IgaU9T
PwogICAgIGludCBkZWx0YUJ5dGVzID0gMDsKICAgICBpZiAoIW1fZnJhbWVzLmlzRW1wdHkoKSkg
ewotICAgICAgICBpbnQgYnl0ZXMgPSBtX2ZyYW1lc1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5tX2Zy
YW1lQnl0ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5jbGVh
cih0cnVlKSkgeworICAgICAgICBpZiAoaW50IGJ5dGVzID0gbV9mcmFtZXNbbV9mcmFtZXMuc2l6
ZSgpIC0gMV0uY2xlYXIoSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6OkVtcHR5KSkgewogICAgICAg
ICAgICAgZGVsdGFCeXRlcyArPSBieXRlczsKICAgICAgICAgICAgIGRlbHRhQnl0ZXMgKz0gbV9k
ZWNvZGVkUHJvcGVydGllc1NpemU7CiAgICAgICAgICAgICBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6
ZSA9IDA7CkBAIC0zNjYsMTUgKzM0NywxNSBAQCBib29sIEJpdG1hcEltYWdlOjppc1NpemVBdmFp
bGFibGUoKQogICAgIHJldHVybiBtX3NpemVBdmFpbGFibGU7CiB9CiAKLWJvb2wgQml0bWFwSW1h
Z2U6OmVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4LCBJbWFnZUZyYW1lQ2FjaGluZyBm
cmFtZUNhY2hpbmcpCitib29sIEJpdG1hcEltYWdlOjplbnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVf
dCBpbmRleCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgY2FjaGluZykKIHsKICAgICBpZiAoaW5k
ZXggPj0gZnJhbWVDb3VudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoaW5k
ZXggPj0gbV9mcmFtZXMuc2l6ZSgpCi0gICAgICAgIHx8IChmcmFtZUNhY2hpbmcgPT0gQ2FjaGVN
ZXRhZGF0YUFuZEZyYW1lICYmICFtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKLSAgICAgICAgfHwg
KGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhT25seSAmJiAhbV9mcmFtZXNbaW5kZXhdLm1f
aGF2ZU1ldGFkYXRhKSkKLSAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgMCwgZnJhbWVDYWNoaW5n
KTsKKyAgICAgICAgfHwgKGNhY2hpbmcgPT0gSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFk
YXRhQW5kSW1hZ2UgJiYgIW1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpKQorICAgICAgICB8fCAo
Y2FjaGluZyA9PSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEgJiYgIW1fZnJhbWVz
W2luZGV4XS5oYXNNZXRhZGF0YSgpKSkKKyAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgMCwgY2Fj
aGluZyk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM4OCwxMCArMzY5LDkgQEAgTmF0aXZl
SW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgZmxv
YXQgcHJlc2VudGF0aW9uU2MKIAogICAgIC8vIFdlIG1heSBoYXZlIGNhY2hlZCBhIGZyYW1lIHdp
dGggYSBoaWdoZXIgc3Vic2FtcGxpbmcgbGV2ZWwsIGluIHdoaWNoIGNhc2Ugd2UgbmVlZCB0bwog
ICAgIC8vIHJlLWRlY29kZSB3aXRoIGEgbG93ZXIgbGV2ZWwuCi0gICAgaWYgKGluZGV4IDwgbV9m
cmFtZXMuc2l6ZSgpICYmIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlICYmIHN1YnNhbXBsaW5nTGV2
ZWwgPCBtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1wbGluZ0xldmVsKSB7CisgICAgaWYgKGluZGV4
IDwgbV9mcmFtZXMuc2l6ZSgpICYmIG1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpICYmIHN1YnNh
bXBsaW5nTGV2ZWwgPCBtX2ZyYW1lc1tpbmRleF0uc3Vic2FtcGxpbmdMZXZlbCgpKSB7CiAgICAg
ICAgIC8vIElmIHRoZSBpbWFnZSBpcyBhbHJlYWR5IGNhY2hlZCwgYnV0IGF0IHRvbyBzbWFsbCBh
IHNpemUsIHJlLWRlY29kZSBhIGxhcmdlciB2ZXJzaW9uLgotICAgICAgICBpbnQgc2l6ZUNoYW5n
ZSA9IC1tX2ZyYW1lc1tpbmRleF0ubV9mcmFtZUJ5dGVzOwotICAgICAgICBtX2ZyYW1lc1tpbmRl
eF0uY2xlYXIodHJ1ZSk7CisgICAgICAgIGludCBzaXplQ2hhbmdlID0gLW1fZnJhbWVzW2luZGV4
XS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6RW1wdHkpOwogICAgICAgICBpbnZhbGlk
YXRlUGxhdGZvcm1EYXRhKCk7CiAgICAgICAgIG1fZGVjb2RlZFNpemUgKz0gc2l6ZUNoYW5nZTsK
ICAgICAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKQEAgLTM5OSw0MCArMzc5LDcyIEBAIE5hdGl2
ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIGZs
b2F0IHByZXNlbnRhdGlvblNjCiAgICAgfQogCiAgICAgLy8gSWYgd2UgaGF2ZW4ndCBmZXRjaGVk
IGEgZnJhbWUgeWV0LCBkbyBzby4KLSAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8
ICFtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKLSAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgc3Vi
c2FtcGxpbmdMZXZlbCwgQ2FjaGVNZXRhZGF0YUFuZEZyYW1lKTsKKyAgICBpZiAoaW5kZXggPj0g
bV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0uaGFzSW1hZ2UoKSkKKyAgICAgICAg
Y2FjaGVGcmFtZShpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hp
bmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOworCisgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5pbWFn
ZSgpOworfQorICAgIAorTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKCkK
K3sKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCk7Cit9CisgICAgCitOYXRpdmVJbWFn
ZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkK
K3sKKyAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7CisgICAgCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGF1dG8gaW1hZ2UgPSBmcmFtZUlt
YWdlQXRJbmRleChpKTsKKyAgICAgICAgaWYgKGltYWdlICYmIFBsYXRmb3JtSW1hZ2UoaW1hZ2Up
LnNpemUoKSA9PSBzaXplKQorICAgICAgICAgICAgcmV0dXJuIGltYWdlOworICAgIH0KKyAgICAK
KyAgICAvLyBGYWxsYmFjayB0byB0aGUgZmlyc3QgZnJhbWUgaW1hZ2UgaWYgd2UgY2FuJ3QgZmlu
ZCB0aGUgcmlnaHQgc2l6ZQorICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKTsKK30KKyAg
ICAKK05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpCit7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKK30K
IAotICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZTsKK1ZlY3RvcjxOYXRpdmVJbWFn
ZVB0cj4gQml0bWFwSW1hZ2U6OmZyYW1lc05hdGl2ZUltYWdlcygpCit7CisgICAgVmVjdG9yPE5h
dGl2ZUltYWdlUHRyPiBpbWFnZXM7CisgICAgc2l6ZV90IGNvdW50ID0gZnJhbWVDb3VudCgpOwor
ICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBp
ZiAoYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpKQorICAgICAgICAgICAgaW1hZ2Vz
LmFwcGVuZChpbWFnZSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBpbWFnZXM7CiB9CiAKIGJv
b2wgQml0bWFwSW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogewot
ICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQor
ICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hp
bmc6Ok1ldGFkYXRhKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG1fZnJh
bWVzW2luZGV4XS5tX2lzQ29tcGxldGU7CisgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5pc0Nv
bXBsZXRlKCk7CiB9CiAKIGZsb2F0IEJpdG1hcEltYWdlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChz
aXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBDYWNo
ZU1ldGFkYXRhT25seSkpCisgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBJbWFn
ZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEpKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9kdXJhdGlvbjsKLX0KLQotTmF0aXZlSW1hZ2VQdHIg
Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKLXsKLSAgICByZXR1cm4g
ZnJhbWVJbWFnZUF0SW5kZXgoY3VycmVudEZyYW1lKCkpOworICAgIHJldHVybiBtX2ZyYW1lc1tp
bmRleF0uZHVyYXRpb24oKTsKIH0KIAogYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVIYXNBbHBoYUF0
SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRl
eCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQorICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRl
eCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBpZiAobV9mcmFtZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRhKQotICAgICAgICBy
ZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faGFzQWxwaGE7CisgICAgaWYgKG1fZnJhbWVzW2luZGV4
XS5oYXNNZXRhZGF0YSgpKQorICAgICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLmhhc0FscGhh
KCk7CiAKICAgICByZXR1cm4gbV9zb3VyY2UuZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5kZXgpOwog
fQpAQCAtNDQ0LDExICs0NTYsMTEgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Y3VycmVudEZyYW1lS25v
d25Ub0JlT3BhcXVlKCkKIAogSW1hZ2VPcmllbnRhdGlvbiBCaXRtYXBJbWFnZTo6ZnJhbWVPcmll
bnRhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICghZW5zdXJlRnJhbWVJc0Nh
Y2hlZChpbmRleCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQorICAgIGlmICghZW5zdXJlRnJhbWVJc0Nh
Y2hlZChpbmRleCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhKSkKICAgICAgICAg
cmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsKIAotICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9o
YXZlTWV0YWRhdGEpCi0gICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9vcmllbnRhdGlv
bjsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhdLmhhc01ldGFkYXRhKCkpCisgICAgICAgIHJldHVy
biBtX2ZyYW1lc1tpbmRleF0ub3JpZW50YXRpb24oKTsKIAogICAgIHJldHVybiBtX3NvdXJjZS5v
cmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOwogfQpAQCAtNzAwLDE3ICs3MTIsNTYgQEAgQ29sb3Ig
Qml0bWFwSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcigpCiAgICAgICAgIHJldHVybiBDb2xv
cigpOwogICAgIAogICAgIEFTU0VSVChtX2ZyYW1lcy5zaXplKCkpOwotICAgIG1fc29saWRDb2xv
ciA9IE5hdGl2ZUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IobV9mcmFtZXNbMF0ubV9pbWFn
ZS5nZXQoKSk7CisgICAgbV9zb2xpZENvbG9yID0gbV9mcmFtZXNbMF0uc2luZ2xlUGl4ZWxTb2xp
ZENvbG9yKCk7CiAgICAgCiAgICAgQVNTRVJUKG1fc29saWRDb2xvcik7CiAgICAgcmV0dXJuIG1f
c29saWRDb2xvci52YWx1ZSgpOwogfQogICAgIAorYm9vbCBCaXRtYXBJbWFnZTo6aXNBbG1vc3RT
b2xpZENvbG9yKCkKK3sKKyAgICBpZiAoZnJhbWVDb3VudCgpICE9IDEpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiBlbnN1cmVGcmFtZUlzQ2FjaGVkKDApICYmIG1fZnJhbWVz
WzBdLmlzQWxtb3N0U29saWRDb2xvcigpOworfQorICAgIAogYm9vbCBCaXRtYXBJbWFnZTo6Y2Fu
QW5pbWF0ZSgpCiB7CiAgICAgcmV0dXJuIHNob3VsZEFuaW1hdGUoKSAmJiBmcmFtZUNvdW50KCkg
PiAxOwogfQogCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBD
b21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUsIEltYWdlT3JpZW50YXRpb25EZXNj
cmlwdGlvbiBkZXNjcmlwdGlvbikKK3sKKyAgICBpZiAoZGVzdFJlY3QuaXNFbXB0eSgpIHx8IHNy
Y1JlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgc3RhcnRBbmltYXRpb24oRG9Ob3RDYXRjaFVwKTsKKyNlbHNlCisgICAgc3RhcnRBbmltYXRp
b24oKTsKKyNlbmRpZgorICAgIAorICAgIENvbG9yIGNvbG9yID0gc2luZ2xlUGl4ZWxTb2xpZENv
bG9yKCk7CisgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICBmaWxsV2l0aFNvbGlk
Q29sb3IoY29udGV4dCwgZGVzdFJlY3QsIGNvbG9yLCBvcCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZy
YW1lLCBQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKGNvbnRleHQsIGRlc3RSZWN0LCBz
cmNSZWN0KSk7CisgICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3Qg
aGF2ZSBhbiBpbWFnZSB5ZXQuCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBJbWFnZU9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKGRlc2NyaXB0aW9uLmltYWdlT3JpZW50YXRpb24oKSk7CisgICAg
aWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdl
T3JpZW50YXRpb24pCisgICAgICAgIG9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5k
ZXgobV9jdXJyZW50RnJhbWUpOworICAgIAorICAgIFBsYXRmb3JtSW1hZ2UoaW1hZ2UpLmRyYXco
Y29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG1fc2l6ZSwgb3AsIG1vZGUsIG9yaWVudGF0aW9u
KTsKKyAgICAKKyAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQorICAgICAgICBpbWFnZU9ic2VydmVy
KCktPmRpZERyYXcodGhpcyk7Cit9CisgICAgCiB2b2lkIEJpdG1hcEltYWdlOjpkdW1wKFRleHRT
dHJlYW0mIHRzKSBjb25zdAogewogICAgIEltYWdlOjpkdW1wKHRzKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCmluZGV4IDA3NTg5MjljZDg3ZmFk
YWNmMDJiNmVkOGVlYWZlN2RlZmQ2NmYwYzUuLjIyMThjODI0YjUyOGZkNjM5YmFiMTM4ZGVjYzk4
Yjk4MTZhMTY4MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuaApAQCAtMjgsMTEgKzI4LDEzIEBACiAjaWZuZGVmIEJpdG1hcEltYWdlX2gKICNk
ZWZpbmUgQml0bWFwSW1hZ2VfaAogCi0jaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJDb2xv
ci5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2VGcmFtZURhdGEuaCIKICNp
bmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKICNp
bmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgogCiAjaWYgVVNF
KENHKSB8fCBVU0UoQVBQS0lUKQogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTQ3LDYz
ICs0OSw5IEBAIHR5cGVkZWYgc3RydWN0IEhCSVRNQVBfXyAqSEJJVE1BUDsKICNlbmRpZgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgc3RydWN0IEZyYW1lRGF0YTsKLX0KLQotbmFtZXNwYWNl
IFdURiB7Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgVmVjdG9yVHJhaXRzPFdlYkNvcmU6OkZyYW1l
RGF0YT4gOiBwdWJsaWMgU2ltcGxlQ2xhc3NWZWN0b3JUcmFpdHMgewotICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBjYW5Jbml0aWFsaXplV2l0aE1lbXNldCA9IGZhbHNlOyAvLyBOb3QgYWxsIEZy
YW1lRGF0YSBtZW1iZXJzIGluaXRpYWxpemUgdG8gMC4KLSAgICB9OwotfQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIFRpbWVyOwogCi1uYW1lc3BhY2UgTmF0aXZlSW1hZ2UgewotICAg
IEludFNpemUgc2l6ZShjb25zdCBOYXRpdmVJbWFnZVB0ciYpOwotICAgIGJvb2wgaGFzQWxwaGEo
Y29uc3QgTmF0aXZlSW1hZ2VQdHImKTsKLSAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3Io
Y29uc3QgTmF0aXZlSW1hZ2VQdHImKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBGcmFtZURhdGEgQ2xhc3MKLS8vID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdHJ1Y3QgRnJhbWVE
YXRhIHsKLXB1YmxpYzoKLSAgICBGcmFtZURhdGEoKQotICAgICAgICA6IG1faGF2ZU1ldGFkYXRh
KGZhbHNlKQotICAgICAgICAsIG1faXNDb21wbGV0ZShmYWxzZSkKLSAgICAgICAgLCBtX2hhc0Fs
cGhhKHRydWUpCi0gICAgewotICAgIH0KLQotICAgIH5GcmFtZURhdGEoKQotICAgIHsgCi0gICAg
ICAgIGNsZWFyKHRydWUpOwotICAgIH0KLQotICAgIC8vIENsZWFyIHRoZSBjYWNoZWQgaW1hZ2Ug
ZGF0YSBvbiB0aGUgZnJhbWUsIGFuZCAob3B0aW9uYWxseSkgdGhlIG1ldGFkYXRhLgotICAgIC8v
IFJldHVybnMgd2hldGhlciB0aGVyZSB3YXMgY2FjaGVkIGltYWdlIGRhdGEgdG8gY2xlYXIuCi0g
ICAgYm9vbCBjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpOwotICAgIAotICAgIHVuc2lnbmVkIHVz
ZWRGcmFtZUJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZSA/IG1fZnJhbWVCeXRlcyA6IDA7
IH0KLQotICAgIE5hdGl2ZUltYWdlUHRyIG1faW1hZ2U7Ci0gICAgSW1hZ2VPcmllbnRhdGlvbiBt
X29yaWVudGF0aW9uIHsgRGVmYXVsdEltYWdlT3JpZW50YXRpb24gfTsKLSAgICBTdWJzYW1wbGlu
Z0xldmVsIG1fc3Vic2FtcGxpbmdMZXZlbCB7IDAgfTsKLSAgICBmbG9hdCBtX2R1cmF0aW9uIHsg
MCB9OwotICAgIGJvb2wgbV9oYXZlTWV0YWRhdGEgOiAxOwotICAgIGJvb2wgbV9pc0NvbXBsZXRl
IDogMTsKLSAgICBib29sIG1faGFzQWxwaGEgOiAxOwotICAgIHVuc2lnbmVkIG1fZnJhbWVCeXRl
cyB7IDAgfTsKLX07Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS8vIEJpdG1hcEltYWdlIENsYXNzCi0vLyA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KIGNsYXNzIEJpdG1hcEltYWdlIGZpbmFs
IDogcHVibGljIEltYWdlIHsKICAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7CiAgICAg
ZnJpZW5kIGNsYXNzIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOwpAQCAtMTU1LDEyICsxMDMsNiBA
QCBwdWJsaWM6CiAgICAgQ0ZEYXRhUmVmIGdldFRJRkZSZXByZXNlbnRhdGlvbigpIG92ZXJyaWRl
OwogI2VuZGlmCiAKLSNpZiBVU0UoQ0cpCi0gICAgV0VCQ09SRV9FWFBPUlQgQ0dJbWFnZVJlZiBn
ZXRDR0ltYWdlUmVmKCkgb3ZlcnJpZGU7Ci0gICAgQ0dJbWFnZVJlZiBnZXRGaXJzdENHSW1hZ2VS
ZWZPZlNpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwotICAgIFJldGFpblB0cjxDRkFycmF5
UmVmPiBnZXRDR0ltYWdlQXJyYXkoKSBvdmVycmlkZTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0o
V0lOKQogICAgIGJvb2wgZ2V0SEJJVE1BUChIQklUTUFQKSBvdmVycmlkZTsKICAgICBib29sIGdl
dEhCSVRNQVBPZlNpemUoSEJJVE1BUCwgY29uc3QgSW50U2l6ZSopIG92ZXJyaWRlOwpAQCAtMTc0
LDggKzExNiwxMyBAQCBwdWJsaWM6CiAgICAgRXZhc19PYmplY3QqIGdldEV2YXNPYmplY3QoRXZh
cyopIG92ZXJyaWRlOwogI2VuZGlmCiAKKyAgICBXRUJDT1JFX0VYUE9SVCBOYXRpdmVJbWFnZVB0
ciBuYXRpdmVJbWFnZSgpIG92ZXJyaWRlOworICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdl
T2ZTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKICAgICBOYXRpdmVJbWFnZVB0ciBuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIG92ZXJyaWRlOwogICAgIEltYWdlT3JpZW50YXRpb24g
b3JpZW50YXRpb25Gb3JDdXJyZW50RnJhbWUoKSBvdmVycmlkZSB7IHJldHVybiBmcmFtZU9yaWVu
dGF0aW9uQXRJbmRleChjdXJyZW50RnJhbWUoKSk7IH0KKyAgICBWZWN0b3I8TmF0aXZlSW1hZ2VQ
dHI+IGZyYW1lc05hdGl2ZUltYWdlcygpIG92ZXJyaWRlOworICAgIAorICAgIFdFQkNPUkVfRVhQ
T1JUIGJvb2wgaXNBbG1vc3RTb2xpZENvbG9yKCk7CiAKICAgICBib29sIGN1cnJlbnRGcmFtZUtu
b3duVG9CZU9wYXF1ZSgpIG92ZXJyaWRlOwogCkBAIC0yMTUsNyArMTYyLDYgQEAgcHJvdGVjdGVk
OgogICAgIHNpemVfdCBmcmFtZUNvdW50KCk7CiAKICAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUlt
YWdlQXRJbmRleChzaXplX3QsIGZsb2F0IHByZXNlbnRhdGlvblNjYWxlSGludCA9IDEpOwotICAg
IE5hdGl2ZUltYWdlUHRyIGNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCk7CiAK
ICAgICBib29sIGhhdmVGcmFtZUltYWdlQXRJbmRleChzaXplX3QpOwogCkBAIC0yMjUsMTEgKzE3
MSwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBmcmFtZU9yaWVudGF0aW9u
QXRJbmRleChzaXplX3QpOwogCiAgICAgLy8gRGVjb2RlcyBhbmQgY2FjaGVzIGEgZnJhbWUuIE5l
dmVyIGFjY2Vzc2VkIGV4Y2VwdCBpbnRlcm5hbGx5LgotICAgIGVudW0gSW1hZ2VGcmFtZUNhY2hp
bmcgeyBDYWNoZU1ldGFkYXRhT25seSwgQ2FjaGVNZXRhZGF0YUFuZEZyYW1lIH07Ci0gICAgdm9p
ZCBjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZUNh
Y2hpbmcgPSBDYWNoZU1ldGFkYXRhQW5kRnJhbWUpOworICAgIHZvaWQgY2FjaGVGcmFtZShzaXpl
X3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nID0gSW1h
Z2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOwogCiAgICAgLy8gQ2FsbGVk
IGJlZm9yZSBhY2Nlc3NpbmcgbV9mcmFtZXNbaW5kZXhdIGZvciBpbmZvIHdpdGhvdXQgZGVjb2Rp
bmcuIFJldHVybnMgZmFsc2Ugb24gaW5kZXggb3V0IG9mIGJvdW5kcy4KLSAgICBib29sIGVuc3Vy
ZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4LCBJbWFnZUZyYW1lQ2FjaGluZyA9IENhY2hlTWV0
YWRhdGFBbmRGcmFtZSk7CisgICAgYm9vbCBlbnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVfdCBpbmRl
eCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgPSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0
YWRhdGFBbmRJbWFnZSk7CiAKICAgICAvLyBDYWxsZWQgdG8gaW52YWxpZGF0ZSBjYWNoZWQgZGF0
YS4gV2hlbiB8ZGVzdHJveUFsbHwgaXMgdHJ1ZSwgd2Ugd2lwZSBvdXQKICAgICAvLyB0aGUgZW50
aXJlIGZyYW1lIGJ1ZmZlciBjYWNoZSBhbmQgdGVsbCB0aGUgaW1hZ2Ugc291cmNlIHRvIGRlc3Ry
b3kKQEAgLTI5Miw3ICsyMzcsNyBAQCBwcml2YXRlOgogICAgIG11dGFibGUgSW50U2l6ZSBtX3Np
emVSZXNwZWN0aW5nT3JpZW50YXRpb247CiAKICAgICBzaXplX3QgbV9jdXJyZW50RnJhbWUgeyAw
IH07IC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBmcmFtZSBvZiBhbmltYXRpb24uCi0gICAg
VmVjdG9yPEZyYW1lRGF0YSwgMT4gbV9mcmFtZXM7IC8vIEFuIGFycmF5IG9mIHRoZSBjYWNoZWQg
ZnJhbWVzIG9mIHRoZSBhbmltYXRpb24uIFdlIGhhdmUgdG8gcmVmIGZyYW1lcyB0byBwaW4gdGhl
bSBpbiB0aGUgY2FjaGUuCisgICAgVmVjdG9yPEltYWdlRnJhbWVEYXRhLCAxPiBtX2ZyYW1lczsg
Ly8gQW4gYXJyYXkgb2YgdGhlIGNhY2hlZCBmcmFtZXMgb2YgdGhlIGFuaW1hdGlvbi4gV2UgaGF2
ZSB0byByZWYgZnJhbWVzIHRvIHBpbiB0aGVtIGluIHRoZSBjYWNoZS4KIAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxUaW1lcj4gbV9mcmFtZVRpbWVyOwogICAgIGludCBtX3JlcGV0aXRpb25Db3VudCB7
IGNBbmltYXRpb25Ob25lIH07IC8vIEhvdyBtYW55IHRvdGFsIGFuaW1hdGlvbiBsb29wcyB3ZSBz
aG91bGQgZG8uIFRoaXMgd2lsbCBiZSBjQW5pbWF0aW9uTm9uZSBpZiB0aGlzIGltYWdlIHR5cGUg
aXMgaW5jYXBhYmxlIG9mIGFuaW1hdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwUGl4ZWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTY4MWU0YTZjNGNjMDlmZTk0YmRk
ODE0NWQxMDRiZjBiZmQyZTlmMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oCkBAIC0wLDAgKzEsMTczIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6
ZS5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQml0bWFwUGl4ZWxzIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gY3JlYXRlKGNvbnN0
IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPEJpdG1hcFBpeGVscz4oc2l6ZSwgcHJlbXVsdGlwbHlBbHBo
YSk7CisgICAgfQorCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxCaXRtYXBQaXhlbHM+IGNy
ZWF0ZShjb25zdCBCaXRtYXBQaXhlbHMmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8Qml0bWFwUGl4ZWxzPihvdGhlcik7CisgICAgfQorCisgICAgQml0bWFw
UGl4ZWxzKGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSA9IHRydWUp
CisgICAgICAgIDogbV9wcmVtdWx0aXBseUFscGhhKHByZW11bHRpcGx5QWxwaGEpCisgICAgewor
ICAgICAgICBBU1NFUlQoIXNpemUuaXNFbXB0eSgpKTsKKyAgICAgICAgc2V0U2l6ZShzaXplKTsK
KyAgICB9CisKKyAgICBCaXRtYXBQaXhlbHMoY29uc3QgQml0bWFwUGl4ZWxzJiBvdGhlcikKKyAg
ICB7CisgICAgICAgIGlmICh0aGlzID09ICZvdGhlcikKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgICAgIG1fYmFja2luZ1N0b3JlID0gb3RoZXIubV9iYWNraW5nU3RvcmU7Cisg
ICAgICAgIG1fcGl4ZWxzID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOworICAgICAgICBtX3NpemUg
PSBvdGhlci5tX3NpemU7CisgICAgICAgIG1fcHJlbXVsdGlwbHlBbHBoYSA9IG90aGVyLm1fcHJl
bXVsdGlwbHlBbHBoYTsKKyAgICB9CisKKyAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBt
X3NpemUud2lkdGgoKTsgfQorICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUu
aGVpZ2h0KCk7IH0KKworICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlKCkgY29uc3Q7CisKKyAgICBi
b29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAgIGlmICghbV9i
YWNraW5nU3RvcmUudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUuYXJlYSgpKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIG1fYmFja2luZ1N0b3JlLnJlc2l6ZShz
aXplLmFyZWEoKSk7CisgICAgICAgIG1fcGl4ZWxzID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOwor
ICAgICAgICBtX3NpemUgPSBzaXplOworICAgICAgICBjbGVhcigpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBSR0JBMzIqIGF0KGludCB4LCBpbnQgeSkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3BpeGVscyArIHkgKiBtX3NpemUud2lkdGgoKSArIHg7CisgICAg
fQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtZW1zZXQobV9waXhlbHMsIDAs
IG1fc2l6ZS5hcmVhKCkgKiBzaXplb2YoUkdCQTMyKSk7CisgICAgfQorCisgICAgdm9pZCBjbGVh
clJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIGlmIChyZWN0LmlzRW1w
dHkoKSB8fCBpbkJvdW5kcyhyZWN0KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgIHNpemVfdCByZWN0V2lkdGhJbkJ5dGVzID0gcmVjdC53aWR0aCgpICogc2l6ZW9mKFJH
QkEzMik7CisgICAgICAgIFJHQkEzMiogc3RhcnQgPSBhdChyZWN0LngoKSwgcmVjdC55KCkpOwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QuaGVpZ2h0KCk7ICsraSkgeworICAgICAg
ICAgICAgbWVtc2V0KHN0YXJ0LCAwLCByZWN0V2lkdGhJbkJ5dGVzKTsKKyAgICAgICAgICAgIHN0
YXJ0ICs9IG1fc2l6ZS53aWR0aCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCByZXBl
YXRGaXJzdFJvdyhjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHJlY3Qu
aXNFbXB0eSgpIHx8IGluQm91bmRzKHJlY3QpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkgKiBzaXpl
b2YoUkdCQTMyKTsKKyAgICAgICAgUkdCQTMyKiBzcmMgPSBhdChyZWN0LngoKSwgcmVjdC55KCkp
OworICAgICAgICBSR0JBMzIqIGRlc3QgPSBzcmMgKyBtX3NpemUud2lkdGgoKTsKKyAgICAgICAg
Zm9yIChpbnQgaSA9IDE7IGkgPCByZWN0LmhlaWdodCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1l
bWNweShkZXN0LCBzcmMsIHJlY3RXaWR0aEluQnl0ZXMpOworICAgICAgICAgICAgZGVzdCArPSBt
X3NpemUud2lkdGgoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgc2V0UkdCQShpbnQg
eCwgaW50IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEp
CisgICAgeworICAgICAgICBzZXRSR0JBKGF0KHgsIHkpLCByLCBnLCBiLCBhKTsKKyAgICB9CisK
KyAgICB2b2lkIHNldFJHQkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1
bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5
QWxwaGEgfHwgYSA+PSAyNTUpCisgICAgICAgICAgICAqZGVzdCA9IG1ha2VSR0JBKHIsIGcsIGIs
IGEpOworICAgICAgICBlbHNlIGlmICghYSkKKyAgICAgICAgICAgICpkZXN0ID0gMDsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgKmRlc3QgPSBtYWtlUHJlbXVsdGlwbGllZFJHQkEociwgZywg
YiwgYSk7CisgICAgfQorCisgICAgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVk
IHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAgeworICAgICAgICBp
ZiAoIWEpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoYSA+PSAy
NTUgfHwgIWFscGhhQ2hhbm5lbCgqZGVzdCkpIHsKKyAgICAgICAgICAgIHNldFJHQkEoZGVzdCwg
ciwgZywgYiwgYSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKQorICAgICAgICAgICAgKmRlc3QgPSBtYWtl
UHJlbXVsdGlwbGllZFJHQkEocmVkQ2hhbm5lbCgqZGVzdCksIGdyZWVuQ2hhbm5lbCgqZGVzdCks
IGJsdWVDaGFubmVsKCpkZXN0KSwgYWxwaGFDaGFubmVsKCpkZXN0KSk7CisgICAgICAgIAorICAg
ICAgICBSR0JBMzIgc3JjID0gbWFrZVJHQkEociwgZywgYiwgYSk7CisgICAgICAgICpkZXN0ID0g
Q29sb3IoKmRlc3QpLmJsZW5kKHNyYykucmdiKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIW1f
cHJlbXVsdGlwbHlBbHBoYSkKKyAgICAgICAgICAgICpkZXN0ID0gbWFrZVVuUHJlbXVsdGlwbGll
ZFJHQkEocmVkQ2hhbm5lbCgqZGVzdCksIGdyZWVuQ2hhbm5lbCgqZGVzdCksIGJsdWVDaGFubmVs
KCpkZXN0KSwgYWxwaGFDaGFubmVsKCpkZXN0KSk7CisgICAgfQorCisgICAgYm9vbCBpbkJvdW5k
cyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSW50
UmVjdChJbnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHBvaW50KTsKKyAgICB9CisKKyAgICBi
b29sIGluQm91bmRzKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHJlY3QpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBWZWN0b3I8UkdCQTMyPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBSR0JB
MzIqIG1fcGl4ZWxzIHsgbnVsbHB0ciB9OworICAgIEludFNpemUgbV9zaXplOworICAgIGJvb2wg
bV9wcmVtdWx0aXBseUFscGhhIHsgdHJ1ZSB9OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCmluZGV4IDRlMjVhYTZmZDc0ZDFlNDZjNTQxNjE0OThi
YzE3MmJmNjAwODc1ZDEuLjQzOWY1YTYzYzdiZWJlNTYwNDJiMjRlN2Q3MmVjY2VjZjM2YzQwYzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKQEAgLTQ5LDYg
KzQ5LDQwIEBAIGNvbnN0IFJHQkEzMiBDb2xvcjo6dHJhbnNwYXJlbnQ7CiBzdGF0aWMgY29uc3Qg
UkdCQTMyIGxpZ2h0ZW5lZEJsYWNrID0gMHhGRjU0NTQ1NDsKIHN0YXRpYyBjb25zdCBSR0JBMzIg
ZGFya2VuZWRXaGl0ZSA9IDB4RkZBQkFCQUI7CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbXVs
dGlwbHkyNTUodW5zaWduZWQgYykKK3sKKyAgICAvLyBjICogMjU1CisgICAgLy8gICA9IGMgKiAo
MjU2IC0gMSkKKyAgICAvLyAgID0gYyAqIDI1NiAtIGMKKyAgICByZXR1cm4gKGMgPDwgOCkgLSBj
OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRpdmlkZTI1NSh1bnNpZ25lZCBjKQorewor
ICAgIC8vIGMgLyAyNTUKKyAgICAvLyAgID0gYyAvIDI1NiAqICgxICsgMSAvIDI1NSkKKyAgICAv
LyAgID0gKGMgKyBjIC8gMjU1KSAvIDI1NgorICAgIC8vICAgPSAoYyArIChjICsgYyAvIDI1NSkg
LyAyNTYpIC8gMjU2CisgICAgLy8gICA9IChjICsgYyAvIDI1NiArIGMgLyAoMjU1IHggMjU2KSkg
LyAyNTYKKyAgICAvLyAgfj0gKGMgKyBjIC8gMjU2ICsgMSkgLyAyNTYKKyAgICByZXR1cm4gKGMg
KyAoYyA+PiA4KSArIDEpID4+IDg7Cit9CisgICAgCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRp
dmlkZUNlaWwodW5zaWduZWQgYywgdW5zaWduZWQgZCkKK3sKKyAgICByZXR1cm4gKGMgKyBkIC0g
MSkgLyBkOworfQorICAgIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBwcmVtdWx0aXBsaWVkQ2hh
bm5lbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBhKQoreworICAgIHJldHVybiBkaXZpZGUyNTUoYyAq
IGEpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHVucHJlbXVsdGlwbGllZENoYW5uZWwo
dW5zaWduZWQgYywgdW5zaWduZWQgYSkKK3sKKyAgICByZXR1cm4gZGl2aWRlQ2VpbChtdWx0aXBs
eTI1NShjKSwgYSk7Cit9CisgICAgCiBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBi
KQogewogICAgIHJldHVybiAweEZGMDAwMDAwIHwgc3RkOjptYXgoMCwgc3RkOjptaW4ociwgMjU1
KSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAyNTUpKSA8PCA4IHwgc3RkOjptYXgo
MCwgc3RkOjptaW4oYiwgMjU1KSk7CkBAIC01OSw2ICs5MywxNiBAQCBSR0JBMzIgbWFrZVJHQkEo
aW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCiAgICAgcmV0dXJuIHN0ZDo6bWF4KDAsIHN0ZDo6
bWluKGEsIDI1NSkpIDw8IDI0IHwgc3RkOjptYXgoMCwgc3RkOjptaW4ociwgMjU1KSkgPDwgMTYg
fCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAyNTUpKSA8PCA4IHwgc3RkOjptYXgoMCwgc3RkOjpt
aW4oYiwgMjU1KSk7CiB9CiAKK1JHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGlu
dCBnLCBpbnQgYiwgaW50IGEpCit7CisgICAgcmV0dXJuIG1ha2VSR0JBKHByZW11bHRpcGxpZWRD
aGFubmVsKHIsIGEpLCBwcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBhKSwgcHJlbXVsdGlwbGllZENo
YW5uZWwoYiwgYSksIGEpOworfQorICAgIAorUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRSR0JB
KGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQoreworICAgIHJldHVybiBtYWtlUkdCQSh1bnBy
ZW11bHRpcGxpZWRDaGFubmVsKHIsIGEpLCB1bnByZW11bHRpcGxpZWRDaGFubmVsKGcsIGEpLCB1
bnByZW11bHRpcGxpZWRDaGFubmVsKGIsIGEpLCBhKTsKK30KKyAgICAKIHN0YXRpYyBpbnQgY29s
b3JGbG9hdFRvUkdCQUJ5dGUoZmxvYXQgZikKIHsKICAgICAvLyBXZSB1c2UgbHJvdW5kZiBhbmQg
MjU1IGluc3RlYWQgb2YgbmV4dGFmdGVyZigyNTYsIDApIHRvIG1hdGNoIENHJ3Mgcm91bmRpbmcK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCmluZGV4IGRkMjYyNzBiYjQ2
NjBiMzNhZTA3MGU4Yzk0NDUyMGQ3Mjg0NTRiOGEuLmE1NDUzMmM3NzU1YTdjODc2OTM2MjQwY2Fl
NGVjMzdhNGRhMGQwNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
aApAQCAtNTQsNiArNTQsOCBAQCB0eXBlZGVmIHVuc2lnbmVkIFJHQkEzMjsgLy8gRGVwcmVjYXRl
ZDogVHlwZSBmb3IgYW4gUkdCQSBxdWFkcnVwbGV0LiBVc2UgUkdCQSBjbAogCiBXRUJDT1JFX0VY
UE9SVCBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBiKTsKIFdFQkNPUkVfRVhQT1JU
IFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7CitXRUJDT1JFX0VY
UE9SVCBSR0JBMzIgbWFrZVByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGlu
dCBhKTsKK1dFQkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQg
ciwgaW50IGcsIGludCBiLCBpbnQgYSk7CiAKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBjb2xvcldp
dGhPdmVycmlkZUFscGhhKFJHQkEzMiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSk7CiBXRUJD
T1JFX0VYUE9SVCBSR0JBMzIgY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIE9w
dGlvbmFsPGZsb2F0PiBvdmVycmlkZUFscGhhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZS5oCmluZGV4IDdhMjk5OTJmNzcxODhlMDM4MjhkODBhNjViOGJlMmNkOGRjMmRl
NzYuLjhlN2I1MmIxZjRmMzFjNzRhM2NiMmExMzIxNWRhNzdhMmIxOGMwN2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaApAQCAtMTM3LDggKzEzNywxMSBAQCBwdWJs
aWM6CiAKICAgICBlbnVtIFRpbGVSdWxlIHsgU3RyZXRjaFRpbGUsIFJvdW5kVGlsZSwgU3BhY2VU
aWxlLCBSZXBlYXRUaWxlIH07CiAKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUlt
YWdlKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0
aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50U2l6ZSYpIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICB2
aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgeyByZXR1
cm4gbnVsbHB0cjsgfQogICAgIHZpcnR1YWwgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkZv
ckN1cnJlbnRGcmFtZSgpIHsgcmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsgfQorICAgIHZpcnR1
YWwgVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBmcmFtZXNOYXRpdmVJbWFnZXMoKSB7IHJldHVybiB7
IH07IH0KIAogICAgIC8vIEFjY2Vzc29ycyBmb3IgbmF0aXZlIGltYWdlIGZvcm1hdHMuCiAKQEAg
LTE1MCwxMiArMTUzLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgQ0ZEYXRhUmVmIGdldFRJRkZS
ZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCi0jaWYgVVNFKENH
KQotICAgIHZpcnR1YWwgQ0dJbWFnZVJlZiBnZXRDR0ltYWdlUmVmKCkgeyByZXR1cm4gbnVsbHB0
cjsgfQotICAgIHZpcnR1YWwgQ0dJbWFnZVJlZiBnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUoY29u
c3QgSW50U2l6ZSYpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIFJldGFpblB0cjxD
RkFycmF5UmVmPiBnZXRDR0ltYWdlQXJyYXkoKSB7IHJldHVybiBudWxscHRyOyB9Ci0jZW5kaWYK
LQogI2lmIFBMQVRGT1JNKFdJTikKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SEJJVE1BUChIQklUTUFQ
KSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBnZXRIQklUTUFQT2ZTaXplKEhC
SVRNQVAsIGNvbnN0IEludFNpemUqKSB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTc5LDYgKzE3Niw4
IEBAIHB1YmxpYzoKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgdmlydHVhbCBib29sIG5vdFNv
bGlkQ29sb3IoKSB7IHJldHVybiB0cnVlOyB9CiAjZW5kaWYKKyAgICAKKyAgICB2aXJ0dWFsIHZv
aWQgbGF5b3V0SWZOZWVkZWQoKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRleHRTdHJl
YW0mKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VGcmFtZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VGcmFtZURhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmZDIwY2Y4ZTYxZjRiMWExZmUwOGViMzMy
YjcxNjU3ZjAxNDhjMTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5jcHAKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkltYWdlRnJhbWVEYXRhLmgiCisKKyNpbmNsdWRlICJDb2xvci5oIgorCisj
aWYgVVNFKENHKQorI2luY2x1ZGUgIkltYWdlRGVjb2RlckNHLmgiCisjZWxzZQorI2luY2x1ZGUg
IkltYWdlRGVjb2Rlci5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VGcmFtZURhdGE6OkltYWdlRnJhbWVEYXRhKCkK
K3sKK30KKworSW1hZ2VGcmFtZURhdGE6OkltYWdlRnJhbWVEYXRhKE5hdGl2ZUltYWdlUHRyJiYg
aW1hZ2UpCisgICAgOiBtX3N0YXR1cyhEZWNvZGluZ1N0YXR1czo6Q29tcGxldGUpCisgICAgLCBt
X2ltYWdlKFdURk1vdmUoaW1hZ2UpKQoreworICAgIG1fc2l6ZSA9IFBsYXRmb3JtSW1hZ2UobV9p
bWFnZSkuc2l6ZSgpOworICAgIG1faGFzQWxwaGEgPSBQbGF0Zm9ybUltYWdlKG1faW1hZ2UpLmhh
c0FscGhhKCk7Cit9CisKK0ltYWdlRnJhbWVEYXRhOjpJbWFnZUZyYW1lRGF0YShJbWFnZURlY29k
ZXImIGRlY29kZXIsIHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xl
dmVsLCBDYWNoaW5nIGZyYW1lQ2FjaGluZykKK3sKKyAgICBBU1NFUlQoZnJhbWVDYWNoaW5nID09
IENhY2hpbmc6Ok1ldGFkYXRhIHx8IGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YUFu
ZEltYWdlKTsKKyAgICAKKyAgICBpZiAoZnJhbWVDYWNoaW5nID09IENhY2hpbmc6OkltYWdlIHx8
IGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YUFuZEltYWdlKSB7CisgICAgICAgIG1f
aW1hZ2UgPSBkZWNvZGVyLmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGluZGV4LCBzdWJzYW1wbGlu
Z0xldmVsKTsKKyAgICAgICAgbV9zdWJzYW1wbGluZ0xldmVsID0gc3Vic2FtcGxpbmdMZXZlbDsK
KyAgICB9CisgICAgCisgICAgaWYgKGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YSB8
fCBmcmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSkgeworICAgICAgICBt
X29yaWVudGF0aW9uID0gZGVjb2Rlci5vcmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOworICAgICAg
ICBtX3N0YXR1cyA9IGRlY29kZXIuZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCkgPyBEZWNv
ZGluZ1N0YXR1czo6Q29tcGxldGUgOiBEZWNvZGluZ1N0YXR1czo6UGFydGlhbDsKKyAgICAgICAg
CisgICAgICAgIGlmIChkZWNvZGVyLnJlcGV0aXRpb25Db3VudCgpICE9IGNBbmltYXRpb25Ob25l
KQorICAgICAgICAgICAgbV9kdXJhdGlvbiA9IGRlY29kZXIuZnJhbWVEdXJhdGlvbkF0SW5kZXgo
aW5kZXgpOworICAgICAgICAKKyAgICAgICAgbV9oYXNBbHBoYSA9IGRlY29kZXIuZnJhbWVIYXNB
bHBoYUF0SW5kZXgoaW5kZXgpOworICAgICAgICBtX3NpemUgPSBkZWNvZGVyLmZyYW1lU2l6ZUF0
SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOworICAgIH0KK30KKworSW1hZ2VGcmFtZURh
dGE6On5JbWFnZUZyYW1lRGF0YSgpCit7CisgICAgY2xlYXJTdWJJbWFnZXMoKTsKK30KKyAgICAK
K0ltYWdlRnJhbWVEYXRhJiBJbWFnZUZyYW1lRGF0YTo6b3BlcmF0b3I9KGNvbnN0IEltYWdlRnJh
bWVEYXRhJiBvdGhlcikKK3sKKyAgICBpZiAodGhpcyA9PSAmb3RoZXIpCisgICAgICAgIHJldHVy
biAqdGhpczsKKworICAgIG1fc3RhdHVzID0gb3RoZXIubV9zdGF0dXM7CisgICAgbV9zaXplID0g
b3RoZXIubV9zaXplOworICAgIG1faW1hZ2UgPSBvdGhlci5tX2ltYWdlOworICAgIAorICAgIG1f
cGl4ZWxzID0gb3RoZXIucGl4ZWxzKCkgPyBCaXRtYXBQaXhlbHM6OmNyZWF0ZSgqb3RoZXIucGl4
ZWxzKCkpIDogbnVsbHB0cjsKKyAgICAKKyAgICBtX29yaWVudGF0aW9uID0gb3RoZXIubV9vcmll
bnRhdGlvbjsKKyAgICBtX3N1YnNhbXBsaW5nTGV2ZWwgPSBvdGhlci5tX3N1YnNhbXBsaW5nTGV2
ZWw7CisgICAgbV9kdXJhdGlvbiA9IG90aGVyLm1fZHVyYXRpb247CisgICAgbV9oYXNBbHBoYSA9
IG90aGVyLm1faGFzQWxwaGE7CisgICAgcmV0dXJuICp0aGlzOworfQorCit2b2lkIEltYWdlRnJh
bWVEYXRhOjpjbGVhclN1YkltYWdlcygpCit7CisgICAgaWYgKCFtX2ltYWdlKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5jbGVhclN1YkltYWdlcygp
OworfQorCit1bnNpZ25lZCBJbWFnZUZyYW1lRGF0YTo6Y2xlYXIoQ2FjaGluZyBmcmFtZUNhY2hp
bmcpCit7CisgICAgQVNTRVJUKGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpFbXB0eSB8fCBmcmFt
ZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGEpOworICAgIAorICAgIHVuc2lnbmVkIGZyYW1l
Qnl0ZXMgPSB0aGlzLT5mcmFtZUJ5dGVzKCk7CisgICAgCisgICAgY2xlYXJTdWJJbWFnZXMoKTsK
KyAgICAKKyAgICBpZiAoZnJhbWVDYWNoaW5nID09IENhY2hpbmc6OkVtcHR5KQorICAgICAgICAq
dGhpcyA9IEltYWdlRnJhbWVEYXRhKCk7CisgICAgZWxzZQorICAgICAgICBtX2ltYWdlID0gbnVs
bHB0cjsKKyAgICAKKyAgICByZXR1cm4gZnJhbWVCeXRlczsKK30KKworQ29sb3IgSW1hZ2VGcmFt
ZURhdGE6OnNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKCFoYXNJbWFn
ZSgpIHx8IG1fc2l6ZSAhPSBJbnRTaXplKDEsIDEpKQorICAgICAgICByZXR1cm4gQ29sb3IoKTsK
KyAgICAKKyAgICByZXR1cm4gUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5zaW5nbGVQaXhlbFNvbGlk
Q29sb3IoKTsKK30KKworYm9vbCBJbWFnZUZyYW1lRGF0YTo6aXNBbG1vc3RTb2xpZENvbG9yKCkg
Y29uc3QKK3sKKyAgICBpZiAoIWhhc0ltYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICByZXR1cm4gUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5pc0FsbW9zdFNvbGlkQ29sb3Io
KTsKK30KKyAgICAKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlRnJhbWVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUZyYW1lRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIxMTI2MTNhNDVlNTMzYmE0YThkNTFlZTZjZTg3
ZDQyODRiM2NmNzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUZyYW1lRGF0YS5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJCaXRtYXBQaXhlbHMuaCIKKyNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCisjaW5jbHVk
ZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgQ29sb3I7CitjbGFzcyBJbWFnZURlY29kZXI7CisKKy8vIFN1YnNh
bXBsaW5nTGV2ZWwuIDAgaXMgbm8gc3Vic2FtcGxpbmcsIDEgaXMgaGFsZiBkaW1lbnNpb25zIG9u
IGVhY2ggYXhpcyBldGMuCit1c2luZyBTdWJzYW1wbGluZ0xldmVsID0gdWludDhfdDsKKworZW51
bSA6IFN1YnNhbXBsaW5nTGV2ZWwgeworICAgIE1pblN1YnNhbXBsaW5nTGV2ZWwgPSAwLAorICAg
IE1heFN1YnNhbXBsaW5nTGV2ZWwgPSAzLAorICAgIERlZmF1bHRTdWJzYW1wbGluZ0xldmVsID0g
TWluU3Vic2FtcGxpbmdMZXZlbAorfTsKKworY2xhc3MgSW1hZ2VGcmFtZURhdGEgeworcHVibGlj
OgorICAgIGVudW0gY2xhc3MgQ2FjaGluZyB7IEVtcHR5LCBNZXRhZGF0YSwgSW1hZ2UsIE1ldGFk
YXRhQW5kSW1hZ2UgfTsKKyAgICBlbnVtIGNsYXNzIERlY29kaW5nU3RhdHVzIHsgRW1wdHksIFBh
cnRpYWwsIENvbXBsZXRlIH07CisgICAgCisgICAgSW1hZ2VGcmFtZURhdGEoKTsKKyAgICBJbWFn
ZUZyYW1lRGF0YShOYXRpdmVJbWFnZVB0ciYmKTsKKyAgICBJbWFnZUZyYW1lRGF0YShJbWFnZURl
Y29kZXImLCBzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgPSBEZWZhdWx0U3Vic2FtcGxp
bmdMZXZlbCwgQ2FjaGluZyA9IENhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOworICAgIEltYWdl
RnJhbWVEYXRhKGNvbnN0IEltYWdlRnJhbWVEYXRhJiBvdGhlcikgeyBvcGVyYXRvcj0ob3RoZXIp
OyB9CisKKyAgICB+SW1hZ2VGcmFtZURhdGEoKTsKKworICAgIEltYWdlRnJhbWVEYXRhJiBvcGVy
YXRvcj0oY29uc3QgSW1hZ2VGcmFtZURhdGEmIG90aGVyKTsKKyAgICAKKyAgICB1bnNpZ25lZCBj
bGVhcihDYWNoaW5nKTsKKyAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdDsK
KyAgICBib29sIGlzQWxtb3N0U29saWRDb2xvcigpIGNvbnN0OworICAgIAorICAgIERlY29kaW5n
U3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CisgICAgYm9vbCBpc0Nv
bXBsZXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6OkNvbXBs
ZXRlOyB9CisgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAg
dW5zaWduZWQgZnJhbWVCeXRlcygpIGNvbnN0IHsgcmV0dXJuIGhhc0ltYWdlKCkgPyBtX3NpemUu
YXJlYSgpICogNCA6IDA7IH0KKyAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZSgpIGNvbnN0IHsgcmV0
dXJuIG1faW1hZ2U7IH0KKyAgICBCaXRtYXBQaXhlbHMqIHBpeGVscygpIGNvbnN0IHsgcmV0dXJu
IG1fcGl4ZWxzID8gbV9waXhlbHMuZ2V0KCkgOiBudWxscHRyOyB9CisgICAgCisgICAgSW1hZ2VP
cmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZW50YXRpb247IH0K
KyAgICBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwoKSBjb25zdCB7IHJldHVybiBt
X3N1YnNhbXBsaW5nTGV2ZWw7IH0KKyAgICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZHVyYXRpb247IH0KKyAgICAKKyAgICBib29sIGhhc0FscGhhKCkgY29uc3QgeyByZXR1cm4g
bV9oYXNBbHBoYTsgfQorICAgIGJvb2wgaGFzSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdl
OyB9CisgICAgYm9vbCBoYXNNZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuICFtX3NpemUuaXNFbXB0
eSgpOyB9CisgICAgYm9vbCBoYXNQaXhlbHMoKSBjb25zdCB7IHJldHVybiBwaXhlbHMoKTsgfQor
ICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIGNsZWFyU3ViSW1hZ2VzKCk7CisgICAgCisgICAgRGVj
b2RpbmdTdGF0dXMgbV9zdGF0dXMgeyBEZWNvZGluZ1N0YXR1czo6RW1wdHkgfTsKKyAgICBJbnRT
aXplIG1fc2l6ZTsKKyAgICBOYXRpdmVJbWFnZVB0ciBtX2ltYWdlOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxCaXRtYXBQaXhlbHM+IG1fcGl4ZWxzOworICAgIAorICAgIEltYWdlT3JpZW50YXRpb24g
bV9vcmllbnRhdGlvbiB7IERlZmF1bHRJbWFnZU9yaWVudGF0aW9uIH07CisgICAgU3Vic2FtcGxp
bmdMZXZlbCBtX3N1YnNhbXBsaW5nTGV2ZWwgeyAwIH07CisgICAgZmxvYXQgbV9kdXJhdGlvbiB7
IDAgfTsKKyAgICBib29sIG1faGFzQWxwaGEgeyB0cnVlIH07Cit9OworICAgIAorfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCmluZGV4IGRk
ZDhhNTViYTA5MDZjNTg2NmExOTJjZjhlNDE0ZWE3MDdiNzI4YWMuLjgyZjZlMmQ2ZTQ1NDMzZGEx
YTdkNTZiMzcwZGZhNjFhNGM0MTkxMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKQEAgLTIyNCw2ICsyMjQsMTEgQEAgTmF0aXZlSW1h
Z2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwg
U3Vic2FtcGxpbmdMZXYKICAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSA/IG1fZGVjb2Rlci0+Y3Jl
YXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpIDogbnVsbHB0cjsK
IH0KIAorSW1hZ2VGcmFtZURhdGEgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lRGF0YUF0SW5kZXgo
c2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlRnJh
bWVEYXRhOjpDYWNoaW5nIGNhY2hpbmcpCit7CisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkgPyBJ
bWFnZUZyYW1lRGF0YSgqbV9kZWNvZGVyLCBpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgY2FjaGlu
ZykgOiBJbWFnZUZyYW1lRGF0YSgpOworfQorICAgIAogdm9pZCBJbWFnZVNvdXJjZTo6ZHVtcChU
ZXh0U3RyZWFtJiB0cykgY29uc3QKIHsKICAgICBpZiAobV9hbGxvd1N1YnNhbXBsaW5nKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKaW5kZXggNjAz
NTczOWI3ZThiMDk2ZGM4ZGZlOWM1MzBhNDJjNmYyOTFiZGEwMC4uYTQwYzdjZTkzMDdjZGFkZjA3
OWFiNzAxYTgyNzk5YjY5MDUyOWQ0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZVNvdXJjZS5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaWZuZGVmIEltYWdlU291
cmNlX2gKICNkZWZpbmUgSW1hZ2VTb3VyY2VfaAogCisjaW5jbHVkZSAiSW1hZ2VGcmFtZURhdGEu
aCIKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW50UG9pbnQuaCIK
ICNpbmNsdWRlICJOYXRpdmVJbWFnZVB0ci5oIgpAQCAtNjMsOSArNjQsNiBAQCBjb25zdCBpbnQg
Y0FuaW1hdGlvbkxvb3BPbmNlID0gMDsKIGNvbnN0IGludCBjQW5pbWF0aW9uTG9vcEluZmluaXRl
ID0gLTE7CiBjb25zdCBpbnQgY0FuaW1hdGlvbk5vbmUgPSAtMjsKIAotLy8gU3Vic2FtcGxpbmdM
ZXZlbC4gMCBpcyBubyBzdWJzYW1wbGluZywgMSBpcyBoYWxmIGRpbWVuc2lvbnMgb24gZWFjaCBh
eGlzIGV0Yy4KLXR5cGVkZWYgc2hvcnQgU3Vic2FtcGxpbmdMZXZlbDsKLQogY2xhc3MgSW1hZ2VT
b3VyY2UgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlU291cmNlKTsKICAgICBmcmll
bmQgY2xhc3MgQml0bWFwSW1hZ2U7CkBAIC0xMzIsMTggKzEzMCwxOSBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBhbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoc2l6ZV90KSBjb25zdDsKICAgICAK
ICAgICAvLyBTaXplIG9mIG9wdGlvbmFsbHkgc3Vic2FtcGxlZCBmcmFtZS4KLSAgICBJbnRTaXpl
IGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gMCwgUmVzcGVjdElt
YWdlT3JpZW50YXRpb25FbnVtID0gRG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikgY29uc3Q7
CisgICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCA9
IERlZmF1bHRTdWJzYW1wbGluZ0xldmVsLCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0gPSBE
b05vdFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKSBjb25zdDsKICAgICAKICAgICAvLyBSZXR1cm4g
dGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgZGVjb2RlZCBmcmFtZS4gSWYgdGhlIGZyYW1lIGlz
IG5vdCB5ZXQKICAgICAvLyBkZWNvZGVkIHRoZW4gcmV0dXJuIDAuCi0gICAgdW5zaWduZWQgZnJh
bWVCeXRlc0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gMCkgY29uc3Q7CisgICAg
dW5zaWduZWQgZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gRGVm
YXVsdFN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0OwogICAgIAogICAgIGZsb2F0IGZyYW1lRHVyYXRp
b25BdEluZGV4KHNpemVfdCk7CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkF0SW5k
ZXgoc2l6ZV90KSBjb25zdDsgLy8gRVhJRiBpbWFnZSBvcmllbnRhdGlvbgogICAgIAogICAgIC8v
IENhbGxlcnMgc2hvdWxkIG5vdCBjYWxsIHRoaXMgYWZ0ZXIgY2FsbGluZyBjbGVhcigpIHdpdGgg
YSBoaWdoZXIgaW5kZXg7CiAgICAgLy8gc2VlIGNvbW1lbnRzIG9uIGNsZWFyKCkgYWJvdmUuCi0g
ICAgTmF0aXZlSW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1w
bGluZ0xldmVsID0gMCk7CisgICAgTmF0aXZlSW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0SW5k
ZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gRGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwpOwor
ICAgIEltYWdlRnJhbWVEYXRhIGNyZWF0ZUZyYW1lRGF0YUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1w
bGluZ0xldmVsID0gRGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlRnJhbWVEYXRhOjpDYWNo
aW5nID0gSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOwogICAgIAog
cHJpdmF0ZToKICAgICB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmFiN2FlYTQ4OWYzZWIyYTgyODc3MWMyMTAzZThkNGQwYmUxN2JlNWQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlLmgK
QEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKyNpbmNs
dWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb2xvcjsKK2NsYXNzIEZsb2F0UmVjdDsKK2Ns
YXNzIEludFNpemU7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CisKK2NsYXNzIFBsYXRmb3JtSW1h
Z2UgeworcHVibGljOgorICAgIFBsYXRmb3JtSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGlt
YWdlKQorICAgICAgICA6IG1faW1hZ2UoaW1hZ2UpCisgICAgeworICAgIH0KKworICAgIGJvb2wg
aXNOaWwoKSBjb25zdCB7IHJldHVybiAhbV9pbWFnZTsgfQorICAgIHZvaWQgY2xlYXJTdWJJbWFn
ZXMoKTsKKworICAgIEludFNpemUgc2l6ZSgpIGNvbnN0OworICAgIGJvb2wgaGFzQWxwaGEoKSBj
b25zdDsKKyAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdDsKKyAgICBib29s
IGlzQWxtb3N0U29saWRDb2xvcigpIGNvbnN0OworICAgIHZvaWQgZHJhdyhHcmFwaGljc0NvbnRl
eHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEludFNpemUmIHNyY1NpemUsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUsIGNv
bnN0IEltYWdlT3JpZW50YXRpb24mKSBjb25zdDsKKworICAgIHN0YXRpYyBmbG9hdCBzdWJzYW1w
bGluZ1NjYWxlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCk7CisKK3ByaXZhdGU6CisjaWYgVVNFKENHKQorICAgIENH
SW1hZ2VSZWYgY2dJbWFnZVJlZigpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UgPyBtX2ltYWdlLmdl
dCgpIDogbnVsbHB0cjsgfQorI2VuZGlmCisgICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsKK307
CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbQppbmRleCBmNGMxNDU3YmJiMjU1NzU0ZjAw
YTA2MjVlZTgzZTA0ZGE3YzZlZmNmLi5kNTIwZjVkNTg1YWM2MGRiYWVlMjU1ZTFiODNjMjRkYzY4
NzIxMGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCkBAIC0yMTIsNyArMjEyLDcgQEAg
dm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnVwZGF0ZURpc3BsYXlN
b2RlKCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgbV9wYXVzZWRJbWFnZSA9IGltYWdlLT5nZXRDR0ltYWdlUmVmKCk7
CisgICAgICAgICAgICAgICAgbV9wYXVzZWRJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgpOwogICAgICAgICAgICAgICAgIGlmICghbV9wYXVzZWRJbWFnZSkgewogICAg
ICAgICAgICAgICAgICAgICBtX2Rpc3BsYXlNb2RlID0gUGFpbnRJdEJsYWNrOwogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDE3NzIyYmVjNTNhYjhhMDhhOGRhODUyOGI5ZTBkN2M0ZDBjZDQxMzUu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAw
NSwgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkg
RGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCaXRtYXBJ
bWFnZS5oIgotCi0jaWYgVVNFKENBSVJPKQotCi0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMuaCIK
LSNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fp
cm8uaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIE5hdGl2ZUltYWdlIHsKLQotSW50U2l6ZSBzaXplKGNv
bnN0IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiBpbWFnZSkKLXsKLSAgICByZXR1cm4gY2Fpcm9T
dXJmYWNlU2l6ZShpbWFnZS5nZXQoKSk7Ci19Ci0KLWJvb2wgaGFzQWxwaGEoY29uc3QgUmVmUHRy
PGNhaXJvX3N1cmZhY2VfdD4mIGltYWdlKQotewotICAgIHJldHVybiBjYWlyb19zdXJmYWNlX2dl
dF9jb250ZW50KGltYWdlLmdldCgpKSAhPSBDQUlST19DT05URU5UX0NPTE9SOwotfQotCi1Db2xv
ciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoY29uc3QgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mIGlt
YWdlKQotewotICAgIEFTU0VSVChpbWFnZSk7Ci0gICAgCi0gICAgaWYgKE5hdGl2ZUltYWdlOjpz
aXplKGltYWdlKSAhPSBJbnRTaXplKDEsIDEpKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKLQot
ICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKGltYWdlLmdldCgpKSAhPSBDQUlST19TVVJG
QUNFX1RZUEVfSU1BR0UpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotCi0gICAgUkdCQTMyKiBw
aXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFJHQkEzMio+KGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2RhdGEoaW1hZ2UuZ2V0KCkpKTsKLSAgICByZXR1cm4gY29sb3JGcm9tUHJlbXVsdGlwbGll
ZEFSR0IoKnBpeGVsKTsKLX0KLQotfQotCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCwKLSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJbWFn
ZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pCi17Ci0gICAgaWYgKCFkc3Qud2lk
dGgoKSB8fCAhZHN0LmhlaWdodCgpIHx8ICFzcmMud2lkdGgoKSB8fCAhc3JjLmhlaWdodCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBzdGFydEFuaW1hdGlvbigpOwotCi0gICAgYXV0byBzdXJm
YWNlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwotICAgIGlmICghc3VyZmFj
ZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCi0gICAg
ICAgIHJldHVybjsKLQotICAgIENvbG9yIGNvbG9yID0gc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCk7
Ci0gICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3Io
Y29udGV4dCwgZHN0LCBjb2xvciwgb3ApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
Y29udGV4dC5zYXZlKCk7Ci0KLSAgICAvLyBTZXQgdGhlIGNvbXBvc2l0aW5nIG9wZXJhdGlvbi4K
LSAgICBpZiAob3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciAmJiBibGVuZE1vZGUgPT0gQmxlbmRN
b2RlTm9ybWFsICYmICFmcmFtZUhhc0FscGhhQXRJbmRleChtX2N1cnJlbnRGcmFtZSkpCi0gICAg
ICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOwotICAgIGVs
c2UKLSAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3AsIGJsZW5kTW9kZSk7
Ci0KLSNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQotICAgIEludFNpemUg
c2NhbGVkU2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUoc3VyZmFjZS5nZXQoKSk7Ci0gICAgRmxvYXRS
ZWN0IGFkanVzdGVkU3JjUmVjdCA9IGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGxpbmcoc3Jj
LCBzY2FsZWRTaXplKTsKLSNlbHNlCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdChzcmMp
OwotI2VuZGlmCi0KLSAgICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3JpZW50YXRpb24oZGVzY3Jp
cHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKTsKLSAgICBpZiAoZGVzY3JpcHRpb24ucmVzcGVjdElt
YWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikKLSAgICAgICAgZnJh
bWVPcmllbnRhdGlvbiA9IGZyYW1lT3JpZW50YXRpb25BdEluZGV4KG1fY3VycmVudEZyYW1lKTsK
LQotICAgIEZsb2F0UmVjdCBkc3RSZWN0ID0gZHN0OwotCi0gICAgaWYgKGZyYW1lT3JpZW50YXRp
b24gIT0gRGVmYXVsdEltYWdlT3JpZW50YXRpb24pIHsKLSAgICAgICAgLy8gSW1hZ2VPcmllbnRh
dGlvbiBleHBlY3RzIHRoZSBvcmlnaW4gdG8gYmUgYXQgKDAsIDApLgotICAgICAgICBjb250ZXh0
LnRyYW5zbGF0ZShkc3RSZWN0LngoKSwgZHN0UmVjdC55KCkpOwotICAgICAgICBkc3RSZWN0LnNl
dExvY2F0aW9uKEZsb2F0UG9pbnQoKSk7Ci0gICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKGZyYW1l
T3JpZW50YXRpb24udHJhbnNmb3JtRnJvbURlZmF1bHQoZHN0UmVjdC5zaXplKCkpKTsKLSAgICAg
ICAgaWYgKGZyYW1lT3JpZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSkgewotICAgICAgICAg
ICAgLy8gVGhlIGRlc3RpbmF0aW9uIHJlY3RhbmdsZSB3aWxsIGhhdmUgaXQncyB3aWR0aCBhbmQg
aGVpZ2h0IGFscmVhZHkgcmV2ZXJzZWQgZm9yIHRoZSBvcmllbnRhdGlvbiBvZgotICAgICAgICAg
ICAgLy8gdGhlIGltYWdlLCBhcyBpdCB3YXMgbmVlZGVkIGZvciBwYWdlIGxheW91dCwgc28gd2Ug
bmVlZCB0byByZXZlcnNlIGl0IGJhY2sgaGVyZS4KLSAgICAgICAgICAgIGRzdFJlY3QgPSBGbG9h
dFJlY3QoZHN0UmVjdC54KCksIGRzdFJlY3QueSgpLCBkc3RSZWN0LmhlaWdodCgpLCBkc3RSZWN0
LndpZHRoKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29udGV4dC5wbGF0Zm9ybUNvbnRl
eHQoKS0+ZHJhd1N1cmZhY2VUb0NvbnRleHQoc3VyZmFjZS5nZXQoKSwgZHN0UmVjdCwgYWRqdXN0
ZWRTcmNSZWN0LCBjb250ZXh0KTsKLQotICAgIGNvbnRleHQucmVzdG9yZSgpOwotCi0gICAgaWYg
KGltYWdlT2JzZXJ2ZXIoKSkKLSAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMp
OwotfQotCi1ib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQotewotICAg
IGlmIChjbGVhck1ldGFkYXRhKQotICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOwotCi0g
ICAgaWYgKG1faW1hZ2UpIHsKLSAgICAgICAgbV9pbWFnZSA9IG51bGxwdHI7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjcwYWRhZWMyNzBlMzFiMDU0YWZjNWY2NmQ0ODI4OGFlYmYwNjFlM2EKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
bGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybUltYWdlLmgiCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJDYWly
b1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCisjaW5jbHVk
ZSA8Y2Fpcm8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFBsYXRmb3JtSW1hZ2U6
OmNsZWFyU3ViSW1hZ2VzKCkKK3sKK30KKworSW50U2l6ZSBQbGF0Zm9ybUltYWdlOjpzaXplKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gaXNOaWwoKSA/IEludFNpemUoKSA6IGNhaXJvU3VyZmFjZVNp
emUobV9pbWFnZS5nZXQoKSk7Cit9CisKK2Jvb2wgUGxhdGZvcm1JbWFnZTo6aGFzQWxwaGEoKSBj
b25zdAoreworICAgIHJldHVybiBpc05pbCgpIHx8IGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQo
bV9pbWFnZS5nZXQoKSkgIT0gQ0FJUk9fQ09OVEVOVF9DT0xPUjsKK30KKworQ29sb3IgUGxhdGZv
cm1JbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3QKK3sKKyAgICBpZiAoaXNOaWwo
KSB8fCBzaXplKCkgIT0gSW50U2l6ZSgxLCAxKSkKKyAgICAgICAgcmV0dXJuIENvbG9yKCk7CisK
KyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShtX2ltYWdlLmdldCgpKSAhPSBDQUlST19T
VVJGQUNFX1RZUEVfSU1BR0UpCisgICAgICAgIHJldHVybiBDb2xvcigpOworCisgICAgUkdCQTMy
KiBwaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFJHQkEzMio+KGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X2RhdGEobV9pbWFnZS5nZXQoKSkpOworICAgIHJldHVybiBjb2xvckZyb21QcmVtdWx0
aXBsaWVkQVJHQigqcGl4ZWwpOworfQorCitib29sIFBsYXRmb3JtSW1hZ2U6OmlzQWxtb3N0U29s
aWRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitmbG9hdCBQbGF0Zm9y
bUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEZsb2F0UmVjdCYpCit7CisgICAgcmV0dXJuIDE7Cit9CisKK3ZvaWQgUGxhdGZv
cm1JbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50U2l6ZSYsIENvbXBv
c2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSwgY29uc3QgSW1hZ2VPcmllbnRhdGlvbiYg
b3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgY29udGV4dC5zYXZlKCk7CisgICAgCisgICAgLy8g
U2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCisgICAgaWYgKG9wID09IENvbXBvc2l0ZVNv
dXJjZU92ZXIgJiYgbW9kZSA9PSBCbGVuZE1vZGVOb3JtYWwgJiYgIWhhc0FscGhhKCkpCisgICAg
ICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOworICAgIGVs
c2UKKyAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3AsIG1vZGUpOworICAg
ICAgICAKKyNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQorICAgIEludFNp
emUgc2NhbGVkU2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUobV9pbWFnZS5nZXQoKSk7CisgICAgRmxv
YXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGxpbmco
c3JjUmVjdCwgc2NhbGVkU2l6ZSk7CisjZWxzZQorICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1Jl
Y3Qoc3JjUmVjdCk7CisjZW5kaWYKKyAgICAgICAgCisgICAgRmxvYXRSZWN0IGFkanVzdGVkRGVz
dFJlY3QgPSBkZXN0UmVjdDsKKyAgICAgICAgCisgICAgaWYgKG9yaWVudGF0aW9uICE9IERlZmF1
bHRJbWFnZU9yaWVudGF0aW9uKSB7CisgICAgICAgIC8vIEltYWdlT3JpZW50YXRpb24gZXhwZWN0
cyB0aGUgb3JpZ2luIHRvIGJlIGF0ICgwLCAwKS4KKyAgICAgICAgY29udGV4dC50cmFuc2xhdGUo
ZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCkpOworICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNl
dExvY2F0aW9uKEZsb2F0UG9pbnQoKSk7CisgICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKG9yaWVu
dGF0aW9uLnRyYW5zZm9ybUZyb21EZWZhdWx0KGFkanVzdGVkRGVzdFJlY3Quc2l6ZSgpKSk7Cisg
ICAgICAgIGlmIChvcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpKSB7CisgICAgICAgICAg
ICAvLyBUaGUgZGVzdGluYXRpb24gcmVjdGFuZ2xlIHdpbGwgaGF2ZSBpdCdzIHdpZHRoIGFuZCBo
ZWlnaHQgYWxyZWFkeSByZXZlcnNlZCBmb3IgdGhlIG9yaWVudGF0aW9uIG9mCisgICAgICAgICAg
ICAvLyB0aGUgaW1hZ2UsIGFzIGl0IHdhcyBuZWVkZWQgZm9yIHBhZ2UgbGF5b3V0LCBzbyB3ZSBu
ZWVkIHRvIHJldmVyc2UgaXQgYmFjayBoZXJlLgorICAgICAgICAgICAgYWRqdXN0ZWREZXN0UmVj
dC5zZXRTaXplKGFkanVzdGVkRGVzdFJlY3Quc2l6ZSgpLnRyYW5zcG9zZWRTaXplKCkpOworICAg
ICAgICB9CisgICAgfQorCisgICAgY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1N1cmZh
Y2VUb0NvbnRleHQobV9pbWFnZS5nZXQoKSwgYWRqdXN0ZWREZXN0UmVjdCwgYWRqdXN0ZWRTcmNS
ZWN0LCBjb250ZXh0KTsKKworICAgIGNvbnRleHQucmVzdG9yZSgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwM2M4MWExNzBiZTc5YWU2YmU2Y2FjZGM5OWY0YzM5OGNhYWY0
MjZkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMjA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IkJpdG1hcEltYWdlLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJDb3JlR3JhcGhpY3NT
UEkuaCIKLSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJHZW9tZXRyeVV0
aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVkZSAiSW1h
Z2VPYnNlcnZlci5oIgotI2luY2x1ZGUgIlN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCIKLSNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLSNpZiBVU0UoQVBQS0lUKQotI2luY2x1ZGUgPEFwcGxp
Y2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgotI2VuZGlmCi0KLSNpZiBQTEFU
Rk9STShDT0NPQSkKLSNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0jZW5kaWYK
LQotI2lmIFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2UvV2Vi
S2l0U3lzdGVtSW50ZXJmYWNlLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1u
YW1lc3BhY2UgTmF0aXZlSW1hZ2UgewotCi1JbnRTaXplIHNpemUoY29uc3QgUmV0YWluUHRyPENH
SW1hZ2VSZWY+JiBpbWFnZSkKLXsKLSAgICBBU1NFUlQoaW1hZ2UpOwotICAgIHJldHVybiBJbnRT
aXplKENHSW1hZ2VHZXRXaWR0aChpbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2Uu
Z2V0KCkpKTsKLX0KLQotYm9vbCBoYXNBbHBoYShjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4m
KQotewotICAgIC8vIEZJWE1FOiBBbnN3ZXIgY29ycmVjdGx5IHRoZSBxdWVzdGlvbjogZG9lcyB0
aGUgQ0dJbWFnZVJlZiBoYXZlIGFscGhhIGNoYW5ubmVsPwotICAgIHJldHVybiB0cnVlOwotfQot
ICAgIAotQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKGNvbnN0IFJldGFpblB0cjxDR0ltYWdl
UmVmPiYgaW1hZ2UpCi17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICAKLSAgICBpZiAoTmF0aXZl
SW1hZ2U6OnNpemUoaW1hZ2UpICE9IEludFNpemUoMSwgMSkpCi0gICAgICAgIHJldHVybiBDb2xv
cigpOwotICAgIAotICAgIHVuc2lnbmVkIGNoYXIgcGl4ZWxbNF07IC8vIFJHQkEKLSAgICBhdXRv
IGJpdG1hcENvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShwaXhlbCwgMSwg
MSwgOCwgc2l6ZW9mKHBpeGVsKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwKLSAgICAgICAga0NHSW1h
Z2VBbHBoYVByZW11bHRpcGxpZWRMYXN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcpKTsKLQot
ICAgIGlmICghYml0bWFwQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0gICAgCi0g
ICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGJpdG1hcENvbnRleHQuZ2V0KCksIGtDR0JsZW5kTW9k
ZUNvcHkpOwotICAgIENHQ29udGV4dERyYXdJbWFnZShiaXRtYXBDb250ZXh0LmdldCgpLCBDR1Jl
Y3RNYWtlKDAsIDAsIDEsIDEpLCBpbWFnZS5nZXQoKSk7Ci0gICAgCi0gICAgaWYgKCFwaXhlbFsz
XSkKLSAgICAgICAgcmV0dXJuIENvbG9yKDAsIDAsIDAsIDApOwotCi0gICAgcmV0dXJuIENvbG9y
KHBpeGVsWzBdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICogMjU1IC8gcGl4ZWxbM10sIHBp
eGVsWzJdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKLX0KLQotfQotCi1ib29sIEZyYW1l
RGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQotewotICAgIGlmIChjbGVhck1ldGFkYXRh
KQotICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOwotCi0gICAgbV9zdWJzYW1wbGluZ0xl
dmVsID0gMDsKLQotICAgIGlmIChtX2ltYWdlKSB7Ci0jaWYgQ0FDSEVfU1VCSU1BR0VTCi0gICAg
ICAgIHN1YmltYWdlQ2FjaGUoKS5jbGVhckltYWdlKG1faW1hZ2UuZ2V0KCkpOwotI2VuZGlmCi0g
ICAgICAgIG1faW1hZ2UgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1DR0ltYWdlUmVmIEJpdG1hcEltYWdlOjpnZXRDR0ltYWdl
UmVmKCkKLXsKLSAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCkuZ2V0KCk7Ci19Ci0KLUNH
SW1hZ2VSZWYgQml0bWFwSW1hZ2U6OmdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6ZShjb25zdCBJbnRT
aXplJiBzaXplKQotewotICAgIHNpemVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgQ0dJbWFnZVJlZiBjZ0lt
YWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkuZ2V0KCk7Ci0gICAgICAgIGlmIChjZ0ltYWdlICYm
IEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGNnSW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGNnSW1h
Z2UpKSA9PSBzaXplKQotICAgICAgICAgICAgcmV0dXJuIGNnSW1hZ2U7Ci0gICAgfQotCi0gICAg
Ly8gRmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgQ0dJbWFnZVJlZiBpZiB3ZSBjYW4ndCBmaW5kIHRo
ZSByaWdodCBzaXplCi0gICAgcmV0dXJuIGdldENHSW1hZ2VSZWYoKTsKLX0KLQotUmV0YWluUHRy
PENGQXJyYXlSZWY+IEJpdG1hcEltYWdlOjpnZXRDR0ltYWdlQXJyYXkoKQotewotICAgIHNpemVf
dCBjb3VudCA9IGZyYW1lQ291bnQoKTsKLSAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAKLSAgICBDRk11dGFibGVBcnJheVJlZiBhcnJheSA9IENGQXJyYXlDcmVh
dGVNdXRhYmxlKE5VTEwsIGNvdW50LCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKENHSW1hZ2VSZWYg
Y3VyckZyYW1lID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkuZ2V0KCkpCi0gICAgICAgICAgICBDRkFy
cmF5QXBwZW5kVmFsdWUoYXJyYXksIGN1cnJGcmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBhZG9w
dENGKGFycmF5KTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQm
IGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3AsIEJsZW5kTW9kZSBibGVuZE1vZGUsIElt
YWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikKLXsKLSNpZiBQTEFURk9STShJ
T1MpCi0gICAgc3RhcnRBbmltYXRpb24oRG9Ob3RDYXRjaFVwKTsKLSNlbHNlCi0gICAgc3RhcnRB
bmltYXRpb24oKTsKLSNlbmRpZgotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdlOwot
ICAgIC8vIE5ldmVyIHVzZSBzdWJzYW1wbGVkIGltYWdlcyBmb3IgZHJhd2luZyBpbnRvIFBERiBj
b250ZXh0cy4KLSAgICBpZiAod2tDR0NvbnRleHRJc1BERkNvbnRleHQoY3R4dC5wbGF0Zm9ybUNv
bnRleHQoKSkpCi0gICAgICAgIGltYWdlID0gY29weVVuc2NhbGVkRnJhbWVJbWFnZUF0SW5kZXgo
bV9jdXJyZW50RnJhbWUpOwotICAgIGVsc2UgewotICAgICAgICBDR1JlY3QgdHJhbnNmb3JtZWRE
ZXN0aW5hdGlvblJlY3QgPSBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShkZXN0UmVjdCwgQ0dD
b250ZXh0R2V0Q1RNKGN0eHQucGxhdGZvcm1Db250ZXh0KCkpKTsKLSAgICAgICAgZmxvYXQgc3Vi
c2FtcGxpbmdTY2FsZSA9IHN0ZDo6bWluPGZsb2F0PigxLCBzdGQ6Om1heCh0cmFuc2Zvcm1lZERl
c3RpbmF0aW9uUmVjdC5zaXplLndpZHRoIC8gc3JjUmVjdC53aWR0aCgpLCB0cmFuc2Zvcm1lZERl
c3RpbmF0aW9uUmVjdC5zaXplLmhlaWdodCAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsKLQotICAgICAg
ICBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lLCBzdWJzYW1wbGluZ1Nj
YWxlKTsKLSAgICB9Ci0KLSAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3
b24ndCBoYXZlIGFuIGltYWdlIHlldC4KLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIENvbG9y
IGNvbG9yID0gc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCk7Ci0gICAgaWYgKGNvbG9yLmlzVmFsaWQo
KSkgewotICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwgZGVzdFJlY3QsIGNvbG9yLCBj
b21wb3NpdGVPcCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBTdWJzYW1wbGlu
ZyBtYXkgaGF2ZSBnaXZlbiB1cyBhbiBpbWFnZSB0aGF0IGlzIHNtYWxsZXIgdGhhbiBzaXplKCku
Ci0gICAgSW50U2l6ZSBpbWFnZVNpemUoQ0dJbWFnZUdldFdpZHRoKGltYWdlLmdldCgpKSwgQ0dJ
bWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSkpOwotICAgIAotICAgIC8vIHNyY1JlY3QgaXMgaW4g
dGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB1bnN1YnNhbXBsZWQgaW1hZ2UsIHNvIHdlIGhhdmUgdG8g
bWFwIGl0IHRvIHRoZSBzdWJzYW1wbGVkIGltYWdlLgotICAgIEZsb2F0UmVjdCBzY2FsZWRTcmNS
ZWN0ID0gc3JjUmVjdDsKLSAgICBpZiAoaW1hZ2VTaXplICE9IG1fc2l6ZSkgewotICAgICAgICBG
bG9hdFJlY3Qgb3JpZ2luYWxJbWFnZUJvdW5kcyhGbG9hdFBvaW50KCksIG1fc2l6ZSk7Ci0gICAg
ICAgIEZsb2F0UmVjdCBzdWJzYW1wbGVkSW1hZ2VCb3VuZHMoRmxvYXRQb2ludCgpLCBpbWFnZVNp
emUpOwotICAgICAgICBzY2FsZWRTcmNSZWN0ID0gbWFwUmVjdChzcmNSZWN0LCBvcmlnaW5hbElt
YWdlQm91bmRzLCBzdWJzYW1wbGVkSW1hZ2VCb3VuZHMpOwotICAgIH0KLSAgICAKLSAgICBJbWFn
ZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uOwotICAgIGlmIChkZXNjcmlwdGlvbi5yZXNwZWN0SW1h
Z2VPcmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQotICAgICAgICBvcmll
bnRhdGlvbiA9IGZyYW1lT3JpZW50YXRpb25BdEluZGV4KG1fY3VycmVudEZyYW1lKTsKLQotICAg
IGN0eHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzY2FsZWRT
cmNSZWN0LCBjb21wb3NpdGVPcCwgYmxlbmRNb2RlLCBvcmllbnRhdGlvbik7Ci0KLSAgICBpZiAo
aW1hZ2VPYnNlcnZlcigpKQotICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7
Ci19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBCaXRtYXBJbWFnZTo6Y29weVVuc2NhbGVkRnJh
bWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4KQotewotICAgIGlmIChpbmRleCA+PSBmcmFtZUNv
dW50KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGluZGV4ID49IG1fZnJh
bWVzLnNpemUoKSB8fCAhbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2UpCi0gICAgICAgIGNhY2hlRnJh
bWUoaW5kZXgsIDApOwotCi0gICAgaWYgKCFtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1wbGluZ0xl
dmVsKQotICAgICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2U7Ci0KLSAgICByZXR1
cm4gbV9zb3VyY2UuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgpOwotfQotCi19Ci0KLSNl
bmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXR0ZXJuQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUGF0dGVybkNHLmNwcAppbmRleCBiNDI4ZDUwZDk0YmY5MjQyODAzMjg3ZDJlZWMxNmJkNjlj
NTI4ZDkyLi4zZGFhMTM5YWI3ZWE1YjQyMTU3Nzg4MzVkMzUzZDhhZGI1ZjBjNzVlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKQEAg
LTcyLDcgKzcyLDcgQEAgQ0dQYXR0ZXJuUmVmIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVy
bihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRyYW4KICAgICAvLyBJZiB3ZSdyZSBy
ZXBlYXRpbmcgaW4gYm90aCBkaXJlY3Rpb25zLCB3ZSBjYW4gdXNlIGltYWdlLWJhY2tlZCBwYXR0
ZXJucwogICAgIC8vIGluc3RlYWQgb2YgY3VzdG9tIHBhdHRlcm5zLCBhbmQgYXZvaWQgdGlsaW5n
LWVkZ2UgcGl4ZWwgY3JhY2tzLgogICAgIGlmIChtX3JlcGVhdFggJiYgbV9yZXBlYXRZKQotICAg
ICAgICByZXR1cm4gd2tDR1BhdHRlcm5DcmVhdGVXaXRoSW1hZ2VBbmRUcmFuc2Zvcm0odGlsZUlt
YWdlKCktPmdldENHSW1hZ2VSZWYoKSwgcGF0dGVyblRyYW5zZm9ybSwgd2tQYXR0ZXJuVGlsaW5n
Q29uc3RhbnRTcGFjaW5nKTsKKyAgICAgICAgcmV0dXJuIHdrQ0dQYXR0ZXJuQ3JlYXRlV2l0aElt
YWdlQW5kVHJhbnNmb3JtKHRpbGVJbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmdldCgpLCBwYXR0ZXJu
VHJhbnNmb3JtLCB3a1BhdHRlcm5UaWxpbmdDb25zdGFudFNwYWNpbmcpOwogCiAgICAgLy8gSWYg
RkxUX01BWCBzaG91bGQgYWxzbyBiZSB1c2VkIGZvciB4U3RlcCBvciB5U3RlcCwgbm90aGluZyBp
cyByZW5kZXJlZC4gVXNpbmcgZnJhY3Rpb25zIG9mIEZMVF9NQVggYWxzbwogICAgIC8vIHJlc3Vs
dCBpbiBub3RoaW5nIGJlaW5nIHJlbmRlcmVkLgpAQCAtODMsNyArODMsNyBAQCBDR1BhdHRlcm5S
ZWYgUGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dXNlclNwYWNlVHJhbgogICAgIENHRmxvYXQgeVN0ZXAgPSBtX3JlcGVhdFkgPyB0aWxlUmVjdC5o
ZWlnaHQoKSA6ICgxIDw8IDIyKTsKIAogICAgIC8vIFRoZSBwYXR0ZXJuIHdpbGwgcmVsZWFzZSB0
aGUgQ0dJbWFnZVJlZiB3aGVuIGl0J3MgZG9uZSByZW5kZXJpbmcgaW4gcGF0dGVyblJlbGVhc2VD
YWxsYmFjawotICAgIENHSW1hZ2VSZWYgcGxhdGZvcm1JbWFnZSA9IENHSW1hZ2VSZXRhaW4odGls
ZUltYWdlKCktPmdldENHSW1hZ2VSZWYoKSk7CisgICAgQ0dJbWFnZVJlZiBwbGF0Zm9ybUltYWdl
ID0gdGlsZUltYWdlKCktPm5hdGl2ZUltYWdlKCkubGVha1JlZigpOwogCiAgICAgY29uc3QgQ0dQ
YXR0ZXJuQ2FsbGJhY2tzIHBhdHRlcm5DYWxsYmFja3MgPSB7IDAsIHBhdHRlcm5DYWxsYmFjaywg
cGF0dGVyblJlbGVhc2VDYWxsYmFjayB9OwogICAgIHJldHVybiBDR1BhdHRlcm5DcmVhdGUocGxh
dGZvcm1JbWFnZSwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHhTdGVwLCB5U3RlcCwga0NH
UGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2luZywgVFJVRSwgJnBhdHRlcm5DYWxsYmFja3MpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1J
bWFnZUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BsYXRmb3Jt
SW1hZ2VDRy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWZiMmRlMGVhMTJkYTIxNGYxMDQ2YzM5NjJlOGVhYjUz
YzY0NDEyNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiQ29s
b3IuaCIKKyNpbmNsdWRlICJDb3JlR3JhcGhpY3NTUEkuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKKyNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dENHLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlN1YmltYWdlQ2FjaGVX
aXRoVGltZXIuaCIKKworI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1J
bnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworICAgIAordm9pZCBQbGF0Zm9ybUltYWdlOjpjbGVhclN1YkltYWdlcygpCit7Cisj
aWYgQ0FDSEVfU1VCSU1BR0VTCisgICAgaWYgKCFpc05pbCgpKQorICAgICAgICBzdWJpbWFnZUNh
Y2hlKCkuY2xlYXJJbWFnZShjZ0ltYWdlUmVmKCkpOworI2VuZGlmCit9CisKK0ludFNpemUgUGxh
dGZvcm1JbWFnZTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzTmlsKCkgPyBJbnRTaXpl
KCkgOiBJbnRTaXplKENHSW1hZ2VHZXRXaWR0aChjZ0ltYWdlUmVmKCkpLCBDR0ltYWdlR2V0SGVp
Z2h0KGNnSW1hZ2VSZWYoKSkpOworfQorCitib29sIFBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKCkg
Y29uc3QKK3sKKyAgICAvLyBGSVhNRTogQW5zd2VyIGNvcnJlY3RseSB0aGUgcXVlc3Rpb246IGRv
ZXMgdGhlIENHSW1hZ2VSZWYgaGF2ZSBhbHBoYSBjaGFubm5lbD8KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworQ29sb3IgUGxhdGZvcm1JbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3QK
K3sKKyAgICBpZiAoaXNOaWwoKSB8fCBzaXplKCkgIT0gSW50U2l6ZSgxLCAxKSkKKyAgICAgICAg
cmV0dXJuIENvbG9yKCk7CisgICAgCisgICAgdW5zaWduZWQgY2hhciBwaXhlbFs0XTsgLy8gUkdC
QQorICAgIGF1dG8gYml0bWFwQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRl
KHBpeGVsLCAxLCAxLCA4LCBzaXplb2YocGl4ZWwpLCBzUkdCQ29sb3JTcGFjZVJlZigpLAorICAg
ICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIz
MkJpZykpOworICAgIAorICAgIGlmICghYml0bWFwQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIENv
bG9yKCk7CisgICAgCisgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGJpdG1hcENvbnRleHQuZ2V0
KCksIGtDR0JsZW5kTW9kZUNvcHkpOworICAgIENHQ29udGV4dERyYXdJbWFnZShiaXRtYXBDb250
ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIDEsIDEpLCBjZ0ltYWdlUmVmKCkpOworICAgIAor
ICAgIGlmICghcGl4ZWxbM10pCisgICAgICAgIHJldHVybiBDb2xvcigwLCAwLCAwLCAwKTsKKyAg
ICAKKyAgICByZXR1cm4gQ29sb3IocGl4ZWxbMF0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMV0g
KiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMl0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbM10pOwor
fQorICAgIAorYm9vbCBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKSBjb25zdAor
eworICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBjZ0ltYWdlUmVmKCk7CisgICAgQVNTRVJUKENHSW1h
Z2VHZXRCaXRzUGVyQ29tcG9uZW50KGltYWdlKSA9PSA4KTsKKyAgICAKKyAgICBDR0JpdG1hcElu
Zm8gaW1hZ2VJbmZvID0gQ0dJbWFnZUdldEJpdG1hcEluZm8oaW1hZ2UpOworICAgIGlmICghKGlt
YWdlSW5mbyAmIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlKSB8fCAoaW1hZ2VJbmZvICYga0NH
Qml0bWFwQWxwaGFJbmZvTWFzaykgIT0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCkg
eworICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYmVpbmcgYWJsZSB0byBoYW5kbGUgb3RoZXIg
cGl4ZWwgZm9ybWF0cy4KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHdpZHRoID0gQ0dJbWFnZUdldFdp
ZHRoKGltYWdlKTsKKyAgICBzaXplX3QgaGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChpbWFnZSk7
CisgICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0gQ0dJbWFnZUdldEJ5dGVzUGVyUm93KGltYWdlKTsK
KyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBwcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRh
UHJvdmlkZXJDb3B5RGF0YShDR0ltYWdlR2V0RGF0YVByb3ZpZGVyKGltYWdlKSkpOworICAgIGNv
bnN0IFVJbnQ4KiBkYXRhID0gQ0ZEYXRhR2V0Qnl0ZVB0cihwcm92aWRlci5nZXQoKSk7CisgICAg
CisgICAgLy8gT3ZlcmxheSBhIGdyaWQgb2Ygc2FtcGxpbmcgZG90cyBvbiB0b3Agb2YgYSBncmF5
c2NhbGUgdmVyc2lvbiBvZiB0aGUgaW1hZ2UuCisgICAgLy8gRm9yIHRoZSBpbnRlcmlvciBwb2lu
dHMsIGNhbGN1bGF0ZSB0aGUgZGlmZmVyZW5jZSBpbiBsdW1pbmFuY2UgYW1vbmcgdGhlIHNhbXBs
ZSBwb2ludAorICAgIC8vIGFuZCBpdHMgc3Vycm91bmRzIHBvaW50cywgc2NhbGVkIGJ5IHRyYW5z
cGFyZW5jeS4KKyAgICBjb25zdCB1bnNpZ25lZCBzYW1wbGVSb3dzID0gNzsKKyAgICBjb25zdCB1
bnNpZ25lZCBzYW1wbGVDb2xzID0gNzsKKyAgICAvLyBGSVhNRTogUmVmaW5lIHRoZSBwcm9wZXIg
bnVtYmVyIG9mIHNhbXBsZXMsIGFuZCBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgYXNwZWN0IHJhdGlv
cy4KKyAgICBpZiAod2lkdGggPCBzYW1wbGVDb2xzIHx8IGhlaWdodCA8IHNhbXBsZVJvd3MpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBFbnN1cmUgdGhhdCB0aGUgbGFzdCBy
b3cvY29sdW1uIGxhbmQgb24gdGhlIGltYWdlIHBlcmltZXRlci4KKyAgICBjb25zdCBmbG9hdCBz
dHJpZGVXaWR0aCA9IHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCAtIDEpIC8gKHNhbXBsZUNvbHMg
LSAxKTsKKyAgICBjb25zdCBmbG9hdCBzdHJpZGVIZWlnaHQgPSBzdGF0aWNfY2FzdDxmbG9hdD4o
aGVpZ2h0IC0gMSkgLyAoc2FtcGxlUm93cyAtIDEpOworICAgIGZsb2F0IHNhbXBsZXNbc2FtcGxl
Um93c11bc2FtcGxlQ29sc107CisgICAgCisgICAgLy8gRmluZCB0aGUgbHVtaW5hbmNlIG9mIHRo
ZSBzYW1wbGUgcG9pbnRzLgorICAgIGZsb2F0IHkgPSAwOworICAgIGNvbnN0IFVJbnQ4KiByb3cg
PSBkYXRhOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzYW1wbGVSb3dzOyArK2kpIHsK
KyAgICAgICAgZmxvYXQgeCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBz
YW1wbGVDb2xzOyArK2opIHsKKyAgICAgICAgICAgIGNvbnN0IFVJbnQ4KiBwMCA9IHJvdyArIChz
dGF0aWNfY2FzdDxpbnQ+KHggKyAuNSkpICogNDsKKyAgICAgICAgICAgIC8vIFIgRyBCIEEKKyAg
ICAgICAgICAgIHNhbXBsZXNbaV1bal0gPSAoMC4yMTI1ICogKnAwICsgMC43MTU0ICogKihwMCsx
KSArIDAuMDcyMSAqICoocDArMikpICogKihwMCszKSAvIDI1NTsKKyAgICAgICAgICAgIHggKz0g
c3RyaWRlV2lkdGg7CisgICAgICAgIH0KKyAgICAgICAgeSArPSBzdHJpZGVIZWlnaHQ7CisgICAg
ICAgIHJvdyA9IGRhdGEgKyAoc3RhdGljX2Nhc3Q8aW50Pih5ICsgLjUpKSAqIGJ5dGVzUGVyUm93
OworICAgIH0KKyAgICAKKyAgICAvLyBEZXRlcm1pbmUgdGhlIGltYWdlIHNjb3JlLgorICAgIGZs
b2F0IGFjY3VtU2NvcmUgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzYW1wbGVS
b3dzIC0gMTsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDE7IGogPCBzYW1wbGVD
b2xzIC0gMTsgKytqKSB7CisgICAgICAgICAgICBmbG9hdCBkaWZmID0gc2FtcGxlc1tpIC0gMV1b
al0gKyBzYW1wbGVzW2kgKyAxXVtqXSArIHNhbXBsZXNbaV1baiAtIDFdICsgc2FtcGxlc1tpXVtq
ICsgMV0gLSA0ICogc2FtcGxlc1tpXVtqXTsKKyAgICAgICAgICAgIGFjY3VtU2NvcmUgKz0gZGlm
ZiAqIGRpZmY7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gVGhlIHNjb3JlIGZvciBh
IGdpdmVuIHNhbXBsZSBjYW4gYmUgd2l0aGluIHRoZSByYW5nZSBvZiAwIGFuZCAyNTVeMi4KKyAg
ICByZXR1cm4gYWNjdW1TY29yZSA8IDI1MDAgKiAoc2FtcGxlUm93cyAtIDIpICogKHNhbXBsZUNv
bHMgLSAyKTsKK30KKworZmxvYXQgUGxhdGZvcm1JbWFnZTo6c3Vic2FtcGxpbmdTY2FsZShHcmFw
aGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCkKK3sKKyAgICAvLyBOZXZlciB1c2Ugc3Vic2FtcGxlZCBpbWFnZXMg
Zm9yIGRyYXdpbmcgaW50byBQREYgY29udGV4dHMuCisgICAgaWYgKHdrQ0dDb250ZXh0SXNQREZD
b250ZXh0KGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpKQorICAgICAgICByZXR1cm4gMTsKKyAg
ICAKKyAgICBDR1JlY3QgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3QgPSBDR1JlY3RBcHBseUFm
ZmluZVRyYW5zZm9ybShkZXN0UmVjdCwgQ0dDb250ZXh0R2V0Q1RNKGNvbnRleHQucGxhdGZvcm1D
b250ZXh0KCkpKTsKKyAgICByZXR1cm4gc3RkOjptaW48ZmxvYXQ+KDEsIHN0ZDo6bWF4KHRyYW5z
Zm9ybWVkRGVzdGluYXRpb25SZWN0LnNpemUud2lkdGggLyBzcmNSZWN0LndpZHRoKCksIHRyYW5z
Zm9ybWVkRGVzdGluYXRpb25SZWN0LnNpemUuaGVpZ2h0IC8gc3JjUmVjdC5oZWlnaHQoKSkpOwor
fQorCit2b2lkIFBsYXRmb3JtSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEludFNpemUmIHNyY1NpemUsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSwg
Y29uc3QgSW1hZ2VPcmllbnRhdGlvbiYgb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgLy8gU3Vi
c2FtcGxpbmcgbWF5IGhhdmUgZ2l2ZW4gdXMgYW4gaW1hZ2UgdGhhdCBpcyBzbWFsbGVyIHRoYW4g
c2l6ZSgpLgorICAgIEludFNpemUgc3Vic2FtcGxlZEltYWdlU2l6ZSA9IHNpemUoKTsKKyAgICAK
KyAgICAvLyBzcmNSZWN0IGlzIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgdW5zdWJzYW1wbGVk
IGltYWdlLCBzbyB3ZSBoYXZlIHRvIG1hcCBpdCB0byB0aGUgc3Vic2FtcGxlZCBpbWFnZS4KKyAg
ICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBpZiAoc3Vic2FtcGxl
ZEltYWdlU2l6ZSAhPSBzcmNTaXplKQorICAgICAgICBhZGp1c3RlZFNyY1JlY3QgPSBtYXBSZWN0
KHNyY1JlY3QsIEZsb2F0UmVjdCh7IH0sIHNyY1NpemUpLCBGbG9hdFJlY3QoeyB9LCBzdWJzYW1w
bGVkSW1hZ2VTaXplKSk7CisgICAgCisgICAgY29udGV4dC5kcmF3TmF0aXZlSW1hZ2UobV9pbWFn
ZSwgc3Vic2FtcGxlZEltYWdlU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3AsIG1v
ZGUsIG9yaWVudGF0aW9uKTsKK30KKyAgICAKK30KKworI2VuZGlmIC8vIFVTRShDRykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1RleHRUcmFja1Jl
cHJlc2VudGF0aW9uQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
b2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tCmluZGV4IDg5NzIwZDE3MzY1ZGE3
ZThiYTg0NjlkNTI5NDU0OGQ1MTg0N2E3ZmUuLjQ0NzZmYzVmODdjMzQ5ODhmNmQ5YWQ1NWVlYmQ4
ZDFiOWJiMDIyZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5t
bQpAQCAtMTI5LDcgKzEyOSw3IEBAIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2E6On5UZXh0
VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hKCkKIHZvaWQgVGV4dFRyYWNrUmVwcmVzZW50YXRpb25D
b2NvYTo6dXBkYXRlKCkKIHsKICAgICBpZiAoYXV0byByZXByZXNlbnRhdGlvbiA9IG1fY2xpZW50
LmNyZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2UoKSkKLSAgICAgICAgW21fbGF5ZXIu
Z2V0KCkgc2V0Q29udGVudHM6KGlkKXJlcHJlc2VudGF0aW9uLT5nZXRDR0ltYWdlUmVmKCldOwor
ICAgICAgICBbbV9sYXllci5nZXQoKSBzZXRDb250ZW50czooaWQpcmVwcmVzZW50YXRpb24tPm5h
dGl2ZUltYWdlKCkuZ2V0KCldOwogfQogCiB2b2lkIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29j
b2E6OnNldENvbnRlbnRTY2FsZShmbG9hdCBzY2FsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQppbmRleCAwMWViNmRkMzAwNDNhMjI1Mjkx
NzZmZDkxMjExN2RjNTc3NmMxN2JhLi5kYzFjN2M3MDk1ZDk0NGM0YzYyZjFmZTA5MzU3MDJhMTNj
N2M3YTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
SW1hZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0lt
YWdlTWFjLm1tCkBAIC04NSwzMSArODUsMjIgQEAgQ0ZEYXRhUmVmIEJpdG1hcEltYWdlOjpnZXRU
SUZGUmVwcmVzZW50YXRpb24oKQogICAgIGlmIChtX3RpZmZSZXApCiAgICAgICAgIHJldHVybiBt
X3RpZmZSZXAuZ2V0KCk7CiAKLSAgICB1bnNpZ25lZCBudW1GcmFtZXMgPSBmcmFtZUNvdW50KCk7
CisgICAgYXV0byBuYXRpdmVJbWFnZXMgPSB0aGlzLT5mcmFtZXNOYXRpdmVJbWFnZXMoKTsKIAot
ICAgIC8vIElmIG51bUZyYW1lcyBpcyB6ZXJvLCB3ZSBrbm93IGZvciBjZXJ0YWluIHRoaXMgaW1h
Z2UgZG9lc24ndCBoYXZlIHZhbGlkIGRhdGEKKyAgICAvLyBJZiBmcmFtZXNJbWFnZXMuc2l6ZSgp
IGlzIHplcm8sIHdlIGtub3cgZm9yIGNlcnRhaW4gdGhpcyBpbWFnZSBkb2Vzbid0IGhhdmUgdmFs
aWQgZGF0YQogICAgIC8vIEV2ZW4gdGhvdWdoIHRoZSBjYWxsIHRvIENHSW1hZ2VEZXN0aW5hdGlv
bkNyZWF0ZVdpdGhEYXRhIHdpbGwgZmFpbCBhbmQgd2UnbGwgaGFuZGxlIGl0IGdyYWNlZnVsbHks
CiAgICAgLy8gaW4gY2VydGFpbiBjaXJjdW1zdGFuY2VzIHRoYXQgY2FsbCB3aWxsIHNwYW0gdGhl
IGNvbnNvbGUgd2l0aCBhbiBlcnJvciBtZXNzYWdlCi0gICAgaWYgKCFudW1GcmFtZXMpCi0gICAg
ICAgIHJldHVybiAwOwotCi0gICAgVmVjdG9yPENHSW1hZ2VSZWY+IGltYWdlczsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRnJhbWVzOyArK2kgKSB7Ci0gICAgICAgIENHSW1hZ2VS
ZWYgY2dJbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpOwotICAgICAgICBpZiAoY2dJ
bWFnZSkKLSAgICAgICAgICAgIGltYWdlcy5hcHBlbmQoY2dJbWFnZSk7Ci0gICAgfQotCi0gICAg
dW5zaWduZWQgbnVtVmFsaWRGcmFtZXMgPSBpbWFnZXMuc2l6ZSgpOworICAgIGlmICghbmF0aXZl
SW1hZ2VzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZXRhaW5QdHI8
Q0ZNdXRhYmxlRGF0YVJlZj4gZGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgwLCAw
KSk7Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VEZXN0aW5hdGlvblJlZj4gZGVzdGluYXRpb24gPSBh
ZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEuZ2V0KCksIGtVVFR5
cGVUSUZGLCBudW1WYWxpZEZyYW1lcywgMCkpOworICAgIFJldGFpblB0cjxDR0ltYWdlRGVzdGlu
YXRpb25SZWY+IGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVhdGVX
aXRoRGF0YShkYXRhLmdldCgpLCBrVVRUeXBlVElGRiwgbmF0aXZlSW1hZ2VzLnNpemUoKSwgMCkp
OwogCiAgICAgaWYgKCFkZXN0aW5hdGlvbikKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJl
dHVybiBudWxscHRyOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVZhbGlkRnJh
bWVzOyArK2kpCi0gICAgICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0aW9u
LmdldCgpLCBpbWFnZXNbaV0sIDApOworICAgIGZvciAoYXV0byBuYXRpdmVJbWFnZSA6IG5hdGl2
ZUltYWdlcykKKyAgICAgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRpb24u
Z2V0KCksIG5hdGl2ZUltYWdlLmdldCgpLCAwKTsKIAogICAgIENHSW1hZ2VEZXN0aW5hdGlvbkZp
bmFsaXplKGRlc3RpbmF0aW9uLmdldCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAKaW5kZXggMjE3NTNiZDA3
OGExYzU1YzMyNzE5YzE0ODQ2ZjBmNmI5OTc1ZjhmZC4uMGMwNjNlYmFlYjUzMThiMmM5Y2E3ZGU5
NzExMjMyMmRmZTgyOTE4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCkBAIC0xNDIsNiArMTQyLDcgQEAgSW1h
Z2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0IEltYWdlRnJhbWUmIG90aGVyKQog
ICAgICAgICByZXR1cm4gKnRoaXM7CiAKICAgICBjb3B5Qml0bWFwRGF0YShvdGhlcik7CisgICAg
c2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7CiAgICAgc2V0T3JpZ2luYWxGcmFtZVJlY3Qo
b3RoZXIub3JpZ2luYWxGcmFtZVJlY3QoKSk7CiAgICAgc2V0U3RhdHVzKG90aGVyLnN0YXR1cygp
KTsKICAgICBzZXREdXJhdGlvbihvdGhlci5kdXJhdGlvbigpKTsKQEAgLTE1Miw4ICsxNTMsNyBA
QCBJbWFnZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYgb3Ro
ZXIpCiAKIHZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXJQaXhlbERhdGEoKQogewotICAgIG1fYmFja2lu
Z1N0b3JlLmNsZWFyKCk7Ci0gICAgbV9ieXRlcyA9IDA7CisgICAgbV9waXhlbHMgPSBudWxscHRy
OwogICAgIG1fc3RhdHVzID0gRnJhbWVFbXB0eTsKICAgICAvLyBOT1RFOiBEbyBub3QgcmVzZXQg
b3RoZXIgbWVtYmVycyBoZXJlOyBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoKSBjYWxscyB0aGlzCiAg
ICAgLy8gdG8gZnJlZSB0aGUgYml0bWFwIGRhdGEsIGJ1dCBvdGhlciBmdW5jdGlvbnMgbGlrZSBp
bml0RnJhbWVCdWZmZXIoKSBhbmQKQEAgLTE2MywyNCArMTYzLDE2IEBAIHZvaWQgSW1hZ2VGcmFt
ZTo6Y2xlYXJQaXhlbERhdGEoKQogCiB2b2lkIEltYWdlRnJhbWU6Onplcm9GaWxsUGl4ZWxEYXRh
KCkKIHsKLSAgICBtZW1zZXQobV9ieXRlcywgMCwgbV9zaXplLndpZHRoKCkgKiBtX3NpemUuaGVp
Z2h0KCkgKiBzaXplb2YoUGl4ZWxEYXRhKSk7CisgICAgbV9waXhlbHMtPmNsZWFyKCk7CiAgICAg
bV9oYXNBbHBoYSA9IHRydWU7CiB9CiAKIHZvaWQgSW1hZ2VGcmFtZTo6emVyb0ZpbGxGcmFtZVJl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBBU1NFUlQoSW50UmVjdChJbnRQb2ludCgp
LCBtX3NpemUpLmNvbnRhaW5zKHJlY3QpKTsKLQogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRo
KCkgKiBzaXplb2YoUGl4ZWxEYXRhKTsKLSAgICBQaXhlbERhdGEqIHN0YXJ0ID0gbV9ieXRlcyAr
IChyZWN0LnkoKSAqIHdpZHRoKCkpICsgcmVjdC54KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCByZWN0LmhlaWdodCgpOyArK2kpIHsKLSAgICAgICAgbWVtc2V0KHN0YXJ0LCAwLCByZWN0V2lk
dGhJbkJ5dGVzKTsKLSAgICAgICAgc3RhcnQgKz0gd2lkdGgoKTsKLSAgICB9Ci0KKyAgICBtX3Bp
eGVscy0+Y2xlYXJSZWN0KHJlY3QpOwogICAgIHNldEhhc0FscGhhKHRydWUpOwogfQogCkBAIC0x
ODksMjUgKzE4MSwyMyBAQCBib29sIEltYWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKGNvbnN0IElt
YWdlRnJhbWUmIG90aGVyKQogICAgIGlmICh0aGlzID09ICZvdGhlcikKICAgICAgICAgcmV0dXJu
IHRydWU7CiAKLSAgICBtX2JhY2tpbmdTdG9yZSA9IG90aGVyLm1fYmFja2luZ1N0b3JlOwotICAg
IG1fYnl0ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7Ci0gICAgbV9zaXplID0gb3RoZXIubV9z
aXplOwotICAgIHNldEhhc0FscGhhKG90aGVyLm1faGFzQWxwaGEpOworICAgIGlmIChvdGhlci5t
X3BpeGVscykKKyAgICAgICAgbV9waXhlbHMgPSBCaXRtYXBQaXhlbHM6OmNyZWF0ZSgqb3RoZXIt
Pm1fcGl4ZWxzLmdldCgpKTsKKyAgICBlbHNlCisgICAgICAgIG1fcGl4ZWxzID0gbnVsbHB0cjsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBJbWFnZUZyYW1lOjpzZXRTaXplKGludCBuZXdX
aWR0aCwgaW50IG5ld0hlaWdodCkKIHsKLSAgICBBU1NFUlQoIXdpZHRoKCkgJiYgIWhlaWdodCgp
KTsKLSAgICBzaXplX3QgYmFja2luZ1N0b3JlU2l6ZSA9IG5ld1dpZHRoICogbmV3SGVpZ2h0Owot
ICAgIGlmICghbV9iYWNraW5nU3RvcmUudHJ5UmVzZXJ2ZUNhcGFjaXR5KGJhY2tpbmdTdG9yZVNp
emUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9iYWNraW5nU3RvcmUucmVzaXplKGJh
Y2tpbmdTdG9yZVNpemUpOwotICAgIG1fYnl0ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7Ci0g
ICAgbV9zaXplID0gSW50U2l6ZShuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKKyAgICBBU1NFUlQoIW1f
cGl4ZWxzKTsKKyAgICBtX3BpeGVscyA9IEJpdG1hcFBpeGVsczo6Y3JlYXRlKEludFNpemUobmV3
V2lkdGgsIG5ld0hlaWdodCksIG1fcHJlbXVsdGlwbHlBbHBoYSk7CisgICAgcmV0dXJuIG1fcGl4
ZWxzOworfQogCi0gICAgemVyb0ZpbGxQaXhlbERhdGEoKTsKLSAgICByZXR1cm4gdHJ1ZTsKK3Zv
aWQgSW1hZ2VGcmFtZTo6Y29weVJvd05UaW1lcyhpbnQgc3RhcnRYLCBpbnQgZW5kWCwgaW50IHN0
YXJ0WSwgaW50IGVuZFkpCit7CisgICAgbV9waXhlbHMtPnJlcGVhdEZpcnN0Um93KEludFJlY3Qo
c3RhcnRYLCBzdGFydFksIGVuZFggLXN0YXJ0WCAsIGVuZFkgLSBzdGFydFkpKTsKIH0KIAogYm9v
bCBJbWFnZUZyYW1lOjpoYXNBbHBoYSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCmluZGV4IDJmOGVlZTE3ODFk
MTYyZDg2YzQ5ZmUxZGFjNzJhMmU3ZTQwYTVkNmQuLmI4NDllNDlhZTEwNDkyMGRmMWI4ODYyNGUx
YWIxNzFmYzc2NWMxYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNwcmFnbWEg
b25jZQogCisjaW5jbHVkZSAiQml0bWFwUGl4ZWxzLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgog
I2luY2x1ZGUgIkltYWdlU291cmNlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKQEAg
LTU3LDcgKzU4LDYgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAg
ICAgICAgRGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzICAvLyBDbGVhciBmcmFtZSB0byBwcmV2aW91
cyBmcmFtZWJ1ZmZlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBj
b250ZW50cwogICAgICAgICB9OwotICAgICAgICB0eXBlZGVmIHVuc2lnbmVkIFBpeGVsRGF0YTsK
IAogICAgICAgICBJbWFnZUZyYW1lKCk7CiAKQEAgLTgwLDE3ICs4MCw3IEBAIHVzaW5nIENvbG9y
UHJvZmlsZSA9IFZlY3RvcjxjaGFyPjsKICAgICAgICAgLy8gQ29waWVzIHRoZSBwaXhlbCBkYXRh
IGF0IFsoc3RhcnRYLCBzdGFydFkpLCAoZW5kWCwgc3RhcnRZKSkgdG8gdGhlCiAgICAgICAgIC8v
IHNhbWUgWC1jb29yZGluYXRlcyBvbiBlYWNoIHN1YnNlcXVlbnQgcm93IHVwIHRvIGJ1dCBub3Qg
aW5jbHVkaW5nCiAgICAgICAgIC8vIGVuZFkuCi0gICAgICAgIHZvaWQgY29weVJvd05UaW1lcyhp
bnQgc3RhcnRYLCBpbnQgZW5kWCwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVChzdGFydFggPCB3aWR0aCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChl
bmRYIDw9IHdpZHRoKCkpOwotICAgICAgICAgICAgQVNTRVJUKHN0YXJ0WSA8IGhlaWdodCgpKTsK
LSAgICAgICAgICAgIEFTU0VSVChlbmRZIDw9IGhlaWdodCgpKTsKLSAgICAgICAgICAgIGNvbnN0
IGludCByb3dCeXRlcyA9IChlbmRYIC0gc3RhcnRYKSAqIHNpemVvZihQaXhlbERhdGEpOwotICAg
ICAgICAgICAgY29uc3QgUGl4ZWxEYXRhKiBjb25zdCBzdGFydEFkZHIgPSBnZXRBZGRyKHN0YXJ0
WCwgc3RhcnRZKTsKLSAgICAgICAgICAgIGZvciAoaW50IGRlc3RZID0gc3RhcnRZICsgMTsgZGVz
dFkgPCBlbmRZOyArK2Rlc3RZKQotICAgICAgICAgICAgICAgIG1lbWNweShnZXRBZGRyKHN0YXJ0
WCwgZGVzdFkpLCBzdGFydEFkZHIsIHJvd0J5dGVzKTsKLSAgICAgICAgfQorICAgICAgICB2b2lk
IGNvcHlSb3dOVGltZXMoaW50IHN0YXJ0WCwgaW50IGVuZFgsIGludCBzdGFydFksIGludCBlbmRZ
KTsKIAogICAgICAgICAvLyBBbGxvY2F0ZXMgc3BhY2UgZm9yIHRoZSBwaXhlbCBkYXRhLiAgTXVz
dCBiZSBjYWxsZWQgYmVmb3JlIGFueSBwaXhlbHMKICAgICAgICAgLy8gYXJlIHdyaXR0ZW4uICBN
dXN0IG9ubHkgYmUgY2FsbGVkIG9uY2UuICBSZXR1cm5zIHdoZXRoZXIgYWxsb2NhdGlvbgpAQCAt
MTAwLDcgKzkwLDcgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAg
ICAvLyBSZXR1cm5zIGEgY2FsbGVyLW93bmVkIHBvaW50ZXIgdG8gdGhlIHVuZGVybHlpbmcgbmF0
aXZlIGltYWdlIGRhdGEuCiAgICAgICAgIC8vIChBY3R1YWwgdXNlOiBUaGlzIHBvaW50ZXIgd2ls
bCBiZSBvd25lZCBieSBCaXRtYXBJbWFnZSBhbmQgZnJlZWQgaW4KICAgICAgICAgLy8gRnJhbWVE
YXRhOjpjbGVhcigpKS4KLSAgICAgICAgTmF0aXZlSW1hZ2VQdHIgYXNOZXdOYXRpdmVJbWFnZSgp
IGNvbnN0OworICAgICAgICBOYXRpdmVJbWFnZVB0ciBhc05ld05hdGl2ZUltYWdlKCkgY29uc3Qg
eyByZXR1cm4gbV9waXhlbHMtPmltYWdlKCk7IH0KIAogICAgICAgICBib29sIGhhc0FscGhhKCkg
Y29uc3Q7CiAgICAgICAgIGNvbnN0IEludFJlY3QmIG9yaWdpbmFsRnJhbWVSZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9vcmlnaW5hbEZyYW1lUmVjdDsgfQpAQCAtMTE5LDEwMSArMTA5LDQ0IEBAIHVz
aW5nIENvbG9yUHJvZmlsZSA9IFZlY3RvcjxjaGFyPjsKIAogICAgICAgICBpbmxpbmUgdm9pZCBz
ZXRSR0JBKGludCB4LCBpbnQgeSwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwg
dW5zaWduZWQgYSkKICAgICAgICAgewotICAgICAgICAgICAgc2V0UkdCQShnZXRBZGRyKHgsIHkp
LCByLCBnLCBiLCBhKTsKKyAgICAgICAgICAgIG1fcGl4ZWxzLT5zZXRSR0JBKHgsIHksIHIsIGcs
IGIsIGEpOwogICAgICAgICB9CiAKLSAgICAgICAgaW5saW5lIFBpeGVsRGF0YSogZ2V0QWRkcihp
bnQgeCwgaW50IHkpCisgICAgICAgIGlubGluZSBSR0JBMzIqIGdldEFkZHIoaW50IHgsIGludCB5
KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9ieXRlcyArICh5ICogd2lkdGgoKSkg
KyB4OworICAgICAgICAgICAgcmV0dXJuIG1fcGl4ZWxzLT5hdCh4LCB5KTsKICAgICAgICAgfQog
CiAgICAgICAgIGlubGluZSBib29sIGhhc1BpeGVsRGF0YSgpIGNvbnN0CiAgICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBtX2J5dGVzOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVXNlIGZp
eCBwb2ludCBtdWx0aXBsaWVyIGluc3RlYWQgb2YgaW50ZWdlciBkaXZpc2lvbiBvciBmbG9hdGlu
ZyBwb2ludCBtYXRoLgotICAgICAgICAvLyBUaGlzIG11bHRpcGxlciBwcm9kdWNlcyBleGFjdGx5
IHRoZSBzYW1lIHJlc3VsdCBmb3IgYWxsIHZhbHVlcyBpbiByYW5nZSAwIC0gMjU1LgotICAgICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZml4UG9pbnRTaGlmdCA9IDI0OwotICAgICAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgZml4UG9pbnRNdWx0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDEu
MCAvIDI1NS4wICogKDEgPDwgZml4UG9pbnRTaGlmdCkpICsgMTsKLSAgICAgICAgLy8gTXVsdGlw
bGllcyB1bnNpZ25lZCB2YWx1ZSBieSBmaXhwb2ludCB2YWx1ZSBhbmQgY29udmVydHMgYmFjayB0
byB1bnNpZ25lZC4KLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZpeFBvaW50VW5zaWduZWRNdWx0
aXBseSh1bnNpZ25lZCBmaXhlZCwgdW5zaWduZWQgdikKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuICAoZml4ZWQgKiB2KSA+PiBmaXhQb2ludFNoaWZ0OworICAgICAgICAgICAgcmV0dXJu
IG1fcGl4ZWxzLT5nZXQoKTsKICAgICAgICAgfQogCi0gICAgICAgIGlubGluZSB2b2lkIHNldFJH
QkEoUGl4ZWxEYXRhKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1
bnNpZ25lZCBhKQorICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKFJHQkEzMiogZGVzdCwgdW5z
aWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKICAgICAgICAgewot
ICAgICAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAmJiBhIDwgMjU1KSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFhKSB7Ci0gICAgICAgICAgICAgICAgICAgICpkZXN0ID0gMDsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGFscGhhTXVsdCA9IGEgKiBmaXhQb2ludE11bHQ7Ci0gICAgICAgICAgICAg
ICAgciA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShyLCBhbHBoYU11bHQpOwotICAgICAgICAg
ICAgICAgIGcgPSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkoZywgYWxwaGFNdWx0KTsKLSAgICAg
ICAgICAgICAgICBiID0gZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KGIsIGFscGhhTXVsdCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAqZGVzdCA9IChhIDw8IDI0IHwgciA8PCAxNiB8IGcg
PDwgOCB8IGIpOworICAgICAgICAgICAgbV9waXhlbHMtPnNldFJHQkEoZGVzdCwgciwgZywgYiwg
YSk7CiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShBUE5HKQotICAgICAgICBzdGF0aWMgaW5saW5l
IHVuc2lnbmVkIGRpdmlkZTI1NSh1bnNpZ25lZCBhKQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gKGEgKyAoYSA+PiA4KSArIDEpID4+IDg7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmxp
bmUgdm9pZCBvdmVyUkdCQShQaXhlbERhdGEqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcs
IHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAgICAgIGlubGluZSB2b2lkIG92ZXJSR0JBKFJH
QkEzMiogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQg
YSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKCFhKQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICAgICAgaWYgKGEgPCAyNTUpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBhRGVzdCA9ICgoKmRlc3QpID4+IDI0KSAmIDI1NTsKLSAgICAgICAgICAgICAgICBpZiAoYURl
c3QpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgckRlc3QgPSAoKCpkZXN0KSA+PiAx
NikgJiAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGdEZXN0ID0gKCgqZGVzdCkg
Pj4gOCkgJiAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJEZXN0ID0gKCpkZXN0
KSAmIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYUF1eCA9IDI1NSAtIGE7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICByRGVzdCA9IGRpdmlkZTI1NShyRGVzdCAqIGFEZXN0KTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGdEZXN0ID0gZGl2aWRlMjU1KGdEZXN0ICogYURlc3QpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYkRlc3QgPSBkaXZpZGUyNTUoYkRlc3QgKiBhRGVzdCk7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgciA9IGRpdmlkZTI1NShyICog
YSArIHJEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSBkaXZpZGUyNTUoZyAq
IGEgKyBnRGVzdCAqIGFBdXgpOwotICAgICAgICAgICAgICAgICAgICBiID0gZGl2aWRlMjU1KGIg
KiBhICsgYkRlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAgICAgICAgYSArPSBkaXZpZGUyNTUo
YURlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxw
aGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAociAqIDI1NSArIGEgLSAxKSAvIGE7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBnID0gKGcgKiAyNTUgKyBhIC0gMSkgLyBhOwotICAg
ICAgICAgICAgICAgICAgICAgICAgYiA9IChiICogMjU1ICsgYSAtIDEpIC8gYTsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9wcmVtdWx0aXBseUFs
cGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBkaXZpZGUyNTUociAqIGEpOwotICAgICAg
ICAgICAgICAgICAgICBnID0gZGl2aWRlMjU1KGcgKiBhKTsKLSAgICAgICAgICAgICAgICAgICAg
YiA9IGRpdmlkZTI1NShiICogYSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgKmRlc3QgPSAoYSA8PCAyNCB8IHIgPDwgMTYgfCBnIDw8IDggfCBiKTsKKyAg
ICAgICAgICAgIG1fcGl4ZWxzLT5vdmVyUkdCQShkZXN0LCByLCBnLCBiLCBhKTsKICAgICAgICAg
fQogI2VuZGlmCiAKICAgICBwcml2YXRlOgogICAgICAgICBpbnQgd2lkdGgoKSBjb25zdAogICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9zaXplLndpZHRoKCk7CisgICAgICAgICAgICBy
ZXR1cm4gbV9waXhlbHMtPndpZHRoKCk7CiAgICAgICAgIH0KIAogICAgICAgICBpbnQgaGVpZ2h0
KCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsK
KyAgICAgICAgICAgIHJldHVybiBtX3BpeGVscy0+aGVpZ2h0KCk7CiAgICAgICAgIH0KIAotICAg
ICAgICBWZWN0b3I8UGl4ZWxEYXRhPiBtX2JhY2tpbmdTdG9yZTsKLSAgICAgICAgUGl4ZWxEYXRh
KiBtX2J5dGVzOyAvLyBUaGUgbWVtb3J5IGlzIGJhY2tlZCBieSBtX2JhY2tpbmdTdG9yZS4KLSAg
ICAgICAgSW50U2l6ZSBtX3NpemU7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxCaXRtYXBQaXhl
bHM+IG1fcGl4ZWxzOworCiAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIG1fY29sb3JQcm9m
aWxlIGFueW1vcmU/CiAgICAgICAgIENvbG9yUHJvZmlsZSBtX2NvbG9yUHJvZmlsZTsKICAgICAg
ICAgYm9vbCBtX2hhc0FscGhhOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvY2Fpcm8vQml0bWFwUGl4ZWxzQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vQml0bWFwUGl4ZWxzQ2Fpcm8uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjNmYzYyYTM3ZDgxNDVjZGQwN2ExNTRlZDhmNzQxMWRlY2E0NmYwZjEKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWly
by9CaXRtYXBQaXhlbHNDYWlyby5jcHAKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkJpdG1hcFBpeGVscy5oIgorCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBQaXhlbHM6OmltYWdlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2Rh
dGEoCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGNvbnN0X2Nhc3Q8
UGl4ZWxEYXRhKj4obV9waXhlbHMpKSwKKyAgICAgICAgQ0FJUk9fRk9STUFUX0FSR0IzMiwgd2lk
dGgoKSwgaGVpZ2h0KCksIHdpZHRoKCkgKiBzaXplb2YoUkdCQTMyKSkpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNDEyOTVmODU3MzU4ZmJiZjM1YzFiMDUyNWU4ZDZj
YzM1MjBmNTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVy
Q2Fpcm8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkltYWdlRGVjb2Rlci5oIgotCi0jaW5jbHVkZSA8Y2Fpcm8uaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1OYXRpdmVJbWFnZVB0ciBJbWFnZUZyYW1lOjphc05ld05hdGl2ZUltYWdl
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVh
dGVfZm9yX2RhdGEoCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGNv
bnN0X2Nhc3Q8UGl4ZWxEYXRhKj4obV9ieXRlcykpLAotICAgICAgICBDQUlST19GT1JNQVRfQVJH
QjMyLCB3aWR0aCgpLCBoZWlnaHQoKSwgd2lkdGgoKSAqIHNpemVvZihQaXhlbERhdGEpKSk7Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1Nv
dXJjZU1hYy5tbQppbmRleCAyMTZjZDA5M2YyNjQ2N2NiYTg4YTQzZjY5M2FiZjRjZjUxZGQxYTRk
Li5kMTE0NTRiMDVlZjg4OTkzYTYyODkzODk2YmMwYzExNzI4YzVlZDUwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9T
b3VyY2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFj
L01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgTW9j
a1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6OnVwZGF0ZVBsYXRmb3JtTGF5ZXIoKSBjb25zdAogICAg
ICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgbV9wcmV2aWV3
SW1hZ2UgPSBpbWFnZS0+Z2V0Q0dJbWFnZVJlZigpOworICAgICAgICBtX3ByZXZpZXdJbWFnZSA9
IGltYWdlLT5uYXRpdmVJbWFnZSgpOwogICAgICAgICBpZiAoIW1fcHJldmlld0ltYWdlKQogICAg
ICAgICAgICAgYnJlYWs7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9EcmFnSW1hZ2VDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0lt
YWdlQ0dXaW4uY3BwCmluZGV4IDM2Y2Q2NTE2ZTgwZjE3NDhiZmVhYjc3YTkzMDI3MWMxMjFkZTgw
MTkuLjRiNGUzNzc5ZTk2Zjc4YzY1NDBhNTNjNDQ3OGMzYmZkOTM1ZjUzZTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcApAQCAtMTM2LDkgKzEz
Niw5IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW1hZ2UqIGltZywg
SW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKQogICAgIENHQ29udGV4dFNjYWxlQ1RNKGRyYXdD
b250ZXh0LCAxLCAtMSk7CiAgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yKGRyYXdDb250ZXh0LCB3
aGl0ZSk7CiAgICAgQ0dDb250ZXh0RmlsbFJlY3QoZHJhd0NvbnRleHQsIHJlY3QpOwotICAgIGlm
IChhdXRvIHNyY0ltYWdlID0gaW1nLT5nZXRDR0ltYWdlUmVmKCkpIHsKKyAgICBpZiAoYXV0byBz
cmNJbWFnZSA9IGltZy0+bmF0aXZlSW1hZ2UoKSkgewogICAgICAgICBDR0NvbnRleHRTZXRCbGVu
ZE1vZGUoZHJhd0NvbnRleHQsIGtDR0JsZW5kTW9kZU5vcm1hbCk7Ci0gICAgICAgIENHQ29udGV4
dERyYXdJbWFnZShkcmF3Q29udGV4dCwgcmVjdCwgc3JjSW1hZ2UpOworICAgICAgICBDR0NvbnRl
eHREcmF3SW1hZ2UoZHJhd0NvbnRleHQsIHJlY3QsIHNyY0ltYWdlLmdldCgpKTsKICAgICB9CiAg
ICAgQ0dDb250ZXh0UmVsZWFzZShkcmF3Q29udGV4dCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNh
Y2hlLm1tCmluZGV4IGI2NTlkNmRiZjlhZDY5OTljM2FjOTYyZGU5NTE1NzgwOTdlMWYzYjEuLjdj
NWVkMjEwZGRiMmEzMmE3NjY2NzRjMTIwZDk5NGMyZmE0N2U3ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvTWlz
Yy9XZWJDYWNoZS5tbQpAQCAtMjA0LDcgKzIwNCw3IEBAICsgKENHSW1hZ2VSZWYpaW1hZ2VGb3JV
Ukw6KE5TVVJMICopdXJsCiAgICAgV2ViQ29yZTo6Q2FjaGVkSW1hZ2UmIGNhY2hlZEltYWdlID0g
ZG93bmNhc3Q8V2ViQ29yZTo6Q2FjaGVkSW1hZ2U+KCpjYWNoZWRSZXNvdXJjZSk7CiAgICAgaWYg
KCFjYWNoZWRJbWFnZS5oYXNJbWFnZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBy
ZXR1cm4gY2FjaGVkSW1hZ2UuaW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpOworICAgIHJldHVybiBj
YWNoZWRJbWFnZS5pbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmdldCgpOwogfQogCiAjZW5kaWYgLy8g
UExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3BwCmluZGV4IDBmNmRlN2ExNDZhNjExYTUyYWExZTUzOTAx
OWZhNmMxYzQ2NzI1YWUuLjMwNTYzMzZjYjY2ZmU0YWYxOGJkYzUyOWFjYTJmOGZjODgxZGZlNTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9jZy9XS0ljb25EYXRh
YmFzZUNHLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29u
RGF0YWJhc2VDRy5jcHAKQEAgLTM3LDEyICszNywyMyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIENHSW1hZ2VSZWYgV0tJY29uRGF0YWJhc2VUcnlHZXRDR0ltYWdlRm9yVVJMKFdLSWNvbkRh
dGFiYXNlUmVmIGljb25EYXRhYmFzZVJlZiwgV0tVUkxSZWYgdXJsUmVmLCBXS1NpemUgc2l6ZSkK
IHsKICAgICBJbWFnZSogaW1hZ2UgPSB0b0ltcGwoaWNvbkRhdGFiYXNlUmVmKS0+aW1hZ2VGb3JQ
YWdlVVJMKHRvV1RGU3RyaW5nKHVybFJlZikpOwotICAgIHJldHVybiBpbWFnZSA/IGltYWdlLT5n
ZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUoSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHNpemUud2lk
dGgpLCBzdGF0aWNfY2FzdDxpbnQ+KHNpemUuaGVpZ2h0KSkpIDogMDsKKyAgICByZXR1cm4gaW1h
Z2UgPyBpbWFnZS0+bmF0aXZlSW1hZ2VPZlNpemUoSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHNp
emUud2lkdGgpLCBzdGF0aWNfY2FzdDxpbnQ+KHNpemUuaGVpZ2h0KSkpLmdldCgpIDogbnVsbHB0
cjsKIH0KIAogQ0ZBcnJheVJlZiBXS0ljb25EYXRhYmFzZVRyeUNvcHlDR0ltYWdlQXJyYXlGb3JV
UkwoV0tJY29uRGF0YWJhc2VSZWYgaWNvbkRhdGFiYXNlUmVmLCBXS1VSTFJlZiB1cmxSZWYpCiB7
CiAgICAgSW1hZ2UqIGltYWdlID0gdG9JbXBsKGljb25EYXRhYmFzZVJlZiktPmltYWdlRm9yUGFn
ZVVSTCh0b1dURlN0cmluZyh1cmxSZWYpKTsKLSAgICByZXR1cm4gaW1hZ2UgPyBpbWFnZS0+Z2V0
Q0dJbWFnZUFycmF5KCkubGVha1JlZigpIDogMDsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gbmF0aXZlSW1hZ2VzID0gaW1hZ2UtPmZyYW1lc05h
dGl2ZUltYWdlcygpOworICAgIGlmICghbmF0aXZlSW1hZ2VzLnNpemUoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgCisgICAgQ0ZNdXRhYmxlQXJyYXlSZWYgYXJyYXkgPSBDRkFycmF5
Q3JlYXRlTXV0YWJsZShudWxscHRyLCBuYXRpdmVJbWFnZXMuc2l6ZSgpLCAma0NGVHlwZUFycmF5
Q2FsbEJhY2tzKTsKKyAgICBmb3IgKGF1dG8gbmF0aXZlSW1hZ2UgOiBuYXRpdmVJbWFnZXMpCisg
ICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheSwgbmF0aXZlSW1hZ2UuZ2V0KCkpOworICAg
IAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxDRkFycmF5UmVmPihDRlJldGFpbihhcnJheSkpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZp
ZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50
Vmlld0ludGVyYWN0aW9uLm1tCmluZGV4IGRjNzk4M2FiOTg4YzJkMDRhMTczMGVlMTM3MzAzYzI0
NDE2MTUxOTcuLmZiYzNlNWQ0YzU0MzAxY2U5MjE3YTQwZjhkMDhiZDU4MzUyNzg3YzYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0
aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0lu
dGVyYWN0aW9uLm1tCkBAIC00MDcxLDcgKzQwNzEsNyBAQCAtIChVSUltYWdlICopX3ByZXNlbnRh
dGlvblNuYXBzaG90Rm9yUHJldmlld0l0ZW1Db250cm9sbGVyOihVSVByZXZpZXdJdGVtQ29udHJv
bAogewogICAgIGlmICghX3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlua0luZGljYXRvci5jb250ZW50
SW1hZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBbW1tVSUltYWdlIGFs
bG9jXSBpbml0V2l0aENHSW1hZ2U6X3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlua0luZGljYXRvci5j
b250ZW50SW1hZ2UtPmdldENHSW1hZ2VSZWYoKV0gYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBb
W1tVSUltYWdlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6X3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlu
a0luZGljYXRvci5jb250ZW50SW1hZ2UtPm5hdGl2ZUltYWdlKCkuZ2V0KCldIGF1dG9yZWxlYXNl
XTsKIH0KIAogLSAoTlNBcnJheSAqKV9wcmVzZW50YXRpb25SZWN0c0ZvclByZXZpZXdJdGVtQ29u
dHJvbGxlcjooVUlQcmV2aWV3SXRlbUNvbnRyb2xsZXIgKiljb250cm9sbGVyCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggOWEzM2Y3
Y2M3ZGM3YzdkNzJmOWRhNzQzMDk4YjdkYmNhODI0MDljZi4uYTUzMjUxMDY3OGI5ZjUzNTE0NThh
MzhhOWY0MjMzNzQ3ZDAzNWY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtMTcyNyw2OSArMTcyNyw2IEBAIHZvaWQgUGx1Z2lu
Vmlldzo6d2luZG93ZWRQbHVnaW5WaXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wgaXNWaXNpYmxlLCB1
aW50NjRfdCB3aW5kCiB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKENPQ09BKQotc3RhdGljIGJv
b2wgaXNBbG1vc3RTb2xpZENvbG9yKEJpdG1hcEltYWdlKiBiaXRtYXApCi17Ci0gICAgQ0dJbWFn
ZVJlZiBpbWFnZSA9IGJpdG1hcC0+Z2V0Q0dJbWFnZVJlZigpOwotICAgIEFTU0VSVChDR0ltYWdl
R2V0Qml0c1BlckNvbXBvbmVudChpbWFnZSkgPT0gOCk7Ci0KLSAgICBDR0JpdG1hcEluZm8gaW1h
Z2VJbmZvID0gQ0dJbWFnZUdldEJpdG1hcEluZm8oaW1hZ2UpOwotICAgIGlmICghKGltYWdlSW5m
byAmIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlKSB8fCAoaW1hZ2VJbmZvICYga0NHQml0bWFw
QWxwaGFJbmZvTWFzaykgIT0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCkgewotICAg
ICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYmVpbmcgYWJsZSB0byBoYW5kbGUgb3RoZXIgcGl4ZWwg
Zm9ybWF0cy4KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBzaXplX3Qgd2lkdGggPSBDR0ltYWdlR2V0V2lkdGgoaW1hZ2Up
OwotICAgIHNpemVfdCBoZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKTsKLSAgICBzaXpl
X3QgYnl0ZXNQZXJSb3cgPSBDR0ltYWdlR2V0Qnl0ZXNQZXJSb3coaW1hZ2UpOwotCi0gICAgUmV0
YWluUHRyPENGRGF0YVJlZj4gcHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ29weURh
dGEoQ0dJbWFnZUdldERhdGFQcm92aWRlcihpbWFnZSkpKTsKLSAgICBjb25zdCBVSW50OCogZGF0
YSA9IENGRGF0YUdldEJ5dGVQdHIocHJvdmlkZXIuZ2V0KCkpOwotCi0gICAgLy8gT3ZlcmxheSBh
IGdyaWQgb2Ygc2FtcGxpbmcgZG90cyBvbiB0b3Agb2YgYSBncmF5c2NhbGUgdmVyc2lvbiBvZiB0
aGUgaW1hZ2UuCi0gICAgLy8gRm9yIHRoZSBpbnRlcmlvciBwb2ludHMsIGNhbGN1bGF0ZSB0aGUg
ZGlmZmVyZW5jZSBpbiBsdW1pbmFuY2UgYW1vbmcgdGhlIHNhbXBsZSBwb2ludAotICAgIC8vIGFu
ZCBpdHMgc3Vycm91bmRzIHBvaW50cywgc2NhbGVkIGJ5IHRyYW5zcGFyZW5jeS4KLSAgICBjb25z
dCB1bnNpZ25lZCBzYW1wbGVSb3dzID0gNzsKLSAgICBjb25zdCB1bnNpZ25lZCBzYW1wbGVDb2xz
ID0gNzsKLSAgICAvLyBGSVhNRTogUmVmaW5lIHRoZSBwcm9wZXIgbnVtYmVyIG9mIHNhbXBsZXMs
IGFuZCBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgYXNwZWN0IHJhdGlvcy4KLSAgICBpZiAod2lkdGgg
PCBzYW1wbGVDb2xzIHx8IGhlaWdodCA8IHNhbXBsZVJvd3MpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBsYXN0IHJvdy9jb2x1bW4gbGFuZCBvbiB0aGUg
aW1hZ2UgcGVyaW1ldGVyLgotICAgIGNvbnN0IGZsb2F0IHN0cmlkZVdpZHRoID0gc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHdpZHRoIC0gMSkgLyAoc2FtcGxlQ29scyAtIDEpOwotICAgIGNvbnN0IGZsb2F0
IHN0cmlkZUhlaWdodCA9IHN0YXRpY19jYXN0PGZsb2F0PihoZWlnaHQgLSAxKSAvIChzYW1wbGVS
b3dzIC0gMSk7Ci0gICAgZmxvYXQgc2FtcGxlc1tzYW1wbGVSb3dzXVtzYW1wbGVDb2xzXTsKLQot
ICAgIC8vIEZpbmQgdGhlIGx1bWluYW5jZSBvZiB0aGUgc2FtcGxlIHBvaW50cy4KLSAgICBmbG9h
dCB5ID0gMDsKLSAgICBjb25zdCBVSW50OCogcm93ID0gZGF0YTsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2FtcGxlUm93czsgKytpKSB7Ci0gICAgICAgIGZsb2F0IHggPSAwOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc2FtcGxlQ29sczsgKytqKSB7Ci0gICAgICAg
ICAgICBjb25zdCBVSW50OCogcDAgPSByb3cgKyAoc3RhdGljX2Nhc3Q8aW50Pih4ICsgLjUpKSAq
IDQ7Ci0gICAgICAgICAgICAvLyBSIEcgQiBBCi0gICAgICAgICAgICBzYW1wbGVzW2ldW2pdID0g
KDAuMjEyNSAqICpwMCArIDAuNzE1NCAqICoocDArMSkgKyAwLjA3MjEgKiAqKHAwKzIpKSAqICoo
cDArMykgLyAyNTU7Ci0gICAgICAgICAgICB4ICs9IHN0cmlkZVdpZHRoOwotICAgICAgICB9Ci0g
ICAgICAgIHkgKz0gc3RyaWRlSGVpZ2h0OwotICAgICAgICByb3cgPSBkYXRhICsgKHN0YXRpY19j
YXN0PGludD4oeSArIC41KSkgKiBieXRlc1BlclJvdzsKLSAgICB9Ci0KLSAgICAvLyBEZXRlcm1p
bmUgdGhlIGltYWdlIHNjb3JlLgotICAgIGZsb2F0IGFjY3VtU2NvcmUgPSAwOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDE7IGkgPCBzYW1wbGVSb3dzIC0gMTsgKytpKSB7Ci0gICAgICAgIGZvciAo
dW5zaWduZWQgaiA9IDE7IGogPCBzYW1wbGVDb2xzIC0gMTsgKytqKSB7Ci0gICAgICAgICAgICBm
bG9hdCBkaWZmID0gc2FtcGxlc1tpIC0gMV1bal0gKyBzYW1wbGVzW2kgKyAxXVtqXSArIHNhbXBs
ZXNbaV1baiAtIDFdICsgc2FtcGxlc1tpXVtqICsgMV0gLSA0ICogc2FtcGxlc1tpXVtqXTsKLSAg
ICAgICAgICAgIGFjY3VtU2NvcmUgKz0gZGlmZiAqIGRpZmY7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICAvLyBUaGUgc2NvcmUgZm9yIGEgZ2l2ZW4gc2FtcGxlIGNhbiBiZSB3aXRoaW4gdGhlIHJh
bmdlIG9mIDAgYW5kIDI1NV4yLgotICAgIHJldHVybiBhY2N1bVNjb3JlIDwgMjUwMCAqIChzYW1w
bGVSb3dzIC0gMikgKiAoc2FtcGxlQ29scyAtIDIpOwotfQotI2VuZGlmCi0KIHZvaWQgUGx1Z2lu
Vmlldzo6cGx1Z2luU25hcHNob3RUaW1lckZpcmVkKCkKIHsKICNpZiBFTkFCTEUoUFJJTUFSWV9T
TkFQU0hPVFRFRF9QTFVHSU5fSEVVUklTVElDKQpAQCAtMTgwOSw3ICsxNzQ2LDcgQEAgdm9pZCBQ
bHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRpbWVyRmlyZWQoKQogCiAgICAgICAgIGlmIChzbmFw
c2hvdEltYWdlKSB7CiAjaWYgRU5BQkxFKFBSSU1BUllfU05BUFNIT1RURURfUExVR0lOX0hFVVJJ
U1RJQykKLSAgICAgICAgICAgIGJvb2wgc25hcHNob3RJc0FsbW9zdFNvbGlkQ29sb3IgPSBpc0Fs
bW9zdFNvbGlkQ29sb3IoZG93bmNhc3Q8Qml0bWFwSW1hZ2U+KHNuYXBzaG90SW1hZ2UuZ2V0KCkp
KTsKKyAgICAgICAgICAgIGJvb2wgc25hcHNob3RJc0FsbW9zdFNvbGlkQ29sb3IgPSBzdGF0aWNf
cG9pbnRlcl9jYXN0PEJpdG1hcEltYWdlPihzbmFwc2hvdEltYWdlKS0+aXNBbG1vc3RTb2xpZENv
bG9yKCk7CiAgICAgICAgICAgICBzbmFwc2hvdEZvdW5kID0gIXNuYXBzaG90SXNBbG1vc3RTb2xp
ZENvbG9yOwogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283437</attachid>
            <date>2016-07-12 12:05:25 -0700</date>
            <delta_ts>2016-07-12 12:33:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159679-20160712120442.patch</filename>
            <type>text/plain</type>
            <size>127827</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzMTAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWM1YmQ5YmQwNmExOWJl
NWNhMDJjNTE3MmQ2ZWYyZWJiZmVjMWMxOS4uNmFlYzQ3MmY4YWVjOGUwNjRkNGYyZmQwODAyYTBm
MWM0NTU4YjI4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxMyBAQAorMjAxNi0wNy0xMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0
IHRoZSBwaXhlbCBkYXRhIG9mIEltYWdlRnJhbWUgdG8gYSBzZXBhcmF0ZSBjbGFzcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5Njc5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgcGl4ZWwg
ZGF0YSBtYW5pcHVsYXRpb24gcGFydCBpbiBJbWFnZUZyYW1lIGludG8gYSBzZXBhcmF0ZSBjbGFz
cworICAgICAgICBhbmQgdGhlbiBtYWtlIGl0IG9wdGlvbmFsIChhbGxvY2F0ZWQgb24gZGVtYW5k
KS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2lu
Q2Fpcm8uY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFBpeGVsczo6Qml0bWFwUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBp
eGVsczo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpoZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFBpeGVsczo6YXQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmNsZWFyUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OnJlcGVhdEZpcnN0Um93KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcFBpeGVsczo6c2V0UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQ
aXhlbHM6Om92ZXJSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6aW5Cb3Vu
ZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Om11bHRpcGx5MjU1KToKKyAgICAgICAgKFdlYkNvcmU6OmRpdmlkZTI1NSk6CisgICAg
ICAgIChXZWJDb3JlOjpkaXZpZGVDZWlsKToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxp
ZWRDaGFubmVsKToKKyAgICAgICAgKFdlYkNvcmU6OnVucHJlbXVsdGlwbGllZENoYW5uZWwpOgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZVByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VVblByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6cGl4ZWxzKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWVEYXRhOjpoYXNQaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y2xlYXJQaXhl
bERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGxQaXhlbERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGxGcmFtZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weUJpdG1hcERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojpjb3B5Um93TlRpbWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0UkdCQSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpnZXRBZGRyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6Omhhc1BpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpvdmVyUkdC
QSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjp3aWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
Y29weVJvd05UaW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpm
aXhQb2ludFVuc2lnbmVkTXVsdGlwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6ZGl2aWRlMjU1KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5j
cHAuCisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmltYWdlKToKKworMjAxNi0wNy0x
MSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAgICAg
IFJlbmFtZSBGcmFtZURhdGEgdG8gSW1hZ2VGcmFtZURhdGEgYW5kIG1vdmUgaXQgdG8gYSBzZXBh
cmF0ZSBmaWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTU0NDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNb3ZlIEltYWdlRnJhbWVEYXRhIHRvIGEgc2VwYXJhdGUgZmlsZSBzbyBpdCBjYW4gYmUgY2Fj
aGVkIGJ5IEltYWdlU291cmNlCisgICAgICAgIGFuZCB3aWxsIHN0aWxsIGJlIGNvbnN1bWVkIGJ5
IEJpdG1hcEltYWdlLiBNYWtlIHRoZSBkYXRhIG1lbWJlcnMgb2YgSW1hZ2VGcmFtZURhdGEKKyAg
ICAgICAgYmUgcHJpdmF0ZSBhbmQgYWRkIGdldHRlcnMgdG8gcmV0dXJuIHRoZWlyIHZhbHVlcy4K
KworICAgICAgICBObyBuZXcgdGVzdHMgLS0gQ29kZSByZWZhY3RvcmluZywgbm8gYmVoYXZpb3Ig
Y2hhbmdlLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Jp
dG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aGF2ZUZyYW1lSW1hZ2VBdEluZGV4
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNz
YXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6ZW5zdXJlRnJhbWVJc0NhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcElt
YWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6ZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6aXNBbG1vc3RTb2xpZENvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRt
YXBJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpGcmFtZURhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp+RnJhbWVEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6dXNlZEZyYW1lQnl0ZXMpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZURhdGFBdEluZGV4KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ltYWdlRnJhbWVEYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lRGF0YTo6SW1hZ2VGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURh
dGE6On5JbWFnZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6
Y2xlYXJTdWJJbWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmNsZWFy
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpzaW5nbGVQaXhlbFNvbGlkQ29s
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmlzQWxtb3N0U29saWRDb2xv
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW1hZ2VGcmFtZURhdGEuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6c3RhdHVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWVEYXRhOjppc0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWVEYXRhOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpm
cmFtZUJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjppbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6b3JpZW50YXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OnN1YnNhbXBsaW5nTGV2ZWwpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZURhdGE6OmR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWVEYXRhOjpoYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6
aGFzSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6Omhhc01ldGFkYXRh
KToKKworMjAxNi0wNi0yNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUs
Y29tPgorCisgICAgICAgIEludHJvZHVjZSBQbGF0Zm9ybUltYWdlIGFuZCBtYWtlIGl0IGlzIGEg
d3JhcHBlciBmb3IgTmF0aXZlSW1hZ2VQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1ODY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyByZWZhY3RvcmluZyBp
cyB0byBtb3ZlIHRoZSBwbGF0Zm9ybSBpbWFnZSBkZXBlbmRlbnQKKyAgICAgICAgY29kZSBmcm9t
IEJpdG1hcEltYWdlIHRvIFBsYXRmb3JtSW1hZ2UuIFBsYXRmb3JtSW1hZ2UgaXMgcmVzcG9uc2li
bGUgb2YgCisgICAgICAgIGRyYXdpbmcgdGhlIGltYWdlIGFuZCBhbnN3ZXJpbmcgTmF0aXZlSW1h
Z2VQdHIgcXVlc3Rpb25zIHdoZW4gYW4gSW1hZ2VEZWNvZGVyCisgICAgICAgIGlzIG5vdCBhdmFp
bGFibGUuIEFwYXJ0IGZyb20gZHJhd2luZyB0aGUgaW1hZ2UsIHRoZSBxdWVyeSBmdW5jdGlvbnMg
d2lsbCBiZQorICAgICAgICBjYWxsZWQgb25seSB3aGVuIGNvbnN0cnVjdGluZyBhIEZyYW1lRGF0
YSBzbyB3ZSB3aWxsIGtlZXAgZXZlcnl0aGluZyBhcyBhCisgICAgICAgIE5hdGl2ZUltYWdlUHRy
LiBCdXQgd2Ugd2lsbCBjYXN0IHRoZSBOYXRpdmVJbWFnZVB0ciB0byBQbGF0Zm9ybUltYWdlIHdo
ZW4KKyAgICAgICAgYSBwbGF0Zm9ybSBkZXBlbmRlbnQgZnVuY3Rpb24gaXMgbmVlZGVkLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cyAtLSBDb2RlIHJlZmFjdG9yaW5nLCBubyBiZWhhdmlvciBjaGFu
Z2UuCisKKyAgICAgICAgKiBQbGF0Zm9ybUFwcGxlV2luLmNtYWtlOgorICAgICAgICAqIFBsYXRm
b3JtRWZsLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBs
YXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2luQ2Fpcm8uY21ha2U6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRp
bmdzL29iamMvRE9NLm1tOgorICAgICAgICAoLVtET01Ob2RlIGdldFByZXZpZXdTbmFwc2hvdElt
YWdlOmFuZFJlY3RzOl0pOgorICAgICAgICAqIHBhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cu
bW06CisgICAgICAgICgtW1dlYlRleHRJbmRpY2F0b3JWaWV3IGluaXRXaXRoRnJhbWU6dGV4dElu
ZGljYXRvcjptYXJnaW46b2Zmc2V0Ol0pOgorICAgICAgICAoY3JlYXRlQ29udGVudENyb3NzZmFk
ZUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpu
YXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZy
YW1lc05hdGl2ZUltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6c2luZ2xl
UGl4ZWxTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppc0FsbW9z
dFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZURhdGE6OkZyYW1lRGF0YSk6CisgICAgICAgIG1faGFzQWxwaGEgY2FuIGJlIGluaXRp
YWxpemVkIHdpdGggZmFsc2UgYmVjYXVzZSBpdCBpcyBhY2Nlc3NlZCBvbmx5IGluCisgICAgICAg
IEJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleCgpIGFuZCBpdCBpcyBndWFyZGVkIGJ5
IG1faGF2ZU1ldGFkYXRhLgorICAgICAgICBCb3RoIG1faGF2ZU1ldGFkYXRhIGFuZCBtX2hhc0Fs
cGhhIGFyZSBzZXQgaW4gQml0bWFwSW1hZ2UgY29uc3RydWN0b3IKKyAgICAgICAgYW5kIGluIEJp
dG1hcEltYWdlOjpjYWNoZUZyYW1lKCkuCisKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6
fkZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OmNsZWFyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6
Om5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpuYXRpdmVJbWFnZU9mU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZnJhbWVzTmF0aXZlSW1hZ2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlOjpnZXRDR0ltYWdlUmVmKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlOjpnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2U6OmdldENHSW1hZ2VBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtSW1hZ2U6OlBsYXRmb3JtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1JbWFnZTo6aXNOaWwpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6Y2dJ
bWFnZVJlZik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjp1cGRhdGVEaXNwbGF5TW9k
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJv
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0JpdG1hcEltYWdlQ2Fpcm8uY3BwLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6
Y2xlYXJTdWJJbWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6c2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpoYXNBbHBoYSk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6aXNBbG1vc3RTb2xpZENvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1JbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
Qml0bWFwSW1hZ2VDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUGF0dGVybkNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm46OmNyZWF0ZVBsYXRm
b3JtUGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFn
ZUNHLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpjbGVhclN1
YkltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IpOiBNb3ZlZCBmcm9tIFBsdWdpblZp
ZXcuY3BwIHNpbmNlIFBsYXRmb3JtSW1hZ2UgaXMgd2hhdCB0aGlzIGZ1bmN0aW9uIGJlbG9uZ3Mg
dG8uCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKTog
UmV0dXJucyB0aGUgc3ViLXNhbXBsaW5nIHNjYWxlIGJhc2VkIG9uIHRoZSBjb250ZXh0IHNjYWxp
bmcuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpkcmF3KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tOgor
ICAgICAgICAoVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYTo6dXBkYXRlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW06CisgICAgICAgIChX
ZWJDb3JlOjpNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6dXBkYXRlUGxhdGZvcm1MYXllcik6
CisgICAgICAgICogcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZSk6CisKIDIwMTYtMDctMTEgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBTcGVlY2ggU3ludGhlc2lzOiBnZXR0aW5n
IGxpc3Qgb2Ygdm9pY2VzIG5vIGxvbmdlciB3b3JrcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IGMxYmMw
YmJkZTM2MTI1YzQ2MmJmNDgxZGRhZDVkZDJmODI3ZDUyMzkuLjE4ZDFlYmViZWU5MjBiMmYyOWVm
MzI4NzdkZWQyZTFlY2ZmOTdkNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAor
MjAxNi0wNy0xMSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgor
CisgICAgICAgIEludHJvZHVjZSBQbGF0Zm9ybUltYWdlIGFuZCBtYWtlIGl0IGlzIGEgd3JhcHBl
ciBmb3IgTmF0aXZlSW1hZ2VQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1ODY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogTWlzYy9XZWJDYWNoZS5tbToKKyAgICAgICAgKCtbV2ViQ2FjaGUgaW1h
Z2VGb3JVUkw6XSk6CisKIDIwMTYtMDctMTEgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxl
LmNvbT4KIAogICAgICAgICBBZGQgc3ludGhldGljIGNsaWNrIG9yaWdpbiB0byBXS05hdmlnYXRp
b25BY3Rpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYjQ3ZTJjZWE3OWE4ZGQ3YzUzMzVkMmNkNThlNzk2MTUz
MzVjNTAyYy4uZjFmMTY3MjU4NGMwZWU4MTg1OGE3ZTk2NTUzYWNkOWNkMGFjNmZlZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE2LTA3LTExICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
Ym91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgSW50cm9kdWNlIFBsYXRmb3JtSW1hZ2Ug
YW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVyIGZvciBOYXRpdmVJbWFnZVB0cgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvY2cv
V0tJY29uRGF0YWJhc2VDRy5jcHA6CisgICAgICAgIChXS0ljb25EYXRhYmFzZVRyeUdldENHSW1h
Z2VGb3JVUkwpOgorICAgICAgICAoV0tJY29uRGF0YWJhc2VUcnlDb3B5Q0dJbWFnZUFycmF5Rm9y
VVJMKToKKyAgICAgICAgSXQgd2FzIHRoZSBvbmx5IHBsYWNlIGluIHRoZSBjb2RlIHdoaWNoIHVz
ZXMgQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VBcnJheSgpLgorICAgICAgICBDYWxsIEJpdG1hcElt
YWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMoKSBpbnN0ZWFkIGFuZCBmb3JtIHRoZSByZXR1cm5lZAor
ICAgICAgICBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGJ1aWxkIHRoZSBDRkFycmF5UmVmLgorICAg
ICAgICAKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcHJlc2VudGF0aW9uU25hcHNob3RGb3JQcmV2
aWV3SXRlbUNvbnRyb2xsZXI6XSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRp
bWVyRmlyZWQpOgorICAgICAgICAKKyAgICAgICAgKFdlYktpdDo6aXNBbG1vc3RTb2xpZENvbG9y
KTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSB0aGUgc3RhdGljIGZ1bmN0aW9uIGlzQWxtb3N0U29s
aWRDb2xvciB0byBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKS4KKwogMjAxNi0w
Ny0xMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFtXSzJdW2lP
U10gSW50ZXJtaXR0ZW50IGNyYXNoIGluIFtVSUFwcGxpY2F0aW9uIGJlZ2luQmFja2dyb3VuZFRh
c2tXaXRoTmFtZV0gZXhwaXJhdGlvbiBoYW5kbGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGU3
OGIwNDJiMTA0MDFlMWY0ZWUzYTJhYjFhMDUyYzIxOGMzYTExZTMuLjIyNmVjOWI4NGU3MjJmZmYz
ZTJmMDRkY2U3ZGI3MGUzZGQ0YjgzYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMjI2LDYg
KzIyMjYsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSVNP
VlRUQ3VlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJh
bWVEYXRhLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT3JpZW50YXRpb24uY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UG9pbnQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxl
V2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCA1
ZmY5OTFmZjdkYTMwOGJiOTE4MmVjZTNiZjEyMTczMGE1NDhkMjg3Li5iYWUzMWVhZjg2ZTdmY2E5
MDU4MjUwOTJhYTM4YTc4YzExZTQyMjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4u
Y21ha2UKQEAgLTU1LDcgKzU1LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XS0NBQ0ZWaWV3TGF5ZXJUcmVlSG9zdC5jcHAKIAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFBv
aW50Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwCkBAIC03
NSw2ICs3NCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UGF0aENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtl
CmluZGV4IDUxNDUwNGU2ZWMyNWFhNWU0M2I5OTM5OGQ1ZTM1Y2VlZWE3NjZhYTQuLjY0YWUxNzEw
ODlkY2JmMGNkNDViNzBhOWI4ZjcwZWZhOWZmZGVkYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNt
YWtlCkBAIC0xMjIsNyArMTIyLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNwcAogCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1wbC5jcHAKLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ZvbnRDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJm
YnV6ek5HLmNwcApAQCAtMTM0LDYgKzEzMyw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNF
UwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QYXR0ZXJuQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Bs
YXRmb3JtUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNh
aXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RyYW5zZm9ybWF0aW9uTWF0cml4
Q2Fpcm8uY3BwCkBAIC0xNzksOSArMTc5LDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MveDExL1BsYXRmb3JtRGlzcGxheVgxMS5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy94MTEvWFVuaXF1ZVJlc291cmNlLmNwcAogCi0gICAgcGxhdGZvcm0v
aW1hZ2UtZW5jb2RlcnMvSlBFR0ltYWdlRW5jb2Rlci5jcHAKKyAgICBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHAKIAotICAgIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2ltYWdl
LWVuY29kZXJzL0pQRUdJbWFnZUVuY29kZXIuY3BwCiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2Vm
bC9OZXR3b3JrU3RhdGVOb3RpZmllckVmbC5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpp
bmRleCA2NDVhZGQxY2UzODg4OGIwNGQ0YTJkODlhZGEwYTdjNmRlMTk5ODZiLi5kMzFmNTcwNmE2
OTU5YjIzMWI1YmZiMjJmMDdkMTg0M2FlODYxYTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFr
ZQpAQCAtMTAxLDcgKzEwMSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1wbC5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9YMTEu
Y3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9GbG9hdFJlY3RDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9Gb250Q2Fpcm8uY3BwCkBAIC0xMTUsNiArMTE0LDcgQEAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vUGxhdGZvcm1QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vUmVmUHRyQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3Jt
YXRpb25NYXRyaXhDYWlyby5jcHAKQEAgLTE0OSw3ICsxNDksNyBAQCBsaXN0KEFQUEVORCBXZWJD
b3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAogICAg
IHBsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuY3BwCiAKLSAgICBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHAKIAogICAgIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL2d0ay9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZUd0ay5jcHAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bU1hYy5jbWFrZQppbmRleCA5ZjZmNDk2YjZjYzRlZjZlNGI3NGQ4NGFjMGFhOWRlYTU1YTAyMzdi
Li40ZGRlZDMwODhmNGYzOTZmZWY0NDRlN2VlNjVjNjQxMDY1OGY1ODQxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybU1hYy5jbWFrZQpAQCAtMzk3LDcgKzM5Nyw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1dlYlN5c3RlbUJhY2tkcm9wTGF5
ZXIubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9XZWJUaWxlZEJhY2tpbmdMYXll
ci5tbQogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0Zsb2F0UG9pbnRDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5j
cHAKQEAgLTQxNyw2ICs0MTYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL1BhdGhDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cu
Y3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFnZUNHLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1N1YmltYWdlQ2FjaGVXaXRoVGltZXIuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtV2luQ2Fpcm8uY21ha2UKaW5kZXggMmM1NTNiMDU1MWRhZDY5YWExOTlkOTYwZjU1MjM0
M2Q5MjBmMDdiMy4uMzQyYWE5MjczMmZkOGY5MmU4NWNmYTYyNmQ1NTU3MGVmNjZiNmE2OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCkBAIC0yMSw3ICsyMSw2IEBAIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCiAKLSAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0Zsb2F0UmVjdENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRD
YWlyby5jcHAKQEAgLTM0LDYgKzMzLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
bGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZv
cm1QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8u
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3JtYXRpb25NYXRyaXhDYWly
by5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAK
IAotICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNw
cAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNw
cAogCiAgICAgcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb25TdHViLmNwcAog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggYzExYmM0N2U1Y2FkNjMwYTM2NTdjZGUxYWQ5ZjdiNzZhMGE1NWM2Ni4uZmYyYTQ5OGJh
OTZiODFkYTAzZjgxYTMwMWE4NWJlMzc0ZDBlYzY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQ4NCw3ICsxNDg0LDcgQEAK
IAkJMzc1Q0QyMzIxMTlENDNDODAwQTJBODU5IC8qIEh5cGhlbmF0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzVDRDIzMTExOUQ0M0M4MDBBMkE4
NTkgLyogSHlwaGVuYXRpb24uaCAqLzsgfTsKIAkJMzc2RENDRTExM0I0Rjk2NjAwMkVCRUZDIC8q
IFRleHRSdW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzc2RENDRTAxM0I0Rjk2NjAwMkVCRUZDIC8qIFRleHRSdW4uY3BwICovOyB9OwogCQkzNzc0
QUJBNTBGQTIxRUI0MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzc0QUJBMzBGQTIxRUI0
MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3
IC8qIEJpdG1hcEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3Bw
ICovOyB9OworCQkzNzdBM0E5MDE1RUZDRTlCMDA1OUY1QzcgLyogUGxhdGZvcm1JbWFnZUNHLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3N0EzQThG
MTVFRkNFOUEwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwICovOyB9OwogCQkzNzkxOUMy
MzBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzkxOUMyMTBCN0QxODg2MDBBNTY5OTgg
LyogUG9zaXRpb25JdGVyYXRvci5jcHAgKi87IH07CiAJCTM3OTE5QzI0MEI3RDE4ODYwMEE1Njk5
OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzNzkxOUMyMjBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTM3OTI5MTdBMTk4
NUVGMzkwMEY0QjY2MSAvKiBDcmVkZW50aWFsQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc5MjkxNzgxOTg1RUYzOTAwRjRCNjYxIC8qIENyZWRl
bnRpYWxCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTIzMjUsMTAgKzIzMjUsMTQgQEAKIAkJNTNFRDNGREYxNjdBODhFNzAwNjc2MkU2IC8q
IEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFRDNGREQxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJu
YWxTZXR0aW5nc0dlbmVyYXRlZC5oICovOyB9OwogCQk1M0VGNzY2QjE2NTMwQTYxMDA0Q0JFNDkg
LyogU2V0dGluZ3NNYWNyb3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzRUY3NjZBMTY1MzBBNjEwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oICov
OyB9OwogCQk1M0VGNzY2QzE2NTMxOTk0MDA0Q0JFNDkgLyogU2V0dGluZ3NNYWNyb3MuaCBpbiBD
b3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzRUY3NjZBMTY1MzBBNjEwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oICovOyB9OworCQk1
NTA0RTRDQjFEMzU1N0IyMDBGRTUwODggLyogQml0bWFwUGl4ZWxzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTA0RTRDQTFEMzU1MzJEMDBGRTUwODgg
LyogQml0bWFwUGl4ZWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTUwQTBCQzkwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzcw
ODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovOyB9OwogCQk1NTBBMEJDQTA4
NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxp
ZmllZE5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1NTVCODdFQzFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU1Qjg3RUExQ0FBRjBB
QjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLzsgfTsKIAkJNTU1Qjg3RUQxQ0FBRjBB
QjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNv
ZGVyQ0cuaCAqLzsgfTsKKwkJNTU3NEYwODcxRDAyNzkwOTAwQjlGMTRDIC8qIFBsYXRmb3JtSW1h
Z2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1NzRG
MDg1MUQwMjc0NDQwMEI5RjE0QyAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTVDQkE2QTExRDFERjJFMTAwNDUxODYw
IC8qIEltYWdlRnJhbWVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU1Q0JBNjlGMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1lRGF0YS5j
cHAgKi87IH07CisJCTU1Q0JBNkEyMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1lRGF0YS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVDQkE2QTAx
RDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTcyQTdGMjExQzZFNTcxOTAwOUM2MTQ5IC8q
IFNpbXVsYXRlZENsaWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NzJBN0YyMDFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCAqLzsg
fTsKIAkJNTcyQTdGMjMxQzZFNUE2NjAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MkE3RjIyMUM2RTVB
NjYwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5jcHAgKi87IH07CiAJCTU3RUY1RTYwMUQyMEM4
MzkwMDE3MUU2MCAvKiBUZXh0Q29kZWNSZXBsYWNlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdFRjVFNUYxRDIwQzgzOTAwMTcxRTYwIC8qIFRl
eHRDb2RlY1JlcGxhY2VtZW50LmggKi87IH07CkBAIC05MDYxLDcgKzkwNjUsNyBAQAogCQkzNzZE
Q0NFMDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUZXh0UnVuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzc3MkIwOTUxNjUzNTg1NjAwMEE0OUNBIC8qIFBvcHVwT3BlbmluZ09ic2VydmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvcHVwT3BlbmluZ09ic2VydmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NzRBQkEzMEZBMjFFQjQwMEFEN0RFOSAvKiBP
dmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdG1hcEltYWdlQ0cuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogUGxhdGZv
cm1JbWFnZUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsYXRm
b3JtSW1hZ2VDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3OTE5QzIxMEI3
RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQb3NpdGlvbkl0ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzc5MTlDMjIwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvc2l0aW9uSXRlcmF0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc5MjkxNzgxOTg1RUYzOTAwRjRCNjYx
IC8qIENyZWRlbnRpYWxCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENy
ZWRlbnRpYWxCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05OTg5LDEwICs5
OTkzLDE0IEBACiAJCTUzRUQzRkRDMTY3QTg4RTcwMDY3NjJFNiAvKiBKU0ludGVybmFsU2V0dGlu
Z3NHZW5lcmF0ZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJ
bnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTNFRDNGREQxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRl
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVybmFsU2V0dGluZ3NH
ZW5lcmF0ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNFRjc2NkExNjUzMEE2
MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNldHRpbmdzTWFjcm9zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1
MDRFNENBMUQzNTUzMkQwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Qml0bWFwUGl4ZWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1MEEwQkM3MDg1
RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllZE5hbWUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTUw
QTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTU1
Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2Rl
ckNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1NzRGMDg1MUQwMjc0NDQwMEI5RjE0QyAv
KiBQbGF0Zm9ybUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVDQkE2OUYxRDFERjJFMTAwNDUxODYwIC8qIEltYWdl
RnJhbWVEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdl
RnJhbWVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVDQkE2QTAxRDFE
RjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlRnJhbWVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTU1RDQwOEY3MUE3QzYzMTgwMEM3ODQ1MCAvKiBTVkdJbWFnZUNsaWVudHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHSW1hZ2VDbGllbnRzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTU3MkE3RjIwMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGlj
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW11bGF0ZWRDbGljay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzJBN0YyMjFDNkU1QTY2MDA5QzYxNDkgLyog
U2ltdWxhdGVkQ2xpY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2ltdWxhdGVkQ2xpY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIwMjQs
NyArMjIwMzIsNiBAQAogCQlCMjc1MzUyOTBCMDUzODE0MDAyQ0U2NEYgLyogY2cgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTM3N0EzQThGMTVFRkNFOUEw
MDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCAqLywKIAkJCQkwRkNGMzMyMzBGMkI5NzE1MDA0
QjY3OTUgLyogQ29sb3JDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRGIC8q
IEZsb2F0UG9pbnRDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEZs
b2F0UmVjdENHLmNwcCAqLywKQEAgLTIyMDUxLDYgKzIyMDU4LDcgQEAKIAkJCQlBODBBMzhGRDBF
NTBDQzgyMDBBMjVFQkMgLyogUGF0dGVybkNHLmNwcCAqLywKIAkJCQlCMjc1MzUzNjBCMDUzODE0
MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5jcHAgKi8sCiAJCQkJQjI3NTM1MzcwQjA1Mzgx
NDAwMkNFNjRGIC8qIFBERkRvY3VtZW50SW1hZ2UuaCAqLywKKwkJCQkzNzdBM0E4RjE1RUZDRTlB
MDA1OUY1QzcgLyogUGxhdGZvcm1JbWFnZUNHLmNwcCAqLywKIAkJCQkxRkM0MEZCODE2NTVDNTkx
MDA0MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAgKi8sCiAJCQkJMUZDNDBGQjcx
NjU1QzU5MTAwNDBGMjlFIC8qIFN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCAqLywKIAkJCQlCMjc1
MzUyQTBCMDUzODE0MDAyQ0U2NEYgLyogVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAgKi8sCkBA
IC0yMjExOCw2ICsyMjEyNiw3IEBACiAJCQkJQkVGMjlFRTkxNzE1REQwOTAwQzRCNEM5IC8qIEF1
ZGlvVHJhY2tQcml2YXRlLmggKi8sCiAJCQkJQTg5OTQzMjcwQjQyMzM4NzAwRDdDODAyIC8qIEJp
dG1hcEltYWdlLmNwcCAqLywKIAkJCQlBODk5NDMyNjBCNDIzMzg3MDBEN0M4MDIgLyogQml0bWFw
SW1hZ2UuaCAqLywKKwkJCQk1NTA0RTRDQTFEMzU1MzJEMDBGRTUwODggLyogQml0bWFwUGl4ZWxz
LmggKi8sCiAJCQkJQ0RERTAyRTkxOEIzREZDNzAwQ0Y3RkYxIC8qIENETVNlc3Npb24uaCAqLywK
IAkJCQlCMjc1MzUzODBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3IuY3BwICovLAogCQkJCUIyNzUz
NTM5MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5oICovLApAQCAtMjIyMDIsNiArMjIyMTEsOCBA
QAogCQkJCTQzRDI1OTc2MTNDODE2RjQwMDYwODU1OSAvKiBJbWFnZUJ1ZmZlci5jcHAgKi8sCiAJ
CQkJQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8sCiAJCQkJMjJC
RDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovLAorCQkJCTU1Q0JB
NjlGMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1lRGF0YS5jcHAgKi8sCisJCQkJNTVDQkE2
QTAxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggKi8sCiAJCQkJQkM3RjQ0QTcw
QjlFMzI0RTAwQTlEMDgxIC8qIEltYWdlT2JzZXJ2ZXIuaCAqLywKIAkJCQlBODc0OEQ3NDEyQ0Mz
Rjg5MDAxRkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5jcHAgKi8sCiAJCQkJQTg3NDhENjYxMkND
Mzc2MzAwMUZCQTQxIC8qIEltYWdlT3JpZW50YXRpb24uaCAqLywKQEAgLTIyMjUxLDYgKzIyMjYy
LDcgQEAKIAkJCQkyRDUwMDJGQTFCNTZENzk5MDAyMEFBRjcgLyogUGF0aFV0aWxpdGllcy5oICov
LAogCQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLywKIAkJCQlB
OEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oICovLAorCQkJCTU1NzRGMDg1MUQw
Mjc0NDQwMEI5RjE0QyAvKiBQbGF0Zm9ybUltYWdlLmggKi8sCiAJCQkJMDU2MkY5NjAxNTczRjg4
RjAwMzFDQTE2IC8qIFBsYXRmb3JtTGF5ZXIuaCAqLywKIAkJCQlDRUVGQ0Q3QjE5REIzM0RDMDAz
ODc2RDcgLyogUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmggKi8sCiAJCQkJMDcyODQ3RTIx
NkVCQzVCMDAwNDNDRkE0IC8qIFBsYXRmb3JtVGV4dFRyYWNrLmggKi8sCkBAIC0yNjAxOCw2ICsy
NjAzMCw3IEBACiAJCQkJODVFNzExQjkwQUM1RDUzNTAwNTMyNzBGIC8qIERPTUhUTUxNYXBFbGVt
ZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTE1NzlGMEMwM0JCRDMwMDhCQjBF
RSAvKiBET01IVE1MTWFycXVlZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTE1NkVB
MEMwM0I3NDEwMDhCQjBFRSAvKiBET01IVE1MTWFycXVlZUVsZW1lbnRJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNTU3NEYwODcxRDAyNzkwOTAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTJERUM2NjU1MUM4MkQwNDEwMDk5ODQ2QSAvKiBET01IVE1M
TWVkaWFFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyREVDNjY1MTFDODJEMDE2MDA5OTg0
NkEgLyogRE9NSFRNTE1lZGlhRWxlbWVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NUJBNEQxMzBBQTY4ODY4MDA4ODA1MkQgLyogRE9NSFRNTE1lbnVFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKQEAgLTI2NDU5LDYgKzI2NDcyLDcgQEAKIAkJCQlEMzU5RDc4QTEyOUNBMjcxMDAwNkU1
RDIgLyogSFRNTERldGFpbHNFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEVBNzlGQTBB
MTkxNkRGMDBBOEVGNUYgLyogSFRNTERpcmVjdG9yeUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4RUE3Q0I3MEExOTJCOUMwMEE4RUY1RiAvKiBIVE1MRGl2RWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNTVDQkE2QTIxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEVBNzlGNzBBMTkxNkRGMDBBOEVGNUYgLyogSFRNTERMaXN0
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk4RTUwODI0NUU1OTAwMUU5QUJDIC8q
IEhUTUxEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc3QjM4NjcxMjI4ODNFOTAwQjgx
RkY4IC8qIEhUTUxEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODM1OSw2ICsy
ODM3Myw3IEBACiAJCQkJQjIyMjc5OTMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0FuaW1hdGVNb3Rp
b25FbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk5NTBEMDBCRjIyMDA3MUI3ODIg
LyogU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3
OTk4MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdBbmltYXRpb25FbGVtZW50LmggaW4gSGVhZGVycyAq
LywKKwkJCQk1NTA0RTRDQjFEMzU1N0IyMDBGRTUwODggLyogQml0bWFwUGl4ZWxzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0MzlEMzM0NTEzQTY5MTFDMDBDMjBGNEYgLyogU1ZHQW5pbWF0b3JGYWN0
b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEZCM0Y4NDEzQkM3NTRDMDA5OUZDMTggLyogU1ZH
QXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5OUMwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR0NpcmNsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjk0
MTEsNyArMjk0MjYsNyBAQAogCQkJCUZEQzU0RjA0MTM5OUIwREEwMDhEOTExNyAvKiBCaXF1YWRG
aWx0ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MDI2MTJCMDI2NzYwMEMxQTM1
OSAvKiBCaXF1YWRQcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg5OTQzMjkwQjQy
MzM4ODAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTM3N0Ez
QTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTM3N0EzQTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTc2RDZDNzgxMjJCOEEzRDAwMUZEMUY3IC8qIEJsb2IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMkVERUYxRjMxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JEYXRhLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUUxRDMxQ0RDMTkxOTYwMjAwMDEwMDVBMyAvKiBCbG9iRGF0YUZp
bGVSZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTc3NCw2ICsyOTc4OSw3IEBACiAJ
CQkJMkUyRDk5RTgxMEUyQkMxQzAwNDk2MzM3IC8qIERPTUJsb2IubW0gaW4gU291cmNlcyAqLywK
IAkJCQk4NTA4OUNEODBBOThDNDI4MDBBMjc1QUEgLyogRE9NQ0RBVEFTZWN0aW9uLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJODVBQ0E5ODcwQTlCNTIwMzAwNjcxRTkwIC8qIERPTUNoYXJhY3RlckRh
dGEubW0gaW4gU291cmNlcyAqLywKKwkJCQk1NUNCQTZBMTFEMURGMkUxMDA0NTE4NjAgLyogSW1h
Z2VGcmFtZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODUwODlDREEwQTk4QzQyODAwQTI3
NUFBIC8qIERPTUNvbW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk5NzhEMDdCRTE0NUEwRjZD
MDA5NjkwOEQgLyogRE9NQ29yZUV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NThD
MzhBNjBBQThGMjA0MDBCMTg3QTQgLyogRE9NQ291bnRlci5tbSBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQppbmRleCA0MDExZWEzZmQ4YzA0Njk3NGM1NWQ0OGUz
OTZmMWI4M2I4MWYzMzVkLi5hNWFjNGYwNWFlMzM5YThkNjQ3MDZjMTBmYzBmN2FmNDA0MjU2MjNj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQpAQCAtNjA2LDcgKzYwNiw3IEBAIC0g
KHZvaWQpZ2V0UHJldmlld1NuYXBzaG90SW1hZ2U6KENHSW1hZ2VSZWYqKWNnSW1hZ2UgYW5kUmVj
dHM6KE5TQXJyYXkgKiopcmVjdHMKIAogICAgIGlmICh0ZXh0SW5kaWNhdG9yKSB7CiAgICAgICAg
IGlmIChJbWFnZSogaW1hZ2UgPSB0ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2UoKSkKLSAgICAg
ICAgICAgICpjZ0ltYWdlID0gKENHSW1hZ2VSZWYpQ0ZBdXRvcmVsZWFzZShDR0ltYWdlUmV0YWlu
KGltYWdlLT5nZXRDR0ltYWdlUmVmKCkpKTsKKyAgICAgICAgICAgICpjZ0ltYWdlID0gaW1hZ2Ut
Pm5hdGl2ZUltYWdlKCkuYXV0b3JlbGVhc2UoKTsKICAgICB9CiAKICAgICBSZXRhaW5QdHI8TlNN
dXRhYmxlQXJyYXk+IHJlY3RBcnJheSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdF0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRv
cldpbmRvdy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cu
bW0KaW5kZXggMzY0YTlhODdjZTZmMDY2Mzk0OGI4ODQ2ZThlMmNlNmQxOTBmMjQ4OS4uYTc0ZGE4
NWFjZWNhM2M2Njk4ZGQxNTZhYjMxYTZjOTcxYTM1NGU2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCkBAIC0xNjIsOSArMTYyLDkgQEAgLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSB0ZXh0SW5kaWNhdG9yOihQ
YXNzUmVmUHRyPFRleHRJbmRpY2EKICAgICBjb250ZW50c0ltYWdlTG9naWNhbFNpemUuc2NhbGUo
MSAvIF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VTY2FsZUZhY3RvcigpKTsKICAgICBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZTsKICAgICBpZiAoaW5kaWNhdG9yV2FudHND
b250ZW50Q3Jvc3NmYWRlKCpfdGV4dEluZGljYXRvcikpCi0gICAgICAgIGNvbnRlbnRzSW1hZ2Ug
PSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlV2l0aEhpZ2hsaWdodCgpLT5nZXRDR0ltYWdl
UmVmKCk7CisgICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudElt
YWdlV2l0aEhpZ2hsaWdodCgpLT5uYXRpdmVJbWFnZSgpOwogICAgIGVsc2UKLSAgICAgICAgY29u
dGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2UoKS0+Z2V0Q0dJbWFnZVJl
ZigpOworICAgICAgICBjb250ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFn
ZSgpLT5uYXRpdmVJbWFnZSgpOwogCiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBib3Vu
Y2VMYXllcnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKIApAQCAt
MjY1LDcgKzI2NSw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0FLZXlmcmFtZUFuaW1hdGlvbj4gY3Jl
YXRlQm91bmNlQW5pbWF0aW9uKENGVGltZUludGVydmFsIGR1cmF0CiBzdGF0aWMgUmV0YWluUHRy
PENBQmFzaWNBbmltYXRpb24+IGNyZWF0ZUNvbnRlbnRDcm9zc2ZhZGVBbmltYXRpb24oQ0ZUaW1l
SW50ZXJ2YWwgZHVyYXRpb24sIFRleHRJbmRpY2F0b3ImIHRleHRJbmRpY2F0b3IpCiB7CiAgICAg
UmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGNyb3NzZmFkZUFuaW1hdGlvbiA9IFtDQUJhc2lj
QW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAiY29udGVudHMiXTsKLSAgICBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZSA9IHRleHRJbmRpY2F0b3IuY29udGVudEltYWdl
KCktPmdldENHSW1hZ2VSZWYoKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJ
bWFnZSA9IHRleHRJbmRpY2F0b3IuY29udGVudEltYWdlKCktPm5hdGl2ZUltYWdlKCk7CiAgICAg
W2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRUb1ZhbHVlOihpZCljb250ZW50c0ltYWdlLmdldCgpXTsK
ICAgICBbY3Jvc3NmYWRlQW5pbWF0aW9uIHNldEZpbGxNb2RlOmtDQUZpbGxNb2RlRm9yd2FyZHNd
OwogICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0UmVtb3ZlZE9uQ29tcGxldGlvbjpOT107CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKaW5k
ZXggNDYwZDFiODU2Yjc3YjdjZjRlYzY4OTY1ODFiODMzZDNlN2Y5NzAxNC4uZmM2NDlkMTBhYWI5
YzEzZmZmMjkzMDU1YTcwN2NiNzQ1Mzc0NjkxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcApAQCAtNjgsMTUgKzY4LDEzIEBAIEJpdG1h
cEltYWdlOjpCaXRtYXBJbWFnZShOYXRpdmVJbWFnZVB0ciYmIGltYWdlLCBJbWFnZU9ic2VydmVy
KiBvYnNlcnZlcikKICAgICAsIG1faGF2ZUZyYW1lQ291bnQodHJ1ZSkKICAgICAsIG1fYW5pbWF0
aW9uRmluaXNoZWRXaGVuQ2F0Y2hpbmdVcChmYWxzZSkKIHsKKyAgICBtX2ZyYW1lcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KDEpOworICAgIG1fZnJhbWVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3Zl
KGltYWdlKSk7CisgICAgCiAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhIGRlY29kZXIsIHdl
IGNhbid0IGZpZ3VyZSBvdXQgdGhlIGltYWdlIG9yaWVudGF0aW9uLgogICAgIC8vIFNldCBtX3Np
emVSZXNwZWN0aW5nT3JpZW50YXRpb24gdG8gYmUgdGhlIHNhbWUgYXMgbV9zaXplIHNvIGl0J3Mg
bm90IDB4MC4KLSAgICBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBtX3NpemUgPSBOYXRp
dmVJbWFnZTo6c2l6ZShpbWFnZSk7CisgICAgbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uID0g
bV9zaXplID0gbV9mcmFtZXNbMF0uc2l6ZSgpOwogICAgIG1fZGVjb2RlZFNpemUgPSBtX3NpemUu
YXJlYSgpICogNDsKLSAgICAKLSAgICBtX2ZyYW1lcy5ncm93KDEpOwotICAgIG1fZnJhbWVzWzBd
Lm1faGFzQWxwaGEgPSBOYXRpdmVJbWFnZTo6aGFzQWxwaGEoaW1hZ2UpOwotICAgIG1fZnJhbWVz
WzBdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKLSAgICBtX2ZyYW1lc1swXS5tX2ltYWdlID0gV1RG
TW92ZShpbWFnZSk7CiB9CiAKIEJpdG1hcEltYWdlOjp+Qml0bWFwSW1hZ2UoKQpAQCAtMTA1LDcg
KzEwMyw3IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmhhdmVGcmFtZUltYWdlQXRJbmRleChzaXplX3Qg
aW5kZXgpCiAgICAgaWYgKGluZGV4ID49IG1fZnJhbWVzLnNpemUoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOworICAgIHJldHVy
biBtX2ZyYW1lc1tpbmRleF0uaGFzSW1hZ2UoKTsKIH0KIAogYm9vbCBCaXRtYXBJbWFnZTo6aGFz
U2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdApAQCAtMTI1LDkgKzEyMyw3IEBAIHZvaWQgQml0
bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGRlc3Ryb3lBbGwpCiAgICAgICAgIC8v
IFRoZSB1bmRlcmx5aW5nIGZyYW1lIGlzbid0IGFjdHVhbGx5IGNoYW5naW5nICh3ZSdyZSBqdXN0
IHRyeWluZyB0bwogICAgICAgICAvLyBzYXZlIHRoZSBtZW1vcnkgZm9yIHRoZSBmcmFtZWJ1ZmZl
ciBkYXRhKSwgc28gd2UgZG9uJ3QgbmVlZCB0byBjbGVhcgogICAgICAgICAvLyB0aGUgbWV0YWRh
dGEuCi0gICAgICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMgPSBtX2ZyYW1lc1tpXS5tX2ZyYW1lQnl0
ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1tpXS5jbGVhcihmYWxzZSkpCi0gICAgICAgICAgICBm
cmFtZUJ5dGVzQ2xlYXJlZCArPSBmcmFtZUJ5dGVzOworICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJl
ZCArPSBtX2ZyYW1lc1tpXS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEp
OwogICAgIH0KIAogICAgIG1fc291cmNlLmNsZWFyKGRlc3Ryb3lBbGwsIGNsZWFyQmVmb3JlRnJh
bWUsIGRhdGEoKSwgbV9hbGxEYXRhUmVjZWl2ZWQpOwpAQCAtMTUwLDggKzE0Niw4IEBAIHZvaWQg
Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KGJvb2wgZGVzdHJveUFs
bCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgYWxsRnJhbWVCeXRlcyA9IDA7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAg
YWxsRnJhbWVCeXRlcyArPSBtX2ZyYW1lc1tpXS51c2VkRnJhbWVCeXRlcygpOworICAgIGZvciAo
YXV0byYgZnJhbWUgOiBtX2ZyYW1lcykKKyAgICAgICAgYWxsRnJhbWVCeXRlcyArPSBmcmFtZS5m
cmFtZUJ5dGVzKCk7CiAKICAgICBpZiAoYWxsRnJhbWVCeXRlcyA+IGxhcmdlQW5pbWF0aW9uQ3V0
b2ZmKSB7CiAgICAgICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZSAlcCBkZXN0cm95RGVjb2Rl
ZERhdGFJZk5lY2Vzc2FyeSBkZXN0cm95aW5nRGF0YTogYWxsRnJhbWVCeXRlcz0ldSBjdXRvZmY9
JXUiLCB0aGlzLCBhbGxGcmFtZUJ5dGVzLCBsYXJnZUFuaW1hdGlvbkN1dG9mZik7CkBAIC0xNzcs
NyArMTczLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJveU1ldGFkYXRhQW5kTm90aWZ5KHVu
c2lnbmVkIGZyYW1lQnl0ZXNDbGVhcmVkLCBDbGVhcmVkU28KICAgICAgICAgaW1hZ2VPYnNlcnZl
cigpLT5kZWNvZGVkU2l6ZUNoYW5nZWQodGhpcywgLXNhZmVDYXN0PGludD4oZnJhbWVCeXRlc0Ns
ZWFyZWQpKTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgs
IFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZUNhY2hpbmcgZnJh
bWVDYWNoaW5nKQordm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgsIFN1
YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcg
Y2FjaGluZykKIHsKICAgICBzaXplX3QgbnVtRnJhbWVzID0gZnJhbWVDb3VudCgpOwogICAgIEFT
U0VSVChtX2RlY29kZWRTaXplID09IDAgfHwgbnVtRnJhbWVzID4gMSk7CkBAIC0xODUsMjUgKzE4
MSwxMiBAQCB2b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vic2Ft
cGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbQogICAgIGlmIChtX2ZyYW1lcy5zaXplKCkg
PCBudW1GcmFtZXMpCiAgICAgICAgIG1fZnJhbWVzLmdyb3cobnVtRnJhbWVzKTsKIAotICAgIGlm
IChmcmFtZUNhY2hpbmcgPT0gQ2FjaGVNZXRhZGF0YUFuZEZyYW1lKSB7Ci0gICAgICAgIG1fZnJh
bWVzW2luZGV4XS5tX2ltYWdlID0gbV9zb3VyY2UuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5k
ZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOwotICAgICAgICBtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1w
bGluZ0xldmVsID0gc3Vic2FtcGxpbmdMZXZlbDsKLSAgICB9Ci0KLSAgICBtX2ZyYW1lc1tpbmRl
eF0ubV9vcmllbnRhdGlvbiA9IG1fc291cmNlLm9yaWVudGF0aW9uQXRJbmRleChpbmRleCk7Ci0g
ICAgbV9mcmFtZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKLSAgICBtX2ZyYW1lc1tp
bmRleF0ubV9pc0NvbXBsZXRlID0gbV9zb3VyY2UuZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRl
eCk7CisgICAgbV9mcmFtZXNbaW5kZXhdID0gbV9zb3VyY2UuY3JlYXRlRnJhbWVEYXRhQXRJbmRl
eChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgY2FjaGluZyk7CiAKLSAgICBpZiAocmVwZXRpdGlv
bkNvdW50KGZhbHNlKSAhPSBjQW5pbWF0aW9uTm9uZSkKLSAgICAgICAgbV9mcmFtZXNbaW5kZXhd
Lm1fZHVyYXRpb24gPSBtX3NvdXJjZS5mcmFtZUR1cmF0aW9uQXRJbmRleChpbmRleCk7CisgICAg
TE9HKEltYWdlcywgIkJpdG1hcEltYWdlICVwIGNhY2hlRnJhbWUgJWx1ICglcyV1IGJ5dGVzLCBj
b21wbGV0ZSAlZCkiLCB0aGlzLCBpbmRleCwgY2FjaGluZyA9PSBJbWFnZUZyYW1lRGF0YTo6Q2Fj
aGluZzo6TWV0YWRhdGEgPyAibWV0YWRhdGEgb25seSwgIiA6ICIiLCBtX2ZyYW1lc1tpbmRleF0u
ZnJhbWVCeXRlcygpLCBtX2ZyYW1lc1tpbmRleF0uaXNDb21wbGV0ZSgpKTsKIAotICAgIG1fZnJh
bWVzW2luZGV4XS5tX2hhc0FscGhhID0gbV9zb3VyY2UuZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5k
ZXgpOwotICAgIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXMgPSBtX3NvdXJjZS5mcmFtZUJ5
dGVzQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7Ci0KLSAgICBMT0coSW1hZ2VzLCAi
Qml0bWFwSW1hZ2UgJXAgY2FjaGVGcmFtZSAlbHUgKCVzJXUgYnl0ZXMsIGNvbXBsZXRlICVkKSIs
IHRoaXMsIGluZGV4LCBmcmFtZUNhY2hpbmcgPT0gQ2FjaGVNZXRhZGF0YU9ubHkgPyAibWV0YWRh
dGEgb25seSwgIiA6ICIiLCBtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZUJ5dGVzLCBtX2ZyYW1lc1tp
bmRleF0ubV9pc0NvbXBsZXRlKTsKLQotICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkg
ewotICAgICAgICBpbnQgZGVsdGFCeXRlcyA9IHNhZmVDYXN0PGludD4obV9mcmFtZXNbaW5kZXhd
Lm1fZnJhbWVCeXRlcyk7CisgICAgaWYgKG1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpKSB7Cisg
ICAgICAgIGludCBkZWx0YUJ5dGVzID0gc2FmZUNhc3Q8aW50PihtX2ZyYW1lc1tpbmRleF0uZnJh
bWVCeXRlcygpKTsKICAgICAgICAgbV9kZWNvZGVkU2l6ZSArPSBkZWx0YUJ5dGVzOwogICAgICAg
ICAvLyBUaGUgZnVsbHktZGVjb2RlZCBmcmFtZSB3aWxsIHN1YnN1bWUgdGhlIHBhcnRpYWxseSBk
ZWNvZGVkIGRhdGEgdXNlZAogICAgICAgICAvLyB0byBkZXRlcm1pbmUgaW1hZ2UgcHJvcGVydGll
cy4KQEAgLTI4OCwyMSArMjcxLDE5IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKGJv
b2wgYWxsRGF0YVJlY2VpdmVkKQogICAgIC8vIGZyYW1lIGFmZmVjdGVkIGJ5IGFwcGVuZGluZyBu
ZXcgZGF0YSBoZXJlLiBUaHVzIHdlIGhhdmUgdG8gY2xlYXIgYWxsIHRoZQogICAgIC8vIGluY29t
cGxldGUgZnJhbWVzIHRvIGJlIHNhZmUuCiAgICAgdW5zaWduZWQgZnJhbWVCeXRlc0NsZWFyZWQg
PSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmFtZXMuc2l6ZSgpOyArK2kpIHsK
KyAgICBmb3IgKGF1dG8mIGZyYW1lIDogbV9mcmFtZXMpIHsKICAgICAgICAgLy8gTk9URTogRG9u
J3QgY2FsbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KCkgaGVyZSwgdGhhdCB3aWxsIHRyeSB0bwog
ICAgICAgICAvLyBkZWNvZGUgYW55IHVuY2FjaGVkIChpLmUuIG5ldmVyLWRlY29kZWQgb3IKICAg
ICAgICAgLy8gY2xlYXJlZC1vbi1hLXByZXZpb3VzLXBhc3MpIGZyYW1lcyEKLSAgICAgICAgdW5z
aWduZWQgZnJhbWVCeXRlcyA9IG1fZnJhbWVzW2ldLm1fZnJhbWVCeXRlczsKLSAgICAgICAgaWYg
KG1fZnJhbWVzW2ldLm1faGF2ZU1ldGFkYXRhICYmICFtX2ZyYW1lc1tpXS5tX2lzQ29tcGxldGUp
Ci0gICAgICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSAobV9mcmFtZXNbaV0uY2xlYXIodHJ1
ZSkgPyBmcmFtZUJ5dGVzIDogMCk7CisgICAgICAgIGlmIChmcmFtZS5oYXNNZXRhZGF0YSgpICYm
ICFmcmFtZS5pc0NvbXBsZXRlKCkpCisgICAgICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSBm
cmFtZS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6RW1wdHkpOwogICAgIH0KICAgICBk
ZXN0cm95TWV0YWRhdGFBbmROb3RpZnkoZnJhbWVCeXRlc0NsZWFyZWQsIENsZWFyZWRTb3VyY2U6
Ok5vKTsKICNlbHNlCiAgICAgLy8gRklYTUU6IHdoeSBpcyB0aGlzIGRpZmZlcmVudCBmb3IgaU9T
PwogICAgIGludCBkZWx0YUJ5dGVzID0gMDsKICAgICBpZiAoIW1fZnJhbWVzLmlzRW1wdHkoKSkg
ewotICAgICAgICBpbnQgYnl0ZXMgPSBtX2ZyYW1lc1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5tX2Zy
YW1lQnl0ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5jbGVh
cih0cnVlKSkgeworICAgICAgICBpZiAoaW50IGJ5dGVzID0gbV9mcmFtZXNbbV9mcmFtZXMuc2l6
ZSgpIC0gMV0uY2xlYXIoSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6OkVtcHR5KSkgewogICAgICAg
ICAgICAgZGVsdGFCeXRlcyArPSBieXRlczsKICAgICAgICAgICAgIGRlbHRhQnl0ZXMgKz0gbV9k
ZWNvZGVkUHJvcGVydGllc1NpemU7CiAgICAgICAgICAgICBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6
ZSA9IDA7CkBAIC0zNjYsMTUgKzM0NywxNSBAQCBib29sIEJpdG1hcEltYWdlOjppc1NpemVBdmFp
bGFibGUoKQogICAgIHJldHVybiBtX3NpemVBdmFpbGFibGU7CiB9CiAKLWJvb2wgQml0bWFwSW1h
Z2U6OmVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4LCBJbWFnZUZyYW1lQ2FjaGluZyBm
cmFtZUNhY2hpbmcpCitib29sIEJpdG1hcEltYWdlOjplbnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVf
dCBpbmRleCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgY2FjaGluZykKIHsKICAgICBpZiAoaW5k
ZXggPj0gZnJhbWVDb3VudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoaW5k
ZXggPj0gbV9mcmFtZXMuc2l6ZSgpCi0gICAgICAgIHx8IChmcmFtZUNhY2hpbmcgPT0gQ2FjaGVN
ZXRhZGF0YUFuZEZyYW1lICYmICFtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKLSAgICAgICAgfHwg
KGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhT25seSAmJiAhbV9mcmFtZXNbaW5kZXhdLm1f
aGF2ZU1ldGFkYXRhKSkKLSAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgMCwgZnJhbWVDYWNoaW5n
KTsKKyAgICAgICAgfHwgKGNhY2hpbmcgPT0gSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFk
YXRhQW5kSW1hZ2UgJiYgIW1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpKQorICAgICAgICB8fCAo
Y2FjaGluZyA9PSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEgJiYgIW1fZnJhbWVz
W2luZGV4XS5oYXNNZXRhZGF0YSgpKSkKKyAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgMCwgY2Fj
aGluZyk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM4OCwxMCArMzY5LDkgQEAgTmF0aXZl
SW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgZmxv
YXQgcHJlc2VudGF0aW9uU2MKIAogICAgIC8vIFdlIG1heSBoYXZlIGNhY2hlZCBhIGZyYW1lIHdp
dGggYSBoaWdoZXIgc3Vic2FtcGxpbmcgbGV2ZWwsIGluIHdoaWNoIGNhc2Ugd2UgbmVlZCB0bwog
ICAgIC8vIHJlLWRlY29kZSB3aXRoIGEgbG93ZXIgbGV2ZWwuCi0gICAgaWYgKGluZGV4IDwgbV9m
cmFtZXMuc2l6ZSgpICYmIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlICYmIHN1YnNhbXBsaW5nTGV2
ZWwgPCBtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1wbGluZ0xldmVsKSB7CisgICAgaWYgKGluZGV4
IDwgbV9mcmFtZXMuc2l6ZSgpICYmIG1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpICYmIHN1YnNh
bXBsaW5nTGV2ZWwgPCBtX2ZyYW1lc1tpbmRleF0uc3Vic2FtcGxpbmdMZXZlbCgpKSB7CiAgICAg
ICAgIC8vIElmIHRoZSBpbWFnZSBpcyBhbHJlYWR5IGNhY2hlZCwgYnV0IGF0IHRvbyBzbWFsbCBh
IHNpemUsIHJlLWRlY29kZSBhIGxhcmdlciB2ZXJzaW9uLgotICAgICAgICBpbnQgc2l6ZUNoYW5n
ZSA9IC1tX2ZyYW1lc1tpbmRleF0ubV9mcmFtZUJ5dGVzOwotICAgICAgICBtX2ZyYW1lc1tpbmRl
eF0uY2xlYXIodHJ1ZSk7CisgICAgICAgIGludCBzaXplQ2hhbmdlID0gLW1fZnJhbWVzW2luZGV4
XS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6RW1wdHkpOwogICAgICAgICBpbnZhbGlk
YXRlUGxhdGZvcm1EYXRhKCk7CiAgICAgICAgIG1fZGVjb2RlZFNpemUgKz0gc2l6ZUNoYW5nZTsK
ICAgICAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKQEAgLTM5OSw0MCArMzc5LDcyIEBAIE5hdGl2
ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIGZs
b2F0IHByZXNlbnRhdGlvblNjCiAgICAgfQogCiAgICAgLy8gSWYgd2UgaGF2ZW4ndCBmZXRjaGVk
IGEgZnJhbWUgeWV0LCBkbyBzby4KLSAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8
ICFtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKLSAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgc3Vi
c2FtcGxpbmdMZXZlbCwgQ2FjaGVNZXRhZGF0YUFuZEZyYW1lKTsKKyAgICBpZiAoaW5kZXggPj0g
bV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0uaGFzSW1hZ2UoKSkKKyAgICAgICAg
Y2FjaGVGcmFtZShpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hp
bmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOworCisgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5pbWFn
ZSgpOworfQorICAgIAorTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKCkK
K3sKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCk7Cit9CisgICAgCitOYXRpdmVJbWFn
ZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkK
K3sKKyAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7CisgICAgCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGF1dG8gaW1hZ2UgPSBmcmFtZUlt
YWdlQXRJbmRleChpKTsKKyAgICAgICAgaWYgKGltYWdlICYmIFBsYXRmb3JtSW1hZ2UoaW1hZ2Up
LnNpemUoKSA9PSBzaXplKQorICAgICAgICAgICAgcmV0dXJuIGltYWdlOworICAgIH0KKyAgICAK
KyAgICAvLyBGYWxsYmFjayB0byB0aGUgZmlyc3QgZnJhbWUgaW1hZ2UgaWYgd2UgY2FuJ3QgZmlu
ZCB0aGUgcmlnaHQgc2l6ZQorICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKTsKK30KKyAg
ICAKK05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpCit7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKK30K
IAotICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZTsKK1ZlY3RvcjxOYXRpdmVJbWFn
ZVB0cj4gQml0bWFwSW1hZ2U6OmZyYW1lc05hdGl2ZUltYWdlcygpCit7CisgICAgVmVjdG9yPE5h
dGl2ZUltYWdlUHRyPiBpbWFnZXM7CisgICAgc2l6ZV90IGNvdW50ID0gZnJhbWVDb3VudCgpOwor
ICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBp
ZiAoYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpKQorICAgICAgICAgICAgaW1hZ2Vz
LmFwcGVuZChpbWFnZSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBpbWFnZXM7CiB9CiAKIGJv
b2wgQml0bWFwSW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogewot
ICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQor
ICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hp
bmc6Ok1ldGFkYXRhKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG1fZnJh
bWVzW2luZGV4XS5tX2lzQ29tcGxldGU7CisgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5pc0Nv
bXBsZXRlKCk7CiB9CiAKIGZsb2F0IEJpdG1hcEltYWdlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChz
aXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBDYWNo
ZU1ldGFkYXRhT25seSkpCisgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBJbWFn
ZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEpKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9kdXJhdGlvbjsKLX0KLQotTmF0aXZlSW1hZ2VQdHIg
Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKLXsKLSAgICByZXR1cm4g
ZnJhbWVJbWFnZUF0SW5kZXgoY3VycmVudEZyYW1lKCkpOworICAgIHJldHVybiBtX2ZyYW1lc1tp
bmRleF0uZHVyYXRpb24oKTsKIH0KIAogYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVIYXNBbHBoYUF0
SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRl
eCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQorICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRl
eCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBpZiAobV9mcmFtZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRhKQotICAgICAgICBy
ZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faGFzQWxwaGE7CisgICAgaWYgKG1fZnJhbWVzW2luZGV4
XS5oYXNNZXRhZGF0YSgpKQorICAgICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLmhhc0FscGhh
KCk7CiAKICAgICByZXR1cm4gbV9zb3VyY2UuZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5kZXgpOwog
fQpAQCAtNDQ0LDExICs0NTYsMTEgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Y3VycmVudEZyYW1lS25v
d25Ub0JlT3BhcXVlKCkKIAogSW1hZ2VPcmllbnRhdGlvbiBCaXRtYXBJbWFnZTo6ZnJhbWVPcmll
bnRhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICghZW5zdXJlRnJhbWVJc0Nh
Y2hlZChpbmRleCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQorICAgIGlmICghZW5zdXJlRnJhbWVJc0Nh
Y2hlZChpbmRleCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhKSkKICAgICAgICAg
cmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsKIAotICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9o
YXZlTWV0YWRhdGEpCi0gICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9vcmllbnRhdGlv
bjsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhdLmhhc01ldGFkYXRhKCkpCisgICAgICAgIHJldHVy
biBtX2ZyYW1lc1tpbmRleF0ub3JpZW50YXRpb24oKTsKIAogICAgIHJldHVybiBtX3NvdXJjZS5v
cmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOwogfQpAQCAtNzAwLDE3ICs3MTIsNTYgQEAgQ29sb3Ig
Qml0bWFwSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcigpCiAgICAgICAgIHJldHVybiBDb2xv
cigpOwogICAgIAogICAgIEFTU0VSVChtX2ZyYW1lcy5zaXplKCkpOwotICAgIG1fc29saWRDb2xv
ciA9IE5hdGl2ZUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IobV9mcmFtZXNbMF0ubV9pbWFn
ZS5nZXQoKSk7CisgICAgbV9zb2xpZENvbG9yID0gbV9mcmFtZXNbMF0uc2luZ2xlUGl4ZWxTb2xp
ZENvbG9yKCk7CiAgICAgCiAgICAgQVNTRVJUKG1fc29saWRDb2xvcik7CiAgICAgcmV0dXJuIG1f
c29saWRDb2xvci52YWx1ZSgpOwogfQogICAgIAorYm9vbCBCaXRtYXBJbWFnZTo6aXNBbG1vc3RT
b2xpZENvbG9yKCkKK3sKKyAgICBpZiAoZnJhbWVDb3VudCgpICE9IDEpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiBlbnN1cmVGcmFtZUlzQ2FjaGVkKDApICYmIG1fZnJhbWVz
WzBdLmlzQWxtb3N0U29saWRDb2xvcigpOworfQorICAgIAogYm9vbCBCaXRtYXBJbWFnZTo6Y2Fu
QW5pbWF0ZSgpCiB7CiAgICAgcmV0dXJuIHNob3VsZEFuaW1hdGUoKSAmJiBmcmFtZUNvdW50KCkg
PiAxOwogfQogCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBD
b21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUsIEltYWdlT3JpZW50YXRpb25EZXNj
cmlwdGlvbiBkZXNjcmlwdGlvbikKK3sKKyAgICBpZiAoZGVzdFJlY3QuaXNFbXB0eSgpIHx8IHNy
Y1JlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgc3RhcnRBbmltYXRpb24oRG9Ob3RDYXRjaFVwKTsKKyNlbHNlCisgICAgc3RhcnRBbmltYXRp
b24oKTsKKyNlbmRpZgorICAgIAorICAgIENvbG9yIGNvbG9yID0gc2luZ2xlUGl4ZWxTb2xpZENv
bG9yKCk7CisgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICBmaWxsV2l0aFNvbGlk
Q29sb3IoY29udGV4dCwgZGVzdFJlY3QsIGNvbG9yLCBvcCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZy
YW1lLCBQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKGNvbnRleHQsIGRlc3RSZWN0LCBz
cmNSZWN0KSk7CisgICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3Qg
aGF2ZSBhbiBpbWFnZSB5ZXQuCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBJbWFnZU9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKGRlc2NyaXB0aW9uLmltYWdlT3JpZW50YXRpb24oKSk7CisgICAg
aWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdl
T3JpZW50YXRpb24pCisgICAgICAgIG9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5k
ZXgobV9jdXJyZW50RnJhbWUpOworICAgIAorICAgIFBsYXRmb3JtSW1hZ2UoaW1hZ2UpLmRyYXco
Y29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG1fc2l6ZSwgb3AsIG1vZGUsIG9yaWVudGF0aW9u
KTsKKyAgICAKKyAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQorICAgICAgICBpbWFnZU9ic2VydmVy
KCktPmRpZERyYXcodGhpcyk7Cit9CisgICAgCiB2b2lkIEJpdG1hcEltYWdlOjpkdW1wKFRleHRT
dHJlYW0mIHRzKSBjb25zdAogewogICAgIEltYWdlOjpkdW1wKHRzKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCmluZGV4IDA3NTg5MjljZDg3ZmFk
YWNmMDJiNmVkOGVlYWZlN2RlZmQ2NmYwYzUuLjIyMThjODI0YjUyOGZkNjM5YmFiMTM4ZGVjYzk4
Yjk4MTZhMTY4MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuaApAQCAtMjgsMTEgKzI4LDEzIEBACiAjaWZuZGVmIEJpdG1hcEltYWdlX2gKICNk
ZWZpbmUgQml0bWFwSW1hZ2VfaAogCi0jaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJDb2xv
ci5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2VGcmFtZURhdGEuaCIKICNp
bmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKICNp
bmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgogCiAjaWYgVVNF
KENHKSB8fCBVU0UoQVBQS0lUKQogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTQ3LDYz
ICs0OSw5IEBAIHR5cGVkZWYgc3RydWN0IEhCSVRNQVBfXyAqSEJJVE1BUDsKICNlbmRpZgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgc3RydWN0IEZyYW1lRGF0YTsKLX0KLQotbmFtZXNwYWNl
IFdURiB7Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgVmVjdG9yVHJhaXRzPFdlYkNvcmU6OkZyYW1l
RGF0YT4gOiBwdWJsaWMgU2ltcGxlQ2xhc3NWZWN0b3JUcmFpdHMgewotICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBjYW5Jbml0aWFsaXplV2l0aE1lbXNldCA9IGZhbHNlOyAvLyBOb3QgYWxsIEZy
YW1lRGF0YSBtZW1iZXJzIGluaXRpYWxpemUgdG8gMC4KLSAgICB9OwotfQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIFRpbWVyOwogCi1uYW1lc3BhY2UgTmF0aXZlSW1hZ2UgewotICAg
IEludFNpemUgc2l6ZShjb25zdCBOYXRpdmVJbWFnZVB0ciYpOwotICAgIGJvb2wgaGFzQWxwaGEo
Y29uc3QgTmF0aXZlSW1hZ2VQdHImKTsKLSAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3Io
Y29uc3QgTmF0aXZlSW1hZ2VQdHImKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBGcmFtZURhdGEgQ2xhc3MKLS8vID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdHJ1Y3QgRnJhbWVE
YXRhIHsKLXB1YmxpYzoKLSAgICBGcmFtZURhdGEoKQotICAgICAgICA6IG1faGF2ZU1ldGFkYXRh
KGZhbHNlKQotICAgICAgICAsIG1faXNDb21wbGV0ZShmYWxzZSkKLSAgICAgICAgLCBtX2hhc0Fs
cGhhKHRydWUpCi0gICAgewotICAgIH0KLQotICAgIH5GcmFtZURhdGEoKQotICAgIHsgCi0gICAg
ICAgIGNsZWFyKHRydWUpOwotICAgIH0KLQotICAgIC8vIENsZWFyIHRoZSBjYWNoZWQgaW1hZ2Ug
ZGF0YSBvbiB0aGUgZnJhbWUsIGFuZCAob3B0aW9uYWxseSkgdGhlIG1ldGFkYXRhLgotICAgIC8v
IFJldHVybnMgd2hldGhlciB0aGVyZSB3YXMgY2FjaGVkIGltYWdlIGRhdGEgdG8gY2xlYXIuCi0g
ICAgYm9vbCBjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpOwotICAgIAotICAgIHVuc2lnbmVkIHVz
ZWRGcmFtZUJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZSA/IG1fZnJhbWVCeXRlcyA6IDA7
IH0KLQotICAgIE5hdGl2ZUltYWdlUHRyIG1faW1hZ2U7Ci0gICAgSW1hZ2VPcmllbnRhdGlvbiBt
X29yaWVudGF0aW9uIHsgRGVmYXVsdEltYWdlT3JpZW50YXRpb24gfTsKLSAgICBTdWJzYW1wbGlu
Z0xldmVsIG1fc3Vic2FtcGxpbmdMZXZlbCB7IDAgfTsKLSAgICBmbG9hdCBtX2R1cmF0aW9uIHsg
MCB9OwotICAgIGJvb2wgbV9oYXZlTWV0YWRhdGEgOiAxOwotICAgIGJvb2wgbV9pc0NvbXBsZXRl
IDogMTsKLSAgICBib29sIG1faGFzQWxwaGEgOiAxOwotICAgIHVuc2lnbmVkIG1fZnJhbWVCeXRl
cyB7IDAgfTsKLX07Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS8vIEJpdG1hcEltYWdlIENsYXNzCi0vLyA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KIGNsYXNzIEJpdG1hcEltYWdlIGZpbmFs
IDogcHVibGljIEltYWdlIHsKICAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7CiAgICAg
ZnJpZW5kIGNsYXNzIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOwpAQCAtMTU1LDEyICsxMDMsNiBA
QCBwdWJsaWM6CiAgICAgQ0ZEYXRhUmVmIGdldFRJRkZSZXByZXNlbnRhdGlvbigpIG92ZXJyaWRl
OwogI2VuZGlmCiAKLSNpZiBVU0UoQ0cpCi0gICAgV0VCQ09SRV9FWFBPUlQgQ0dJbWFnZVJlZiBn
ZXRDR0ltYWdlUmVmKCkgb3ZlcnJpZGU7Ci0gICAgQ0dJbWFnZVJlZiBnZXRGaXJzdENHSW1hZ2VS
ZWZPZlNpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwotICAgIFJldGFpblB0cjxDRkFycmF5
UmVmPiBnZXRDR0ltYWdlQXJyYXkoKSBvdmVycmlkZTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0o
V0lOKQogICAgIGJvb2wgZ2V0SEJJVE1BUChIQklUTUFQKSBvdmVycmlkZTsKICAgICBib29sIGdl
dEhCSVRNQVBPZlNpemUoSEJJVE1BUCwgY29uc3QgSW50U2l6ZSopIG92ZXJyaWRlOwpAQCAtMTc0
LDggKzExNiwxMyBAQCBwdWJsaWM6CiAgICAgRXZhc19PYmplY3QqIGdldEV2YXNPYmplY3QoRXZh
cyopIG92ZXJyaWRlOwogI2VuZGlmCiAKKyAgICBXRUJDT1JFX0VYUE9SVCBOYXRpdmVJbWFnZVB0
ciBuYXRpdmVJbWFnZSgpIG92ZXJyaWRlOworICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdl
T2ZTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKICAgICBOYXRpdmVJbWFnZVB0ciBuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIG92ZXJyaWRlOwogICAgIEltYWdlT3JpZW50YXRpb24g
b3JpZW50YXRpb25Gb3JDdXJyZW50RnJhbWUoKSBvdmVycmlkZSB7IHJldHVybiBmcmFtZU9yaWVu
dGF0aW9uQXRJbmRleChjdXJyZW50RnJhbWUoKSk7IH0KKyAgICBWZWN0b3I8TmF0aXZlSW1hZ2VQ
dHI+IGZyYW1lc05hdGl2ZUltYWdlcygpIG92ZXJyaWRlOworICAgIAorICAgIFdFQkNPUkVfRVhQ
T1JUIGJvb2wgaXNBbG1vc3RTb2xpZENvbG9yKCk7CiAKICAgICBib29sIGN1cnJlbnRGcmFtZUtu
b3duVG9CZU9wYXF1ZSgpIG92ZXJyaWRlOwogCkBAIC0yMTUsNyArMTYyLDYgQEAgcHJvdGVjdGVk
OgogICAgIHNpemVfdCBmcmFtZUNvdW50KCk7CiAKICAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUlt
YWdlQXRJbmRleChzaXplX3QsIGZsb2F0IHByZXNlbnRhdGlvblNjYWxlSGludCA9IDEpOwotICAg
IE5hdGl2ZUltYWdlUHRyIGNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCk7CiAK
ICAgICBib29sIGhhdmVGcmFtZUltYWdlQXRJbmRleChzaXplX3QpOwogCkBAIC0yMjUsMTEgKzE3
MSwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBmcmFtZU9yaWVudGF0aW9u
QXRJbmRleChzaXplX3QpOwogCiAgICAgLy8gRGVjb2RlcyBhbmQgY2FjaGVzIGEgZnJhbWUuIE5l
dmVyIGFjY2Vzc2VkIGV4Y2VwdCBpbnRlcm5hbGx5LgotICAgIGVudW0gSW1hZ2VGcmFtZUNhY2hp
bmcgeyBDYWNoZU1ldGFkYXRhT25seSwgQ2FjaGVNZXRhZGF0YUFuZEZyYW1lIH07Ci0gICAgdm9p
ZCBjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZUNh
Y2hpbmcgPSBDYWNoZU1ldGFkYXRhQW5kRnJhbWUpOworICAgIHZvaWQgY2FjaGVGcmFtZShzaXpl
X3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nID0gSW1h
Z2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOwogCiAgICAgLy8gQ2FsbGVk
IGJlZm9yZSBhY2Nlc3NpbmcgbV9mcmFtZXNbaW5kZXhdIGZvciBpbmZvIHdpdGhvdXQgZGVjb2Rp
bmcuIFJldHVybnMgZmFsc2Ugb24gaW5kZXggb3V0IG9mIGJvdW5kcy4KLSAgICBib29sIGVuc3Vy
ZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4LCBJbWFnZUZyYW1lQ2FjaGluZyA9IENhY2hlTWV0
YWRhdGFBbmRGcmFtZSk7CisgICAgYm9vbCBlbnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVfdCBpbmRl
eCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgPSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0
YWRhdGFBbmRJbWFnZSk7CiAKICAgICAvLyBDYWxsZWQgdG8gaW52YWxpZGF0ZSBjYWNoZWQgZGF0
YS4gV2hlbiB8ZGVzdHJveUFsbHwgaXMgdHJ1ZSwgd2Ugd2lwZSBvdXQKICAgICAvLyB0aGUgZW50
aXJlIGZyYW1lIGJ1ZmZlciBjYWNoZSBhbmQgdGVsbCB0aGUgaW1hZ2Ugc291cmNlIHRvIGRlc3Ry
b3kKQEAgLTI5Miw3ICsyMzcsNyBAQCBwcml2YXRlOgogICAgIG11dGFibGUgSW50U2l6ZSBtX3Np
emVSZXNwZWN0aW5nT3JpZW50YXRpb247CiAKICAgICBzaXplX3QgbV9jdXJyZW50RnJhbWUgeyAw
IH07IC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBmcmFtZSBvZiBhbmltYXRpb24uCi0gICAg
VmVjdG9yPEZyYW1lRGF0YSwgMT4gbV9mcmFtZXM7IC8vIEFuIGFycmF5IG9mIHRoZSBjYWNoZWQg
ZnJhbWVzIG9mIHRoZSBhbmltYXRpb24uIFdlIGhhdmUgdG8gcmVmIGZyYW1lcyB0byBwaW4gdGhl
bSBpbiB0aGUgY2FjaGUuCisgICAgVmVjdG9yPEltYWdlRnJhbWVEYXRhLCAxPiBtX2ZyYW1lczsg
Ly8gQW4gYXJyYXkgb2YgdGhlIGNhY2hlZCBmcmFtZXMgb2YgdGhlIGFuaW1hdGlvbi4gV2UgaGF2
ZSB0byByZWYgZnJhbWVzIHRvIHBpbiB0aGVtIGluIHRoZSBjYWNoZS4KIAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxUaW1lcj4gbV9mcmFtZVRpbWVyOwogICAgIGludCBtX3JlcGV0aXRpb25Db3VudCB7
IGNBbmltYXRpb25Ob25lIH07IC8vIEhvdyBtYW55IHRvdGFsIGFuaW1hdGlvbiBsb29wcyB3ZSBz
aG91bGQgZG8uIFRoaXMgd2lsbCBiZSBjQW5pbWF0aW9uTm9uZSBpZiB0aGlzIGltYWdlIHR5cGUg
aXMgaW5jYXBhYmxlIG9mIGFuaW1hdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwUGl4ZWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTY4MWU0YTZjNGNjMDlmZTk0YmRk
ODE0NWQxMDRiZjBiZmQyZTlmMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oCkBAIC0wLDAgKzEsMTczIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6
ZS5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQml0bWFwUGl4ZWxzIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gY3JlYXRlKGNvbnN0
IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPEJpdG1hcFBpeGVscz4oc2l6ZSwgcHJlbXVsdGlwbHlBbHBo
YSk7CisgICAgfQorCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxCaXRtYXBQaXhlbHM+IGNy
ZWF0ZShjb25zdCBCaXRtYXBQaXhlbHMmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8Qml0bWFwUGl4ZWxzPihvdGhlcik7CisgICAgfQorCisgICAgQml0bWFw
UGl4ZWxzKGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSA9IHRydWUp
CisgICAgICAgIDogbV9wcmVtdWx0aXBseUFscGhhKHByZW11bHRpcGx5QWxwaGEpCisgICAgewor
ICAgICAgICBBU1NFUlQoIXNpemUuaXNFbXB0eSgpKTsKKyAgICAgICAgc2V0U2l6ZShzaXplKTsK
KyAgICB9CisKKyAgICBCaXRtYXBQaXhlbHMoY29uc3QgQml0bWFwUGl4ZWxzJiBvdGhlcikKKyAg
ICB7CisgICAgICAgIGlmICh0aGlzID09ICZvdGhlcikKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgICAgIG1fYmFja2luZ1N0b3JlID0gb3RoZXIubV9iYWNraW5nU3RvcmU7Cisg
ICAgICAgIG1fcGl4ZWxzID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOworICAgICAgICBtX3NpemUg
PSBvdGhlci5tX3NpemU7CisgICAgICAgIG1fcHJlbXVsdGlwbHlBbHBoYSA9IG90aGVyLm1fcHJl
bXVsdGlwbHlBbHBoYTsKKyAgICB9CisKKyAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBt
X3NpemUud2lkdGgoKTsgfQorICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUu
aGVpZ2h0KCk7IH0KKworICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlKCkgY29uc3Q7CisKKyAgICBi
b29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAgIGlmICghbV9i
YWNraW5nU3RvcmUudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUuYXJlYSgpKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIG1fYmFja2luZ1N0b3JlLnJlc2l6ZShz
aXplLmFyZWEoKSk7CisgICAgICAgIG1fcGl4ZWxzID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOwor
ICAgICAgICBtX3NpemUgPSBzaXplOworICAgICAgICBjbGVhcigpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBSR0JBMzIqIGF0KGludCB4LCBpbnQgeSkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3BpeGVscyArIHkgKiBtX3NpemUud2lkdGgoKSArIHg7CisgICAg
fQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtZW1zZXQobV9waXhlbHMsIDAs
IG1fc2l6ZS5hcmVhKCkgKiBzaXplb2YoUkdCQTMyKSk7CisgICAgfQorCisgICAgdm9pZCBjbGVh
clJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIGlmIChyZWN0LmlzRW1w
dHkoKSB8fCBpbkJvdW5kcyhyZWN0KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgIHNpemVfdCByZWN0V2lkdGhJbkJ5dGVzID0gcmVjdC53aWR0aCgpICogc2l6ZW9mKFJH
QkEzMik7CisgICAgICAgIFJHQkEzMiogc3RhcnQgPSBhdChyZWN0LngoKSwgcmVjdC55KCkpOwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QuaGVpZ2h0KCk7ICsraSkgeworICAgICAg
ICAgICAgbWVtc2V0KHN0YXJ0LCAwLCByZWN0V2lkdGhJbkJ5dGVzKTsKKyAgICAgICAgICAgIHN0
YXJ0ICs9IG1fc2l6ZS53aWR0aCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCByZXBl
YXRGaXJzdFJvdyhjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHJlY3Qu
aXNFbXB0eSgpIHx8IGluQm91bmRzKHJlY3QpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkgKiBzaXpl
b2YoUkdCQTMyKTsKKyAgICAgICAgUkdCQTMyKiBzcmMgPSBhdChyZWN0LngoKSwgcmVjdC55KCkp
OworICAgICAgICBSR0JBMzIqIGRlc3QgPSBzcmMgKyBtX3NpemUud2lkdGgoKTsKKyAgICAgICAg
Zm9yIChpbnQgaSA9IDE7IGkgPCByZWN0LmhlaWdodCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1l
bWNweShkZXN0LCBzcmMsIHJlY3RXaWR0aEluQnl0ZXMpOworICAgICAgICAgICAgZGVzdCArPSBt
X3NpemUud2lkdGgoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgc2V0UkdCQShpbnQg
eCwgaW50IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEp
CisgICAgeworICAgICAgICBzZXRSR0JBKGF0KHgsIHkpLCByLCBnLCBiLCBhKTsKKyAgICB9CisK
KyAgICB2b2lkIHNldFJHQkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1
bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5
QWxwaGEgfHwgYSA+PSAyNTUpCisgICAgICAgICAgICAqZGVzdCA9IG1ha2VSR0JBKHIsIGcsIGIs
IGEpOworICAgICAgICBlbHNlIGlmICghYSkKKyAgICAgICAgICAgICpkZXN0ID0gMDsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgKmRlc3QgPSBtYWtlUHJlbXVsdGlwbGllZFJHQkEociwgZywg
YiwgYSk7CisgICAgfQorCisgICAgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVk
IHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAgeworICAgICAgICBp
ZiAoIWEpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoYSA+PSAy
NTUgfHwgIWFscGhhQ2hhbm5lbCgqZGVzdCkpIHsKKyAgICAgICAgICAgIHNldFJHQkEoZGVzdCwg
ciwgZywgYiwgYSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKQorICAgICAgICAgICAgKmRlc3QgPSBtYWtl
UHJlbXVsdGlwbGllZFJHQkEocmVkQ2hhbm5lbCgqZGVzdCksIGdyZWVuQ2hhbm5lbCgqZGVzdCks
IGJsdWVDaGFubmVsKCpkZXN0KSwgYWxwaGFDaGFubmVsKCpkZXN0KSk7CisgICAgICAgIAorICAg
ICAgICBSR0JBMzIgc3JjID0gbWFrZVJHQkEociwgZywgYiwgYSk7CisgICAgICAgICpkZXN0ID0g
Q29sb3IoKmRlc3QpLmJsZW5kKHNyYykucmdiKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIW1f
cHJlbXVsdGlwbHlBbHBoYSkKKyAgICAgICAgICAgICpkZXN0ID0gbWFrZVVuUHJlbXVsdGlwbGll
ZFJHQkEocmVkQ2hhbm5lbCgqZGVzdCksIGdyZWVuQ2hhbm5lbCgqZGVzdCksIGJsdWVDaGFubmVs
KCpkZXN0KSwgYWxwaGFDaGFubmVsKCpkZXN0KSk7CisgICAgfQorCisgICAgYm9vbCBpbkJvdW5k
cyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSW50
UmVjdChJbnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHBvaW50KTsKKyAgICB9CisKKyAgICBi
b29sIGluQm91bmRzKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHJlY3QpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBWZWN0b3I8UkdCQTMyPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBSR0JB
MzIqIG1fcGl4ZWxzIHsgbnVsbHB0ciB9OworICAgIEludFNpemUgbV9zaXplOworICAgIGJvb2wg
bV9wcmVtdWx0aXBseUFscGhhIHsgdHJ1ZSB9OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCmluZGV4IDRlMjVhYTZmZDc0ZDFlNDZjNTQxNjE0OThi
YzE3MmJmNjAwODc1ZDEuLjQzOWY1YTYzYzdiZWJlNTYwNDJiMjRlN2Q3MmVjY2VjZjM2YzQwYzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKQEAgLTQ5LDYg
KzQ5LDQwIEBAIGNvbnN0IFJHQkEzMiBDb2xvcjo6dHJhbnNwYXJlbnQ7CiBzdGF0aWMgY29uc3Qg
UkdCQTMyIGxpZ2h0ZW5lZEJsYWNrID0gMHhGRjU0NTQ1NDsKIHN0YXRpYyBjb25zdCBSR0JBMzIg
ZGFya2VuZWRXaGl0ZSA9IDB4RkZBQkFCQUI7CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbXVs
dGlwbHkyNTUodW5zaWduZWQgYykKK3sKKyAgICAvLyBjICogMjU1CisgICAgLy8gICA9IGMgKiAo
MjU2IC0gMSkKKyAgICAvLyAgID0gYyAqIDI1NiAtIGMKKyAgICByZXR1cm4gKGMgPDwgOCkgLSBj
OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRpdmlkZTI1NSh1bnNpZ25lZCBjKQorewor
ICAgIC8vIGMgLyAyNTUKKyAgICAvLyAgID0gYyAvIDI1NiAqICgxICsgMSAvIDI1NSkKKyAgICAv
LyAgID0gKGMgKyBjIC8gMjU1KSAvIDI1NgorICAgIC8vICAgPSAoYyArIChjICsgYyAvIDI1NSkg
LyAyNTYpIC8gMjU2CisgICAgLy8gICA9IChjICsgYyAvIDI1NiArIGMgLyAoMjU1IHggMjU2KSkg
LyAyNTYKKyAgICAvLyAgfj0gKGMgKyBjIC8gMjU2ICsgMSkgLyAyNTYKKyAgICByZXR1cm4gKGMg
KyAoYyA+PiA4KSArIDEpID4+IDg7Cit9CisgICAgCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRp
dmlkZUNlaWwodW5zaWduZWQgYywgdW5zaWduZWQgZCkKK3sKKyAgICByZXR1cm4gKGMgKyBkIC0g
MSkgLyBkOworfQorICAgIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBwcmVtdWx0aXBsaWVkQ2hh
bm5lbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBhKQoreworICAgIHJldHVybiBkaXZpZGUyNTUoYyAq
IGEpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHVucHJlbXVsdGlwbGllZENoYW5uZWwo
dW5zaWduZWQgYywgdW5zaWduZWQgYSkKK3sKKyAgICByZXR1cm4gZGl2aWRlQ2VpbChtdWx0aXBs
eTI1NShjKSwgYSk7Cit9CisgICAgCiBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBi
KQogewogICAgIHJldHVybiAweEZGMDAwMDAwIHwgc3RkOjptYXgoMCwgc3RkOjptaW4ociwgMjU1
KSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAyNTUpKSA8PCA4IHwgc3RkOjptYXgo
MCwgc3RkOjptaW4oYiwgMjU1KSk7CkBAIC01OSw2ICs5MywxNiBAQCBSR0JBMzIgbWFrZVJHQkEo
aW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCiAgICAgcmV0dXJuIHN0ZDo6bWF4KDAsIHN0ZDo6
bWluKGEsIDI1NSkpIDw8IDI0IHwgc3RkOjptYXgoMCwgc3RkOjptaW4ociwgMjU1KSkgPDwgMTYg
fCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAyNTUpKSA8PCA4IHwgc3RkOjptYXgoMCwgc3RkOjpt
aW4oYiwgMjU1KSk7CiB9CiAKK1JHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGlu
dCBnLCBpbnQgYiwgaW50IGEpCit7CisgICAgcmV0dXJuIG1ha2VSR0JBKHByZW11bHRpcGxpZWRD
aGFubmVsKHIsIGEpLCBwcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBhKSwgcHJlbXVsdGlwbGllZENo
YW5uZWwoYiwgYSksIGEpOworfQorICAgIAorUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRSR0JB
KGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQoreworICAgIHJldHVybiBtYWtlUkdCQSh1bnBy
ZW11bHRpcGxpZWRDaGFubmVsKHIsIGEpLCB1bnByZW11bHRpcGxpZWRDaGFubmVsKGcsIGEpLCB1
bnByZW11bHRpcGxpZWRDaGFubmVsKGIsIGEpLCBhKTsKK30KKyAgICAKIHN0YXRpYyBpbnQgY29s
b3JGbG9hdFRvUkdCQUJ5dGUoZmxvYXQgZikKIHsKICAgICAvLyBXZSB1c2UgbHJvdW5kZiBhbmQg
MjU1IGluc3RlYWQgb2YgbmV4dGFmdGVyZigyNTYsIDApIHRvIG1hdGNoIENHJ3Mgcm91bmRpbmcK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCmluZGV4IGRkMjYyNzBiYjQ2
NjBiMzNhZTA3MGU4Yzk0NDUyMGQ3Mjg0NTRiOGEuLmE1NDUzMmM3NzU1YTdjODc2OTM2MjQwY2Fl
NGVjMzdhNGRhMGQwNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
aApAQCAtNTQsNiArNTQsOCBAQCB0eXBlZGVmIHVuc2lnbmVkIFJHQkEzMjsgLy8gRGVwcmVjYXRl
ZDogVHlwZSBmb3IgYW4gUkdCQSBxdWFkcnVwbGV0LiBVc2UgUkdCQSBjbAogCiBXRUJDT1JFX0VY
UE9SVCBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBiKTsKIFdFQkNPUkVfRVhQT1JU
IFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7CitXRUJDT1JFX0VY
UE9SVCBSR0JBMzIgbWFrZVByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGlu
dCBhKTsKK1dFQkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQg
ciwgaW50IGcsIGludCBiLCBpbnQgYSk7CiAKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBjb2xvcldp
dGhPdmVycmlkZUFscGhhKFJHQkEzMiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSk7CiBXRUJD
T1JFX0VYUE9SVCBSR0JBMzIgY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIE9w
dGlvbmFsPGZsb2F0PiBvdmVycmlkZUFscGhhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZS5oCmluZGV4IDdhMjk5OTJmNzcxODhlMDM4MjhkODBhNjViOGJlMmNkOGRjMmRl
NzYuLjhlN2I1MmIxZjRmMzFjNzRhM2NiMmExMzIxNWRhNzdhMmIxOGMwN2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaApAQCAtMTM3LDggKzEzNywxMSBAQCBwdWJs
aWM6CiAKICAgICBlbnVtIFRpbGVSdWxlIHsgU3RyZXRjaFRpbGUsIFJvdW5kVGlsZSwgU3BhY2VU
aWxlLCBSZXBlYXRUaWxlIH07CiAKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUlt
YWdlKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0
aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50U2l6ZSYpIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICB2
aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgeyByZXR1
cm4gbnVsbHB0cjsgfQogICAgIHZpcnR1YWwgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkZv
ckN1cnJlbnRGcmFtZSgpIHsgcmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsgfQorICAgIHZpcnR1
YWwgVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBmcmFtZXNOYXRpdmVJbWFnZXMoKSB7IHJldHVybiB7
IH07IH0KIAogICAgIC8vIEFjY2Vzc29ycyBmb3IgbmF0aXZlIGltYWdlIGZvcm1hdHMuCiAKQEAg
LTE1MCwxMiArMTUzLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgQ0ZEYXRhUmVmIGdldFRJRkZS
ZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCi0jaWYgVVNFKENH
KQotICAgIHZpcnR1YWwgQ0dJbWFnZVJlZiBnZXRDR0ltYWdlUmVmKCkgeyByZXR1cm4gbnVsbHB0
cjsgfQotICAgIHZpcnR1YWwgQ0dJbWFnZVJlZiBnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUoY29u
c3QgSW50U2l6ZSYpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIFJldGFpblB0cjxD
RkFycmF5UmVmPiBnZXRDR0ltYWdlQXJyYXkoKSB7IHJldHVybiBudWxscHRyOyB9Ci0jZW5kaWYK
LQogI2lmIFBMQVRGT1JNKFdJTikKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SEJJVE1BUChIQklUTUFQ
KSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBnZXRIQklUTUFQT2ZTaXplKEhC
SVRNQVAsIGNvbnN0IEludFNpemUqKSB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTc5LDYgKzE3Niw4
IEBAIHB1YmxpYzoKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgdmlydHVhbCBib29sIG5vdFNv
bGlkQ29sb3IoKSB7IHJldHVybiB0cnVlOyB9CiAjZW5kaWYKKyAgICAKKyAgICB2aXJ0dWFsIHZv
aWQgbGF5b3V0SWZOZWVkZWQoKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRleHRTdHJl
YW0mKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VGcmFtZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VGcmFtZURhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmZDIwY2Y4ZTYxZjRiMWExZmUwOGViMzMy
YjcxNjU3ZjAxNDhjMTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5jcHAKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkltYWdlRnJhbWVEYXRhLmgiCisKKyNpbmNsdWRlICJDb2xvci5oIgorCisj
aWYgVVNFKENHKQorI2luY2x1ZGUgIkltYWdlRGVjb2RlckNHLmgiCisjZWxzZQorI2luY2x1ZGUg
IkltYWdlRGVjb2Rlci5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VGcmFtZURhdGE6OkltYWdlRnJhbWVEYXRhKCkK
K3sKK30KKworSW1hZ2VGcmFtZURhdGE6OkltYWdlRnJhbWVEYXRhKE5hdGl2ZUltYWdlUHRyJiYg
aW1hZ2UpCisgICAgOiBtX3N0YXR1cyhEZWNvZGluZ1N0YXR1czo6Q29tcGxldGUpCisgICAgLCBt
X2ltYWdlKFdURk1vdmUoaW1hZ2UpKQoreworICAgIG1fc2l6ZSA9IFBsYXRmb3JtSW1hZ2UobV9p
bWFnZSkuc2l6ZSgpOworICAgIG1faGFzQWxwaGEgPSBQbGF0Zm9ybUltYWdlKG1faW1hZ2UpLmhh
c0FscGhhKCk7Cit9CisKK0ltYWdlRnJhbWVEYXRhOjpJbWFnZUZyYW1lRGF0YShJbWFnZURlY29k
ZXImIGRlY29kZXIsIHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xl
dmVsLCBDYWNoaW5nIGZyYW1lQ2FjaGluZykKK3sKKyAgICBBU1NFUlQoZnJhbWVDYWNoaW5nID09
IENhY2hpbmc6Ok1ldGFkYXRhIHx8IGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YUFu
ZEltYWdlKTsKKyAgICAKKyAgICBpZiAoZnJhbWVDYWNoaW5nID09IENhY2hpbmc6OkltYWdlIHx8
IGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YUFuZEltYWdlKSB7CisgICAgICAgIG1f
aW1hZ2UgPSBkZWNvZGVyLmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGluZGV4LCBzdWJzYW1wbGlu
Z0xldmVsKTsKKyAgICAgICAgbV9zdWJzYW1wbGluZ0xldmVsID0gc3Vic2FtcGxpbmdMZXZlbDsK
KyAgICB9CisgICAgCisgICAgaWYgKGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YSB8
fCBmcmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSkgeworICAgICAgICBt
X29yaWVudGF0aW9uID0gZGVjb2Rlci5vcmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOworICAgICAg
ICBtX3N0YXR1cyA9IGRlY29kZXIuZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCkgPyBEZWNv
ZGluZ1N0YXR1czo6Q29tcGxldGUgOiBEZWNvZGluZ1N0YXR1czo6UGFydGlhbDsKKyAgICAgICAg
CisgICAgICAgIGlmIChkZWNvZGVyLnJlcGV0aXRpb25Db3VudCgpICE9IGNBbmltYXRpb25Ob25l
KQorICAgICAgICAgICAgbV9kdXJhdGlvbiA9IGRlY29kZXIuZnJhbWVEdXJhdGlvbkF0SW5kZXgo
aW5kZXgpOworICAgICAgICAKKyAgICAgICAgbV9oYXNBbHBoYSA9IGRlY29kZXIuZnJhbWVIYXNB
bHBoYUF0SW5kZXgoaW5kZXgpOworICAgICAgICBtX3NpemUgPSBkZWNvZGVyLmZyYW1lU2l6ZUF0
SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOworICAgIH0KK30KKworSW1hZ2VGcmFtZURh
dGE6On5JbWFnZUZyYW1lRGF0YSgpCit7CisgICAgY2xlYXJTdWJJbWFnZXMoKTsKK30KKyAgICAK
K0ltYWdlRnJhbWVEYXRhJiBJbWFnZUZyYW1lRGF0YTo6b3BlcmF0b3I9KGNvbnN0IEltYWdlRnJh
bWVEYXRhJiBvdGhlcikKK3sKKyAgICBpZiAodGhpcyA9PSAmb3RoZXIpCisgICAgICAgIHJldHVy
biAqdGhpczsKKworICAgIG1fc3RhdHVzID0gb3RoZXIubV9zdGF0dXM7CisgICAgbV9zaXplID0g
b3RoZXIubV9zaXplOworICAgIG1faW1hZ2UgPSBvdGhlci5tX2ltYWdlOworICAgIAorICAgIG1f
cGl4ZWxzID0gb3RoZXIucGl4ZWxzKCkgPyBCaXRtYXBQaXhlbHM6OmNyZWF0ZSgqb3RoZXIucGl4
ZWxzKCkpIDogbnVsbHB0cjsKKyAgICAKKyAgICBtX29yaWVudGF0aW9uID0gb3RoZXIubV9vcmll
bnRhdGlvbjsKKyAgICBtX3N1YnNhbXBsaW5nTGV2ZWwgPSBvdGhlci5tX3N1YnNhbXBsaW5nTGV2
ZWw7CisgICAgbV9kdXJhdGlvbiA9IG90aGVyLm1fZHVyYXRpb247CisgICAgbV9oYXNBbHBoYSA9
IG90aGVyLm1faGFzQWxwaGE7CisgICAgcmV0dXJuICp0aGlzOworfQorCit2b2lkIEltYWdlRnJh
bWVEYXRhOjpjbGVhclN1YkltYWdlcygpCit7CisgICAgaWYgKCFtX2ltYWdlKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5jbGVhclN1YkltYWdlcygp
OworfQorCit1bnNpZ25lZCBJbWFnZUZyYW1lRGF0YTo6Y2xlYXIoQ2FjaGluZyBmcmFtZUNhY2hp
bmcpCit7CisgICAgQVNTRVJUKGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpFbXB0eSB8fCBmcmFt
ZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGEpOworICAgIAorICAgIHVuc2lnbmVkIGZyYW1l
Qnl0ZXMgPSB0aGlzLT5mcmFtZUJ5dGVzKCk7CisgICAgCisgICAgY2xlYXJTdWJJbWFnZXMoKTsK
KyAgICAKKyAgICBpZiAoZnJhbWVDYWNoaW5nID09IENhY2hpbmc6OkVtcHR5KQorICAgICAgICAq
dGhpcyA9IEltYWdlRnJhbWVEYXRhKCk7CisgICAgZWxzZQorICAgICAgICBtX2ltYWdlID0gbnVs
bHB0cjsKKyAgICAKKyAgICByZXR1cm4gZnJhbWVCeXRlczsKK30KKworQ29sb3IgSW1hZ2VGcmFt
ZURhdGE6OnNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKCFoYXNJbWFn
ZSgpIHx8IG1fc2l6ZSAhPSBJbnRTaXplKDEsIDEpKQorICAgICAgICByZXR1cm4gQ29sb3IoKTsK
KyAgICAKKyAgICByZXR1cm4gUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5zaW5nbGVQaXhlbFNvbGlk
Q29sb3IoKTsKK30KKworYm9vbCBJbWFnZUZyYW1lRGF0YTo6aXNBbG1vc3RTb2xpZENvbG9yKCkg
Y29uc3QKK3sKKyAgICBpZiAoIWhhc0ltYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICByZXR1cm4gUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5pc0FsbW9zdFNvbGlkQ29sb3Io
KTsKK30KKyAgICAKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlRnJhbWVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUZyYW1lRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjliMTRhZGFlYTU5ZTk5N2VmZTY0ODgxN2I4YWE5
ZGM5OGVlZWRmN2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUZyYW1lRGF0YS5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJCaXRtYXBQaXhlbHMuaCIKKyNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCisjaW5jbHVk
ZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgQ29sb3I7CitjbGFzcyBJbWFnZURlY29kZXI7CisKKy8vIFN1YnNh
bXBsaW5nTGV2ZWwuIDAgaXMgbm8gc3Vic2FtcGxpbmcsIDEgaXMgaGFsZiBkaW1lbnNpb25zIG9u
IGVhY2ggYXhpcyBldGMuCit1c2luZyBTdWJzYW1wbGluZ0xldmVsID0gdWludDhfdDsKKworZW51
bSA6IFN1YnNhbXBsaW5nTGV2ZWwgeworICAgIE1pblN1YnNhbXBsaW5nTGV2ZWwgPSAwLAorICAg
IE1heFN1YnNhbXBsaW5nTGV2ZWwgPSAzLAorICAgIERlZmF1bHRTdWJzYW1wbGluZ0xldmVsID0g
TWluU3Vic2FtcGxpbmdMZXZlbAorfTsKKworY2xhc3MgSW1hZ2VGcmFtZURhdGEgeworcHVibGlj
OgorICAgIGVudW0gY2xhc3MgQ2FjaGluZyB7IEVtcHR5LCBNZXRhZGF0YSwgSW1hZ2UsIE1ldGFk
YXRhQW5kSW1hZ2UgfTsKKyAgICBlbnVtIGNsYXNzIERlY29kaW5nU3RhdHVzIHsgRW1wdHksIFBh
cnRpYWwsIENvbXBsZXRlIH07CisgICAgCisgICAgSW1hZ2VGcmFtZURhdGEoKTsKKyAgICBJbWFn
ZUZyYW1lRGF0YShOYXRpdmVJbWFnZVB0ciYmKTsKKyAgICBJbWFnZUZyYW1lRGF0YShJbWFnZURl
Y29kZXImLCBzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgPSBEZWZhdWx0U3Vic2FtcGxp
bmdMZXZlbCwgQ2FjaGluZyA9IENhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOworICAgIEltYWdl
RnJhbWVEYXRhKGNvbnN0IEltYWdlRnJhbWVEYXRhJiBvdGhlcikgeyBvcGVyYXRvcj0ob3RoZXIp
OyB9CisKKyAgICB+SW1hZ2VGcmFtZURhdGEoKTsKKworICAgIEltYWdlRnJhbWVEYXRhJiBvcGVy
YXRvcj0oY29uc3QgSW1hZ2VGcmFtZURhdGEmIG90aGVyKTsKKyAgICAKKyAgICB1bnNpZ25lZCBj
bGVhcihDYWNoaW5nKTsKKyAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdDsK
KyAgICBib29sIGlzQWxtb3N0U29saWRDb2xvcigpIGNvbnN0OworICAgIAorICAgIERlY29kaW5n
U3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CisgICAgYm9vbCBpc0Nv
bXBsZXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6OkNvbXBs
ZXRlOyB9CisgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAg
dW5zaWduZWQgZnJhbWVCeXRlcygpIGNvbnN0IHsgcmV0dXJuIGhhc0ltYWdlKCkgPyBtX3NpemUu
YXJlYSgpICogNCA6IDA7IH0KKyAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZSgpIGNvbnN0IHsgcmV0
dXJuIG1faW1hZ2U7IH0KKyAgICBCaXRtYXBQaXhlbHMqIHBpeGVscygpIGNvbnN0IHsgcmV0dXJu
IG1fcGl4ZWxzID8gbV9waXhlbHMuZ2V0KCkgOiBudWxscHRyOyB9CisgICAgCisgICAgSW1hZ2VP
cmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZW50YXRpb247IH0K
KyAgICBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwoKSBjb25zdCB7IHJldHVybiBt
X3N1YnNhbXBsaW5nTGV2ZWw7IH0KKyAgICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZHVyYXRpb247IH0KKyAgICAKKyAgICBib29sIGhhc0FscGhhKCkgY29uc3QgeyByZXR1cm4g
bV9oYXNBbHBoYTsgfQorICAgIGJvb2wgaGFzSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdl
OyB9CisgICAgYm9vbCBoYXNNZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuICFtX3NpemUuaXNFbXB0
eSgpOyB9CisgICAgYm9vbCBoYXNQaXhlbHMoKSBjb25zdCB7IHJldHVybiBtX3BpeGVscyAhPSBu
dWxscHRyOyB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgY2xlYXJTdWJJbWFnZXMoKTsKKyAg
ICAKKyAgICBEZWNvZGluZ1N0YXR1cyBtX3N0YXR1cyB7IERlY29kaW5nU3RhdHVzOjpFbXB0eSB9
OworICAgIEludFNpemUgbV9zaXplOworICAgIE5hdGl2ZUltYWdlUHRyIG1faW1hZ2U7CisgICAg
c3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gbV9waXhlbHM7CisgICAgCisgICAgSW1hZ2VP
cmllbnRhdGlvbiBtX29yaWVudGF0aW9uIHsgRGVmYXVsdEltYWdlT3JpZW50YXRpb24gfTsKKyAg
ICBTdWJzYW1wbGluZ0xldmVsIG1fc3Vic2FtcGxpbmdMZXZlbCB7IDAgfTsKKyAgICBmbG9hdCBt
X2R1cmF0aW9uIHsgMCB9OworICAgIGJvb2wgbV9oYXNBbHBoYSB7IHRydWUgfTsKK307CisgICAg
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNv
dXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5j
cHAKaW5kZXggZGRkOGE1NWJhMDkwNmM1ODY2YTE5MmNmOGU0MTRlYTcwN2I3MjhhYy4uODJmNmUy
ZDZlNDU0MzNkYTFhN2Q1NmIzNzBkZmE2MWE0YzQxOTEzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcApAQCAtMjI0LDYgKzIyNCwxMSBA
QCBOYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6
ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldgogICAgIHJldHVybiBpbml0aWFsaXplZCgpID8gbV9k
ZWNvZGVyLT5jcmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCkg
OiBudWxscHRyOwogfQogCitJbWFnZUZyYW1lRGF0YSBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVE
YXRhQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZl
bCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgY2FjaGluZykKK3sKKyAgICByZXR1cm4gaW5pdGlh
bGl6ZWQoKSA/IEltYWdlRnJhbWVEYXRhKCptX2RlY29kZXIsIGluZGV4LCBzdWJzYW1wbGluZ0xl
dmVsLCBjYWNoaW5nKSA6IEltYWdlRnJhbWVEYXRhKCk7Cit9CisgICAgCiB2b2lkIEltYWdlU291
cmNlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAogewogICAgIGlmIChtX2FsbG93U3Vic2Ft
cGxpbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
aAppbmRleCA2MDM1NzM5YjdlOGIwOTZkYzhkZmU5YzUzMGE0MmM2ZjI5MWJkYTAwLi5hNDBjN2Nl
OTMwN2NkYWRmMDc5YWI3MDFhODI3OTliNjkwNTI5ZDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNpZm5k
ZWYgSW1hZ2VTb3VyY2VfaAogI2RlZmluZSBJbWFnZVNvdXJjZV9oCiAKKyNpbmNsdWRlICJJbWFn
ZUZyYW1lRGF0YS5oIgogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJJ
bnRQb2ludC5oIgogI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCkBAIC02Myw5ICs2NCw2IEBA
IGNvbnN0IGludCBjQW5pbWF0aW9uTG9vcE9uY2UgPSAwOwogY29uc3QgaW50IGNBbmltYXRpb25M
b29wSW5maW5pdGUgPSAtMTsKIGNvbnN0IGludCBjQW5pbWF0aW9uTm9uZSA9IC0yOwogCi0vLyBT
dWJzYW1wbGluZ0xldmVsLiAwIGlzIG5vIHN1YnNhbXBsaW5nLCAxIGlzIGhhbGYgZGltZW5zaW9u
cyBvbiBlYWNoIGF4aXMgZXRjLgotdHlwZWRlZiBzaG9ydCBTdWJzYW1wbGluZ0xldmVsOwotCiBj
bGFzcyBJbWFnZVNvdXJjZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VTb3VyY2Up
OwogICAgIGZyaWVuZCBjbGFzcyBCaXRtYXBJbWFnZTsKQEAgLTEzMiwxOCArMTMwLDE5IEBAIHB1
YmxpYzoKICAgICBib29sIGFsbG93U3Vic2FtcGxpbmdPZkZyYW1lQXRJbmRleChzaXplX3QpIGNv
bnN0OwogICAgIAogICAgIC8vIFNpemUgb2Ygb3B0aW9uYWxseSBzdWJzYW1wbGVkIGZyYW1lLgot
ICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSAw
LCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0gPSBEb05vdFJlc3BlY3RJbWFnZU9yaWVudGF0
aW9uKSBjb25zdDsKKyAgICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1w
bGluZ0xldmVsID0gRGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwsIFJlc3BlY3RJbWFnZU9yaWVudGF0
aW9uRW51bSA9IERvTm90UmVzcGVjdEltYWdlT3JpZW50YXRpb24pIGNvbnN0OwogICAgIAogICAg
IC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBkZWNvZGVkIGZyYW1lLiBJZiB0
aGUgZnJhbWUgaXMgbm90IHlldAogICAgIC8vIGRlY29kZWQgdGhlbiByZXR1cm4gMC4KLSAgICB1
bnNpZ25lZCBmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSAwKSBj
b25zdDsKKyAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5n
TGV2ZWwgPSBEZWZhdWx0U3Vic2FtcGxpbmdMZXZlbCkgY29uc3Q7CiAgICAgCiAgICAgZmxvYXQg
ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90KTsKICAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uQXRJbmRleChzaXplX3QpIGNvbnN0OyAvLyBFWElGIGltYWdlIG9yaWVudGF0aW9uCiAg
ICAgCiAgICAgLy8gQ2FsbGVycyBzaG91bGQgbm90IGNhbGwgdGhpcyBhZnRlciBjYWxsaW5nIGNs
ZWFyKCkgd2l0aCBhIGhpZ2hlciBpbmRleDsKICAgICAvLyBzZWUgY29tbWVudHMgb24gY2xlYXIo
KSBhYm92ZS4KLSAgICBOYXRpdmVJbWFnZVB0ciBjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXpl
X3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSAwKTsKKyAgICBOYXRpdmVJbWFnZVB0ciBjcmVhdGVGcmFt
ZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBEZWZhdWx0U3Vic2FtcGxp
bmdMZXZlbCk7CisgICAgSW1hZ2VGcmFtZURhdGEgY3JlYXRlRnJhbWVEYXRhQXRJbmRleChzaXpl
X3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBEZWZhdWx0U3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFt
ZURhdGE6OkNhY2hpbmcgPSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGFBbmRJbWFn
ZSk7CiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVf
dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9y
bUltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYWI3YWVhNDg5ZjNlYjJhODI4NzcxYzIxMDNlOGQ0ZDBiZTE3YmU1ZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRm
b3JtSW1hZ2UuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBl
cy5oIgorI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFn
ZVB0ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbG9yOworY2xhc3MgRmxv
YXRSZWN0OworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKKworY2xhc3Mg
UGxhdGZvcm1JbWFnZSB7CitwdWJsaWM6CisgICAgUGxhdGZvcm1JbWFnZShjb25zdCBOYXRpdmVJ
bWFnZVB0ciYgaW1hZ2UpCisgICAgICAgIDogbV9pbWFnZShpbWFnZSkKKyAgICB7CisgICAgfQor
CisgICAgYm9vbCBpc05pbCgpIGNvbnN0IHsgcmV0dXJuICFtX2ltYWdlOyB9CisgICAgdm9pZCBj
bGVhclN1YkltYWdlcygpOworCisgICAgSW50U2l6ZSBzaXplKCkgY29uc3Q7CisgICAgYm9vbCBo
YXNBbHBoYSgpIGNvbnN0OworICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0
OworICAgIGJvb2wgaXNBbG1vc3RTb2xpZENvbG9yKCkgY29uc3Q7CisgICAgdm9pZCBkcmF3KEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3IsIEJs
ZW5kTW9kZSwgY29uc3QgSW1hZ2VPcmllbnRhdGlvbiYpIGNvbnN0OworCisgICAgc3RhdGljIGZs
b2F0IHN1YnNhbXBsaW5nU2NhbGUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KTsKKworcHJpdmF0ZToKKyNpZiBVU0Uo
Q0cpCisgICAgQ0dJbWFnZVJlZiBjZ0ltYWdlUmVmKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZSA/
IG1faW1hZ2UuZ2V0KCkgOiBudWxscHRyOyB9CisjZW5kaWYKKyAgICBOYXRpdmVJbWFnZVB0ciBt
X2ltYWdlOworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCmluZGV4IGY0YzE0NTdi
YmIyNTU3NTRmMDBhMDYyNWVlODNlMDRkYTdjNmVmY2YuLmQ1MjBmNWQ1ODVhYzYwZGJhZWUyNTVl
MWI4M2MyNGRjNjg3MjEwYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZG
T2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0KQEAgLTIxMiw3
ICsyMTIsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6dXBk
YXRlRGlzcGxheU1vZGUoKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBtX3BhdXNlZEltYWdlID0gaW1hZ2UtPmdldENH
SW1hZ2VSZWYoKTsKKyAgICAgICAgICAgICAgICBtX3BhdXNlZEltYWdlID0gaW1hZ2UtPm5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFtX3BhdXNlZElt
YWdlKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fZGlzcGxheU1vZGUgPSBQYWludEl0QmxhY2s7
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc3MjJiZWM1M2FiOGEwOGE4ZGE4NTI4YjllMGQ3
YzRkMGNkNDEzNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJv
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkJpdG1hcEltYWdlLmgiCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJDYWlyb1V0
aWxpdGllcy5oIgotI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJQbGF0Zm9y
bUNvbnRleHRDYWlyby5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8Y2Fpcm8uaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgTmF0aXZlSW1hZ2UgewotCi1JbnRT
aXplIHNpemUoY29uc3QgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mIGltYWdlKQotewotICAgIHJl
dHVybiBjYWlyb1N1cmZhY2VTaXplKGltYWdlLmdldCgpKTsKLX0KLQotYm9vbCBoYXNBbHBoYShj
b25zdCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYgaW1hZ2UpCi17Ci0gICAgcmV0dXJuIGNhaXJv
X3N1cmZhY2VfZ2V0X2NvbnRlbnQoaW1hZ2UuZ2V0KCkpICE9IENBSVJPX0NPTlRFTlRfQ09MT1I7
Ci19Ci0KLUNvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcihjb25zdCBSZWZQdHI8Y2Fpcm9fc3Vy
ZmFjZV90PiYgaW1hZ2UpCi17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICAKLSAgICBpZiAoTmF0
aXZlSW1hZ2U6OnNpemUoaW1hZ2UpICE9IEludFNpemUoMSwgMSkpCi0gICAgICAgIHJldHVybiBD
b2xvcigpOwotCi0gICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoaW1hZ2UuZ2V0KCkpICE9
IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0KLSAg
ICBSR0JBMzIqIHBpeGVsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8UkdCQTMyKj4oY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFnZS5nZXQoKSkpOwotICAgIHJldHVybiBjb2xvckZyb21Q
cmVtdWx0aXBsaWVkQVJHQigqcGl4ZWwpOwotfQotCi19Ci0KLXZvaWQgQml0bWFwSW1hZ2U6OmRy
YXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmMsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLAotICAgIEJsZW5kTW9kZSBibGVu
ZE1vZGUsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikKLXsKLSAgICBp
ZiAoIWRzdC53aWR0aCgpIHx8ICFkc3QuaGVpZ2h0KCkgfHwgIXNyYy53aWR0aCgpIHx8ICFzcmMu
aGVpZ2h0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0YXJ0QW5pbWF0aW9uKCk7Ci0KLSAg
ICBhdXRvIHN1cmZhY2UgPSBmcmFtZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0gICAg
aWYgKCFzdXJmYWNlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdl
IHlldC4KLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ29sb3IgY29sb3IgPSBzaW5nbGVQaXhlbFNv
bGlkQ29sb3IoKTsKLSAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGZpbGxXaXRo
U29saWRDb2xvcihjb250ZXh0LCBkc3QsIGNvbG9yLCBvcCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBjb250ZXh0LnNhdmUoKTsKLQotICAgIC8vIFNldCB0aGUgY29tcG9zaXRpbmcg
b3BlcmF0aW9uLgotICAgIGlmIChvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyICYmIGJsZW5kTW9k
ZSA9PSBCbGVuZE1vZGVOb3JtYWwgJiYgIWZyYW1lSGFzQWxwaGFBdEluZGV4KG1fY3VycmVudEZy
YW1lKSkKLSAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlQ29w
eSk7Ci0gICAgZWxzZQotICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCwg
YmxlbmRNb2RlKTsKLQotI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0g
ICAgSW50U2l6ZSBzY2FsZWRTaXplID0gY2Fpcm9TdXJmYWNlU2l6ZShzdXJmYWNlLmdldCgpKTsK
LSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gYWRqdXN0U291cmNlUmVjdEZvckRvd25T
YW1wbGluZyhzcmMsIHNjYWxlZFNpemUpOwotI2Vsc2UKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRT
cmNSZWN0KHNyYyk7Ci0jZW5kaWYKLQotICAgIEltYWdlT3JpZW50YXRpb24gZnJhbWVPcmllbnRh
dGlvbihkZXNjcmlwdGlvbi5pbWFnZU9yaWVudGF0aW9uKCkpOwotICAgIGlmIChkZXNjcmlwdGlv
bi5yZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQot
ICAgICAgICBmcmFtZU9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgobV9jdXJy
ZW50RnJhbWUpOwotCi0gICAgRmxvYXRSZWN0IGRzdFJlY3QgPSBkc3Q7Ci0KLSAgICBpZiAoZnJh
bWVPcmllbnRhdGlvbiAhPSBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbikgewotICAgICAgICAvLyBJ
bWFnZU9yaWVudGF0aW9uIGV4cGVjdHMgdGhlIG9yaWdpbiB0byBiZSBhdCAoMCwgMCkuCi0gICAg
ICAgIGNvbnRleHQudHJhbnNsYXRlKGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSk7Ci0gICAgICAg
IGRzdFJlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludCgpKTsKLSAgICAgICAgY29udGV4dC5jb25j
YXRDVE0oZnJhbWVPcmllbnRhdGlvbi50cmFuc2Zvcm1Gcm9tRGVmYXVsdChkc3RSZWN0LnNpemUo
KSkpOwotICAgICAgICBpZiAoZnJhbWVPcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpKSB7
Ci0gICAgICAgICAgICAvLyBUaGUgZGVzdGluYXRpb24gcmVjdGFuZ2xlIHdpbGwgaGF2ZSBpdCdz
IHdpZHRoIGFuZCBoZWlnaHQgYWxyZWFkeSByZXZlcnNlZCBmb3IgdGhlIG9yaWVudGF0aW9uIG9m
Ci0gICAgICAgICAgICAvLyB0aGUgaW1hZ2UsIGFzIGl0IHdhcyBuZWVkZWQgZm9yIHBhZ2UgbGF5
b3V0LCBzbyB3ZSBuZWVkIHRvIHJldmVyc2UgaXQgYmFjayBoZXJlLgotICAgICAgICAgICAgZHN0
UmVjdCA9IEZsb2F0UmVjdChkc3RSZWN0LngoKSwgZHN0UmVjdC55KCksIGRzdFJlY3QuaGVpZ2h0
KCksIGRzdFJlY3Qud2lkdGgoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb250ZXh0LnBs
YXRmb3JtQ29udGV4dCgpLT5kcmF3U3VyZmFjZVRvQ29udGV4dChzdXJmYWNlLmdldCgpLCBkc3RS
ZWN0LCBhZGp1c3RlZFNyY1JlY3QsIGNvbnRleHQpOwotCi0gICAgY29udGV4dC5yZXN0b3JlKCk7
Ci0KLSAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQotICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRp
ZERyYXcodGhpcyk7Ci19Ci0KLWJvb2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0YWRh
dGEpCi17Ci0gICAgaWYgKGNsZWFyTWV0YWRhdGEpCi0gICAgICAgIG1faGF2ZU1ldGFkYXRhID0g
ZmFsc2U7Ci0KLSAgICBpZiAobV9pbWFnZSkgewotICAgICAgICBtX2ltYWdlID0gbnVsbHB0cjsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJv
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtSW1h
Z2VDYWlyby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzBhZGFlYzI3MGUzMWIwNTRhZmM1ZjY2ZDQ4Mjg4YWVi
ZjA2MWUzYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2UuaCIKKworI2lmIFVTRShDQUlSTykKKworI2lu
Y2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8u
aCIKKyNpbmNsdWRlIDxjYWlyby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgUGxh
dGZvcm1JbWFnZTo6Y2xlYXJTdWJJbWFnZXMoKQoreworfQorCitJbnRTaXplIFBsYXRmb3JtSW1h
Z2U6OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBpc05pbCgpID8gSW50U2l6ZSgpIDogY2Fp
cm9TdXJmYWNlU2l6ZShtX2ltYWdlLmdldCgpKTsKK30KKworYm9vbCBQbGF0Zm9ybUltYWdlOjpo
YXNBbHBoYSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzTmlsKCkgfHwgY2Fpcm9fc3VyZmFjZV9n
ZXRfY29udGVudChtX2ltYWdlLmdldCgpKSAhPSBDQUlST19DT05URU5UX0NPTE9SOworfQorCitD
b2xvciBQbGF0Zm9ybUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdAoreworICAg
IGlmIChpc05pbCgpIHx8IHNpemUoKSAhPSBJbnRTaXplKDEsIDEpKQorICAgICAgICByZXR1cm4g
Q29sb3IoKTsKKworICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKG1faW1hZ2UuZ2V0KCkp
ICE9IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkKKyAgICAgICAgcmV0dXJuIENvbG9yKCk7CisK
KyAgICBSR0JBMzIqIHBpeGVsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8UkdCQTMyKj4oY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX2ltYWdlLmdldCgpKSk7CisgICAgcmV0dXJuIGNvbG9y
RnJvbVByZW11bHRpcGxpZWRBUkdCKCpwaXhlbCk7Cit9CisKK2Jvb2wgUGxhdGZvcm1JbWFnZTo6
aXNBbG1vc3RTb2xpZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Zs
b2F0IFBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JikKK3sKKyAgICByZXR1cm4gMTsKK30KKwor
dm9pZCBQbGF0Zm9ybUltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRT
aXplJiwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBtb2RlLCBjb25zdCBJbWFnZU9y
aWVudGF0aW9uJiBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAgICBjb250ZXh0LnNhdmUoKTsKKyAg
ICAKKyAgICAvLyBTZXQgdGhlIGNvbXBvc2l0aW5nIG9wZXJhdGlvbi4KKyAgICBpZiAob3AgPT0g
Q29tcG9zaXRlU291cmNlT3ZlciAmJiBtb2RlID09IEJsZW5kTW9kZU5vcm1hbCAmJiAhaGFzQWxw
aGEoKSkKKyAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlQ29w
eSk7CisgICAgZWxzZQorICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCwg
bW9kZSk7CisgICAgICAgIAorI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcp
CisgICAgSW50U2l6ZSBzY2FsZWRTaXplID0gY2Fpcm9TdXJmYWNlU2l6ZShtX2ltYWdlLmdldCgp
KTsKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gYWRqdXN0U291cmNlUmVjdEZvckRv
d25TYW1wbGluZyhzcmNSZWN0LCBzY2FsZWRTaXplKTsKKyNlbHNlCisgICAgRmxvYXRSZWN0IGFk
anVzdGVkU3JjUmVjdChzcmNSZWN0KTsKKyNlbmRpZgorICAgICAgICAKKyAgICBGbG9hdFJlY3Qg
YWRqdXN0ZWREZXN0UmVjdCA9IGRlc3RSZWN0OworICAgICAgICAKKyAgICBpZiAob3JpZW50YXRp
b24gIT0gRGVmYXVsdEltYWdlT3JpZW50YXRpb24pIHsKKyAgICAgICAgLy8gSW1hZ2VPcmllbnRh
dGlvbiBleHBlY3RzIHRoZSBvcmlnaW4gdG8gYmUgYXQgKDAsIDApLgorICAgICAgICBjb250ZXh0
LnRyYW5zbGF0ZShkZXN0UmVjdC54KCksIGRlc3RSZWN0LnkoKSk7CisgICAgICAgIGFkanVzdGVk
RGVzdFJlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludCgpKTsKKyAgICAgICAgY29udGV4dC5jb25j
YXRDVE0ob3JpZW50YXRpb24udHJhbnNmb3JtRnJvbURlZmF1bHQoYWRqdXN0ZWREZXN0UmVjdC5z
aXplKCkpKTsKKyAgICAgICAgaWYgKG9yaWVudGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkpIHsK
KyAgICAgICAgICAgIC8vIFRoZSBkZXN0aW5hdGlvbiByZWN0YW5nbGUgd2lsbCBoYXZlIGl0J3Mg
d2lkdGggYW5kIGhlaWdodCBhbHJlYWR5IHJldmVyc2VkIGZvciB0aGUgb3JpZW50YXRpb24gb2YK
KyAgICAgICAgICAgIC8vIHRoZSBpbWFnZSwgYXMgaXQgd2FzIG5lZWRlZCBmb3IgcGFnZSBsYXlv
dXQsIHNvIHdlIG5lZWQgdG8gcmV2ZXJzZSBpdCBiYWNrIGhlcmUuCisgICAgICAgICAgICBhZGp1
c3RlZERlc3RSZWN0LnNldFNpemUoYWRqdXN0ZWREZXN0UmVjdC5zaXplKCkudHJhbnNwb3NlZFNp
emUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgp
LT5kcmF3U3VyZmFjZVRvQ29udGV4dChtX2ltYWdlLmdldCgpLCBhZGp1c3RlZERlc3RSZWN0LCBh
ZGp1c3RlZFNyY1JlY3QsIGNvbnRleHQpOworCisgICAgY29udGV4dC5yZXN0b3JlKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzYzgxYTE3MGJlNzlhZTZiZTZjYWNkYzk5
ZjRjMzk4Y2FhZjQyNmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLQotI2lmIFVTRShDRykKLQotI2luY2x1ZGUgIkNv
cmVHcmFwaGljc1NQSS5oIgotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUg
Ikdlb21ldHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKLSNp
bmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCi0jaW5jbHVkZSAiU3ViaW1hZ2VDYWNoZVdpdGhUaW1l
ci5oIgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotI2lmIFVTRShBUFBLSVQpCi0jaW5j
bHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Ci0jZW5kaWYK
LQotI2lmIFBMQVRGT1JNKENPQ09BKQotI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2Uu
aCIKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgPFdlYktpdFN5c3RlbUlu
dGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLW5hbWVzcGFjZSBOYXRpdmVJbWFnZSB7Ci0KLUludFNpemUgc2l6ZShjb25zdCBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4mIGltYWdlKQotewotICAgIEFTU0VSVChpbWFnZSk7Ci0gICAg
cmV0dXJuIEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGltYWdlLmdldCgpKSwgQ0dJbWFnZUdldEhl
aWdodChpbWFnZS5nZXQoKSkpOwotfQotCi1ib29sIGhhc0FscGhhKGNvbnN0IFJldGFpblB0cjxD
R0ltYWdlUmVmPiYpCi17Ci0gICAgLy8gRklYTUU6IEFuc3dlciBjb3JyZWN0bHkgdGhlIHF1ZXN0
aW9uOiBkb2VzIHRoZSBDR0ltYWdlUmVmIGhhdmUgYWxwaGEgY2hhbm5uZWw/Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0gICAgCi1Db2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoY29uc3QgUmV0YWlu
UHRyPENHSW1hZ2VSZWY+JiBpbWFnZSkKLXsKLSAgICBBU1NFUlQoaW1hZ2UpOwotICAgIAotICAg
IGlmIChOYXRpdmVJbWFnZTo6c2l6ZShpbWFnZSkgIT0gSW50U2l6ZSgxLCAxKSkKLSAgICAgICAg
cmV0dXJuIENvbG9yKCk7Ci0gICAgCi0gICAgdW5zaWduZWQgY2hhciBwaXhlbFs0XTsgLy8gUkdC
QQotICAgIGF1dG8gYml0bWFwQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRl
KHBpeGVsLCAxLCAxLCA4LCBzaXplb2YocGl4ZWwpLCBzUkdCQ29sb3JTcGFjZVJlZigpLAotICAg
ICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIz
MkJpZykpOwotCi0gICAgaWYgKCFiaXRtYXBDb250ZXh0KQotICAgICAgICByZXR1cm4gQ29sb3Io
KTsKLSAgICAKLSAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoYml0bWFwQ29udGV4dC5nZXQoKSwg
a0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKGJpdG1hcENvbnRleHQu
Z2V0KCksIENHUmVjdE1ha2UoMCwgMCwgMSwgMSksIGltYWdlLmdldCgpKTsKLSAgICAKLSAgICBp
ZiAoIXBpeGVsWzNdKQotICAgICAgICByZXR1cm4gQ29sb3IoMCwgMCwgMCwgMCk7Ci0KLSAgICBy
ZXR1cm4gQ29sb3IocGl4ZWxbMF0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMV0gKiAyNTUgLyBw
aXhlbFszXSwgcGl4ZWxbMl0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbM10pOwotfQotCi19Ci0K
LWJvb2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpCi17Ci0gICAgaWYgKGNs
ZWFyTWV0YWRhdGEpCi0gICAgICAgIG1faGF2ZU1ldGFkYXRhID0gZmFsc2U7Ci0KLSAgICBtX3N1
YnNhbXBsaW5nTGV2ZWwgPSAwOwotCi0gICAgaWYgKG1faW1hZ2UpIHsKLSNpZiBDQUNIRV9TVUJJ
TUFHRVMKLSAgICAgICAgc3ViaW1hZ2VDYWNoZSgpLmNsZWFySW1hZ2UobV9pbWFnZS5nZXQoKSk7
Ci0jZW5kaWYKLSAgICAgICAgbV9pbWFnZSA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUNHSW1hZ2VSZWYgQml0bWFwSW1hZ2U6
OmdldENHSW1hZ2VSZWYoKQotewotICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKS5nZXQo
KTsKLX0KLQotQ0dJbWFnZVJlZiBCaXRtYXBJbWFnZTo6Z2V0Rmlyc3RDR0ltYWdlUmVmT2ZTaXpl
KGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgc2l6ZV90IGNvdW50ID0gZnJhbWVDb3VudCgp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBDR0lt
YWdlUmVmIGNnSW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleChpKS5nZXQoKTsKLSAgICAgICAgaWYg
KGNnSW1hZ2UgJiYgSW50U2l6ZShDR0ltYWdlR2V0V2lkdGgoY2dJbWFnZSksIENHSW1hZ2VHZXRI
ZWlnaHQoY2dJbWFnZSkpID09IHNpemUpCi0gICAgICAgICAgICByZXR1cm4gY2dJbWFnZTsKLSAg
ICB9Ci0KLSAgICAvLyBGYWxsYmFjayB0byB0aGUgZGVmYXVsdCBDR0ltYWdlUmVmIGlmIHdlIGNh
bid0IGZpbmQgdGhlIHJpZ2h0IHNpemUKLSAgICByZXR1cm4gZ2V0Q0dJbWFnZVJlZigpOwotfQot
Ci1SZXRhaW5QdHI8Q0ZBcnJheVJlZj4gQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VBcnJheSgpCi17
Ci0gICAgc2l6ZV90IGNvdW50ID0gZnJhbWVDb3VudCgpOwotICAgIGlmICghY291bnQpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIENGTXV0YWJsZUFycmF5UmVmIGFycmF5ID0g
Q0ZBcnJheUNyZWF0ZU11dGFibGUoTlVMTCwgY291bnQsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3Mp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBpZiAo
Q0dJbWFnZVJlZiBjdXJyRnJhbWUgPSBmcmFtZUltYWdlQXRJbmRleChpKS5nZXQoKSkKLSAgICAg
ICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheSwgY3VyckZyYW1lKTsKLSAgICB9Ci0gICAg
cmV0dXJuIGFkb3B0Q0YoYXJyYXkpOwotfQotCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCYgY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwgQmxlbmRNb2RlIGJs
ZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKQotewotI2lm
IFBMQVRGT1JNKElPUykKLSAgICBzdGFydEFuaW1hdGlvbihEb05vdENhdGNoVXApOwotI2Vsc2UK
LSAgICBzdGFydEFuaW1hdGlvbigpOwotI2VuZGlmCi0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4gaW1hZ2U7Ci0gICAgLy8gTmV2ZXIgdXNlIHN1YnNhbXBsZWQgaW1hZ2VzIGZvciBkcmF3aW5n
IGludG8gUERGIGNvbnRleHRzLgotICAgIGlmICh3a0NHQ29udGV4dElzUERGQ29udGV4dChjdHh0
LnBsYXRmb3JtQ29udGV4dCgpKSkKLSAgICAgICAgaW1hZ2UgPSBjb3B5VW5zY2FsZWRGcmFtZUlt
YWdlQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIENHUmVjdCB0
cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVjdCA9IENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKGRl
c3RSZWN0LCBDR0NvbnRleHRHZXRDVE0oY3R4dC5wbGF0Zm9ybUNvbnRleHQoKSkpOwotICAgICAg
ICBmbG9hdCBzdWJzYW1wbGluZ1NjYWxlID0gc3RkOjptaW48ZmxvYXQ+KDEsIHN0ZDo6bWF4KHRy
YW5zZm9ybWVkRGVzdGluYXRpb25SZWN0LnNpemUud2lkdGggLyBzcmNSZWN0LndpZHRoKCksIHRy
YW5zZm9ybWVkRGVzdGluYXRpb25SZWN0LnNpemUuaGVpZ2h0IC8gc3JjUmVjdC5oZWlnaHQoKSkp
OwotCi0gICAgICAgIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUsIHN1
YnNhbXBsaW5nU2NhbGUpOwotICAgIH0KLQotICAgIGlmICghaW1hZ2UpIC8vIElmIGl0J3MgdG9v
IGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgQ29sb3IgY29sb3IgPSBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKTsKLSAgICBpZiAoY29s
b3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihjdHh0LCBkZXN0UmVj
dCwgY29sb3IsIGNvbXBvc2l0ZU9wKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8v
IFN1YnNhbXBsaW5nIG1heSBoYXZlIGdpdmVuIHVzIGFuIGltYWdlIHRoYXQgaXMgc21hbGxlciB0
aGFuIHNpemUoKS4KLSAgICBJbnRTaXplIGltYWdlU2l6ZShDR0ltYWdlR2V0V2lkdGgoaW1hZ2Uu
Z2V0KCkpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSk7Ci0gICAgCi0gICAgLy8gc3Jj
UmVjdCBpcyBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHVuc3Vic2FtcGxlZCBpbWFnZSwgc28g
d2UgaGF2ZSB0byBtYXAgaXQgdG8gdGhlIHN1YnNhbXBsZWQgaW1hZ2UuCi0gICAgRmxvYXRSZWN0
IHNjYWxlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGlmIChpbWFnZVNpemUgIT0gbV9zaXplKSB7
Ci0gICAgICAgIEZsb2F0UmVjdCBvcmlnaW5hbEltYWdlQm91bmRzKEZsb2F0UG9pbnQoKSwgbV9z
aXplKTsKLSAgICAgICAgRmxvYXRSZWN0IHN1YnNhbXBsZWRJbWFnZUJvdW5kcyhGbG9hdFBvaW50
KCksIGltYWdlU2l6ZSk7Ci0gICAgICAgIHNjYWxlZFNyY1JlY3QgPSBtYXBSZWN0KHNyY1JlY3Qs
IG9yaWdpbmFsSW1hZ2VCb3VuZHMsIHN1YnNhbXBsZWRJbWFnZUJvdW5kcyk7Ci0gICAgfQotICAg
IAotICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb247Ci0gICAgaWYgKGRlc2NyaXB0aW9u
LnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24pCi0g
ICAgICAgIG9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgobV9jdXJyZW50RnJh
bWUpOwotCi0gICAgY3R4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJl
Y3QsIHNjYWxlZFNyY1JlY3QsIGNvbXBvc2l0ZU9wLCBibGVuZE1vZGUsIG9yaWVudGF0aW9uKTsK
LQotICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCi0gICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlk
RHJhdyh0aGlzKTsKLX0KLQotUmV0YWluUHRyPENHSW1hZ2VSZWY+IEJpdG1hcEltYWdlOjpjb3B5
VW5zY2FsZWRGcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgpCi17Ci0gICAgaWYgKGluZGV4
ID49IGZyYW1lQ291bnQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoaW5k
ZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKLSAgICAg
ICAgY2FjaGVGcmFtZShpbmRleCwgMCk7Ci0KLSAgICBpZiAoIW1fZnJhbWVzW2luZGV4XS5tX3N1
YnNhbXBsaW5nTGV2ZWwpCi0gICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZTsK
LQotICAgIHJldHVybiBtX3NvdXJjZS5jcmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRleCk7Ci19
Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCmluZGV4IGI0MjhkNTBkOTRiZjkyNDI4MDMyODdk
MmVlYzE2YmQ2OWM1MjhkOTIuLjNkYWExMzlhYjdlYTViNDIxNTc3ODgzNWQzNTNkOGFkYjVmMGM3
NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRl
cm5DRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVy
bkNHLmNwcApAQCAtNzIsNyArNzIsNyBAQCBDR1BhdHRlcm5SZWYgUGF0dGVybjo6Y3JlYXRlUGxh
dGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdXNlclNwYWNlVHJhbgogICAgIC8v
IElmIHdlJ3JlIHJlcGVhdGluZyBpbiBib3RoIGRpcmVjdGlvbnMsIHdlIGNhbiB1c2UgaW1hZ2Ut
YmFja2VkIHBhdHRlcm5zCiAgICAgLy8gaW5zdGVhZCBvZiBjdXN0b20gcGF0dGVybnMsIGFuZCBh
dm9pZCB0aWxpbmctZWRnZSBwaXhlbCBjcmFja3MuCiAgICAgaWYgKG1fcmVwZWF0WCAmJiBtX3Jl
cGVhdFkpCi0gICAgICAgIHJldHVybiB3a0NHUGF0dGVybkNyZWF0ZVdpdGhJbWFnZUFuZFRyYW5z
Zm9ybSh0aWxlSW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpLCBwYXR0ZXJuVHJhbnNmb3JtLCB3a1Bh
dHRlcm5UaWxpbmdDb25zdGFudFNwYWNpbmcpOworICAgICAgICByZXR1cm4gd2tDR1BhdHRlcm5D
cmVhdGVXaXRoSW1hZ2VBbmRUcmFuc2Zvcm0odGlsZUltYWdlKCktPm5hdGl2ZUltYWdlKCkuZ2V0
KCksIHBhdHRlcm5UcmFuc2Zvcm0sIHdrUGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2luZyk7CiAK
ICAgICAvLyBJZiBGTFRfTUFYIHNob3VsZCBhbHNvIGJlIHVzZWQgZm9yIHhTdGVwIG9yIHlTdGVw
LCBub3RoaW5nIGlzIHJlbmRlcmVkLiBVc2luZyBmcmFjdGlvbnMgb2YgRkxUX01BWCBhbHNvCiAg
ICAgLy8gcmVzdWx0IGluIG5vdGhpbmcgYmVpbmcgcmVuZGVyZWQuCkBAIC04Myw3ICs4Myw3IEBA
IENHUGF0dGVyblJlZiBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB1c2VyU3BhY2VUcmFuCiAgICAgQ0dGbG9hdCB5U3RlcCA9IG1fcmVwZWF0WSA/
IHRpbGVSZWN0LmhlaWdodCgpIDogKDEgPDwgMjIpOwogCiAgICAgLy8gVGhlIHBhdHRlcm4gd2ls
bCByZWxlYXNlIHRoZSBDR0ltYWdlUmVmIHdoZW4gaXQncyBkb25lIHJlbmRlcmluZyBpbiBwYXR0
ZXJuUmVsZWFzZUNhbGxiYWNrCi0gICAgQ0dJbWFnZVJlZiBwbGF0Zm9ybUltYWdlID0gQ0dJbWFn
ZVJldGFpbih0aWxlSW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpKTsKKyAgICBDR0ltYWdlUmVmIHBs
YXRmb3JtSW1hZ2UgPSB0aWxlSW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKS5sZWFrUmVmKCk7CiAKICAg
ICBjb25zdCBDR1BhdHRlcm5DYWxsYmFja3MgcGF0dGVybkNhbGxiYWNrcyA9IHsgMCwgcGF0dGVy
bkNhbGxiYWNrLCBwYXR0ZXJuUmVsZWFzZUNhbGxiYWNrIH07CiAgICAgcmV0dXJuIENHUGF0dGVy
bkNyZWF0ZShwbGF0Zm9ybUltYWdlLCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgeFN0ZXAs
IHlTdGVwLCBrQ0dQYXR0ZXJuVGlsaW5nQ29uc3RhbnRTcGFjaW5nLCBUUlVFLCAmcGF0dGVybkNh
bGxiYWNrcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QbGF0Zm9ybUltYWdlQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUGxhdGZvcm1JbWFnZUNHLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZmIyZGUwZWExMmRhMjE0ZjEwNDZj
Mzk2MmU4ZWFiNTNjNjQ0MTI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFnZUNHLmNwcApAQCAtMCwwICsxLDE3MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCisKKyNpZiBVU0UoQ0cpCisKKyNp
bmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkNvcmVHcmFwaGljc1NQSS5oIgorI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiU3Vi
aW1hZ2VDYWNoZVdpdGhUaW1lci5oIgorCisjaWYgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgPFdl
YktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKyNlbmRpZgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCit2b2lkIFBsYXRmb3JtSW1hZ2U6OmNsZWFyU3ViSW1h
Z2VzKCkKK3sKKyNpZiBDQUNIRV9TVUJJTUFHRVMKKyAgICBpZiAoIWlzTmlsKCkpCisgICAgICAg
IHN1YmltYWdlQ2FjaGUoKS5jbGVhckltYWdlKGNnSW1hZ2VSZWYoKSk7CisjZW5kaWYKK30KKwor
SW50U2l6ZSBQbGF0Zm9ybUltYWdlOjpzaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNOaWwo
KSA/IEludFNpemUoKSA6IEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGNnSW1hZ2VSZWYoKSksIENH
SW1hZ2VHZXRIZWlnaHQoY2dJbWFnZVJlZigpKSk7Cit9CisKK2Jvb2wgUGxhdGZvcm1JbWFnZTo6
aGFzQWxwaGEoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBBbnN3ZXIgY29ycmVjdGx5IHRoZSBx
dWVzdGlvbjogZG9lcyB0aGUgQ0dJbWFnZVJlZiBoYXZlIGFscGhhIGNoYW5ubmVsPworICAgIHJl
dHVybiB0cnVlOworfQorCitDb2xvciBQbGF0Zm9ybUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29s
b3IoKSBjb25zdAoreworICAgIGlmIChpc05pbCgpIHx8IHNpemUoKSAhPSBJbnRTaXplKDEsIDEp
KQorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICAKKyAgICB1bnNpZ25lZCBjaGFyIHBpeGVs
WzRdOyAvLyBSR0JBCisgICAgYXV0byBiaXRtYXBDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENv
bnRleHRDcmVhdGUocGl4ZWwsIDEsIDEsIDgsIHNpemVvZihwaXhlbCksIHNSR0JDb2xvclNwYWNl
UmVmKCksCisgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCB8IGtDR0JpdG1h
cEJ5dGVPcmRlcjMyQmlnKSk7CisgICAgCisgICAgaWYgKCFiaXRtYXBDb250ZXh0KQorICAgICAg
ICByZXR1cm4gQ29sb3IoKTsKKyAgICAKKyAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoYml0bWFw
Q29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdl
KGJpdG1hcENvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgMSwgMSksIGNnSW1hZ2VSZWYo
KSk7CisgICAgCisgICAgaWYgKCFwaXhlbFszXSkKKyAgICAgICAgcmV0dXJuIENvbG9yKDAsIDAs
IDAsIDApOworICAgIAorICAgIHJldHVybiBDb2xvcihwaXhlbFswXSAqIDI1NSAvIHBpeGVsWzNd
LCBwaXhlbFsxXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsyXSAqIDI1NSAvIHBpeGVsWzNdLCBw
aXhlbFszXSk7Cit9CisgICAgCitib29sIFBsYXRmb3JtSW1hZ2U6OmlzQWxtb3N0U29saWRDb2xv
cigpIGNvbnN0Cit7CisgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IGNnSW1hZ2VSZWYoKTsKKyAgICBB
U1NFUlQoQ0dJbWFnZUdldEJpdHNQZXJDb21wb25lbnQoaW1hZ2UpID09IDgpOworICAgIAorICAg
IENHQml0bWFwSW5mbyBpbWFnZUluZm8gPSBDR0ltYWdlR2V0Qml0bWFwSW5mbyhpbWFnZSk7Cisg
ICAgaWYgKCEoaW1hZ2VJbmZvICYga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUpIHx8IChpbWFn
ZUluZm8gJiBrQ0dCaXRtYXBBbHBoYUluZm9NYXNrKSAhPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlw
bGllZEZpcnN0KSB7CisgICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBiZWluZyBhYmxlIHRvIGhh
bmRsZSBvdGhlciBwaXhlbCBmb3JtYXRzLgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBzaXplX3Qgd2lkdGggPSBD
R0ltYWdlR2V0V2lkdGgoaW1hZ2UpOworICAgIHNpemVfdCBoZWlnaHQgPSBDR0ltYWdlR2V0SGVp
Z2h0KGltYWdlKTsKKyAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBDR0ltYWdlR2V0Qnl0ZXNQZXJS
b3coaW1hZ2UpOworICAgIAorICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHByb3ZpZGVyID0gYWRv
cHRDRihDR0RhdGFQcm92aWRlckNvcHlEYXRhKENHSW1hZ2VHZXREYXRhUHJvdmlkZXIoaW1hZ2Up
KSk7CisgICAgY29uc3QgVUludDgqIGRhdGEgPSBDRkRhdGFHZXRCeXRlUHRyKHByb3ZpZGVyLmdl
dCgpKTsKKyAgICAKKyAgICAvLyBPdmVybGF5IGEgZ3JpZCBvZiBzYW1wbGluZyBkb3RzIG9uIHRv
cCBvZiBhIGdyYXlzY2FsZSB2ZXJzaW9uIG9mIHRoZSBpbWFnZS4KKyAgICAvLyBGb3IgdGhlIGlu
dGVyaW9yIHBvaW50cywgY2FsY3VsYXRlIHRoZSBkaWZmZXJlbmNlIGluIGx1bWluYW5jZSBhbW9u
ZyB0aGUgc2FtcGxlIHBvaW50CisgICAgLy8gYW5kIGl0cyBzdXJyb3VuZHMgcG9pbnRzLCBzY2Fs
ZWQgYnkgdHJhbnNwYXJlbmN5LgorICAgIGNvbnN0IHVuc2lnbmVkIHNhbXBsZVJvd3MgPSA3Owor
ICAgIGNvbnN0IHVuc2lnbmVkIHNhbXBsZUNvbHMgPSA3OworICAgIC8vIEZJWE1FOiBSZWZpbmUg
dGhlIHByb3BlciBudW1iZXIgb2Ygc2FtcGxlcywgYW5kIGFjY29tbW9kYXRlIGRpZmZlcmVudCBh
c3BlY3QgcmF0aW9zLgorICAgIGlmICh3aWR0aCA8IHNhbXBsZUNvbHMgfHwgaGVpZ2h0IDwgc2Ft
cGxlUm93cykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIC8vIEVuc3VyZSB0aGF0
IHRoZSBsYXN0IHJvdy9jb2x1bW4gbGFuZCBvbiB0aGUgaW1hZ2UgcGVyaW1ldGVyLgorICAgIGNv
bnN0IGZsb2F0IHN0cmlkZVdpZHRoID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdpZHRoIC0gMSkgLyAo
c2FtcGxlQ29scyAtIDEpOworICAgIGNvbnN0IGZsb2F0IHN0cmlkZUhlaWdodCA9IHN0YXRpY19j
YXN0PGZsb2F0PihoZWlnaHQgLSAxKSAvIChzYW1wbGVSb3dzIC0gMSk7CisgICAgZmxvYXQgc2Ft
cGxlc1tzYW1wbGVSb3dzXVtzYW1wbGVDb2xzXTsKKyAgICAKKyAgICAvLyBGaW5kIHRoZSBsdW1p
bmFuY2Ugb2YgdGhlIHNhbXBsZSBwb2ludHMuCisgICAgZmxvYXQgeSA9IDA7CisgICAgY29uc3Qg
VUludDgqIHJvdyA9IGRhdGE7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNhbXBsZVJv
d3M7ICsraSkgeworICAgICAgICBmbG9hdCB4ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBq
ID0gMDsgaiA8IHNhbXBsZUNvbHM7ICsraikgeworICAgICAgICAgICAgY29uc3QgVUludDgqIHAw
ID0gcm93ICsgKHN0YXRpY19jYXN0PGludD4oeCArIC41KSkgKiA0OworICAgICAgICAgICAgLy8g
UiBHIEIgQQorICAgICAgICAgICAgc2FtcGxlc1tpXVtqXSA9ICgwLjIxMjUgKiAqcDAgKyAwLjcx
NTQgKiAqKHAwKzEpICsgMC4wNzIxICogKihwMCsyKSkgKiAqKHAwKzMpIC8gMjU1OworICAgICAg
ICAgICAgeCArPSBzdHJpZGVXaWR0aDsKKyAgICAgICAgfQorICAgICAgICB5ICs9IHN0cmlkZUhl
aWdodDsKKyAgICAgICAgcm93ID0gZGF0YSArIChzdGF0aWNfY2FzdDxpbnQ+KHkgKyAuNSkpICog
Ynl0ZXNQZXJSb3c7CisgICAgfQorICAgIAorICAgIC8vIERldGVybWluZSB0aGUgaW1hZ2Ugc2Nv
cmUuCisgICAgZmxvYXQgYWNjdW1TY29yZSA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsg
aSA8IHNhbXBsZVJvd3MgLSAxOyArK2kpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMTsg
aiA8IHNhbXBsZUNvbHMgLSAxOyArK2opIHsKKyAgICAgICAgICAgIGZsb2F0IGRpZmYgPSBzYW1w
bGVzW2kgLSAxXVtqXSArIHNhbXBsZXNbaSArIDFdW2pdICsgc2FtcGxlc1tpXVtqIC0gMV0gKyBz
YW1wbGVzW2ldW2ogKyAxXSAtIDQgKiBzYW1wbGVzW2ldW2pdOworICAgICAgICAgICAgYWNjdW1T
Y29yZSArPSBkaWZmICogZGlmZjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBUaGUg
c2NvcmUgZm9yIGEgZ2l2ZW4gc2FtcGxlIGNhbiBiZSB3aXRoaW4gdGhlIHJhbmdlIG9mIDAgYW5k
IDI1NV4yLgorICAgIHJldHVybiBhY2N1bVNjb3JlIDwgMjUwMCAqIChzYW1wbGVSb3dzIC0gMikg
KiAoc2FtcGxlQ29scyAtIDIpOworfQorCitmbG9hdCBQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGlu
Z1NjYWxlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KQoreworICAgIC8vIE5ldmVyIHVzZSBzdWJzYW1w
bGVkIGltYWdlcyBmb3IgZHJhd2luZyBpbnRvIFBERiBjb250ZXh0cy4KKyAgICBpZiAod2tDR0Nv
bnRleHRJc1BERkNvbnRleHQoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSkpCisgICAgICAgIHJl
dHVybiAxOworICAgIAorICAgIENHUmVjdCB0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVjdCA9IENH
UmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKGRlc3RSZWN0LCBDR0NvbnRleHRHZXRDVE0oY29udGV4
dC5wbGF0Zm9ybUNvbnRleHQoKSkpOworICAgIHJldHVybiBzdGQ6Om1pbjxmbG9hdD4oMSwgc3Rk
OjptYXgodHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS53aWR0aCAvIHNyY1JlY3Qud2lk
dGgoKSwgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS5oZWlnaHQgLyBzcmNSZWN0Lmhl
aWdodCgpKSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1JbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5k
TW9kZSBtb2RlLCBjb25zdCBJbWFnZU9yaWVudGF0aW9uJiBvcmllbnRhdGlvbikgY29uc3QKK3sK
KyAgICAvLyBTdWJzYW1wbGluZyBtYXkgaGF2ZSBnaXZlbiB1cyBhbiBpbWFnZSB0aGF0IGlzIHNt
YWxsZXIgdGhhbiBzaXplKCkuCisgICAgSW50U2l6ZSBzdWJzYW1wbGVkSW1hZ2VTaXplID0gc2l6
ZSgpOworICAgIAorICAgIC8vIHNyY1JlY3QgaXMgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB1
bnN1YnNhbXBsZWQgaW1hZ2UsIHNvIHdlIGhhdmUgdG8gbWFwIGl0IHRvIHRoZSBzdWJzYW1wbGVk
IGltYWdlLgorICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGlm
IChzdWJzYW1wbGVkSW1hZ2VTaXplICE9IHNyY1NpemUpCisgICAgICAgIGFkanVzdGVkU3JjUmVj
dCA9IG1hcFJlY3Qoc3JjUmVjdCwgRmxvYXRSZWN0KHsgfSwgc3JjU2l6ZSksIEZsb2F0UmVjdCh7
IH0sIHN1YnNhbXBsZWRJbWFnZVNpemUpKTsKKyAgICAKKyAgICBjb250ZXh0LmRyYXdOYXRpdmVJ
bWFnZShtX2ltYWdlLCBzdWJzYW1wbGVkSW1hZ2VTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNS
ZWN0LCBvcCwgbW9kZSwgb3JpZW50YXRpb24pOworfQorICAgIAorfQorCisjZW5kaWYgLy8gVVNF
KENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
VGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0KaW5kZXggODk3
MjBkMTczNjVkYTdlOGJhODQ2OWQ1Mjk0NTQ4ZDUxODQ3YTdmZS4uNDQ3NmZjNWY4N2MzNDk4OGY2
ZDlhZDU1ZWViZDhkMWI5YmIwMjJlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRh
dGlvbkNvY29hLm1tCkBAIC0xMjksNyArMTI5LDcgQEAgVGV4dFRyYWNrUmVwcmVzZW50YXRpb25D
b2NvYTo6flRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EoKQogdm9pZCBUZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbkNvY29hOjp1cGRhdGUoKQogewogICAgIGlmIChhdXRvIHJlcHJlc2VudGF0aW9u
ID0gbV9jbGllbnQuY3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZSgpKQotICAgICAg
ICBbbV9sYXllci5nZXQoKSBzZXRDb250ZW50czooaWQpcmVwcmVzZW50YXRpb24tPmdldENHSW1h
Z2VSZWYoKV07CisgICAgICAgIFttX2xheWVyLmdldCgpIHNldENvbnRlbnRzOihpZClyZXByZXNl
bnRhdGlvbi0+bmF0aXZlSW1hZ2UoKS5nZXQoKV07CiB9CiAKIHZvaWQgVGV4dFRyYWNrUmVwcmVz
ZW50YXRpb25Db2NvYTo6c2V0Q29udGVudFNjYWxlKGZsb2F0IHNjYWxlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCmluZGV4IDAxZWI2ZGQz
MDA0M2EyMjUyOTE3NmZkOTEyMTE3ZGM1Nzc2YzE3YmEuLmRjMWM3YzcwOTVkOTQ0YzRjNjJmMWZl
MDkzNTcwMmExM2M3YzdhNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9JbWFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvSW1hZ2VNYWMubW0KQEAgLTg1LDMxICs4NSwyMiBAQCBDRkRhdGFSZWYgQml0bWFw
SW1hZ2U6OmdldFRJRkZSZXByZXNlbnRhdGlvbigpCiAgICAgaWYgKG1fdGlmZlJlcCkKICAgICAg
ICAgcmV0dXJuIG1fdGlmZlJlcC5nZXQoKTsKIAotICAgIHVuc2lnbmVkIG51bUZyYW1lcyA9IGZy
YW1lQ291bnQoKTsKKyAgICBhdXRvIG5hdGl2ZUltYWdlcyA9IHRoaXMtPmZyYW1lc05hdGl2ZUlt
YWdlcygpOwogCi0gICAgLy8gSWYgbnVtRnJhbWVzIGlzIHplcm8sIHdlIGtub3cgZm9yIGNlcnRh
aW4gdGhpcyBpbWFnZSBkb2Vzbid0IGhhdmUgdmFsaWQgZGF0YQorICAgIC8vIElmIGZyYW1lc0lt
YWdlcy5zaXplKCkgaXMgemVybywgd2Uga25vdyBmb3IgY2VydGFpbiB0aGlzIGltYWdlIGRvZXNu
J3QgaGF2ZSB2YWxpZCBkYXRhCiAgICAgLy8gRXZlbiB0aG91Z2ggdGhlIGNhbGwgdG8gQ0dJbWFn
ZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEgd2lsbCBmYWlsIGFuZCB3ZSdsbCBoYW5kbGUgaXQg
Z3JhY2VmdWxseSwKICAgICAvLyBpbiBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgdGhhdCBjYWxsIHdp
bGwgc3BhbSB0aGUgY29uc29sZSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UKLSAgICBpZiAoIW51bUZy
YW1lcykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBWZWN0b3I8Q0dJbWFnZVJlZj4gaW1hZ2Vz
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1GcmFtZXM7ICsraSApIHsKLSAgICAg
ICAgQ0dJbWFnZVJlZiBjZ0ltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkuZ2V0KCk7Ci0gICAg
ICAgIGlmIChjZ0ltYWdlKQotICAgICAgICAgICAgaW1hZ2VzLmFwcGVuZChjZ0ltYWdlKTsKLSAg
ICB9Ci0KLSAgICB1bnNpZ25lZCBudW1WYWxpZEZyYW1lcyA9IGltYWdlcy5zaXplKCk7CisgICAg
aWYgKCFuYXRpdmVJbWFnZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBkYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVN
dXRhYmxlKDAsIDApKTsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZURlc3RpbmF0aW9uUmVmPiBkZXN0
aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YS5n
ZXQoKSwga1VUVHlwZVRJRkYsIG51bVZhbGlkRnJhbWVzLCAwKSk7CisgICAgUmV0YWluUHRyPENH
SW1hZ2VEZXN0aW5hdGlvblJlZj4gZGVzdGluYXRpb24gPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5h
dGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEuZ2V0KCksIGtVVFR5cGVUSUZGLCBuYXRpdmVJbWFnZXMu
c2l6ZSgpLCAwKSk7CiAKICAgICBpZiAoIWRlc3RpbmF0aW9uKQotICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bnVtVmFsaWRGcmFtZXM7ICsraSkKLSAgICAgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2Uo
ZGVzdGluYXRpb24uZ2V0KCksIGltYWdlc1tpXSwgMCk7CisgICAgZm9yIChhdXRvIG5hdGl2ZUlt
YWdlIDogbmF0aXZlSW1hZ2VzKQorICAgICAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShk
ZXN0aW5hdGlvbi5nZXQoKSwgbmF0aXZlSW1hZ2UuZ2V0KCksIDApOwogCiAgICAgQ0dJbWFnZURl
c3RpbmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAppbmRl
eCAyMTc1M2JkMDc4YTFjNTVjMzI3MTljMTQ4NDZmMGY2Yjk5NzVmOGZkLi4wYzA2M2ViYWViNTMx
OGIyYzljYTdkZTk3MTEyMzIyZGZlODI5MTg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAKQEAgLTE0Miw2ICsx
NDIsNyBAQCBJbWFnZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFt
ZSYgb3RoZXIpCiAgICAgICAgIHJldHVybiAqdGhpczsKIAogICAgIGNvcHlCaXRtYXBEYXRhKG90
aGVyKTsKKyAgICBzZXRIYXNBbHBoYShvdGhlci5tX2hhc0FscGhhKTsKICAgICBzZXRPcmlnaW5h
bEZyYW1lUmVjdChvdGhlci5vcmlnaW5hbEZyYW1lUmVjdCgpKTsKICAgICBzZXRTdGF0dXMob3Ro
ZXIuc3RhdHVzKCkpOwogICAgIHNldER1cmF0aW9uKG90aGVyLmR1cmF0aW9uKCkpOwpAQCAtMTUy
LDggKzE1Myw3IEBAIEltYWdlRnJhbWUmIEltYWdlRnJhbWU6Om9wZXJhdG9yPShjb25zdCBJbWFn
ZUZyYW1lJiBvdGhlcikKIAogdm9pZCBJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSgpCiB7Ci0g
ICAgbV9iYWNraW5nU3RvcmUuY2xlYXIoKTsKLSAgICBtX2J5dGVzID0gMDsKKyAgICBtX3BpeGVs
cyA9IG51bGxwdHI7CiAgICAgbV9zdGF0dXMgPSBGcmFtZUVtcHR5OwogICAgIC8vIE5PVEU6IERv
IG5vdCByZXNldCBvdGhlciBtZW1iZXJzIGhlcmU7IGNsZWFyRnJhbWVCdWZmZXJDYWNoZSgpIGNh
bGxzIHRoaXMKICAgICAvLyB0byBmcmVlIHRoZSBiaXRtYXAgZGF0YSwgYnV0IG90aGVyIGZ1bmN0
aW9ucyBsaWtlIGluaXRGcmFtZUJ1ZmZlcigpIGFuZApAQCAtMTYzLDI0ICsxNjMsMTYgQEAgdm9p
ZCBJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSgpCiAKIHZvaWQgSW1hZ2VGcmFtZTo6emVyb0Zp
bGxQaXhlbERhdGEoKQogewotICAgIG1lbXNldChtX2J5dGVzLCAwLCBtX3NpemUud2lkdGgoKSAq
IG1fc2l6ZS5oZWlnaHQoKSAqIHNpemVvZihQaXhlbERhdGEpKTsKKyAgICBtX3BpeGVscy0+Y2xl
YXIoKTsKICAgICBtX2hhc0FscGhhID0gdHJ1ZTsKIH0KIAogdm9pZCBJbWFnZUZyYW1lOjp6ZXJv
RmlsbEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIEFTU0VSVChJbnRSZWN0
KEludFBvaW50KCksIG1fc2l6ZSkuY29udGFpbnMocmVjdCkpOwotCiAgICAgaWYgKHJlY3QuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBzaXplX3QgcmVjdFdpZHRoSW5CeXRlcyA9
IHJlY3Qud2lkdGgoKSAqIHNpemVvZihQaXhlbERhdGEpOwotICAgIFBpeGVsRGF0YSogc3RhcnQg
PSBtX2J5dGVzICsgKHJlY3QueSgpICogd2lkdGgoKSkgKyByZWN0LngoKTsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHJlY3QuaGVpZ2h0KCk7ICsraSkgewotICAgICAgICBtZW1zZXQoc3RhcnQs
IDAsIHJlY3RXaWR0aEluQnl0ZXMpOwotICAgICAgICBzdGFydCArPSB3aWR0aCgpOwotICAgIH0K
LQorICAgIG1fcGl4ZWxzLT5jbGVhclJlY3QocmVjdCk7CiAgICAgc2V0SGFzQWxwaGEodHJ1ZSk7
CiB9CiAKQEAgLTE4OSwyNSArMTgxLDIzIEBAIGJvb2wgSW1hZ2VGcmFtZTo6Y29weUJpdG1hcERh
dGEoY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpCiAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fYmFja2luZ1N0b3JlID0gb3RoZXIubV9iYWNraW5n
U3RvcmU7Ci0gICAgbV9ieXRlcyA9IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsKLSAgICBtX3NpemUg
PSBvdGhlci5tX3NpemU7Ci0gICAgc2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7CisgICAg
aWYgKG90aGVyLm1fcGl4ZWxzKQorICAgICAgICBtX3BpeGVscyA9IEJpdG1hcFBpeGVsczo6Y3Jl
YXRlKCpvdGhlci0+bV9waXhlbHMuZ2V0KCkpOworICAgIGVsc2UKKyAgICAgICAgbV9waXhlbHMg
PSBudWxscHRyOwogICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIEltYWdlRnJhbWU6OnNldFNp
emUoaW50IG5ld1dpZHRoLCBpbnQgbmV3SGVpZ2h0KQogewotICAgIEFTU0VSVCghd2lkdGgoKSAm
JiAhaGVpZ2h0KCkpOwotICAgIHNpemVfdCBiYWNraW5nU3RvcmVTaXplID0gbmV3V2lkdGggKiBu
ZXdIZWlnaHQ7Ci0gICAgaWYgKCFtX2JhY2tpbmdTdG9yZS50cnlSZXNlcnZlQ2FwYWNpdHkoYmFj
a2luZ1N0b3JlU2l6ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2JhY2tpbmdTdG9y
ZS5yZXNpemUoYmFja2luZ1N0b3JlU2l6ZSk7Ci0gICAgbV9ieXRlcyA9IG1fYmFja2luZ1N0b3Jl
LmRhdGEoKTsKLSAgICBtX3NpemUgPSBJbnRTaXplKG5ld1dpZHRoLCBuZXdIZWlnaHQpOworICAg
IEFTU0VSVCghbV9waXhlbHMpOworICAgIG1fcGl4ZWxzID0gQml0bWFwUGl4ZWxzOjpjcmVhdGUo
SW50U2l6ZShuZXdXaWR0aCwgbmV3SGVpZ2h0KSwgbV9wcmVtdWx0aXBseUFscGhhKTsKKyAgICBy
ZXR1cm4gbV9waXhlbHM7Cit9CiAKLSAgICB6ZXJvRmlsbFBpeGVsRGF0YSgpOwotICAgIHJldHVy
biB0cnVlOwordm9pZCBJbWFnZUZyYW1lOjpjb3B5Um93TlRpbWVzKGludCBzdGFydFgsIGludCBl
bmRYLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKK3sKKyAgICBtX3BpeGVscy0+cmVwZWF0Rmlyc3RS
b3coSW50UmVjdChzdGFydFgsIHN0YXJ0WSwgZW5kWCAtc3RhcnRYICwgZW5kWSAtIHN0YXJ0WSkp
OwogfQogCiBib29sIEltYWdlRnJhbWU6Omhhc0FscGhhKCkgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKaW5kZXgg
MmY4ZWVlMTc4MWQxNjJkODZjNDlmZTFkYWM3MmEyZTdlNDBhNWQ2ZC4uNjQ2NDFkZmMyZjBmM2U4
OTZmYTQ3MmI0MmZlNDJkM2RmYjcyMzFmYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKQEAgLTI4LDYgKzI4LDcgQEAK
IAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJCaXRtYXBQaXhlbHMuaCIKICNpbmNsdWRlICJJ
bnRSZWN0LmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVNj
cmVlbi5oIgpAQCAtNTcsNyArNTgsNiBAQCB1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hh
cj47CiAgICAgICAgICAgICBEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMgIC8vIENsZWFyIGZyYW1l
IHRvIHByZXZpb3VzIGZyYW1lYnVmZmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGNvbnRlbnRzCiAgICAgICAgIH07Ci0gICAgICAgIHR5cGVkZWYgdW5zaWduZWQg
UGl4ZWxEYXRhOwogCiAgICAgICAgIEltYWdlRnJhbWUoKTsKIApAQCAtODAsMTcgKzgwLDcgQEAg
dXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICAvLyBDb3BpZXMgdGhl
IHBpeGVsIGRhdGEgYXQgWyhzdGFydFgsIHN0YXJ0WSksIChlbmRYLCBzdGFydFkpKSB0byB0aGUK
ICAgICAgICAgLy8gc2FtZSBYLWNvb3JkaW5hdGVzIG9uIGVhY2ggc3Vic2VxdWVudCByb3cgdXAg
dG8gYnV0IG5vdCBpbmNsdWRpbmcKICAgICAgICAgLy8gZW5kWS4KLSAgICAgICAgdm9pZCBjb3B5
Um93TlRpbWVzKGludCBzdGFydFgsIGludCBlbmRYLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKLSAg
ICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHN0YXJ0WCA8IHdpZHRoKCkpOwotICAgICAgICAg
ICAgQVNTRVJUKGVuZFggPD0gd2lkdGgoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhcnRZIDwg
aGVpZ2h0KCkpOwotICAgICAgICAgICAgQVNTRVJUKGVuZFkgPD0gaGVpZ2h0KCkpOwotICAgICAg
ICAgICAgY29uc3QgaW50IHJvd0J5dGVzID0gKGVuZFggLSBzdGFydFgpICogc2l6ZW9mKFBpeGVs
RGF0YSk7Ci0gICAgICAgICAgICBjb25zdCBQaXhlbERhdGEqIGNvbnN0IHN0YXJ0QWRkciA9IGdl
dEFkZHIoc3RhcnRYLCBzdGFydFkpOwotICAgICAgICAgICAgZm9yIChpbnQgZGVzdFkgPSBzdGFy
dFkgKyAxOyBkZXN0WSA8IGVuZFk7ICsrZGVzdFkpCi0gICAgICAgICAgICAgICAgbWVtY3B5KGdl
dEFkZHIoc3RhcnRYLCBkZXN0WSksIHN0YXJ0QWRkciwgcm93Qnl0ZXMpOwotICAgICAgICB9Cisg
ICAgICAgIHZvaWQgY29weVJvd05UaW1lcyhpbnQgc3RhcnRYLCBpbnQgZW5kWCwgaW50IHN0YXJ0
WSwgaW50IGVuZFkpOwogCiAgICAgICAgIC8vIEFsbG9jYXRlcyBzcGFjZSBmb3IgdGhlIHBpeGVs
IGRhdGEuICBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IHBpeGVscwogICAgICAgICAvLyBhcmUg
d3JpdHRlbi4gIE11c3Qgb25seSBiZSBjYWxsZWQgb25jZS4gIFJldHVybnMgd2hldGhlciBhbGxv
Y2F0aW9uCkBAIC0xMDAsNyArOTAsNyBAQCB1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hh
cj47CiAgICAgICAgIC8vIFJldHVybnMgYSBjYWxsZXItb3duZWQgcG9pbnRlciB0byB0aGUgdW5k
ZXJseWluZyBuYXRpdmUgaW1hZ2UgZGF0YS4KICAgICAgICAgLy8gKEFjdHVhbCB1c2U6IFRoaXMg
cG9pbnRlciB3aWxsIGJlIG93bmVkIGJ5IEJpdG1hcEltYWdlIGFuZCBmcmVlZCBpbgogICAgICAg
ICAvLyBGcmFtZURhdGE6OmNsZWFyKCkpLgotICAgICAgICBOYXRpdmVJbWFnZVB0ciBhc05ld05h
dGl2ZUltYWdlKCkgY29uc3Q7CisgICAgICAgIE5hdGl2ZUltYWdlUHRyIGFzTmV3TmF0aXZlSW1h
Z2UoKSBjb25zdCB7IHJldHVybiBtX3BpeGVscy0+aW1hZ2UoKTsgfQogCiAgICAgICAgIGJvb2wg
aGFzQWxwaGEoKSBjb25zdDsKICAgICAgICAgY29uc3QgSW50UmVjdCYgb3JpZ2luYWxGcmFtZVJl
Y3QoKSBjb25zdCB7IHJldHVybiBtX29yaWdpbmFsRnJhbWVSZWN0OyB9CkBAIC0xMTksMTAxICsx
MDksNDQgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogCiAgICAgICAgIGlu
bGluZSB2b2lkIHNldFJHQkEoaW50IHgsIGludCB5LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1
bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQogICAgICAgICB7Ci0gICAgICAgICAgICBzZXRSR0JBKGdl
dEFkZHIoeCwgeSksIHIsIGcsIGIsIGEpOworICAgICAgICAgICAgbV9waXhlbHMtPnNldFJHQkEo
eCwgeSwgciwgZywgYiwgYSk7CiAgICAgICAgIH0KIAotICAgICAgICBpbmxpbmUgUGl4ZWxEYXRh
KiBnZXRBZGRyKGludCB4LCBpbnQgeSkKKyAgICAgICAgaW5saW5lIFJHQkEzMiogZ2V0QWRkcihp
bnQgeCwgaW50IHkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2J5dGVzICsgKHkg
KiB3aWR0aCgpKSArIHg7CisgICAgICAgICAgICByZXR1cm4gbV9waXhlbHMtPmF0KHgsIHkpOwog
ICAgICAgICB9CiAKICAgICAgICAgaW5saW5lIGJvb2wgaGFzUGl4ZWxEYXRhKCkgY29uc3QKICAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXM7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBVc2UgZml4IHBvaW50IG11bHRpcGxpZXIgaW5zdGVhZCBvZiBpbnRlZ2VyIGRpdmlzaW9u
IG9yIGZsb2F0aW5nIHBvaW50IG1hdGguCi0gICAgICAgIC8vIFRoaXMgbXVsdGlwbGVyIHByb2R1
Y2VzIGV4YWN0bHkgdGhlIHNhbWUgcmVzdWx0IGZvciBhbGwgdmFsdWVzIGluIHJhbmdlIDAgLSAy
NTUuCi0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmaXhQb2ludFNoaWZ0ID0gMjQ7Ci0g
ICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmaXhQb2ludE11bHQgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oMS4wIC8gMjU1LjAgKiAoMSA8PCBmaXhQb2ludFNoaWZ0KSkgKyAxOwotICAgICAg
ICAvLyBNdWx0aXBsaWVzIHVuc2lnbmVkIHZhbHVlIGJ5IGZpeHBvaW50IHZhbHVlIGFuZCBjb252
ZXJ0cyBiYWNrIHRvIHVuc2lnbmVkLgotICAgICAgICBzdGF0aWMgdW5zaWduZWQgZml4UG9pbnRV
bnNpZ25lZE11bHRpcGx5KHVuc2lnbmVkIGZpeGVkLCB1bnNpZ25lZCB2KQotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gIChmaXhlZCAqIHYpID4+IGZpeFBvaW50U2hpZnQ7CisgICAgICAg
ICAgICByZXR1cm4gbV9waXhlbHMgIT0gbnVsbHB0cjsKICAgICAgICAgfQogCi0gICAgICAgIGlu
bGluZSB2b2lkIHNldFJHQkEoUGl4ZWxEYXRhKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBn
LCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKFJH
QkEzMiogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQg
YSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAmJiBhIDwg
MjU1KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFhKSB7Ci0gICAgICAgICAgICAgICAgICAgICpk
ZXN0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhTXVsdCA9IGEgKiBmaXhQb2ludE11bHQ7
Ci0gICAgICAgICAgICAgICAgciA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShyLCBhbHBoYU11
bHQpOwotICAgICAgICAgICAgICAgIGcgPSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkoZywgYWxw
aGFNdWx0KTsKLSAgICAgICAgICAgICAgICBiID0gZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KGIs
IGFscGhhTXVsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqZGVzdCA9IChhIDw8IDI0
IHwgciA8PCAxNiB8IGcgPDwgOCB8IGIpOworICAgICAgICAgICAgbV9waXhlbHMtPnNldFJHQkEo
ZGVzdCwgciwgZywgYiwgYSk7CiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShBUE5HKQotICAgICAg
ICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRpdmlkZTI1NSh1bnNpZ25lZCBhKQotICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gKGEgKyAoYSA+PiA4KSArIDEpID4+IDg7Ci0gICAgICAgIH0K
LQotICAgICAgICBpbmxpbmUgdm9pZCBvdmVyUkdCQShQaXhlbERhdGEqIGRlc3QsIHVuc2lnbmVk
IHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAgICAgIGlubGluZSB2
b2lkIG92ZXJSR0JBKFJHQkEzMiogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWdu
ZWQgYiwgdW5zaWduZWQgYSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKCFhKQotICAgICAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgaWYgKGEgPCAyNTUpIHsKLSAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBhRGVzdCA9ICgoKmRlc3QpID4+IDI0KSAmIDI1NTsKLSAgICAgICAg
ICAgICAgICBpZiAoYURlc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgckRlc3Qg
PSAoKCpkZXN0KSA+PiAxNikgJiAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGdE
ZXN0ID0gKCgqZGVzdCkgPj4gOCkgJiAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGJEZXN0ID0gKCpkZXN0KSAmIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYUF1
eCA9IDI1NSAtIGE7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhh
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByRGVzdCA9IGRpdmlkZTI1NShyRGVzdCAqIGFE
ZXN0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdEZXN0ID0gZGl2aWRlMjU1KGdEZXN0ICog
YURlc3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgYkRlc3QgPSBkaXZpZGUyNTUoYkRlc3Qg
KiBhRGVzdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgciA9
IGRpdmlkZTI1NShyICogYSArIHJEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAgIGcg
PSBkaXZpZGUyNTUoZyAqIGEgKyBnRGVzdCAqIGFBdXgpOwotICAgICAgICAgICAgICAgICAgICBi
ID0gZGl2aWRlMjU1KGIgKiBhICsgYkRlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAgICAgICAg
YSArPSBkaXZpZGUyNTUoYURlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFt
X3ByZW11bHRpcGx5QWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAociAqIDI1
NSArIGEgLSAxKSAvIGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnID0gKGcgKiAyNTUgKyBh
IC0gMSkgLyBhOwotICAgICAgICAgICAgICAgICAgICAgICAgYiA9IChiICogMjU1ICsgYSAtIDEp
IC8gYTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
bV9wcmVtdWx0aXBseUFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBkaXZpZGUyNTUo
ciAqIGEpOwotICAgICAgICAgICAgICAgICAgICBnID0gZGl2aWRlMjU1KGcgKiBhKTsKLSAgICAg
ICAgICAgICAgICAgICAgYiA9IGRpdmlkZTI1NShiICogYSk7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3QgPSAoYSA8PCAyNCB8IHIgPDwgMTYgfCBn
IDw8IDggfCBiKTsKKyAgICAgICAgICAgIG1fcGl4ZWxzLT5vdmVyUkdCQShkZXN0LCByLCBnLCBi
LCBhKTsKICAgICAgICAgfQogI2VuZGlmCiAKICAgICBwcml2YXRlOgogICAgICAgICBpbnQgd2lk
dGgoKSBjb25zdAogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9zaXplLndpZHRoKCk7
CisgICAgICAgICAgICByZXR1cm4gbV9waXhlbHMtPndpZHRoKCk7CiAgICAgICAgIH0KIAogICAg
ICAgICBpbnQgaGVpZ2h0KCkgY29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1f
c2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3BpeGVscy0+aGVpZ2h0KCk7CiAg
ICAgICAgIH0KIAotICAgICAgICBWZWN0b3I8UGl4ZWxEYXRhPiBtX2JhY2tpbmdTdG9yZTsKLSAg
ICAgICAgUGl4ZWxEYXRhKiBtX2J5dGVzOyAvLyBUaGUgbWVtb3J5IGlzIGJhY2tlZCBieSBtX2Jh
Y2tpbmdTdG9yZS4KLSAgICAgICAgSW50U2l6ZSBtX3NpemU7CisgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxCaXRtYXBQaXhlbHM+IG1fcGl4ZWxzOworCiAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBu
ZWVkIG1fY29sb3JQcm9maWxlIGFueW1vcmU/CiAgICAgICAgIENvbG9yUHJvZmlsZSBtX2NvbG9y
UHJvZmlsZTsKICAgICAgICAgYm9vbCBtX2hhc0FscGhhOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vQml0bWFwUGl4ZWxzQ2Fpcm8uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vQml0bWFwUGl4
ZWxzQ2Fpcm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNmYzYyYTM3ZDgxNDVjZGQwN2ExNTRlZDhmNzQxMWRl
Y2E0NmYwZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHAKQEAgLTAsMCArMSw0MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkJpdG1hcFBpeGVscy5oIgorCisjaW5jbHVkZSA8Y2Fpcm8u
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBQaXhlbHM6
OmltYWdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9jcmVhdGVfZm9yX2RhdGEoCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hh
cio+KGNvbnN0X2Nhc3Q8UGl4ZWxEYXRhKj4obV9waXhlbHMpKSwKKyAgICAgICAgQ0FJUk9fRk9S
TUFUX0FSR0IzMiwgd2lkdGgoKSwgaGVpZ2h0KCksIHdpZHRoKCkgKiBzaXplb2YoUkdCQTMyKSkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJD
YWlyby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiNDEyOTVmODU3MzU4ZmJi
ZjM1YzFiMDUyNWU4ZDZjYzM1MjBmNTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fp
cm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgotCi0jaW5jbHVkZSA8Y2Fpcm8u
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1OYXRpdmVJbWFnZVB0ciBJbWFnZUZyYW1lOjph
c05ld05hdGl2ZUltYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQgY2hhcio+KGNvbnN0X2Nhc3Q8UGl4ZWxEYXRhKj4obV9ieXRlcykpLAotICAgICAgICBD
QUlST19GT1JNQVRfQVJHQjMyLCB3aWR0aCgpLCBoZWlnaHQoKSwgd2lkdGgoKSAqIHNpemVvZihQ
aXhlbERhdGEpKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1Nv
dXJjZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2Nr
UmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbQppbmRleCAyMTZjZDA5M2YyNjQ2N2NiYTg4YTQzZjY5
M2FiZjRjZjUxZGQxYTRkLi5kMTE0NTRiMDVlZjg4OTkzYTYyODkzODk2YmMwYzExNzI4YzVlZDUw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9j
a1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tCkBAIC04Nyw3ICs4
Nyw3IEBAIHZvaWQgTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWM6OnVwZGF0ZVBsYXRmb3JtTGF5
ZXIoKSBjb25zdAogICAgICAgICBpZiAoIWltYWdlKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAg
ICAgICAgbV9wcmV2aWV3SW1hZ2UgPSBpbWFnZS0+Z2V0Q0dJbWFnZVJlZigpOworICAgICAgICBt
X3ByZXZpZXdJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZSgpOwogICAgICAgICBpZiAoIW1fcHJl
dmlld0ltYWdlKQogICAgICAgICAgICAgYnJlYWs7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwCmluZGV4IDM2Y2Q2NTE2ZTgwZjE3NDhiZmVhYjc3
YTkzMDI3MWMxMjFkZTgwMTkuLjRiNGUzNzc5ZTk2Zjc4YzY1NDBhNTNjNDQ3OGMzYmZkOTM1ZjUz
ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dp
bi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNw
cApAQCAtMTM2LDkgKzEzNiw5IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1h
Z2UoSW1hZ2UqIGltZywgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uKQogICAgIENHQ29udGV4
dFNjYWxlQ1RNKGRyYXdDb250ZXh0LCAxLCAtMSk7CiAgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9y
KGRyYXdDb250ZXh0LCB3aGl0ZSk7CiAgICAgQ0dDb250ZXh0RmlsbFJlY3QoZHJhd0NvbnRleHQs
IHJlY3QpOwotICAgIGlmIChhdXRvIHNyY0ltYWdlID0gaW1nLT5nZXRDR0ltYWdlUmVmKCkpIHsK
KyAgICBpZiAoYXV0byBzcmNJbWFnZSA9IGltZy0+bmF0aXZlSW1hZ2UoKSkgewogICAgICAgICBD
R0NvbnRleHRTZXRCbGVuZE1vZGUoZHJhd0NvbnRleHQsIGtDR0JsZW5kTW9kZU5vcm1hbCk7Ci0g
ICAgICAgIENHQ29udGV4dERyYXdJbWFnZShkcmF3Q29udGV4dCwgcmVjdCwgc3JjSW1hZ2UpOwor
ICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoZHJhd0NvbnRleHQsIHJlY3QsIHNyY0ltYWdlLmdl
dCgpKTsKICAgICB9CiAgICAgQ0dDb250ZXh0UmVsZWFzZShkcmF3Q29udGV4dCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0gYi9Tb3VyY2UvV2ViS2l0
L21hYy9NaXNjL1dlYkNhY2hlLm1tCmluZGV4IGI2NTlkNmRiZjlhZDY5OTljM2FjOTYyZGU5NTE1
NzgwOTdlMWYzYjEuLjdjNWVkMjEwZGRiMmEzMmE3NjY2NzRjMTIwZDk5NGMyZmE0N2U3ZmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0KKysrIGIvU291cmNl
L1dlYktpdC9tYWMvTWlzYy9XZWJDYWNoZS5tbQpAQCAtMjA0LDcgKzIwNCw3IEBAICsgKENHSW1h
Z2VSZWYpaW1hZ2VGb3JVUkw6KE5TVVJMICopdXJsCiAgICAgV2ViQ29yZTo6Q2FjaGVkSW1hZ2Um
IGNhY2hlZEltYWdlID0gZG93bmNhc3Q8V2ViQ29yZTo6Q2FjaGVkSW1hZ2U+KCpjYWNoZWRSZXNv
dXJjZSk7CiAgICAgaWYgKCFjYWNoZWRJbWFnZS5oYXNJbWFnZSgpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICByZXR1cm4gY2FjaGVkSW1hZ2UuaW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigp
OworICAgIHJldHVybiBjYWNoZWRJbWFnZS5pbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmdldCgpOwog
fQogCiAjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3BwIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3BwCmluZGV4IDBmNmRlN2ExNDZh
NjExYTUyYWExZTUzOTAxOWZhNmMxYzQ2NzI1YWUuLjMwNTYzMzZjYjY2ZmU0YWYxOGJkYzUyOWFj
YTJmOGZjODgxZGZlNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Qy9jZy9XS0ljb25EYXRhYmFzZUNHLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL0MvY2cvV0tJY29uRGF0YWJhc2VDRy5jcHAKQEAgLTM3LDEyICszNywyMyBAQCB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIENHSW1hZ2VSZWYgV0tJY29uRGF0YWJhc2VUcnlHZXRDR0ltYWdl
Rm9yVVJMKFdLSWNvbkRhdGFiYXNlUmVmIGljb25EYXRhYmFzZVJlZiwgV0tVUkxSZWYgdXJsUmVm
LCBXS1NpemUgc2l6ZSkKIHsKICAgICBJbWFnZSogaW1hZ2UgPSB0b0ltcGwoaWNvbkRhdGFiYXNl
UmVmKS0+aW1hZ2VGb3JQYWdlVVJMKHRvV1RGU3RyaW5nKHVybFJlZikpOwotICAgIHJldHVybiBp
bWFnZSA/IGltYWdlLT5nZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUoSW50U2l6ZShzdGF0aWNfY2Fz
dDxpbnQ+KHNpemUud2lkdGgpLCBzdGF0aWNfY2FzdDxpbnQ+KHNpemUuaGVpZ2h0KSkpIDogMDsK
KyAgICByZXR1cm4gaW1hZ2UgPyBpbWFnZS0+bmF0aXZlSW1hZ2VPZlNpemUoSW50U2l6ZShzdGF0
aWNfY2FzdDxpbnQ+KHNpemUud2lkdGgpLCBzdGF0aWNfY2FzdDxpbnQ+KHNpemUuaGVpZ2h0KSkp
LmdldCgpIDogbnVsbHB0cjsKIH0KIAogQ0ZBcnJheVJlZiBXS0ljb25EYXRhYmFzZVRyeUNvcHlD
R0ltYWdlQXJyYXlGb3JVUkwoV0tJY29uRGF0YWJhc2VSZWYgaWNvbkRhdGFiYXNlUmVmLCBXS1VS
TFJlZiB1cmxSZWYpCiB7CiAgICAgSW1hZ2UqIGltYWdlID0gdG9JbXBsKGljb25EYXRhYmFzZVJl
ZiktPmltYWdlRm9yUGFnZVVSTCh0b1dURlN0cmluZyh1cmxSZWYpKTsKLSAgICByZXR1cm4gaW1h
Z2UgPyBpbWFnZS0+Z2V0Q0dJbWFnZUFycmF5KCkubGVha1JlZigpIDogMDsKKyAgICBpZiAoIWlt
YWdlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gbmF0aXZlSW1hZ2VzID0g
aW1hZ2UtPmZyYW1lc05hdGl2ZUltYWdlcygpOworICAgIGlmICghbmF0aXZlSW1hZ2VzLnNpemUo
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgQ0ZNdXRhYmxlQXJyYXlSZWYg
YXJyYXkgPSBDRkFycmF5Q3JlYXRlTXV0YWJsZShudWxscHRyLCBuYXRpdmVJbWFnZXMuc2l6ZSgp
LCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKTsKKyAgICBmb3IgKGF1dG8gbmF0aXZlSW1hZ2UgOiBu
YXRpdmVJbWFnZXMpCisgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheSwgbmF0aXZlSW1h
Z2UuZ2V0KCkpOworICAgIAorICAgIHJldHVybiBzdGF0aWNfY2FzdDxDRkFycmF5UmVmPihDRlJl
dGFpbihhcnJheSkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
aW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCmluZGV4IGRjNzk4M2FiOTg4YzJkMDRh
MTczMGVlMTM3MzAzYzI0NDE2MTUxOTcuLmZiYzNlNWQ0YzU0MzAxY2U5MjE3YTQwZjhkMDhiZDU4
MzUyNzg3YzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250
ZW50Vmlld0ludGVyYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3Mv
V0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCkBAIC00MDcxLDcgKzQwNzEsNyBAQCAtIChVSUlt
YWdlICopX3ByZXNlbnRhdGlvblNuYXBzaG90Rm9yUHJldmlld0l0ZW1Db250cm9sbGVyOihVSVBy
ZXZpZXdJdGVtQ29udHJvbAogewogICAgIGlmICghX3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlua0lu
ZGljYXRvci5jb250ZW50SW1hZ2UpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVy
biBbW1tVSUltYWdlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6X3Bvc2l0aW9uSW5mb3JtYXRpb24u
bGlua0luZGljYXRvci5jb250ZW50SW1hZ2UtPmdldENHSW1hZ2VSZWYoKV0gYXV0b3JlbGVhc2Vd
OworICAgIHJldHVybiBbW1tVSUltYWdlIGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6X3Bvc2l0aW9u
SW5mb3JtYXRpb24ubGlua0luZGljYXRvci5jb250ZW50SW1hZ2UtPm5hdGl2ZUltYWdlKCkuZ2V0
KCldIGF1dG9yZWxlYXNlXTsKIH0KIAogLSAoTlNBcnJheSAqKV9wcmVzZW50YXRpb25SZWN0c0Zv
clByZXZpZXdJdGVtQ29udHJvbGxlcjooVUlQcmV2aWV3SXRlbUNvbnRyb2xsZXIgKiljb250cm9s
bGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
Vmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5j
cHAKaW5kZXggOWEzM2Y3Y2M3ZGM3YzdkNzJmOWRhNzQzMDk4YjdkYmNhODI0MDljZi4uYTUzMjUx
MDY3OGI5ZjUzNTE0NThhMzhhOWY0MjMzNzQ3ZDAzNWY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcApAQCAtMTcyNyw2OSArMTcyNyw2
IEBAIHZvaWQgUGx1Z2luVmlldzo6d2luZG93ZWRQbHVnaW5WaXNpYmlsaXR5RGlkQ2hhbmdlKGJv
b2wgaXNWaXNpYmxlLCB1aW50NjRfdCB3aW5kCiB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKENP
Q09BKQotc3RhdGljIGJvb2wgaXNBbG1vc3RTb2xpZENvbG9yKEJpdG1hcEltYWdlKiBiaXRtYXAp
Ci17Ci0gICAgQ0dJbWFnZVJlZiBpbWFnZSA9IGJpdG1hcC0+Z2V0Q0dJbWFnZVJlZigpOwotICAg
IEFTU0VSVChDR0ltYWdlR2V0Qml0c1BlckNvbXBvbmVudChpbWFnZSkgPT0gOCk7Ci0KLSAgICBD
R0JpdG1hcEluZm8gaW1hZ2VJbmZvID0gQ0dJbWFnZUdldEJpdG1hcEluZm8oaW1hZ2UpOwotICAg
IGlmICghKGltYWdlSW5mbyAmIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlKSB8fCAoaW1hZ2VJ
bmZvICYga0NHQml0bWFwQWxwaGFJbmZvTWFzaykgIT0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxp
ZWRGaXJzdCkgewotICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYmVpbmcgYWJsZSB0byBoYW5k
bGUgb3RoZXIgcGl4ZWwgZm9ybWF0cy4KLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzaXplX3Qgd2lkdGggPSBDR0ltYWdl
R2V0V2lkdGgoaW1hZ2UpOwotICAgIHNpemVfdCBoZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGlt
YWdlKTsKLSAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBDR0ltYWdlR2V0Qnl0ZXNQZXJSb3coaW1h
Z2UpOwotCi0gICAgUmV0YWluUHRyPENGRGF0YVJlZj4gcHJvdmlkZXIgPSBhZG9wdENGKENHRGF0
YVByb3ZpZGVyQ29weURhdGEoQ0dJbWFnZUdldERhdGFQcm92aWRlcihpbWFnZSkpKTsKLSAgICBj
b25zdCBVSW50OCogZGF0YSA9IENGRGF0YUdldEJ5dGVQdHIocHJvdmlkZXIuZ2V0KCkpOwotCi0g
ICAgLy8gT3ZlcmxheSBhIGdyaWQgb2Ygc2FtcGxpbmcgZG90cyBvbiB0b3Agb2YgYSBncmF5c2Nh
bGUgdmVyc2lvbiBvZiB0aGUgaW1hZ2UuCi0gICAgLy8gRm9yIHRoZSBpbnRlcmlvciBwb2ludHMs
IGNhbGN1bGF0ZSB0aGUgZGlmZmVyZW5jZSBpbiBsdW1pbmFuY2UgYW1vbmcgdGhlIHNhbXBsZSBw
b2ludAotICAgIC8vIGFuZCBpdHMgc3Vycm91bmRzIHBvaW50cywgc2NhbGVkIGJ5IHRyYW5zcGFy
ZW5jeS4KLSAgICBjb25zdCB1bnNpZ25lZCBzYW1wbGVSb3dzID0gNzsKLSAgICBjb25zdCB1bnNp
Z25lZCBzYW1wbGVDb2xzID0gNzsKLSAgICAvLyBGSVhNRTogUmVmaW5lIHRoZSBwcm9wZXIgbnVt
YmVyIG9mIHNhbXBsZXMsIGFuZCBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgYXNwZWN0IHJhdGlvcy4K
LSAgICBpZiAod2lkdGggPCBzYW1wbGVDb2xzIHx8IGhlaWdodCA8IHNhbXBsZVJvd3MpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBsYXN0IHJvdy9jb2x1
bW4gbGFuZCBvbiB0aGUgaW1hZ2UgcGVyaW1ldGVyLgotICAgIGNvbnN0IGZsb2F0IHN0cmlkZVdp
ZHRoID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdpZHRoIC0gMSkgLyAoc2FtcGxlQ29scyAtIDEpOwot
ICAgIGNvbnN0IGZsb2F0IHN0cmlkZUhlaWdodCA9IHN0YXRpY19jYXN0PGZsb2F0PihoZWlnaHQg
LSAxKSAvIChzYW1wbGVSb3dzIC0gMSk7Ci0gICAgZmxvYXQgc2FtcGxlc1tzYW1wbGVSb3dzXVtz
YW1wbGVDb2xzXTsKLQotICAgIC8vIEZpbmQgdGhlIGx1bWluYW5jZSBvZiB0aGUgc2FtcGxlIHBv
aW50cy4KLSAgICBmbG9hdCB5ID0gMDsKLSAgICBjb25zdCBVSW50OCogcm93ID0gZGF0YTsKLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2FtcGxlUm93czsgKytpKSB7Ci0gICAgICAgIGZs
b2F0IHggPSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgc2FtcGxlQ29sczsg
KytqKSB7Ci0gICAgICAgICAgICBjb25zdCBVSW50OCogcDAgPSByb3cgKyAoc3RhdGljX2Nhc3Q8
aW50Pih4ICsgLjUpKSAqIDQ7Ci0gICAgICAgICAgICAvLyBSIEcgQiBBCi0gICAgICAgICAgICBz
YW1wbGVzW2ldW2pdID0gKDAuMjEyNSAqICpwMCArIDAuNzE1NCAqICoocDArMSkgKyAwLjA3MjEg
KiAqKHAwKzIpKSAqICoocDArMykgLyAyNTU7Ci0gICAgICAgICAgICB4ICs9IHN0cmlkZVdpZHRo
OwotICAgICAgICB9Ci0gICAgICAgIHkgKz0gc3RyaWRlSGVpZ2h0OwotICAgICAgICByb3cgPSBk
YXRhICsgKHN0YXRpY19jYXN0PGludD4oeSArIC41KSkgKiBieXRlc1BlclJvdzsKLSAgICB9Ci0K
LSAgICAvLyBEZXRlcm1pbmUgdGhlIGltYWdlIHNjb3JlLgotICAgIGZsb2F0IGFjY3VtU2NvcmUg
PSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzYW1wbGVSb3dzIC0gMTsgKytpKSB7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaiA9IDE7IGogPCBzYW1wbGVDb2xzIC0gMTsgKytqKSB7
Ci0gICAgICAgICAgICBmbG9hdCBkaWZmID0gc2FtcGxlc1tpIC0gMV1bal0gKyBzYW1wbGVzW2kg
KyAxXVtqXSArIHNhbXBsZXNbaV1baiAtIDFdICsgc2FtcGxlc1tpXVtqICsgMV0gLSA0ICogc2Ft
cGxlc1tpXVtqXTsKLSAgICAgICAgICAgIGFjY3VtU2NvcmUgKz0gZGlmZiAqIGRpZmY7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGUgc2NvcmUgZm9yIGEgZ2l2ZW4gc2FtcGxlIGNhbiBi
ZSB3aXRoaW4gdGhlIHJhbmdlIG9mIDAgYW5kIDI1NV4yLgotICAgIHJldHVybiBhY2N1bVNjb3Jl
IDwgMjUwMCAqIChzYW1wbGVSb3dzIC0gMikgKiAoc2FtcGxlQ29scyAtIDIpOwotfQotI2VuZGlm
Ci0KIHZvaWQgUGx1Z2luVmlldzo6cGx1Z2luU25hcHNob3RUaW1lckZpcmVkKCkKIHsKICNpZiBF
TkFCTEUoUFJJTUFSWV9TTkFQU0hPVFRFRF9QTFVHSU5fSEVVUklTVElDKQpAQCAtMTgwOSw3ICsx
NzQ2LDcgQEAgdm9pZCBQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRpbWVyRmlyZWQoKQogCiAg
ICAgICAgIGlmIChzbmFwc2hvdEltYWdlKSB7CiAjaWYgRU5BQkxFKFBSSU1BUllfU05BUFNIT1RU
RURfUExVR0lOX0hFVVJJU1RJQykKLSAgICAgICAgICAgIGJvb2wgc25hcHNob3RJc0FsbW9zdFNv
bGlkQ29sb3IgPSBpc0FsbW9zdFNvbGlkQ29sb3IoZG93bmNhc3Q8Qml0bWFwSW1hZ2U+KHNuYXBz
aG90SW1hZ2UuZ2V0KCkpKTsKKyAgICAgICAgICAgIGJvb2wgc25hcHNob3RJc0FsbW9zdFNvbGlk
Q29sb3IgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PEJpdG1hcEltYWdlPihzbmFwc2hvdEltYWdlKS0+
aXNBbG1vc3RTb2xpZENvbG9yKCk7CiAgICAgICAgICAgICBzbmFwc2hvdEZvdW5kID0gIXNuYXBz
aG90SXNBbG1vc3RTb2xpZENvbG9yOwogI2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283439</attachid>
            <date>2016-07-12 12:34:00 -0700</date>
            <delta_ts>2016-07-12 12:42:13 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159679-20160712123316.patch</filename>
            <type>text/plain</type>
            <size>128203</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzMTAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWM1YmQ5YmQwNmExOWJl
NWNhMDJjNTE3MmQ2ZWYyZWJiZmVjMWMxOS4uNmFlYzQ3MmY4YWVjOGUwNjRkNGYyZmQwODAyYTBm
MWM0NTU4YjI4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxMyBAQAorMjAxNi0wNy0xMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0
IHRoZSBwaXhlbCBkYXRhIG9mIEltYWdlRnJhbWUgdG8gYSBzZXBhcmF0ZSBjbGFzcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5Njc5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgcGl4ZWwg
ZGF0YSBtYW5pcHVsYXRpb24gcGFydCBpbiBJbWFnZUZyYW1lIGludG8gYSBzZXBhcmF0ZSBjbGFz
cworICAgICAgICBhbmQgdGhlbiBtYWtlIGl0IG9wdGlvbmFsIChhbGxvY2F0ZWQgb24gZGVtYW5k
KS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2lu
Q2Fpcm8uY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFBpeGVsczo6Qml0bWFwUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBp
eGVsczo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpoZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFBpeGVsczo6YXQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmNsZWFyUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OnJlcGVhdEZpcnN0Um93KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcFBpeGVsczo6c2V0UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQ
aXhlbHM6Om92ZXJSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6aW5Cb3Vu
ZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Om11bHRpcGx5MjU1KToKKyAgICAgICAgKFdlYkNvcmU6OmRpdmlkZTI1NSk6CisgICAg
ICAgIChXZWJDb3JlOjpkaXZpZGVDZWlsKToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxp
ZWRDaGFubmVsKToKKyAgICAgICAgKFdlYkNvcmU6OnVucHJlbXVsdGlwbGllZENoYW5uZWwpOgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZVByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VVblByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6cGl4ZWxzKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWVEYXRhOjpoYXNQaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y2xlYXJQaXhl
bERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGxQaXhlbERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGxGcmFtZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weUJpdG1hcERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojpjb3B5Um93TlRpbWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0UkdCQSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpnZXRBZGRyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6Omhhc1BpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpvdmVyUkdC
QSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjp3aWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
Y29weVJvd05UaW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpm
aXhQb2ludFVuc2lnbmVkTXVsdGlwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6ZGl2aWRlMjU1KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5j
cHAuCisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmltYWdlKToKKworMjAxNi0wNy0x
MSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAgICAg
IFJlbmFtZSBGcmFtZURhdGEgdG8gSW1hZ2VGcmFtZURhdGEgYW5kIG1vdmUgaXQgdG8gYSBzZXBh
cmF0ZSBmaWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTU0NDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNb3ZlIEltYWdlRnJhbWVEYXRhIHRvIGEgc2VwYXJhdGUgZmlsZSBzbyBpdCBjYW4gYmUgY2Fj
aGVkIGJ5IEltYWdlU291cmNlCisgICAgICAgIGFuZCB3aWxsIHN0aWxsIGJlIGNvbnN1bWVkIGJ5
IEJpdG1hcEltYWdlLiBNYWtlIHRoZSBkYXRhIG1lbWJlcnMgb2YgSW1hZ2VGcmFtZURhdGEKKyAg
ICAgICAgYmUgcHJpdmF0ZSBhbmQgYWRkIGdldHRlcnMgdG8gcmV0dXJuIHRoZWlyIHZhbHVlcy4K
KworICAgICAgICBObyBuZXcgdGVzdHMgLS0gQ29kZSByZWZhY3RvcmluZywgbm8gYmVoYXZpb3Ig
Y2hhbmdlLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Jp
dG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aGF2ZUZyYW1lSW1hZ2VBdEluZGV4
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNz
YXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6ZW5zdXJlRnJhbWVJc0NhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcElt
YWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6ZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6aXNBbG1vc3RTb2xpZENvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRt
YXBJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpGcmFtZURhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp+RnJhbWVEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6dXNlZEZyYW1lQnl0ZXMpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZURhdGFBdEluZGV4KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ltYWdlRnJhbWVEYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lRGF0YTo6SW1hZ2VGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURh
dGE6On5JbWFnZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6
Y2xlYXJTdWJJbWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmNsZWFy
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpzaW5nbGVQaXhlbFNvbGlkQ29s
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmlzQWxtb3N0U29saWRDb2xv
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW1hZ2VGcmFtZURhdGEuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6c3RhdHVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWVEYXRhOjppc0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWVEYXRhOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpm
cmFtZUJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjppbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6b3JpZW50YXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OnN1YnNhbXBsaW5nTGV2ZWwpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZURhdGE6OmR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWVEYXRhOjpoYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6
aGFzSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6Omhhc01ldGFkYXRh
KToKKworMjAxNi0wNi0yNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUs
Y29tPgorCisgICAgICAgIEludHJvZHVjZSBQbGF0Zm9ybUltYWdlIGFuZCBtYWtlIGl0IGlzIGEg
d3JhcHBlciBmb3IgTmF0aXZlSW1hZ2VQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1ODY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyByZWZhY3RvcmluZyBp
cyB0byBtb3ZlIHRoZSBwbGF0Zm9ybSBpbWFnZSBkZXBlbmRlbnQKKyAgICAgICAgY29kZSBmcm9t
IEJpdG1hcEltYWdlIHRvIFBsYXRmb3JtSW1hZ2UuIFBsYXRmb3JtSW1hZ2UgaXMgcmVzcG9uc2li
bGUgb2YgCisgICAgICAgIGRyYXdpbmcgdGhlIGltYWdlIGFuZCBhbnN3ZXJpbmcgTmF0aXZlSW1h
Z2VQdHIgcXVlc3Rpb25zIHdoZW4gYW4gSW1hZ2VEZWNvZGVyCisgICAgICAgIGlzIG5vdCBhdmFp
bGFibGUuIEFwYXJ0IGZyb20gZHJhd2luZyB0aGUgaW1hZ2UsIHRoZSBxdWVyeSBmdW5jdGlvbnMg
d2lsbCBiZQorICAgICAgICBjYWxsZWQgb25seSB3aGVuIGNvbnN0cnVjdGluZyBhIEZyYW1lRGF0
YSBzbyB3ZSB3aWxsIGtlZXAgZXZlcnl0aGluZyBhcyBhCisgICAgICAgIE5hdGl2ZUltYWdlUHRy
LiBCdXQgd2Ugd2lsbCBjYXN0IHRoZSBOYXRpdmVJbWFnZVB0ciB0byBQbGF0Zm9ybUltYWdlIHdo
ZW4KKyAgICAgICAgYSBwbGF0Zm9ybSBkZXBlbmRlbnQgZnVuY3Rpb24gaXMgbmVlZGVkLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cyAtLSBDb2RlIHJlZmFjdG9yaW5nLCBubyBiZWhhdmlvciBjaGFu
Z2UuCisKKyAgICAgICAgKiBQbGF0Zm9ybUFwcGxlV2luLmNtYWtlOgorICAgICAgICAqIFBsYXRm
b3JtRWZsLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBs
YXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2luQ2Fpcm8uY21ha2U6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRp
bmdzL29iamMvRE9NLm1tOgorICAgICAgICAoLVtET01Ob2RlIGdldFByZXZpZXdTbmFwc2hvdElt
YWdlOmFuZFJlY3RzOl0pOgorICAgICAgICAqIHBhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cu
bW06CisgICAgICAgICgtW1dlYlRleHRJbmRpY2F0b3JWaWV3IGluaXRXaXRoRnJhbWU6dGV4dElu
ZGljYXRvcjptYXJnaW46b2Zmc2V0Ol0pOgorICAgICAgICAoY3JlYXRlQ29udGVudENyb3NzZmFk
ZUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpu
YXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZy
YW1lc05hdGl2ZUltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6c2luZ2xl
UGl4ZWxTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppc0FsbW9z
dFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZURhdGE6OkZyYW1lRGF0YSk6CisgICAgICAgIG1faGFzQWxwaGEgY2FuIGJlIGluaXRp
YWxpemVkIHdpdGggZmFsc2UgYmVjYXVzZSBpdCBpcyBhY2Nlc3NlZCBvbmx5IGluCisgICAgICAg
IEJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleCgpIGFuZCBpdCBpcyBndWFyZGVkIGJ5
IG1faGF2ZU1ldGFkYXRhLgorICAgICAgICBCb3RoIG1faGF2ZU1ldGFkYXRhIGFuZCBtX2hhc0Fs
cGhhIGFyZSBzZXQgaW4gQml0bWFwSW1hZ2UgY29uc3RydWN0b3IKKyAgICAgICAgYW5kIGluIEJp
dG1hcEltYWdlOjpjYWNoZUZyYW1lKCkuCisKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6
fkZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OmNsZWFyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6
Om5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpuYXRpdmVJbWFnZU9mU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZnJhbWVzTmF0aXZlSW1hZ2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlOjpnZXRDR0ltYWdlUmVmKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlOjpnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2U6OmdldENHSW1hZ2VBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtSW1hZ2U6OlBsYXRmb3JtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1JbWFnZTo6aXNOaWwpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6Y2dJ
bWFnZVJlZik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjp1cGRhdGVEaXNwbGF5TW9k
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJv
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0JpdG1hcEltYWdlQ2Fpcm8uY3BwLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6
Y2xlYXJTdWJJbWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6c2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpoYXNBbHBoYSk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6aXNBbG1vc3RTb2xpZENvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1JbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
Qml0bWFwSW1hZ2VDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUGF0dGVybkNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm46OmNyZWF0ZVBsYXRm
b3JtUGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFn
ZUNHLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpjbGVhclN1
YkltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IpOiBNb3ZlZCBmcm9tIFBsdWdpblZp
ZXcuY3BwIHNpbmNlIFBsYXRmb3JtSW1hZ2UgaXMgd2hhdCB0aGlzIGZ1bmN0aW9uIGJlbG9uZ3Mg
dG8uCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKTog
UmV0dXJucyB0aGUgc3ViLXNhbXBsaW5nIHNjYWxlIGJhc2VkIG9uIHRoZSBjb250ZXh0IHNjYWxp
bmcuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpkcmF3KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tOgor
ICAgICAgICAoVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYTo6dXBkYXRlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW06CisgICAgICAgIChX
ZWJDb3JlOjpNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6dXBkYXRlUGxhdGZvcm1MYXllcik6
CisgICAgICAgICogcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZSk6CisKIDIwMTYtMDctMTEgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBTcGVlY2ggU3ludGhlc2lzOiBnZXR0aW5n
IGxpc3Qgb2Ygdm9pY2VzIG5vIGxvbmdlciB3b3JrcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IGMxYmMw
YmJkZTM2MTI1YzQ2MmJmNDgxZGRhZDVkZDJmODI3ZDUyMzkuLjE4ZDFlYmViZWU5MjBiMmYyOWVm
MzI4NzdkZWQyZTFlY2ZmOTdkNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAor
MjAxNi0wNy0xMSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgor
CisgICAgICAgIEludHJvZHVjZSBQbGF0Zm9ybUltYWdlIGFuZCBtYWtlIGl0IGlzIGEgd3JhcHBl
ciBmb3IgTmF0aXZlSW1hZ2VQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1ODY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogTWlzYy9XZWJDYWNoZS5tbToKKyAgICAgICAgKCtbV2ViQ2FjaGUgaW1h
Z2VGb3JVUkw6XSk6CisKIDIwMTYtMDctMTEgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxl
LmNvbT4KIAogICAgICAgICBBZGQgc3ludGhldGljIGNsaWNrIG9yaWdpbiB0byBXS05hdmlnYXRp
b25BY3Rpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYjQ3ZTJjZWE3OWE4ZGQ3YzUzMzVkMmNkNThlNzk2MTUz
MzVjNTAyYy4uZjFmMTY3MjU4NGMwZWU4MTg1OGE3ZTk2NTUzYWNkOWNkMGFjNmZlZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE2LTA3LTExICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
Ym91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgSW50cm9kdWNlIFBsYXRmb3JtSW1hZ2Ug
YW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVyIGZvciBOYXRpdmVJbWFnZVB0cgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvY2cv
V0tJY29uRGF0YWJhc2VDRy5jcHA6CisgICAgICAgIChXS0ljb25EYXRhYmFzZVRyeUdldENHSW1h
Z2VGb3JVUkwpOgorICAgICAgICAoV0tJY29uRGF0YWJhc2VUcnlDb3B5Q0dJbWFnZUFycmF5Rm9y
VVJMKToKKyAgICAgICAgSXQgd2FzIHRoZSBvbmx5IHBsYWNlIGluIHRoZSBjb2RlIHdoaWNoIHVz
ZXMgQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VBcnJheSgpLgorICAgICAgICBDYWxsIEJpdG1hcElt
YWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMoKSBpbnN0ZWFkIGFuZCBmb3JtIHRoZSByZXR1cm5lZAor
ICAgICAgICBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGJ1aWxkIHRoZSBDRkFycmF5UmVmLgorICAg
ICAgICAKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcHJlc2VudGF0aW9uU25hcHNob3RGb3JQcmV2
aWV3SXRlbUNvbnRyb2xsZXI6XSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRp
bWVyRmlyZWQpOgorICAgICAgICAKKyAgICAgICAgKFdlYktpdDo6aXNBbG1vc3RTb2xpZENvbG9y
KTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSB0aGUgc3RhdGljIGZ1bmN0aW9uIGlzQWxtb3N0U29s
aWRDb2xvciB0byBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKS4KKwogMjAxNi0w
Ny0xMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFtXSzJdW2lP
U10gSW50ZXJtaXR0ZW50IGNyYXNoIGluIFtVSUFwcGxpY2F0aW9uIGJlZ2luQmFja2dyb3VuZFRh
c2tXaXRoTmFtZV0gZXhwaXJhdGlvbiBoYW5kbGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGU3
OGIwNDJiMTA0MDFlMWY0ZWUzYTJhYjFhMDUyYzIxOGMzYTExZTMuLjIyNmVjOWI4NGU3MjJmZmYz
ZTJmMDRkY2U3ZGI3MGUzZGQ0YjgzYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMjI2LDYg
KzIyMjYsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSVNP
VlRUQ3VlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJh
bWVEYXRhLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT3JpZW50YXRpb24uY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UG9pbnQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxl
V2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCA1
ZmY5OTFmZjdkYTMwOGJiOTE4MmVjZTNiZjEyMTczMGE1NDhkMjg3Li5iYWUzMWVhZjg2ZTdmY2E5
MDU4MjUwOTJhYTM4YTc4YzExZTQyMjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4u
Y21ha2UKQEAgLTU1LDcgKzU1LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XS0NBQ0ZWaWV3TGF5ZXJUcmVlSG9zdC5jcHAKIAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFBv
aW50Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwCkBAIC03
NSw2ICs3NCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UGF0aENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtl
CmluZGV4IDUxNDUwNGU2ZWMyNWFhNWU0M2I5OTM5OGQ1ZTM1Y2VlZWE3NjZhYTQuLjY0YWUxNzEw
ODlkY2JmMGNkNDViNzBhOWI4ZjcwZWZhOWZmZGVkYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNt
YWtlCkBAIC0xMjIsNyArMTIyLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNwcAogCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1wbC5jcHAKLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ZvbnRDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJm
YnV6ek5HLmNwcApAQCAtMTM0LDYgKzEzMyw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNF
UwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QYXR0ZXJuQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Bs
YXRmb3JtUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNh
aXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RyYW5zZm9ybWF0aW9uTWF0cml4
Q2Fpcm8uY3BwCkBAIC0xNzksOSArMTc5LDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MveDExL1BsYXRmb3JtRGlzcGxheVgxMS5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy94MTEvWFVuaXF1ZVJlc291cmNlLmNwcAogCi0gICAgcGxhdGZvcm0v
aW1hZ2UtZW5jb2RlcnMvSlBFR0ltYWdlRW5jb2Rlci5jcHAKKyAgICBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHAKIAotICAgIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2ltYWdl
LWVuY29kZXJzL0pQRUdJbWFnZUVuY29kZXIuY3BwCiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2Vm
bC9OZXR3b3JrU3RhdGVOb3RpZmllckVmbC5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpp
bmRleCA2NDVhZGQxY2UzODg4OGIwNGQ0YTJkODlhZGEwYTdjNmRlMTk5ODZiLi5kMzFmNTcwNmE2
OTU5YjIzMWI1YmZiMjJmMDdkMTg0M2FlODYxYTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFr
ZQpAQCAtMTAxLDcgKzEwMSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1wbC5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9YMTEu
Y3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9GbG9hdFJlY3RDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9Gb250Q2Fpcm8uY3BwCkBAIC0xMTUsNiArMTE0LDcgQEAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vUGxhdGZvcm1QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vUmVmUHRyQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3Jt
YXRpb25NYXRyaXhDYWlyby5jcHAKQEAgLTE0OSw3ICsxNDksNyBAQCBsaXN0KEFQUEVORCBXZWJD
b3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAogICAg
IHBsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuY3BwCiAKLSAgICBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHAKIAogICAgIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL2d0ay9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZUd0ay5jcHAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bU1hYy5jbWFrZQppbmRleCA5ZjZmNDk2YjZjYzRlZjZlNGI3NGQ4NGFjMGFhOWRlYTU1YTAyMzdi
Li40ZGRlZDMwODhmNGYzOTZmZWY0NDRlN2VlNjVjNjQxMDY1OGY1ODQxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybU1hYy5jbWFrZQpAQCAtMzk3LDcgKzM5Nyw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1dlYlN5c3RlbUJhY2tkcm9wTGF5
ZXIubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9XZWJUaWxlZEJhY2tpbmdMYXll
ci5tbQogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0Zsb2F0UG9pbnRDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5j
cHAKQEAgLTQxNyw2ICs0MTYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL1BhdGhDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cu
Y3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFnZUNHLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1N1YmltYWdlQ2FjaGVXaXRoVGltZXIuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtV2luQ2Fpcm8uY21ha2UKaW5kZXggMmM1NTNiMDU1MWRhZDY5YWExOTlkOTYwZjU1MjM0
M2Q5MjBmMDdiMy4uMzQyYWE5MjczMmZkOGY5MmU4NWNmYTYyNmQ1NTU3MGVmNjZiNmE2OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCkBAIC0yMSw3ICsyMSw2IEBAIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCiAKLSAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0Zsb2F0UmVjdENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRD
YWlyby5jcHAKQEAgLTM0LDYgKzMzLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
bGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZv
cm1QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8u
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3JtYXRpb25NYXRyaXhDYWly
by5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAK
IAotICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNw
cAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNw
cAogCiAgICAgcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb25TdHViLmNwcAog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggYzExYmM0N2U1Y2FkNjMwYTM2NTdjZGUxYWQ5ZjdiNzZhMGE1NWM2Ni4uZmYyYTQ5OGJh
OTZiODFkYTAzZjgxYTMwMWE4NWJlMzc0ZDBlYzY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQ4NCw3ICsxNDg0LDcgQEAK
IAkJMzc1Q0QyMzIxMTlENDNDODAwQTJBODU5IC8qIEh5cGhlbmF0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzVDRDIzMTExOUQ0M0M4MDBBMkE4
NTkgLyogSHlwaGVuYXRpb24uaCAqLzsgfTsKIAkJMzc2RENDRTExM0I0Rjk2NjAwMkVCRUZDIC8q
IFRleHRSdW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzc2RENDRTAxM0I0Rjk2NjAwMkVCRUZDIC8qIFRleHRSdW4uY3BwICovOyB9OwogCQkzNzc0
QUJBNTBGQTIxRUI0MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzc0QUJBMzBGQTIxRUI0
MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3
IC8qIEJpdG1hcEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3Bw
ICovOyB9OworCQkzNzdBM0E5MDE1RUZDRTlCMDA1OUY1QzcgLyogUGxhdGZvcm1JbWFnZUNHLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3N0EzQThG
MTVFRkNFOUEwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwICovOyB9OwogCQkzNzkxOUMy
MzBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzkxOUMyMTBCN0QxODg2MDBBNTY5OTgg
LyogUG9zaXRpb25JdGVyYXRvci5jcHAgKi87IH07CiAJCTM3OTE5QzI0MEI3RDE4ODYwMEE1Njk5
OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzNzkxOUMyMjBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTM3OTI5MTdBMTk4
NUVGMzkwMEY0QjY2MSAvKiBDcmVkZW50aWFsQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc5MjkxNzgxOTg1RUYzOTAwRjRCNjYxIC8qIENyZWRl
bnRpYWxCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTIzMjUsMTAgKzIzMjUsMTQgQEAKIAkJNTNFRDNGREYxNjdBODhFNzAwNjc2MkU2IC8q
IEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFRDNGREQxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJu
YWxTZXR0aW5nc0dlbmVyYXRlZC5oICovOyB9OwogCQk1M0VGNzY2QjE2NTMwQTYxMDA0Q0JFNDkg
LyogU2V0dGluZ3NNYWNyb3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzRUY3NjZBMTY1MzBBNjEwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oICov
OyB9OwogCQk1M0VGNzY2QzE2NTMxOTk0MDA0Q0JFNDkgLyogU2V0dGluZ3NNYWNyb3MuaCBpbiBD
b3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzRUY3NjZBMTY1MzBBNjEwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oICovOyB9OworCQk1
NTA0RTRDQjFEMzU1N0IyMDBGRTUwODggLyogQml0bWFwUGl4ZWxzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTA0RTRDQTFEMzU1MzJEMDBGRTUwODgg
LyogQml0bWFwUGl4ZWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTUwQTBCQzkwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzcw
ODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovOyB9OwogCQk1NTBBMEJDQTA4
NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxp
ZmllZE5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1NTVCODdFQzFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU1Qjg3RUExQ0FBRjBB
QjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLzsgfTsKIAkJNTU1Qjg3RUQxQ0FBRjBB
QjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNv
ZGVyQ0cuaCAqLzsgfTsKKwkJNTU3NEYwODcxRDAyNzkwOTAwQjlGMTRDIC8qIFBsYXRmb3JtSW1h
Z2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1NzRG
MDg1MUQwMjc0NDQwMEI5RjE0QyAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTVDQkE2QTExRDFERjJFMTAwNDUxODYw
IC8qIEltYWdlRnJhbWVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU1Q0JBNjlGMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1lRGF0YS5j
cHAgKi87IH07CisJCTU1Q0JBNkEyMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1lRGF0YS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVDQkE2QTAx
RDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTcyQTdGMjExQzZFNTcxOTAwOUM2MTQ5IC8q
IFNpbXVsYXRlZENsaWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NzJBN0YyMDFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCAqLzsg
fTsKIAkJNTcyQTdGMjMxQzZFNUE2NjAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MkE3RjIyMUM2RTVB
NjYwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5jcHAgKi87IH07CiAJCTU3RUY1RTYwMUQyMEM4
MzkwMDE3MUU2MCAvKiBUZXh0Q29kZWNSZXBsYWNlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdFRjVFNUYxRDIwQzgzOTAwMTcxRTYwIC8qIFRl
eHRDb2RlY1JlcGxhY2VtZW50LmggKi87IH07CkBAIC05MDYxLDcgKzkwNjUsNyBAQAogCQkzNzZE
Q0NFMDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUZXh0UnVuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzc3MkIwOTUxNjUzNTg1NjAwMEE0OUNBIC8qIFBvcHVwT3BlbmluZ09ic2VydmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvcHVwT3BlbmluZ09ic2VydmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NzRBQkEzMEZBMjFFQjQwMEFEN0RFOSAvKiBP
dmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdG1hcEltYWdlQ0cuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogUGxhdGZv
cm1JbWFnZUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsYXRm
b3JtSW1hZ2VDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3OTE5QzIxMEI3
RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQb3NpdGlvbkl0ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzc5MTlDMjIwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvc2l0aW9uSXRlcmF0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc5MjkxNzgxOTg1RUYzOTAwRjRCNjYx
IC8qIENyZWRlbnRpYWxCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENy
ZWRlbnRpYWxCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05OTg5LDEwICs5
OTkzLDE0IEBACiAJCTUzRUQzRkRDMTY3QTg4RTcwMDY3NjJFNiAvKiBKU0ludGVybmFsU2V0dGlu
Z3NHZW5lcmF0ZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJ
bnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTNFRDNGREQxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRl
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVybmFsU2V0dGluZ3NH
ZW5lcmF0ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNFRjc2NkExNjUzMEE2
MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNldHRpbmdzTWFjcm9zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1
MDRFNENBMUQzNTUzMkQwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Qml0bWFwUGl4ZWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1MEEwQkM3MDg1
RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllZE5hbWUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTUw
QTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTU1
Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2Rl
ckNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1NzRGMDg1MUQwMjc0NDQwMEI5RjE0QyAv
KiBQbGF0Zm9ybUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVDQkE2OUYxRDFERjJFMTAwNDUxODYwIC8qIEltYWdl
RnJhbWVEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdl
RnJhbWVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVDQkE2QTAxRDFE
RjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlRnJhbWVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTU1RDQwOEY3MUE3QzYzMTgwMEM3ODQ1MCAvKiBTVkdJbWFnZUNsaWVudHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHSW1hZ2VDbGllbnRzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTU3MkE3RjIwMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGlj
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW11bGF0ZWRDbGljay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzJBN0YyMjFDNkU1QTY2MDA5QzYxNDkgLyog
U2ltdWxhdGVkQ2xpY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2ltdWxhdGVkQ2xpY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIwMjQs
NyArMjIwMzIsNiBAQAogCQlCMjc1MzUyOTBCMDUzODE0MDAyQ0U2NEYgLyogY2cgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTM3N0EzQThGMTVFRkNFOUEw
MDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCAqLywKIAkJCQkwRkNGMzMyMzBGMkI5NzE1MDA0
QjY3OTUgLyogQ29sb3JDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRGIC8q
IEZsb2F0UG9pbnRDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEZs
b2F0UmVjdENHLmNwcCAqLywKQEAgLTIyMDUxLDYgKzIyMDU4LDcgQEAKIAkJCQlBODBBMzhGRDBF
NTBDQzgyMDBBMjVFQkMgLyogUGF0dGVybkNHLmNwcCAqLywKIAkJCQlCMjc1MzUzNjBCMDUzODE0
MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5jcHAgKi8sCiAJCQkJQjI3NTM1MzcwQjA1Mzgx
NDAwMkNFNjRGIC8qIFBERkRvY3VtZW50SW1hZ2UuaCAqLywKKwkJCQkzNzdBM0E4RjE1RUZDRTlB
MDA1OUY1QzcgLyogUGxhdGZvcm1JbWFnZUNHLmNwcCAqLywKIAkJCQkxRkM0MEZCODE2NTVDNTkx
MDA0MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAgKi8sCiAJCQkJMUZDNDBGQjcx
NjU1QzU5MTAwNDBGMjlFIC8qIFN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCAqLywKIAkJCQlCMjc1
MzUyQTBCMDUzODE0MDAyQ0U2NEYgLyogVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAgKi8sCkBA
IC0yMjExOCw2ICsyMjEyNiw3IEBACiAJCQkJQkVGMjlFRTkxNzE1REQwOTAwQzRCNEM5IC8qIEF1
ZGlvVHJhY2tQcml2YXRlLmggKi8sCiAJCQkJQTg5OTQzMjcwQjQyMzM4NzAwRDdDODAyIC8qIEJp
dG1hcEltYWdlLmNwcCAqLywKIAkJCQlBODk5NDMyNjBCNDIzMzg3MDBEN0M4MDIgLyogQml0bWFw
SW1hZ2UuaCAqLywKKwkJCQk1NTA0RTRDQTFEMzU1MzJEMDBGRTUwODggLyogQml0bWFwUGl4ZWxz
LmggKi8sCiAJCQkJQ0RERTAyRTkxOEIzREZDNzAwQ0Y3RkYxIC8qIENETVNlc3Npb24uaCAqLywK
IAkJCQlCMjc1MzUzODBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3IuY3BwICovLAogCQkJCUIyNzUz
NTM5MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5oICovLApAQCAtMjIyMDIsNiArMjIyMTEsOCBA
QAogCQkJCTQzRDI1OTc2MTNDODE2RjQwMDYwODU1OSAvKiBJbWFnZUJ1ZmZlci5jcHAgKi8sCiAJ
CQkJQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8sCiAJCQkJMjJC
RDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovLAorCQkJCTU1Q0JB
NjlGMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1lRGF0YS5jcHAgKi8sCisJCQkJNTVDQkE2
QTAxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggKi8sCiAJCQkJQkM3RjQ0QTcw
QjlFMzI0RTAwQTlEMDgxIC8qIEltYWdlT2JzZXJ2ZXIuaCAqLywKIAkJCQlBODc0OEQ3NDEyQ0Mz
Rjg5MDAxRkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5jcHAgKi8sCiAJCQkJQTg3NDhENjYxMkND
Mzc2MzAwMUZCQTQxIC8qIEltYWdlT3JpZW50YXRpb24uaCAqLywKQEAgLTIyMjUxLDYgKzIyMjYy
LDcgQEAKIAkJCQkyRDUwMDJGQTFCNTZENzk5MDAyMEFBRjcgLyogUGF0aFV0aWxpdGllcy5oICov
LAogCQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLywKIAkJCQlB
OEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oICovLAorCQkJCTU1NzRGMDg1MUQw
Mjc0NDQwMEI5RjE0QyAvKiBQbGF0Zm9ybUltYWdlLmggKi8sCiAJCQkJMDU2MkY5NjAxNTczRjg4
RjAwMzFDQTE2IC8qIFBsYXRmb3JtTGF5ZXIuaCAqLywKIAkJCQlDRUVGQ0Q3QjE5REIzM0RDMDAz
ODc2RDcgLyogUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmggKi8sCiAJCQkJMDcyODQ3RTIx
NkVCQzVCMDAwNDNDRkE0IC8qIFBsYXRmb3JtVGV4dFRyYWNrLmggKi8sCkBAIC0yNjAxOCw2ICsy
NjAzMCw3IEBACiAJCQkJODVFNzExQjkwQUM1RDUzNTAwNTMyNzBGIC8qIERPTUhUTUxNYXBFbGVt
ZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTE1NzlGMEMwM0JCRDMwMDhCQjBF
RSAvKiBET01IVE1MTWFycXVlZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTE1NkVB
MEMwM0I3NDEwMDhCQjBFRSAvKiBET01IVE1MTWFycXVlZUVsZW1lbnRJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNTU3NEYwODcxRDAyNzkwOTAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTJERUM2NjU1MUM4MkQwNDEwMDk5ODQ2QSAvKiBET01IVE1M
TWVkaWFFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyREVDNjY1MTFDODJEMDE2MDA5OTg0
NkEgLyogRE9NSFRNTE1lZGlhRWxlbWVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NUJBNEQxMzBBQTY4ODY4MDA4ODA1MkQgLyogRE9NSFRNTE1lbnVFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKQEAgLTI2NDU5LDYgKzI2NDcyLDcgQEAKIAkJCQlEMzU5RDc4QTEyOUNBMjcxMDAwNkU1
RDIgLyogSFRNTERldGFpbHNFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEVBNzlGQTBB
MTkxNkRGMDBBOEVGNUYgLyogSFRNTERpcmVjdG9yeUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4RUE3Q0I3MEExOTJCOUMwMEE4RUY1RiAvKiBIVE1MRGl2RWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNTVDQkE2QTIxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEVBNzlGNzBBMTkxNkRGMDBBOEVGNUYgLyogSFRNTERMaXN0
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk4RTUwODI0NUU1OTAwMUU5QUJDIC8q
IEhUTUxEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc3QjM4NjcxMjI4ODNFOTAwQjgx
RkY4IC8qIEhUTUxEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODM1OSw2ICsy
ODM3Myw3IEBACiAJCQkJQjIyMjc5OTMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0FuaW1hdGVNb3Rp
b25FbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk5NTBEMDBCRjIyMDA3MUI3ODIg
LyogU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3
OTk4MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdBbmltYXRpb25FbGVtZW50LmggaW4gSGVhZGVycyAq
LywKKwkJCQk1NTA0RTRDQjFEMzU1N0IyMDBGRTUwODggLyogQml0bWFwUGl4ZWxzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0MzlEMzM0NTEzQTY5MTFDMDBDMjBGNEYgLyogU1ZHQW5pbWF0b3JGYWN0
b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEZCM0Y4NDEzQkM3NTRDMDA5OUZDMTggLyogU1ZH
QXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5OUMwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR0NpcmNsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjk0
MTEsNyArMjk0MjYsNyBAQAogCQkJCUZEQzU0RjA0MTM5OUIwREEwMDhEOTExNyAvKiBCaXF1YWRG
aWx0ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MDI2MTJCMDI2NzYwMEMxQTM1
OSAvKiBCaXF1YWRQcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg5OTQzMjkwQjQy
MzM4ODAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTM3N0Ez
QTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTM3N0EzQTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTc2RDZDNzgxMjJCOEEzRDAwMUZEMUY3IC8qIEJsb2IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMkVERUYxRjMxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JEYXRhLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUUxRDMxQ0RDMTkxOTYwMjAwMDEwMDVBMyAvKiBCbG9iRGF0YUZp
bGVSZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTc3NCw2ICsyOTc4OSw3IEBACiAJ
CQkJMkUyRDk5RTgxMEUyQkMxQzAwNDk2MzM3IC8qIERPTUJsb2IubW0gaW4gU291cmNlcyAqLywK
IAkJCQk4NTA4OUNEODBBOThDNDI4MDBBMjc1QUEgLyogRE9NQ0RBVEFTZWN0aW9uLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJODVBQ0E5ODcwQTlCNTIwMzAwNjcxRTkwIC8qIERPTUNoYXJhY3RlckRh
dGEubW0gaW4gU291cmNlcyAqLywKKwkJCQk1NUNCQTZBMTFEMURGMkUxMDA0NTE4NjAgLyogSW1h
Z2VGcmFtZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODUwODlDREEwQTk4QzQyODAwQTI3
NUFBIC8qIERPTUNvbW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk5NzhEMDdCRTE0NUEwRjZD
MDA5NjkwOEQgLyogRE9NQ29yZUV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NThD
MzhBNjBBQThGMjA0MDBCMTg3QTQgLyogRE9NQ291bnRlci5tbSBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQppbmRleCA0MDExZWEzZmQ4YzA0Njk3NGM1NWQ0OGUz
OTZmMWI4M2I4MWYzMzVkLi5hNWFjNGYwNWFlMzM5YThkNjQ3MDZjMTBmYzBmN2FmNDA0MjU2MjNj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQpAQCAtNjA2LDcgKzYwNiw3IEBAIC0g
KHZvaWQpZ2V0UHJldmlld1NuYXBzaG90SW1hZ2U6KENHSW1hZ2VSZWYqKWNnSW1hZ2UgYW5kUmVj
dHM6KE5TQXJyYXkgKiopcmVjdHMKIAogICAgIGlmICh0ZXh0SW5kaWNhdG9yKSB7CiAgICAgICAg
IGlmIChJbWFnZSogaW1hZ2UgPSB0ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2UoKSkKLSAgICAg
ICAgICAgICpjZ0ltYWdlID0gKENHSW1hZ2VSZWYpQ0ZBdXRvcmVsZWFzZShDR0ltYWdlUmV0YWlu
KGltYWdlLT5nZXRDR0ltYWdlUmVmKCkpKTsKKyAgICAgICAgICAgICpjZ0ltYWdlID0gaW1hZ2Ut
Pm5hdGl2ZUltYWdlKCkuYXV0b3JlbGVhc2UoKTsKICAgICB9CiAKICAgICBSZXRhaW5QdHI8TlNN
dXRhYmxlQXJyYXk+IHJlY3RBcnJheSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdF0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRv
cldpbmRvdy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cu
bW0KaW5kZXggMzY0YTlhODdjZTZmMDY2Mzk0OGI4ODQ2ZThlMmNlNmQxOTBmMjQ4OS4uYTc0ZGE4
NWFjZWNhM2M2Njk4ZGQxNTZhYjMxYTZjOTcxYTM1NGU2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCkBAIC0xNjIsOSArMTYyLDkgQEAgLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSB0ZXh0SW5kaWNhdG9yOihQ
YXNzUmVmUHRyPFRleHRJbmRpY2EKICAgICBjb250ZW50c0ltYWdlTG9naWNhbFNpemUuc2NhbGUo
MSAvIF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VTY2FsZUZhY3RvcigpKTsKICAgICBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZTsKICAgICBpZiAoaW5kaWNhdG9yV2FudHND
b250ZW50Q3Jvc3NmYWRlKCpfdGV4dEluZGljYXRvcikpCi0gICAgICAgIGNvbnRlbnRzSW1hZ2Ug
PSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlV2l0aEhpZ2hsaWdodCgpLT5nZXRDR0ltYWdl
UmVmKCk7CisgICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudElt
YWdlV2l0aEhpZ2hsaWdodCgpLT5uYXRpdmVJbWFnZSgpOwogICAgIGVsc2UKLSAgICAgICAgY29u
dGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2UoKS0+Z2V0Q0dJbWFnZVJl
ZigpOworICAgICAgICBjb250ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFn
ZSgpLT5uYXRpdmVJbWFnZSgpOwogCiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBib3Vu
Y2VMYXllcnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKIApAQCAt
MjY1LDcgKzI2NSw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0FLZXlmcmFtZUFuaW1hdGlvbj4gY3Jl
YXRlQm91bmNlQW5pbWF0aW9uKENGVGltZUludGVydmFsIGR1cmF0CiBzdGF0aWMgUmV0YWluUHRy
PENBQmFzaWNBbmltYXRpb24+IGNyZWF0ZUNvbnRlbnRDcm9zc2ZhZGVBbmltYXRpb24oQ0ZUaW1l
SW50ZXJ2YWwgZHVyYXRpb24sIFRleHRJbmRpY2F0b3ImIHRleHRJbmRpY2F0b3IpCiB7CiAgICAg
UmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGNyb3NzZmFkZUFuaW1hdGlvbiA9IFtDQUJhc2lj
QW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAiY29udGVudHMiXTsKLSAgICBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZSA9IHRleHRJbmRpY2F0b3IuY29udGVudEltYWdl
KCktPmdldENHSW1hZ2VSZWYoKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJ
bWFnZSA9IHRleHRJbmRpY2F0b3IuY29udGVudEltYWdlKCktPm5hdGl2ZUltYWdlKCk7CiAgICAg
W2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRUb1ZhbHVlOihpZCljb250ZW50c0ltYWdlLmdldCgpXTsK
ICAgICBbY3Jvc3NmYWRlQW5pbWF0aW9uIHNldEZpbGxNb2RlOmtDQUZpbGxNb2RlRm9yd2FyZHNd
OwogICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0UmVtb3ZlZE9uQ29tcGxldGlvbjpOT107CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKaW5k
ZXggNDYwZDFiODU2Yjc3YjdjZjRlYzY4OTY1ODFiODMzZDNlN2Y5NzAxNC4uZmM2NDlkMTBhYWI5
YzEzZmZmMjkzMDU1YTcwN2NiNzQ1Mzc0NjkxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcApAQCAtNjgsMTUgKzY4LDEzIEBAIEJpdG1h
cEltYWdlOjpCaXRtYXBJbWFnZShOYXRpdmVJbWFnZVB0ciYmIGltYWdlLCBJbWFnZU9ic2VydmVy
KiBvYnNlcnZlcikKICAgICAsIG1faGF2ZUZyYW1lQ291bnQodHJ1ZSkKICAgICAsIG1fYW5pbWF0
aW9uRmluaXNoZWRXaGVuQ2F0Y2hpbmdVcChmYWxzZSkKIHsKKyAgICBtX2ZyYW1lcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KDEpOworICAgIG1fZnJhbWVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3Zl
KGltYWdlKSk7CisgICAgCiAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhIGRlY29kZXIsIHdl
IGNhbid0IGZpZ3VyZSBvdXQgdGhlIGltYWdlIG9yaWVudGF0aW9uLgogICAgIC8vIFNldCBtX3Np
emVSZXNwZWN0aW5nT3JpZW50YXRpb24gdG8gYmUgdGhlIHNhbWUgYXMgbV9zaXplIHNvIGl0J3Mg
bm90IDB4MC4KLSAgICBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBtX3NpemUgPSBOYXRp
dmVJbWFnZTo6c2l6ZShpbWFnZSk7CisgICAgbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uID0g
bV9zaXplID0gbV9mcmFtZXNbMF0uc2l6ZSgpOwogICAgIG1fZGVjb2RlZFNpemUgPSBtX3NpemUu
YXJlYSgpICogNDsKLSAgICAKLSAgICBtX2ZyYW1lcy5ncm93KDEpOwotICAgIG1fZnJhbWVzWzBd
Lm1faGFzQWxwaGEgPSBOYXRpdmVJbWFnZTo6aGFzQWxwaGEoaW1hZ2UpOwotICAgIG1fZnJhbWVz
WzBdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKLSAgICBtX2ZyYW1lc1swXS5tX2ltYWdlID0gV1RG
TW92ZShpbWFnZSk7CiB9CiAKIEJpdG1hcEltYWdlOjp+Qml0bWFwSW1hZ2UoKQpAQCAtMTA1LDcg
KzEwMyw3IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmhhdmVGcmFtZUltYWdlQXRJbmRleChzaXplX3Qg
aW5kZXgpCiAgICAgaWYgKGluZGV4ID49IG1fZnJhbWVzLnNpemUoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOworICAgIHJldHVy
biBtX2ZyYW1lc1tpbmRleF0uaGFzSW1hZ2UoKTsKIH0KIAogYm9vbCBCaXRtYXBJbWFnZTo6aGFz
U2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdApAQCAtMTI1LDkgKzEyMyw3IEBAIHZvaWQgQml0
bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGRlc3Ryb3lBbGwpCiAgICAgICAgIC8v
IFRoZSB1bmRlcmx5aW5nIGZyYW1lIGlzbid0IGFjdHVhbGx5IGNoYW5naW5nICh3ZSdyZSBqdXN0
IHRyeWluZyB0bwogICAgICAgICAvLyBzYXZlIHRoZSBtZW1vcnkgZm9yIHRoZSBmcmFtZWJ1ZmZl
ciBkYXRhKSwgc28gd2UgZG9uJ3QgbmVlZCB0byBjbGVhcgogICAgICAgICAvLyB0aGUgbWV0YWRh
dGEuCi0gICAgICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMgPSBtX2ZyYW1lc1tpXS5tX2ZyYW1lQnl0
ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1tpXS5jbGVhcihmYWxzZSkpCi0gICAgICAgICAgICBm
cmFtZUJ5dGVzQ2xlYXJlZCArPSBmcmFtZUJ5dGVzOworICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJl
ZCArPSBtX2ZyYW1lc1tpXS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEp
OwogICAgIH0KIAogICAgIG1fc291cmNlLmNsZWFyKGRlc3Ryb3lBbGwsIGNsZWFyQmVmb3JlRnJh
bWUsIGRhdGEoKSwgbV9hbGxEYXRhUmVjZWl2ZWQpOwpAQCAtMTUwLDggKzE0Niw4IEBAIHZvaWQg
Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KGJvb2wgZGVzdHJveUFs
bCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgYWxsRnJhbWVCeXRlcyA9IDA7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAg
YWxsRnJhbWVCeXRlcyArPSBtX2ZyYW1lc1tpXS51c2VkRnJhbWVCeXRlcygpOworICAgIGZvciAo
YXV0byYgZnJhbWUgOiBtX2ZyYW1lcykKKyAgICAgICAgYWxsRnJhbWVCeXRlcyArPSBmcmFtZS5m
cmFtZUJ5dGVzKCk7CiAKICAgICBpZiAoYWxsRnJhbWVCeXRlcyA+IGxhcmdlQW5pbWF0aW9uQ3V0
b2ZmKSB7CiAgICAgICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZSAlcCBkZXN0cm95RGVjb2Rl
ZERhdGFJZk5lY2Vzc2FyeSBkZXN0cm95aW5nRGF0YTogYWxsRnJhbWVCeXRlcz0ldSBjdXRvZmY9
JXUiLCB0aGlzLCBhbGxGcmFtZUJ5dGVzLCBsYXJnZUFuaW1hdGlvbkN1dG9mZik7CkBAIC0xNzcs
NyArMTczLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJveU1ldGFkYXRhQW5kTm90aWZ5KHVu
c2lnbmVkIGZyYW1lQnl0ZXNDbGVhcmVkLCBDbGVhcmVkU28KICAgICAgICAgaW1hZ2VPYnNlcnZl
cigpLT5kZWNvZGVkU2l6ZUNoYW5nZWQodGhpcywgLXNhZmVDYXN0PGludD4oZnJhbWVCeXRlc0Ns
ZWFyZWQpKTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgs
IFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZUNhY2hpbmcgZnJh
bWVDYWNoaW5nKQordm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgsIFN1
YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcg
Y2FjaGluZykKIHsKICAgICBzaXplX3QgbnVtRnJhbWVzID0gZnJhbWVDb3VudCgpOwogICAgIEFT
U0VSVChtX2RlY29kZWRTaXplID09IDAgfHwgbnVtRnJhbWVzID4gMSk7CkBAIC0xODUsMjUgKzE4
MSwxMiBAQCB2b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vic2Ft
cGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbQogICAgIGlmIChtX2ZyYW1lcy5zaXplKCkg
PCBudW1GcmFtZXMpCiAgICAgICAgIG1fZnJhbWVzLmdyb3cobnVtRnJhbWVzKTsKIAotICAgIGlm
IChmcmFtZUNhY2hpbmcgPT0gQ2FjaGVNZXRhZGF0YUFuZEZyYW1lKSB7Ci0gICAgICAgIG1fZnJh
bWVzW2luZGV4XS5tX2ltYWdlID0gbV9zb3VyY2UuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5k
ZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOwotICAgICAgICBtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1w
bGluZ0xldmVsID0gc3Vic2FtcGxpbmdMZXZlbDsKLSAgICB9Ci0KLSAgICBtX2ZyYW1lc1tpbmRl
eF0ubV9vcmllbnRhdGlvbiA9IG1fc291cmNlLm9yaWVudGF0aW9uQXRJbmRleChpbmRleCk7Ci0g
ICAgbV9mcmFtZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKLSAgICBtX2ZyYW1lc1tp
bmRleF0ubV9pc0NvbXBsZXRlID0gbV9zb3VyY2UuZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRl
eCk7CisgICAgbV9mcmFtZXNbaW5kZXhdID0gbV9zb3VyY2UuY3JlYXRlRnJhbWVEYXRhQXRJbmRl
eChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgY2FjaGluZyk7CiAKLSAgICBpZiAocmVwZXRpdGlv
bkNvdW50KGZhbHNlKSAhPSBjQW5pbWF0aW9uTm9uZSkKLSAgICAgICAgbV9mcmFtZXNbaW5kZXhd
Lm1fZHVyYXRpb24gPSBtX3NvdXJjZS5mcmFtZUR1cmF0aW9uQXRJbmRleChpbmRleCk7CisgICAg
TE9HKEltYWdlcywgIkJpdG1hcEltYWdlICVwIGNhY2hlRnJhbWUgJWx1ICglcyV1IGJ5dGVzLCBj
b21wbGV0ZSAlZCkiLCB0aGlzLCBpbmRleCwgY2FjaGluZyA9PSBJbWFnZUZyYW1lRGF0YTo6Q2Fj
aGluZzo6TWV0YWRhdGEgPyAibWV0YWRhdGEgb25seSwgIiA6ICIiLCBtX2ZyYW1lc1tpbmRleF0u
ZnJhbWVCeXRlcygpLCBtX2ZyYW1lc1tpbmRleF0uaXNDb21wbGV0ZSgpKTsKIAotICAgIG1fZnJh
bWVzW2luZGV4XS5tX2hhc0FscGhhID0gbV9zb3VyY2UuZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5k
ZXgpOwotICAgIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXMgPSBtX3NvdXJjZS5mcmFtZUJ5
dGVzQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7Ci0KLSAgICBMT0coSW1hZ2VzLCAi
Qml0bWFwSW1hZ2UgJXAgY2FjaGVGcmFtZSAlbHUgKCVzJXUgYnl0ZXMsIGNvbXBsZXRlICVkKSIs
IHRoaXMsIGluZGV4LCBmcmFtZUNhY2hpbmcgPT0gQ2FjaGVNZXRhZGF0YU9ubHkgPyAibWV0YWRh
dGEgb25seSwgIiA6ICIiLCBtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZUJ5dGVzLCBtX2ZyYW1lc1tp
bmRleF0ubV9pc0NvbXBsZXRlKTsKLQotICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkg
ewotICAgICAgICBpbnQgZGVsdGFCeXRlcyA9IHNhZmVDYXN0PGludD4obV9mcmFtZXNbaW5kZXhd
Lm1fZnJhbWVCeXRlcyk7CisgICAgaWYgKG1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpKSB7Cisg
ICAgICAgIGludCBkZWx0YUJ5dGVzID0gc2FmZUNhc3Q8aW50PihtX2ZyYW1lc1tpbmRleF0uZnJh
bWVCeXRlcygpKTsKICAgICAgICAgbV9kZWNvZGVkU2l6ZSArPSBkZWx0YUJ5dGVzOwogICAgICAg
ICAvLyBUaGUgZnVsbHktZGVjb2RlZCBmcmFtZSB3aWxsIHN1YnN1bWUgdGhlIHBhcnRpYWxseSBk
ZWNvZGVkIGRhdGEgdXNlZAogICAgICAgICAvLyB0byBkZXRlcm1pbmUgaW1hZ2UgcHJvcGVydGll
cy4KQEAgLTI4OCwyMSArMjcxLDE5IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKGJv
b2wgYWxsRGF0YVJlY2VpdmVkKQogICAgIC8vIGZyYW1lIGFmZmVjdGVkIGJ5IGFwcGVuZGluZyBu
ZXcgZGF0YSBoZXJlLiBUaHVzIHdlIGhhdmUgdG8gY2xlYXIgYWxsIHRoZQogICAgIC8vIGluY29t
cGxldGUgZnJhbWVzIHRvIGJlIHNhZmUuCiAgICAgdW5zaWduZWQgZnJhbWVCeXRlc0NsZWFyZWQg
PSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmFtZXMuc2l6ZSgpOyArK2kpIHsK
KyAgICBmb3IgKGF1dG8mIGZyYW1lIDogbV9mcmFtZXMpIHsKICAgICAgICAgLy8gTk9URTogRG9u
J3QgY2FsbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KCkgaGVyZSwgdGhhdCB3aWxsIHRyeSB0bwog
ICAgICAgICAvLyBkZWNvZGUgYW55IHVuY2FjaGVkIChpLmUuIG5ldmVyLWRlY29kZWQgb3IKICAg
ICAgICAgLy8gY2xlYXJlZC1vbi1hLXByZXZpb3VzLXBhc3MpIGZyYW1lcyEKLSAgICAgICAgdW5z
aWduZWQgZnJhbWVCeXRlcyA9IG1fZnJhbWVzW2ldLm1fZnJhbWVCeXRlczsKLSAgICAgICAgaWYg
KG1fZnJhbWVzW2ldLm1faGF2ZU1ldGFkYXRhICYmICFtX2ZyYW1lc1tpXS5tX2lzQ29tcGxldGUp
Ci0gICAgICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSAobV9mcmFtZXNbaV0uY2xlYXIodHJ1
ZSkgPyBmcmFtZUJ5dGVzIDogMCk7CisgICAgICAgIGlmIChmcmFtZS5oYXNNZXRhZGF0YSgpICYm
ICFmcmFtZS5pc0NvbXBsZXRlKCkpCisgICAgICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSBm
cmFtZS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6RW1wdHkpOwogICAgIH0KICAgICBk
ZXN0cm95TWV0YWRhdGFBbmROb3RpZnkoZnJhbWVCeXRlc0NsZWFyZWQsIENsZWFyZWRTb3VyY2U6
Ok5vKTsKICNlbHNlCiAgICAgLy8gRklYTUU6IHdoeSBpcyB0aGlzIGRpZmZlcmVudCBmb3IgaU9T
PwogICAgIGludCBkZWx0YUJ5dGVzID0gMDsKICAgICBpZiAoIW1fZnJhbWVzLmlzRW1wdHkoKSkg
ewotICAgICAgICBpbnQgYnl0ZXMgPSBtX2ZyYW1lc1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5tX2Zy
YW1lQnl0ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5jbGVh
cih0cnVlKSkgeworICAgICAgICBpZiAoaW50IGJ5dGVzID0gbV9mcmFtZXNbbV9mcmFtZXMuc2l6
ZSgpIC0gMV0uY2xlYXIoSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6OkVtcHR5KSkgewogICAgICAg
ICAgICAgZGVsdGFCeXRlcyArPSBieXRlczsKICAgICAgICAgICAgIGRlbHRhQnl0ZXMgKz0gbV9k
ZWNvZGVkUHJvcGVydGllc1NpemU7CiAgICAgICAgICAgICBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6
ZSA9IDA7CkBAIC0zNjYsMTUgKzM0NywxNSBAQCBib29sIEJpdG1hcEltYWdlOjppc1NpemVBdmFp
bGFibGUoKQogICAgIHJldHVybiBtX3NpemVBdmFpbGFibGU7CiB9CiAKLWJvb2wgQml0bWFwSW1h
Z2U6OmVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4LCBJbWFnZUZyYW1lQ2FjaGluZyBm
cmFtZUNhY2hpbmcpCitib29sIEJpdG1hcEltYWdlOjplbnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVf
dCBpbmRleCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgY2FjaGluZykKIHsKICAgICBpZiAoaW5k
ZXggPj0gZnJhbWVDb3VudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoaW5k
ZXggPj0gbV9mcmFtZXMuc2l6ZSgpCi0gICAgICAgIHx8IChmcmFtZUNhY2hpbmcgPT0gQ2FjaGVN
ZXRhZGF0YUFuZEZyYW1lICYmICFtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKLSAgICAgICAgfHwg
KGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhT25seSAmJiAhbV9mcmFtZXNbaW5kZXhdLm1f
aGF2ZU1ldGFkYXRhKSkKLSAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgMCwgZnJhbWVDYWNoaW5n
KTsKKyAgICAgICAgfHwgKGNhY2hpbmcgPT0gSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFk
YXRhQW5kSW1hZ2UgJiYgIW1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpKQorICAgICAgICB8fCAo
Y2FjaGluZyA9PSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEgJiYgIW1fZnJhbWVz
W2luZGV4XS5oYXNNZXRhZGF0YSgpKSkKKyAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgMCwgY2Fj
aGluZyk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM4OCwxMCArMzY5LDkgQEAgTmF0aXZl
SW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgZmxv
YXQgcHJlc2VudGF0aW9uU2MKIAogICAgIC8vIFdlIG1heSBoYXZlIGNhY2hlZCBhIGZyYW1lIHdp
dGggYSBoaWdoZXIgc3Vic2FtcGxpbmcgbGV2ZWwsIGluIHdoaWNoIGNhc2Ugd2UgbmVlZCB0bwog
ICAgIC8vIHJlLWRlY29kZSB3aXRoIGEgbG93ZXIgbGV2ZWwuCi0gICAgaWYgKGluZGV4IDwgbV9m
cmFtZXMuc2l6ZSgpICYmIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlICYmIHN1YnNhbXBsaW5nTGV2
ZWwgPCBtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1wbGluZ0xldmVsKSB7CisgICAgaWYgKGluZGV4
IDwgbV9mcmFtZXMuc2l6ZSgpICYmIG1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpICYmIHN1YnNh
bXBsaW5nTGV2ZWwgPCBtX2ZyYW1lc1tpbmRleF0uc3Vic2FtcGxpbmdMZXZlbCgpKSB7CiAgICAg
ICAgIC8vIElmIHRoZSBpbWFnZSBpcyBhbHJlYWR5IGNhY2hlZCwgYnV0IGF0IHRvbyBzbWFsbCBh
IHNpemUsIHJlLWRlY29kZSBhIGxhcmdlciB2ZXJzaW9uLgotICAgICAgICBpbnQgc2l6ZUNoYW5n
ZSA9IC1tX2ZyYW1lc1tpbmRleF0ubV9mcmFtZUJ5dGVzOwotICAgICAgICBtX2ZyYW1lc1tpbmRl
eF0uY2xlYXIodHJ1ZSk7CisgICAgICAgIGludCBzaXplQ2hhbmdlID0gLW1fZnJhbWVzW2luZGV4
XS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6RW1wdHkpOwogICAgICAgICBpbnZhbGlk
YXRlUGxhdGZvcm1EYXRhKCk7CiAgICAgICAgIG1fZGVjb2RlZFNpemUgKz0gc2l6ZUNoYW5nZTsK
ICAgICAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKQEAgLTM5OSw0MCArMzc5LDcyIEBAIE5hdGl2
ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIGZs
b2F0IHByZXNlbnRhdGlvblNjCiAgICAgfQogCiAgICAgLy8gSWYgd2UgaGF2ZW4ndCBmZXRjaGVk
IGEgZnJhbWUgeWV0LCBkbyBzby4KLSAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8
ICFtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKLSAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgc3Vi
c2FtcGxpbmdMZXZlbCwgQ2FjaGVNZXRhZGF0YUFuZEZyYW1lKTsKKyAgICBpZiAoaW5kZXggPj0g
bV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0uaGFzSW1hZ2UoKSkKKyAgICAgICAg
Y2FjaGVGcmFtZShpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hp
bmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOworCisgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5pbWFn
ZSgpOworfQorICAgIAorTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKCkK
K3sKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCk7Cit9CisgICAgCitOYXRpdmVJbWFn
ZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkK
K3sKKyAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7CisgICAgCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGF1dG8gaW1hZ2UgPSBmcmFtZUlt
YWdlQXRJbmRleChpKTsKKyAgICAgICAgaWYgKGltYWdlICYmIFBsYXRmb3JtSW1hZ2UoaW1hZ2Up
LnNpemUoKSA9PSBzaXplKQorICAgICAgICAgICAgcmV0dXJuIGltYWdlOworICAgIH0KKyAgICAK
KyAgICAvLyBGYWxsYmFjayB0byB0aGUgZmlyc3QgZnJhbWUgaW1hZ2UgaWYgd2UgY2FuJ3QgZmlu
ZCB0aGUgcmlnaHQgc2l6ZQorICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKTsKK30KKyAg
ICAKK05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpCit7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKK30K
IAotICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZTsKK1ZlY3RvcjxOYXRpdmVJbWFn
ZVB0cj4gQml0bWFwSW1hZ2U6OmZyYW1lc05hdGl2ZUltYWdlcygpCit7CisgICAgVmVjdG9yPE5h
dGl2ZUltYWdlUHRyPiBpbWFnZXM7CisgICAgc2l6ZV90IGNvdW50ID0gZnJhbWVDb3VudCgpOwor
ICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBp
ZiAoYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpKQorICAgICAgICAgICAgaW1hZ2Vz
LmFwcGVuZChpbWFnZSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBpbWFnZXM7CiB9CiAKIGJv
b2wgQml0bWFwSW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogewot
ICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQor
ICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hp
bmc6Ok1ldGFkYXRhKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG1fZnJh
bWVzW2luZGV4XS5tX2lzQ29tcGxldGU7CisgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5pc0Nv
bXBsZXRlKCk7CiB9CiAKIGZsb2F0IEJpdG1hcEltYWdlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChz
aXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBDYWNo
ZU1ldGFkYXRhT25seSkpCisgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBJbWFn
ZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEpKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9kdXJhdGlvbjsKLX0KLQotTmF0aXZlSW1hZ2VQdHIg
Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKLXsKLSAgICByZXR1cm4g
ZnJhbWVJbWFnZUF0SW5kZXgoY3VycmVudEZyYW1lKCkpOworICAgIHJldHVybiBtX2ZyYW1lc1tp
bmRleF0uZHVyYXRpb24oKTsKIH0KIAogYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVIYXNBbHBoYUF0
SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRl
eCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQorICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRl
eCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBpZiAobV9mcmFtZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRhKQotICAgICAgICBy
ZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faGFzQWxwaGE7CisgICAgaWYgKG1fZnJhbWVzW2luZGV4
XS5oYXNNZXRhZGF0YSgpKQorICAgICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLmhhc0FscGhh
KCk7CiAKICAgICByZXR1cm4gbV9zb3VyY2UuZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5kZXgpOwog
fQpAQCAtNDQ0LDExICs0NTYsMTEgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Y3VycmVudEZyYW1lS25v
d25Ub0JlT3BhcXVlKCkKIAogSW1hZ2VPcmllbnRhdGlvbiBCaXRtYXBJbWFnZTo6ZnJhbWVPcmll
bnRhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICghZW5zdXJlRnJhbWVJc0Nh
Y2hlZChpbmRleCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQorICAgIGlmICghZW5zdXJlRnJhbWVJc0Nh
Y2hlZChpbmRleCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhKSkKICAgICAgICAg
cmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsKIAotICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9o
YXZlTWV0YWRhdGEpCi0gICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9vcmllbnRhdGlv
bjsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhdLmhhc01ldGFkYXRhKCkpCisgICAgICAgIHJldHVy
biBtX2ZyYW1lc1tpbmRleF0ub3JpZW50YXRpb24oKTsKIAogICAgIHJldHVybiBtX3NvdXJjZS5v
cmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOwogfQpAQCAtNzAwLDE3ICs3MTIsNTYgQEAgQ29sb3Ig
Qml0bWFwSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcigpCiAgICAgICAgIHJldHVybiBDb2xv
cigpOwogICAgIAogICAgIEFTU0VSVChtX2ZyYW1lcy5zaXplKCkpOwotICAgIG1fc29saWRDb2xv
ciA9IE5hdGl2ZUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IobV9mcmFtZXNbMF0ubV9pbWFn
ZS5nZXQoKSk7CisgICAgbV9zb2xpZENvbG9yID0gbV9mcmFtZXNbMF0uc2luZ2xlUGl4ZWxTb2xp
ZENvbG9yKCk7CiAgICAgCiAgICAgQVNTRVJUKG1fc29saWRDb2xvcik7CiAgICAgcmV0dXJuIG1f
c29saWRDb2xvci52YWx1ZSgpOwogfQogICAgIAorYm9vbCBCaXRtYXBJbWFnZTo6aXNBbG1vc3RT
b2xpZENvbG9yKCkKK3sKKyAgICBpZiAoZnJhbWVDb3VudCgpICE9IDEpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiBlbnN1cmVGcmFtZUlzQ2FjaGVkKDApICYmIG1fZnJhbWVz
WzBdLmlzQWxtb3N0U29saWRDb2xvcigpOworfQorICAgIAogYm9vbCBCaXRtYXBJbWFnZTo6Y2Fu
QW5pbWF0ZSgpCiB7CiAgICAgcmV0dXJuIHNob3VsZEFuaW1hdGUoKSAmJiBmcmFtZUNvdW50KCkg
PiAxOwogfQogCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBD
b21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUsIEltYWdlT3JpZW50YXRpb25EZXNj
cmlwdGlvbiBkZXNjcmlwdGlvbikKK3sKKyAgICBpZiAoZGVzdFJlY3QuaXNFbXB0eSgpIHx8IHNy
Y1JlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgc3RhcnRBbmltYXRpb24oRG9Ob3RDYXRjaFVwKTsKKyNlbHNlCisgICAgc3RhcnRBbmltYXRp
b24oKTsKKyNlbmRpZgorICAgIAorICAgIENvbG9yIGNvbG9yID0gc2luZ2xlUGl4ZWxTb2xpZENv
bG9yKCk7CisgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICBmaWxsV2l0aFNvbGlk
Q29sb3IoY29udGV4dCwgZGVzdFJlY3QsIGNvbG9yLCBvcCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZy
YW1lLCBQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKGNvbnRleHQsIGRlc3RSZWN0LCBz
cmNSZWN0KSk7CisgICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3Qg
aGF2ZSBhbiBpbWFnZSB5ZXQuCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBJbWFnZU9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKGRlc2NyaXB0aW9uLmltYWdlT3JpZW50YXRpb24oKSk7CisgICAg
aWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdl
T3JpZW50YXRpb24pCisgICAgICAgIG9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5k
ZXgobV9jdXJyZW50RnJhbWUpOworICAgIAorICAgIFBsYXRmb3JtSW1hZ2UoaW1hZ2UpLmRyYXco
Y29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG1fc2l6ZSwgb3AsIG1vZGUsIG9yaWVudGF0aW9u
KTsKKyAgICAKKyAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQorICAgICAgICBpbWFnZU9ic2VydmVy
KCktPmRpZERyYXcodGhpcyk7Cit9CisgICAgCiB2b2lkIEJpdG1hcEltYWdlOjpkdW1wKFRleHRT
dHJlYW0mIHRzKSBjb25zdAogewogICAgIEltYWdlOjpkdW1wKHRzKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCmluZGV4IDA3NTg5MjljZDg3ZmFk
YWNmMDJiNmVkOGVlYWZlN2RlZmQ2NmYwYzUuLjIyMThjODI0YjUyOGZkNjM5YmFiMTM4ZGVjYzk4
Yjk4MTZhMTY4MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuaApAQCAtMjgsMTEgKzI4LDEzIEBACiAjaWZuZGVmIEJpdG1hcEltYWdlX2gKICNk
ZWZpbmUgQml0bWFwSW1hZ2VfaAogCi0jaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJDb2xv
ci5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2VGcmFtZURhdGEuaCIKICNp
bmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKICNp
bmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgogCiAjaWYgVVNF
KENHKSB8fCBVU0UoQVBQS0lUKQogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTQ3LDYz
ICs0OSw5IEBAIHR5cGVkZWYgc3RydWN0IEhCSVRNQVBfXyAqSEJJVE1BUDsKICNlbmRpZgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgc3RydWN0IEZyYW1lRGF0YTsKLX0KLQotbmFtZXNwYWNl
IFdURiB7Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgVmVjdG9yVHJhaXRzPFdlYkNvcmU6OkZyYW1l
RGF0YT4gOiBwdWJsaWMgU2ltcGxlQ2xhc3NWZWN0b3JUcmFpdHMgewotICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBjYW5Jbml0aWFsaXplV2l0aE1lbXNldCA9IGZhbHNlOyAvLyBOb3QgYWxsIEZy
YW1lRGF0YSBtZW1iZXJzIGluaXRpYWxpemUgdG8gMC4KLSAgICB9OwotfQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIFRpbWVyOwogCi1uYW1lc3BhY2UgTmF0aXZlSW1hZ2UgewotICAg
IEludFNpemUgc2l6ZShjb25zdCBOYXRpdmVJbWFnZVB0ciYpOwotICAgIGJvb2wgaGFzQWxwaGEo
Y29uc3QgTmF0aXZlSW1hZ2VQdHImKTsKLSAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3Io
Y29uc3QgTmF0aXZlSW1hZ2VQdHImKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBGcmFtZURhdGEgQ2xhc3MKLS8vID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdHJ1Y3QgRnJhbWVE
YXRhIHsKLXB1YmxpYzoKLSAgICBGcmFtZURhdGEoKQotICAgICAgICA6IG1faGF2ZU1ldGFkYXRh
KGZhbHNlKQotICAgICAgICAsIG1faXNDb21wbGV0ZShmYWxzZSkKLSAgICAgICAgLCBtX2hhc0Fs
cGhhKHRydWUpCi0gICAgewotICAgIH0KLQotICAgIH5GcmFtZURhdGEoKQotICAgIHsgCi0gICAg
ICAgIGNsZWFyKHRydWUpOwotICAgIH0KLQotICAgIC8vIENsZWFyIHRoZSBjYWNoZWQgaW1hZ2Ug
ZGF0YSBvbiB0aGUgZnJhbWUsIGFuZCAob3B0aW9uYWxseSkgdGhlIG1ldGFkYXRhLgotICAgIC8v
IFJldHVybnMgd2hldGhlciB0aGVyZSB3YXMgY2FjaGVkIGltYWdlIGRhdGEgdG8gY2xlYXIuCi0g
ICAgYm9vbCBjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpOwotICAgIAotICAgIHVuc2lnbmVkIHVz
ZWRGcmFtZUJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZSA/IG1fZnJhbWVCeXRlcyA6IDA7
IH0KLQotICAgIE5hdGl2ZUltYWdlUHRyIG1faW1hZ2U7Ci0gICAgSW1hZ2VPcmllbnRhdGlvbiBt
X29yaWVudGF0aW9uIHsgRGVmYXVsdEltYWdlT3JpZW50YXRpb24gfTsKLSAgICBTdWJzYW1wbGlu
Z0xldmVsIG1fc3Vic2FtcGxpbmdMZXZlbCB7IDAgfTsKLSAgICBmbG9hdCBtX2R1cmF0aW9uIHsg
MCB9OwotICAgIGJvb2wgbV9oYXZlTWV0YWRhdGEgOiAxOwotICAgIGJvb2wgbV9pc0NvbXBsZXRl
IDogMTsKLSAgICBib29sIG1faGFzQWxwaGEgOiAxOwotICAgIHVuc2lnbmVkIG1fZnJhbWVCeXRl
cyB7IDAgfTsKLX07Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS8vIEJpdG1hcEltYWdlIENsYXNzCi0vLyA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KIGNsYXNzIEJpdG1hcEltYWdlIGZpbmFs
IDogcHVibGljIEltYWdlIHsKICAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7CiAgICAg
ZnJpZW5kIGNsYXNzIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOwpAQCAtMTU1LDEyICsxMDMsNiBA
QCBwdWJsaWM6CiAgICAgQ0ZEYXRhUmVmIGdldFRJRkZSZXByZXNlbnRhdGlvbigpIG92ZXJyaWRl
OwogI2VuZGlmCiAKLSNpZiBVU0UoQ0cpCi0gICAgV0VCQ09SRV9FWFBPUlQgQ0dJbWFnZVJlZiBn
ZXRDR0ltYWdlUmVmKCkgb3ZlcnJpZGU7Ci0gICAgQ0dJbWFnZVJlZiBnZXRGaXJzdENHSW1hZ2VS
ZWZPZlNpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwotICAgIFJldGFpblB0cjxDRkFycmF5
UmVmPiBnZXRDR0ltYWdlQXJyYXkoKSBvdmVycmlkZTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0o
V0lOKQogICAgIGJvb2wgZ2V0SEJJVE1BUChIQklUTUFQKSBvdmVycmlkZTsKICAgICBib29sIGdl
dEhCSVRNQVBPZlNpemUoSEJJVE1BUCwgY29uc3QgSW50U2l6ZSopIG92ZXJyaWRlOwpAQCAtMTc0
LDggKzExNiwxMyBAQCBwdWJsaWM6CiAgICAgRXZhc19PYmplY3QqIGdldEV2YXNPYmplY3QoRXZh
cyopIG92ZXJyaWRlOwogI2VuZGlmCiAKKyAgICBXRUJDT1JFX0VYUE9SVCBOYXRpdmVJbWFnZVB0
ciBuYXRpdmVJbWFnZSgpIG92ZXJyaWRlOworICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdl
T2ZTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKICAgICBOYXRpdmVJbWFnZVB0ciBuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIG92ZXJyaWRlOwogICAgIEltYWdlT3JpZW50YXRpb24g
b3JpZW50YXRpb25Gb3JDdXJyZW50RnJhbWUoKSBvdmVycmlkZSB7IHJldHVybiBmcmFtZU9yaWVu
dGF0aW9uQXRJbmRleChjdXJyZW50RnJhbWUoKSk7IH0KKyAgICBWZWN0b3I8TmF0aXZlSW1hZ2VQ
dHI+IGZyYW1lc05hdGl2ZUltYWdlcygpIG92ZXJyaWRlOworICAgIAorICAgIFdFQkNPUkVfRVhQ
T1JUIGJvb2wgaXNBbG1vc3RTb2xpZENvbG9yKCk7CiAKICAgICBib29sIGN1cnJlbnRGcmFtZUtu
b3duVG9CZU9wYXF1ZSgpIG92ZXJyaWRlOwogCkBAIC0yMTUsNyArMTYyLDYgQEAgcHJvdGVjdGVk
OgogICAgIHNpemVfdCBmcmFtZUNvdW50KCk7CiAKICAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUlt
YWdlQXRJbmRleChzaXplX3QsIGZsb2F0IHByZXNlbnRhdGlvblNjYWxlSGludCA9IDEpOwotICAg
IE5hdGl2ZUltYWdlUHRyIGNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCk7CiAK
ICAgICBib29sIGhhdmVGcmFtZUltYWdlQXRJbmRleChzaXplX3QpOwogCkBAIC0yMjUsMTEgKzE3
MSwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBmcmFtZU9yaWVudGF0aW9u
QXRJbmRleChzaXplX3QpOwogCiAgICAgLy8gRGVjb2RlcyBhbmQgY2FjaGVzIGEgZnJhbWUuIE5l
dmVyIGFjY2Vzc2VkIGV4Y2VwdCBpbnRlcm5hbGx5LgotICAgIGVudW0gSW1hZ2VGcmFtZUNhY2hp
bmcgeyBDYWNoZU1ldGFkYXRhT25seSwgQ2FjaGVNZXRhZGF0YUFuZEZyYW1lIH07Ci0gICAgdm9p
ZCBjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZUNh
Y2hpbmcgPSBDYWNoZU1ldGFkYXRhQW5kRnJhbWUpOworICAgIHZvaWQgY2FjaGVGcmFtZShzaXpl
X3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nID0gSW1h
Z2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOwogCiAgICAgLy8gQ2FsbGVk
IGJlZm9yZSBhY2Nlc3NpbmcgbV9mcmFtZXNbaW5kZXhdIGZvciBpbmZvIHdpdGhvdXQgZGVjb2Rp
bmcuIFJldHVybnMgZmFsc2Ugb24gaW5kZXggb3V0IG9mIGJvdW5kcy4KLSAgICBib29sIGVuc3Vy
ZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4LCBJbWFnZUZyYW1lQ2FjaGluZyA9IENhY2hlTWV0
YWRhdGFBbmRGcmFtZSk7CisgICAgYm9vbCBlbnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVfdCBpbmRl
eCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgPSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0
YWRhdGFBbmRJbWFnZSk7CiAKICAgICAvLyBDYWxsZWQgdG8gaW52YWxpZGF0ZSBjYWNoZWQgZGF0
YS4gV2hlbiB8ZGVzdHJveUFsbHwgaXMgdHJ1ZSwgd2Ugd2lwZSBvdXQKICAgICAvLyB0aGUgZW50
aXJlIGZyYW1lIGJ1ZmZlciBjYWNoZSBhbmQgdGVsbCB0aGUgaW1hZ2Ugc291cmNlIHRvIGRlc3Ry
b3kKQEAgLTI5Miw3ICsyMzcsNyBAQCBwcml2YXRlOgogICAgIG11dGFibGUgSW50U2l6ZSBtX3Np
emVSZXNwZWN0aW5nT3JpZW50YXRpb247CiAKICAgICBzaXplX3QgbV9jdXJyZW50RnJhbWUgeyAw
IH07IC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBmcmFtZSBvZiBhbmltYXRpb24uCi0gICAg
VmVjdG9yPEZyYW1lRGF0YSwgMT4gbV9mcmFtZXM7IC8vIEFuIGFycmF5IG9mIHRoZSBjYWNoZWQg
ZnJhbWVzIG9mIHRoZSBhbmltYXRpb24uIFdlIGhhdmUgdG8gcmVmIGZyYW1lcyB0byBwaW4gdGhl
bSBpbiB0aGUgY2FjaGUuCisgICAgVmVjdG9yPEltYWdlRnJhbWVEYXRhLCAxPiBtX2ZyYW1lczsg
Ly8gQW4gYXJyYXkgb2YgdGhlIGNhY2hlZCBmcmFtZXMgb2YgdGhlIGFuaW1hdGlvbi4gV2UgaGF2
ZSB0byByZWYgZnJhbWVzIHRvIHBpbiB0aGVtIGluIHRoZSBjYWNoZS4KIAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxUaW1lcj4gbV9mcmFtZVRpbWVyOwogICAgIGludCBtX3JlcGV0aXRpb25Db3VudCB7
IGNBbmltYXRpb25Ob25lIH07IC8vIEhvdyBtYW55IHRvdGFsIGFuaW1hdGlvbiBsb29wcyB3ZSBz
aG91bGQgZG8uIFRoaXMgd2lsbCBiZSBjQW5pbWF0aW9uTm9uZSBpZiB0aGlzIGltYWdlIHR5cGUg
aXMgaW5jYXBhYmxlIG9mIGFuaW1hdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwUGl4ZWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTY4MWU0YTZjNGNjMDlmZTk0YmRk
ODE0NWQxMDRiZjBiZmQyZTlmMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oCkBAIC0wLDAgKzEsMTczIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6
ZS5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQml0bWFwUGl4ZWxzIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gY3JlYXRlKGNvbnN0
IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPEJpdG1hcFBpeGVscz4oc2l6ZSwgcHJlbXVsdGlwbHlBbHBo
YSk7CisgICAgfQorCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxCaXRtYXBQaXhlbHM+IGNy
ZWF0ZShjb25zdCBCaXRtYXBQaXhlbHMmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8Qml0bWFwUGl4ZWxzPihvdGhlcik7CisgICAgfQorCisgICAgQml0bWFw
UGl4ZWxzKGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSA9IHRydWUp
CisgICAgICAgIDogbV9wcmVtdWx0aXBseUFscGhhKHByZW11bHRpcGx5QWxwaGEpCisgICAgewor
ICAgICAgICBBU1NFUlQoIXNpemUuaXNFbXB0eSgpKTsKKyAgICAgICAgc2V0U2l6ZShzaXplKTsK
KyAgICB9CisKKyAgICBCaXRtYXBQaXhlbHMoY29uc3QgQml0bWFwUGl4ZWxzJiBvdGhlcikKKyAg
ICB7CisgICAgICAgIGlmICh0aGlzID09ICZvdGhlcikKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgICAgIG1fYmFja2luZ1N0b3JlID0gb3RoZXIubV9iYWNraW5nU3RvcmU7Cisg
ICAgICAgIG1fcGl4ZWxzID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOworICAgICAgICBtX3NpemUg
PSBvdGhlci5tX3NpemU7CisgICAgICAgIG1fcHJlbXVsdGlwbHlBbHBoYSA9IG90aGVyLm1fcHJl
bXVsdGlwbHlBbHBoYTsKKyAgICB9CisKKyAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBt
X3NpemUud2lkdGgoKTsgfQorICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUu
aGVpZ2h0KCk7IH0KKworICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlKCkgY29uc3Q7CisKKyAgICBi
b29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAgIGlmICghbV9i
YWNraW5nU3RvcmUudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUuYXJlYSgpKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIG1fYmFja2luZ1N0b3JlLnJlc2l6ZShz
aXplLmFyZWEoKSk7CisgICAgICAgIG1fcGl4ZWxzID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOwor
ICAgICAgICBtX3NpemUgPSBzaXplOworICAgICAgICBjbGVhcigpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBSR0JBMzIqIGF0KGludCB4LCBpbnQgeSkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3BpeGVscyArIHkgKiBtX3NpemUud2lkdGgoKSArIHg7CisgICAg
fQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtZW1zZXQobV9waXhlbHMsIDAs
IG1fc2l6ZS5hcmVhKCkgKiBzaXplb2YoUkdCQTMyKSk7CisgICAgfQorCisgICAgdm9pZCBjbGVh
clJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIGlmIChyZWN0LmlzRW1w
dHkoKSB8fCBpbkJvdW5kcyhyZWN0KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgIHNpemVfdCByZWN0V2lkdGhJbkJ5dGVzID0gcmVjdC53aWR0aCgpICogc2l6ZW9mKFJH
QkEzMik7CisgICAgICAgIFJHQkEzMiogc3RhcnQgPSBhdChyZWN0LngoKSwgcmVjdC55KCkpOwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QuaGVpZ2h0KCk7ICsraSkgeworICAgICAg
ICAgICAgbWVtc2V0KHN0YXJ0LCAwLCByZWN0V2lkdGhJbkJ5dGVzKTsKKyAgICAgICAgICAgIHN0
YXJ0ICs9IG1fc2l6ZS53aWR0aCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCByZXBl
YXRGaXJzdFJvdyhjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHJlY3Qu
aXNFbXB0eSgpIHx8IGluQm91bmRzKHJlY3QpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkgKiBzaXpl
b2YoUkdCQTMyKTsKKyAgICAgICAgUkdCQTMyKiBzcmMgPSBhdChyZWN0LngoKSwgcmVjdC55KCkp
OworICAgICAgICBSR0JBMzIqIGRlc3QgPSBzcmMgKyBtX3NpemUud2lkdGgoKTsKKyAgICAgICAg
Zm9yIChpbnQgaSA9IDE7IGkgPCByZWN0LmhlaWdodCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1l
bWNweShkZXN0LCBzcmMsIHJlY3RXaWR0aEluQnl0ZXMpOworICAgICAgICAgICAgZGVzdCArPSBt
X3NpemUud2lkdGgoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgc2V0UkdCQShpbnQg
eCwgaW50IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEp
CisgICAgeworICAgICAgICBzZXRSR0JBKGF0KHgsIHkpLCByLCBnLCBiLCBhKTsKKyAgICB9CisK
KyAgICB2b2lkIHNldFJHQkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1
bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5
QWxwaGEgfHwgYSA+PSAyNTUpCisgICAgICAgICAgICAqZGVzdCA9IG1ha2VSR0JBKHIsIGcsIGIs
IGEpOworICAgICAgICBlbHNlIGlmICghYSkKKyAgICAgICAgICAgICpkZXN0ID0gMDsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgKmRlc3QgPSBtYWtlUHJlbXVsdGlwbGllZFJHQkEociwgZywg
YiwgYSk7CisgICAgfQorCisgICAgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVk
IHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAgeworICAgICAgICBp
ZiAoIWEpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoYSA+PSAy
NTUgfHwgIWFscGhhQ2hhbm5lbCgqZGVzdCkpIHsKKyAgICAgICAgICAgIHNldFJHQkEoZGVzdCwg
ciwgZywgYiwgYSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKQorICAgICAgICAgICAgKmRlc3QgPSBtYWtl
UHJlbXVsdGlwbGllZFJHQkEocmVkQ2hhbm5lbCgqZGVzdCksIGdyZWVuQ2hhbm5lbCgqZGVzdCks
IGJsdWVDaGFubmVsKCpkZXN0KSwgYWxwaGFDaGFubmVsKCpkZXN0KSk7CisgICAgICAgIAorICAg
ICAgICBSR0JBMzIgc3JjID0gbWFrZVJHQkEociwgZywgYiwgYSk7CisgICAgICAgICpkZXN0ID0g
Q29sb3IoKmRlc3QpLmJsZW5kKHNyYykucmdiKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIW1f
cHJlbXVsdGlwbHlBbHBoYSkKKyAgICAgICAgICAgICpkZXN0ID0gbWFrZVVuUHJlbXVsdGlwbGll
ZFJHQkEocmVkQ2hhbm5lbCgqZGVzdCksIGdyZWVuQ2hhbm5lbCgqZGVzdCksIGJsdWVDaGFubmVs
KCpkZXN0KSwgYWxwaGFDaGFubmVsKCpkZXN0KSk7CisgICAgfQorCisgICAgYm9vbCBpbkJvdW5k
cyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSW50
UmVjdChJbnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHBvaW50KTsKKyAgICB9CisKKyAgICBi
b29sIGluQm91bmRzKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHJlY3QpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBWZWN0b3I8UkdCQTMyPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBSR0JB
MzIqIG1fcGl4ZWxzIHsgbnVsbHB0ciB9OworICAgIEludFNpemUgbV9zaXplOworICAgIGJvb2wg
bV9wcmVtdWx0aXBseUFscGhhIHsgdHJ1ZSB9OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCmluZGV4IDRlMjVhYTZmZDc0ZDFlNDZjNTQxNjE0OThi
YzE3MmJmNjAwODc1ZDEuLjQzOWY1YTYzYzdiZWJlNTYwNDJiMjRlN2Q3MmVjY2VjZjM2YzQwYzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKQEAgLTQ5LDYg
KzQ5LDQwIEBAIGNvbnN0IFJHQkEzMiBDb2xvcjo6dHJhbnNwYXJlbnQ7CiBzdGF0aWMgY29uc3Qg
UkdCQTMyIGxpZ2h0ZW5lZEJsYWNrID0gMHhGRjU0NTQ1NDsKIHN0YXRpYyBjb25zdCBSR0JBMzIg
ZGFya2VuZWRXaGl0ZSA9IDB4RkZBQkFCQUI7CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbXVs
dGlwbHkyNTUodW5zaWduZWQgYykKK3sKKyAgICAvLyBjICogMjU1CisgICAgLy8gICA9IGMgKiAo
MjU2IC0gMSkKKyAgICAvLyAgID0gYyAqIDI1NiAtIGMKKyAgICByZXR1cm4gKGMgPDwgOCkgLSBj
OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRpdmlkZTI1NSh1bnNpZ25lZCBjKQorewor
ICAgIC8vIGMgLyAyNTUKKyAgICAvLyAgID0gYyAvIDI1NiAqICgxICsgMSAvIDI1NSkKKyAgICAv
LyAgID0gKGMgKyBjIC8gMjU1KSAvIDI1NgorICAgIC8vICAgPSAoYyArIChjICsgYyAvIDI1NSkg
LyAyNTYpIC8gMjU2CisgICAgLy8gICA9IChjICsgYyAvIDI1NiArIGMgLyAoMjU1IHggMjU2KSkg
LyAyNTYKKyAgICAvLyAgfj0gKGMgKyBjIC8gMjU2ICsgMSkgLyAyNTYKKyAgICByZXR1cm4gKGMg
KyAoYyA+PiA4KSArIDEpID4+IDg7Cit9CisgICAgCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRp
dmlkZUNlaWwodW5zaWduZWQgYywgdW5zaWduZWQgZCkKK3sKKyAgICByZXR1cm4gKGMgKyBkIC0g
MSkgLyBkOworfQorICAgIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBwcmVtdWx0aXBsaWVkQ2hh
bm5lbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBhKQoreworICAgIHJldHVybiBkaXZpZGUyNTUoYyAq
IGEpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHVucHJlbXVsdGlwbGllZENoYW5uZWwo
dW5zaWduZWQgYywgdW5zaWduZWQgYSkKK3sKKyAgICByZXR1cm4gZGl2aWRlQ2VpbChtdWx0aXBs
eTI1NShjKSwgYSk7Cit9CisgICAgCiBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBi
KQogewogICAgIHJldHVybiAweEZGMDAwMDAwIHwgc3RkOjptYXgoMCwgc3RkOjptaW4ociwgMjU1
KSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAyNTUpKSA8PCA4IHwgc3RkOjptYXgo
MCwgc3RkOjptaW4oYiwgMjU1KSk7CkBAIC01OSw2ICs5MywxNiBAQCBSR0JBMzIgbWFrZVJHQkEo
aW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCiAgICAgcmV0dXJuIHN0ZDo6bWF4KDAsIHN0ZDo6
bWluKGEsIDI1NSkpIDw8IDI0IHwgc3RkOjptYXgoMCwgc3RkOjptaW4ociwgMjU1KSkgPDwgMTYg
fCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAyNTUpKSA8PCA4IHwgc3RkOjptYXgoMCwgc3RkOjpt
aW4oYiwgMjU1KSk7CiB9CiAKK1JHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGlu
dCBnLCBpbnQgYiwgaW50IGEpCit7CisgICAgcmV0dXJuIG1ha2VSR0JBKHByZW11bHRpcGxpZWRD
aGFubmVsKHIsIGEpLCBwcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBhKSwgcHJlbXVsdGlwbGllZENo
YW5uZWwoYiwgYSksIGEpOworfQorICAgIAorUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRSR0JB
KGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQoreworICAgIHJldHVybiBtYWtlUkdCQSh1bnBy
ZW11bHRpcGxpZWRDaGFubmVsKHIsIGEpLCB1bnByZW11bHRpcGxpZWRDaGFubmVsKGcsIGEpLCB1
bnByZW11bHRpcGxpZWRDaGFubmVsKGIsIGEpLCBhKTsKK30KKyAgICAKIHN0YXRpYyBpbnQgY29s
b3JGbG9hdFRvUkdCQUJ5dGUoZmxvYXQgZikKIHsKICAgICAvLyBXZSB1c2UgbHJvdW5kZiBhbmQg
MjU1IGluc3RlYWQgb2YgbmV4dGFmdGVyZigyNTYsIDApIHRvIG1hdGNoIENHJ3Mgcm91bmRpbmcK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCmluZGV4IGRkMjYyNzBiYjQ2
NjBiMzNhZTA3MGU4Yzk0NDUyMGQ3Mjg0NTRiOGEuLmE1NDUzMmM3NzU1YTdjODc2OTM2MjQwY2Fl
NGVjMzdhNGRhMGQwNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
aApAQCAtNTQsNiArNTQsOCBAQCB0eXBlZGVmIHVuc2lnbmVkIFJHQkEzMjsgLy8gRGVwcmVjYXRl
ZDogVHlwZSBmb3IgYW4gUkdCQSBxdWFkcnVwbGV0LiBVc2UgUkdCQSBjbAogCiBXRUJDT1JFX0VY
UE9SVCBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBiKTsKIFdFQkNPUkVfRVhQT1JU
IFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7CitXRUJDT1JFX0VY
UE9SVCBSR0JBMzIgbWFrZVByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGlu
dCBhKTsKK1dFQkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQg
ciwgaW50IGcsIGludCBiLCBpbnQgYSk7CiAKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBjb2xvcldp
dGhPdmVycmlkZUFscGhhKFJHQkEzMiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSk7CiBXRUJD
T1JFX0VYUE9SVCBSR0JBMzIgY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIE9w
dGlvbmFsPGZsb2F0PiBvdmVycmlkZUFscGhhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZS5oCmluZGV4IDdhMjk5OTJmNzcxODhlMDM4MjhkODBhNjViOGJlMmNkOGRjMmRl
NzYuLjhlN2I1MmIxZjRmMzFjNzRhM2NiMmExMzIxNWRhNzdhMmIxOGMwN2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaApAQCAtMTM3LDggKzEzNywxMSBAQCBwdWJs
aWM6CiAKICAgICBlbnVtIFRpbGVSdWxlIHsgU3RyZXRjaFRpbGUsIFJvdW5kVGlsZSwgU3BhY2VU
aWxlLCBSZXBlYXRUaWxlIH07CiAKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUlt
YWdlKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0
aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50U2l6ZSYpIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICB2
aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgeyByZXR1
cm4gbnVsbHB0cjsgfQogICAgIHZpcnR1YWwgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkZv
ckN1cnJlbnRGcmFtZSgpIHsgcmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsgfQorICAgIHZpcnR1
YWwgVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBmcmFtZXNOYXRpdmVJbWFnZXMoKSB7IHJldHVybiB7
IH07IH0KIAogICAgIC8vIEFjY2Vzc29ycyBmb3IgbmF0aXZlIGltYWdlIGZvcm1hdHMuCiAKQEAg
LTE1MCwxMiArMTUzLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgQ0ZEYXRhUmVmIGdldFRJRkZS
ZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCi0jaWYgVVNFKENH
KQotICAgIHZpcnR1YWwgQ0dJbWFnZVJlZiBnZXRDR0ltYWdlUmVmKCkgeyByZXR1cm4gbnVsbHB0
cjsgfQotICAgIHZpcnR1YWwgQ0dJbWFnZVJlZiBnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUoY29u
c3QgSW50U2l6ZSYpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIFJldGFpblB0cjxD
RkFycmF5UmVmPiBnZXRDR0ltYWdlQXJyYXkoKSB7IHJldHVybiBudWxscHRyOyB9Ci0jZW5kaWYK
LQogI2lmIFBMQVRGT1JNKFdJTikKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SEJJVE1BUChIQklUTUFQ
KSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBnZXRIQklUTUFQT2ZTaXplKEhC
SVRNQVAsIGNvbnN0IEludFNpemUqKSB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTc5LDYgKzE3Niw4
IEBAIHB1YmxpYzoKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgdmlydHVhbCBib29sIG5vdFNv
bGlkQ29sb3IoKSB7IHJldHVybiB0cnVlOyB9CiAjZW5kaWYKKyAgICAKKyAgICB2aXJ0dWFsIHZv
aWQgbGF5b3V0SWZOZWVkZWQoKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRleHRTdHJl
YW0mKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VGcmFtZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VGcmFtZURhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmZDIwY2Y4ZTYxZjRiMWExZmUwOGViMzMy
YjcxNjU3ZjAxNDhjMTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5jcHAKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkltYWdlRnJhbWVEYXRhLmgiCisKKyNpbmNsdWRlICJDb2xvci5oIgorCisj
aWYgVVNFKENHKQorI2luY2x1ZGUgIkltYWdlRGVjb2RlckNHLmgiCisjZWxzZQorI2luY2x1ZGUg
IkltYWdlRGVjb2Rlci5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VGcmFtZURhdGE6OkltYWdlRnJhbWVEYXRhKCkK
K3sKK30KKworSW1hZ2VGcmFtZURhdGE6OkltYWdlRnJhbWVEYXRhKE5hdGl2ZUltYWdlUHRyJiYg
aW1hZ2UpCisgICAgOiBtX3N0YXR1cyhEZWNvZGluZ1N0YXR1czo6Q29tcGxldGUpCisgICAgLCBt
X2ltYWdlKFdURk1vdmUoaW1hZ2UpKQoreworICAgIG1fc2l6ZSA9IFBsYXRmb3JtSW1hZ2UobV9p
bWFnZSkuc2l6ZSgpOworICAgIG1faGFzQWxwaGEgPSBQbGF0Zm9ybUltYWdlKG1faW1hZ2UpLmhh
c0FscGhhKCk7Cit9CisKK0ltYWdlRnJhbWVEYXRhOjpJbWFnZUZyYW1lRGF0YShJbWFnZURlY29k
ZXImIGRlY29kZXIsIHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xl
dmVsLCBDYWNoaW5nIGZyYW1lQ2FjaGluZykKK3sKKyAgICBBU1NFUlQoZnJhbWVDYWNoaW5nID09
IENhY2hpbmc6Ok1ldGFkYXRhIHx8IGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YUFu
ZEltYWdlKTsKKyAgICAKKyAgICBpZiAoZnJhbWVDYWNoaW5nID09IENhY2hpbmc6OkltYWdlIHx8
IGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YUFuZEltYWdlKSB7CisgICAgICAgIG1f
aW1hZ2UgPSBkZWNvZGVyLmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGluZGV4LCBzdWJzYW1wbGlu
Z0xldmVsKTsKKyAgICAgICAgbV9zdWJzYW1wbGluZ0xldmVsID0gc3Vic2FtcGxpbmdMZXZlbDsK
KyAgICB9CisgICAgCisgICAgaWYgKGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YSB8
fCBmcmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSkgeworICAgICAgICBt
X29yaWVudGF0aW9uID0gZGVjb2Rlci5vcmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOworICAgICAg
ICBtX3N0YXR1cyA9IGRlY29kZXIuZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCkgPyBEZWNv
ZGluZ1N0YXR1czo6Q29tcGxldGUgOiBEZWNvZGluZ1N0YXR1czo6UGFydGlhbDsKKyAgICAgICAg
CisgICAgICAgIGlmIChkZWNvZGVyLnJlcGV0aXRpb25Db3VudCgpICE9IGNBbmltYXRpb25Ob25l
KQorICAgICAgICAgICAgbV9kdXJhdGlvbiA9IGRlY29kZXIuZnJhbWVEdXJhdGlvbkF0SW5kZXgo
aW5kZXgpOworICAgICAgICAKKyAgICAgICAgbV9oYXNBbHBoYSA9IGRlY29kZXIuZnJhbWVIYXNB
bHBoYUF0SW5kZXgoaW5kZXgpOworICAgICAgICBtX3NpemUgPSBkZWNvZGVyLmZyYW1lU2l6ZUF0
SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOworICAgIH0KK30KKworSW1hZ2VGcmFtZURh
dGE6On5JbWFnZUZyYW1lRGF0YSgpCit7CisgICAgY2xlYXJTdWJJbWFnZXMoKTsKK30KKyAgICAK
K0ltYWdlRnJhbWVEYXRhJiBJbWFnZUZyYW1lRGF0YTo6b3BlcmF0b3I9KGNvbnN0IEltYWdlRnJh
bWVEYXRhJiBvdGhlcikKK3sKKyAgICBpZiAodGhpcyA9PSAmb3RoZXIpCisgICAgICAgIHJldHVy
biAqdGhpczsKKworICAgIG1fc3RhdHVzID0gb3RoZXIubV9zdGF0dXM7CisgICAgbV9zaXplID0g
b3RoZXIubV9zaXplOworICAgIG1faW1hZ2UgPSBvdGhlci5tX2ltYWdlOworICAgIAorICAgIG1f
cGl4ZWxzID0gb3RoZXIucGl4ZWxzKCkgPyBCaXRtYXBQaXhlbHM6OmNyZWF0ZSgqb3RoZXIucGl4
ZWxzKCkpIDogbnVsbHB0cjsKKyAgICAKKyAgICBtX29yaWVudGF0aW9uID0gb3RoZXIubV9vcmll
bnRhdGlvbjsKKyAgICBtX3N1YnNhbXBsaW5nTGV2ZWwgPSBvdGhlci5tX3N1YnNhbXBsaW5nTGV2
ZWw7CisgICAgbV9kdXJhdGlvbiA9IG90aGVyLm1fZHVyYXRpb247CisgICAgbV9oYXNBbHBoYSA9
IG90aGVyLm1faGFzQWxwaGE7CisgICAgcmV0dXJuICp0aGlzOworfQorCit2b2lkIEltYWdlRnJh
bWVEYXRhOjpjbGVhclN1YkltYWdlcygpCit7CisgICAgaWYgKCFtX2ltYWdlKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5jbGVhclN1YkltYWdlcygp
OworfQorCit1bnNpZ25lZCBJbWFnZUZyYW1lRGF0YTo6Y2xlYXIoQ2FjaGluZyBmcmFtZUNhY2hp
bmcpCit7CisgICAgQVNTRVJUKGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpFbXB0eSB8fCBmcmFt
ZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGEpOworICAgIAorICAgIHVuc2lnbmVkIGZyYW1l
Qnl0ZXMgPSB0aGlzLT5mcmFtZUJ5dGVzKCk7CisgICAgCisgICAgY2xlYXJTdWJJbWFnZXMoKTsK
KyAgICAKKyAgICBpZiAoZnJhbWVDYWNoaW5nID09IENhY2hpbmc6OkVtcHR5KQorICAgICAgICAq
dGhpcyA9IEltYWdlRnJhbWVEYXRhKCk7CisgICAgZWxzZQorICAgICAgICBtX2ltYWdlID0gbnVs
bHB0cjsKKyAgICAKKyAgICByZXR1cm4gZnJhbWVCeXRlczsKK30KKworQ29sb3IgSW1hZ2VGcmFt
ZURhdGE6OnNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKCFoYXNJbWFn
ZSgpIHx8IG1fc2l6ZSAhPSBJbnRTaXplKDEsIDEpKQorICAgICAgICByZXR1cm4gQ29sb3IoKTsK
KyAgICAKKyAgICByZXR1cm4gUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5zaW5nbGVQaXhlbFNvbGlk
Q29sb3IoKTsKK30KKworYm9vbCBJbWFnZUZyYW1lRGF0YTo6aXNBbG1vc3RTb2xpZENvbG9yKCkg
Y29uc3QKK3sKKyAgICBpZiAoIWhhc0ltYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICByZXR1cm4gUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5pc0FsbW9zdFNvbGlkQ29sb3Io
KTsKK30KKyAgICAKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlRnJhbWVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUZyYW1lRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjliMTRhZGFlYTU5ZTk5N2VmZTY0ODgxN2I4YWE5
ZGM5OGVlZWRmN2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUZyYW1lRGF0YS5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJCaXRtYXBQaXhlbHMuaCIKKyNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCisjaW5jbHVk
ZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgQ29sb3I7CitjbGFzcyBJbWFnZURlY29kZXI7CisKKy8vIFN1YnNh
bXBsaW5nTGV2ZWwuIDAgaXMgbm8gc3Vic2FtcGxpbmcsIDEgaXMgaGFsZiBkaW1lbnNpb25zIG9u
IGVhY2ggYXhpcyBldGMuCit1c2luZyBTdWJzYW1wbGluZ0xldmVsID0gdWludDhfdDsKKworZW51
bSA6IFN1YnNhbXBsaW5nTGV2ZWwgeworICAgIE1pblN1YnNhbXBsaW5nTGV2ZWwgPSAwLAorICAg
IE1heFN1YnNhbXBsaW5nTGV2ZWwgPSAzLAorICAgIERlZmF1bHRTdWJzYW1wbGluZ0xldmVsID0g
TWluU3Vic2FtcGxpbmdMZXZlbAorfTsKKworY2xhc3MgSW1hZ2VGcmFtZURhdGEgeworcHVibGlj
OgorICAgIGVudW0gY2xhc3MgQ2FjaGluZyB7IEVtcHR5LCBNZXRhZGF0YSwgSW1hZ2UsIE1ldGFk
YXRhQW5kSW1hZ2UgfTsKKyAgICBlbnVtIGNsYXNzIERlY29kaW5nU3RhdHVzIHsgRW1wdHksIFBh
cnRpYWwsIENvbXBsZXRlIH07CisgICAgCisgICAgSW1hZ2VGcmFtZURhdGEoKTsKKyAgICBJbWFn
ZUZyYW1lRGF0YShOYXRpdmVJbWFnZVB0ciYmKTsKKyAgICBJbWFnZUZyYW1lRGF0YShJbWFnZURl
Y29kZXImLCBzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgPSBEZWZhdWx0U3Vic2FtcGxp
bmdMZXZlbCwgQ2FjaGluZyA9IENhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOworICAgIEltYWdl
RnJhbWVEYXRhKGNvbnN0IEltYWdlRnJhbWVEYXRhJiBvdGhlcikgeyBvcGVyYXRvcj0ob3RoZXIp
OyB9CisKKyAgICB+SW1hZ2VGcmFtZURhdGEoKTsKKworICAgIEltYWdlRnJhbWVEYXRhJiBvcGVy
YXRvcj0oY29uc3QgSW1hZ2VGcmFtZURhdGEmIG90aGVyKTsKKyAgICAKKyAgICB1bnNpZ25lZCBj
bGVhcihDYWNoaW5nKTsKKyAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdDsK
KyAgICBib29sIGlzQWxtb3N0U29saWRDb2xvcigpIGNvbnN0OworICAgIAorICAgIERlY29kaW5n
U3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CisgICAgYm9vbCBpc0Nv
bXBsZXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6OkNvbXBs
ZXRlOyB9CisgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAg
dW5zaWduZWQgZnJhbWVCeXRlcygpIGNvbnN0IHsgcmV0dXJuIGhhc0ltYWdlKCkgPyBtX3NpemUu
YXJlYSgpICogNCA6IDA7IH0KKyAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZSgpIGNvbnN0IHsgcmV0
dXJuIG1faW1hZ2U7IH0KKyAgICBCaXRtYXBQaXhlbHMqIHBpeGVscygpIGNvbnN0IHsgcmV0dXJu
IG1fcGl4ZWxzID8gbV9waXhlbHMuZ2V0KCkgOiBudWxscHRyOyB9CisgICAgCisgICAgSW1hZ2VP
cmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZW50YXRpb247IH0K
KyAgICBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwoKSBjb25zdCB7IHJldHVybiBt
X3N1YnNhbXBsaW5nTGV2ZWw7IH0KKyAgICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZHVyYXRpb247IH0KKyAgICAKKyAgICBib29sIGhhc0FscGhhKCkgY29uc3QgeyByZXR1cm4g
bV9oYXNBbHBoYTsgfQorICAgIGJvb2wgaGFzSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdl
OyB9CisgICAgYm9vbCBoYXNNZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuICFtX3NpemUuaXNFbXB0
eSgpOyB9CisgICAgYm9vbCBoYXNQaXhlbHMoKSBjb25zdCB7IHJldHVybiBtX3BpeGVscyAhPSBu
dWxscHRyOyB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgY2xlYXJTdWJJbWFnZXMoKTsKKyAg
ICAKKyAgICBEZWNvZGluZ1N0YXR1cyBtX3N0YXR1cyB7IERlY29kaW5nU3RhdHVzOjpFbXB0eSB9
OworICAgIEludFNpemUgbV9zaXplOworICAgIE5hdGl2ZUltYWdlUHRyIG1faW1hZ2U7CisgICAg
c3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gbV9waXhlbHM7CisgICAgCisgICAgSW1hZ2VP
cmllbnRhdGlvbiBtX29yaWVudGF0aW9uIHsgRGVmYXVsdEltYWdlT3JpZW50YXRpb24gfTsKKyAg
ICBTdWJzYW1wbGluZ0xldmVsIG1fc3Vic2FtcGxpbmdMZXZlbCB7IDAgfTsKKyAgICBmbG9hdCBt
X2R1cmF0aW9uIHsgMCB9OworICAgIGJvb2wgbV9oYXNBbHBoYSB7IHRydWUgfTsKK307CisgICAg
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNv
dXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5j
cHAKaW5kZXggZGRkOGE1NWJhMDkwNmM1ODY2YTE5MmNmOGU0MTRlYTcwN2I3MjhhYy4uODJmNmUy
ZDZlNDU0MzNkYTFhN2Q1NmIzNzBkZmE2MWE0YzQxOTEzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcApAQCAtMjI0LDYgKzIyNCwxMSBA
QCBOYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6
ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldgogICAgIHJldHVybiBpbml0aWFsaXplZCgpID8gbV9k
ZWNvZGVyLT5jcmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCkg
OiBudWxscHRyOwogfQogCitJbWFnZUZyYW1lRGF0YSBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVE
YXRhQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZl
bCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgY2FjaGluZykKK3sKKyAgICByZXR1cm4gaW5pdGlh
bGl6ZWQoKSA/IEltYWdlRnJhbWVEYXRhKCptX2RlY29kZXIsIGluZGV4LCBzdWJzYW1wbGluZ0xl
dmVsLCBjYWNoaW5nKSA6IEltYWdlRnJhbWVEYXRhKCk7Cit9CisgICAgCiB2b2lkIEltYWdlU291
cmNlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAogewogICAgIGlmIChtX2FsbG93U3Vic2Ft
cGxpbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
aAppbmRleCA2MDM1NzM5YjdlOGIwOTZkYzhkZmU5YzUzMGE0MmM2ZjI5MWJkYTAwLi5hNDBjN2Nl
OTMwN2NkYWRmMDc5YWI3MDFhODI3OTliNjkwNTI5ZDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNpZm5k
ZWYgSW1hZ2VTb3VyY2VfaAogI2RlZmluZSBJbWFnZVNvdXJjZV9oCiAKKyNpbmNsdWRlICJJbWFn
ZUZyYW1lRGF0YS5oIgogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJJ
bnRQb2ludC5oIgogI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCkBAIC02Myw5ICs2NCw2IEBA
IGNvbnN0IGludCBjQW5pbWF0aW9uTG9vcE9uY2UgPSAwOwogY29uc3QgaW50IGNBbmltYXRpb25M
b29wSW5maW5pdGUgPSAtMTsKIGNvbnN0IGludCBjQW5pbWF0aW9uTm9uZSA9IC0yOwogCi0vLyBT
dWJzYW1wbGluZ0xldmVsLiAwIGlzIG5vIHN1YnNhbXBsaW5nLCAxIGlzIGhhbGYgZGltZW5zaW9u
cyBvbiBlYWNoIGF4aXMgZXRjLgotdHlwZWRlZiBzaG9ydCBTdWJzYW1wbGluZ0xldmVsOwotCiBj
bGFzcyBJbWFnZVNvdXJjZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VTb3VyY2Up
OwogICAgIGZyaWVuZCBjbGFzcyBCaXRtYXBJbWFnZTsKQEAgLTEzMiwxOCArMTMwLDE5IEBAIHB1
YmxpYzoKICAgICBib29sIGFsbG93U3Vic2FtcGxpbmdPZkZyYW1lQXRJbmRleChzaXplX3QpIGNv
bnN0OwogICAgIAogICAgIC8vIFNpemUgb2Ygb3B0aW9uYWxseSBzdWJzYW1wbGVkIGZyYW1lLgot
ICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSAw
LCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0gPSBEb05vdFJlc3BlY3RJbWFnZU9yaWVudGF0
aW9uKSBjb25zdDsKKyAgICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1w
bGluZ0xldmVsID0gRGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwsIFJlc3BlY3RJbWFnZU9yaWVudGF0
aW9uRW51bSA9IERvTm90UmVzcGVjdEltYWdlT3JpZW50YXRpb24pIGNvbnN0OwogICAgIAogICAg
IC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBkZWNvZGVkIGZyYW1lLiBJZiB0
aGUgZnJhbWUgaXMgbm90IHlldAogICAgIC8vIGRlY29kZWQgdGhlbiByZXR1cm4gMC4KLSAgICB1
bnNpZ25lZCBmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSAwKSBj
b25zdDsKKyAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5n
TGV2ZWwgPSBEZWZhdWx0U3Vic2FtcGxpbmdMZXZlbCkgY29uc3Q7CiAgICAgCiAgICAgZmxvYXQg
ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90KTsKICAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uQXRJbmRleChzaXplX3QpIGNvbnN0OyAvLyBFWElGIGltYWdlIG9yaWVudGF0aW9uCiAg
ICAgCiAgICAgLy8gQ2FsbGVycyBzaG91bGQgbm90IGNhbGwgdGhpcyBhZnRlciBjYWxsaW5nIGNs
ZWFyKCkgd2l0aCBhIGhpZ2hlciBpbmRleDsKICAgICAvLyBzZWUgY29tbWVudHMgb24gY2xlYXIo
KSBhYm92ZS4KLSAgICBOYXRpdmVJbWFnZVB0ciBjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXpl
X3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSAwKTsKKyAgICBOYXRpdmVJbWFnZVB0ciBjcmVhdGVGcmFt
ZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBEZWZhdWx0U3Vic2FtcGxp
bmdMZXZlbCk7CisgICAgSW1hZ2VGcmFtZURhdGEgY3JlYXRlRnJhbWVEYXRhQXRJbmRleChzaXpl
X3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBEZWZhdWx0U3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFt
ZURhdGE6OkNhY2hpbmcgPSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGFBbmRJbWFn
ZSk7CiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVf
dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9y
bUltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYWI3YWVhNDg5ZjNlYjJhODI4NzcxYzIxMDNlOGQ0ZDBiZTE3YmU1ZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRm
b3JtSW1hZ2UuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBl
cy5oIgorI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFn
ZVB0ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbG9yOworY2xhc3MgRmxv
YXRSZWN0OworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKKworY2xhc3Mg
UGxhdGZvcm1JbWFnZSB7CitwdWJsaWM6CisgICAgUGxhdGZvcm1JbWFnZShjb25zdCBOYXRpdmVJ
bWFnZVB0ciYgaW1hZ2UpCisgICAgICAgIDogbV9pbWFnZShpbWFnZSkKKyAgICB7CisgICAgfQor
CisgICAgYm9vbCBpc05pbCgpIGNvbnN0IHsgcmV0dXJuICFtX2ltYWdlOyB9CisgICAgdm9pZCBj
bGVhclN1YkltYWdlcygpOworCisgICAgSW50U2l6ZSBzaXplKCkgY29uc3Q7CisgICAgYm9vbCBo
YXNBbHBoYSgpIGNvbnN0OworICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0
OworICAgIGJvb2wgaXNBbG1vc3RTb2xpZENvbG9yKCkgY29uc3Q7CisgICAgdm9pZCBkcmF3KEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3IsIEJs
ZW5kTW9kZSwgY29uc3QgSW1hZ2VPcmllbnRhdGlvbiYpIGNvbnN0OworCisgICAgc3RhdGljIGZs
b2F0IHN1YnNhbXBsaW5nU2NhbGUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KTsKKworcHJpdmF0ZToKKyNpZiBVU0Uo
Q0cpCisgICAgQ0dJbWFnZVJlZiBjZ0ltYWdlUmVmKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZSA/
IG1faW1hZ2UuZ2V0KCkgOiBudWxscHRyOyB9CisjZW5kaWYKKyAgICBOYXRpdmVJbWFnZVB0ciBt
X2ltYWdlOworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCmluZGV4IGY0YzE0NTdi
YmIyNTU3NTRmMDBhMDYyNWVlODNlMDRkYTdjNmVmY2YuLmQ1MjBmNWQ1ODVhYzYwZGJhZWUyNTVl
MWI4M2MyNGRjNjg3MjEwYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZG
T2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0KQEAgLTIxMiw3
ICsyMTIsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6dXBk
YXRlRGlzcGxheU1vZGUoKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBtX3BhdXNlZEltYWdlID0gaW1hZ2UtPmdldENH
SW1hZ2VSZWYoKTsKKyAgICAgICAgICAgICAgICBtX3BhdXNlZEltYWdlID0gaW1hZ2UtPm5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFtX3BhdXNlZElt
YWdlKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fZGlzcGxheU1vZGUgPSBQYWludEl0QmxhY2s7
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc3MjJiZWM1M2FiOGEwOGE4ZGE4NTI4YjllMGQ3
YzRkMGNkNDEzNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJv
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkJpdG1hcEltYWdlLmgiCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJDYWlyb1V0
aWxpdGllcy5oIgotI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJQbGF0Zm9y
bUNvbnRleHRDYWlyby5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8Y2Fpcm8uaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgTmF0aXZlSW1hZ2UgewotCi1JbnRT
aXplIHNpemUoY29uc3QgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mIGltYWdlKQotewotICAgIHJl
dHVybiBjYWlyb1N1cmZhY2VTaXplKGltYWdlLmdldCgpKTsKLX0KLQotYm9vbCBoYXNBbHBoYShj
b25zdCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYgaW1hZ2UpCi17Ci0gICAgcmV0dXJuIGNhaXJv
X3N1cmZhY2VfZ2V0X2NvbnRlbnQoaW1hZ2UuZ2V0KCkpICE9IENBSVJPX0NPTlRFTlRfQ09MT1I7
Ci19Ci0KLUNvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcihjb25zdCBSZWZQdHI8Y2Fpcm9fc3Vy
ZmFjZV90PiYgaW1hZ2UpCi17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICAKLSAgICBpZiAoTmF0
aXZlSW1hZ2U6OnNpemUoaW1hZ2UpICE9IEludFNpemUoMSwgMSkpCi0gICAgICAgIHJldHVybiBD
b2xvcigpOwotCi0gICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoaW1hZ2UuZ2V0KCkpICE9
IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0KLSAg
ICBSR0JBMzIqIHBpeGVsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8UkdCQTMyKj4oY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFnZS5nZXQoKSkpOwotICAgIHJldHVybiBjb2xvckZyb21Q
cmVtdWx0aXBsaWVkQVJHQigqcGl4ZWwpOwotfQotCi19Ci0KLXZvaWQgQml0bWFwSW1hZ2U6OmRy
YXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmMsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLAotICAgIEJsZW5kTW9kZSBibGVu
ZE1vZGUsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikKLXsKLSAgICBp
ZiAoIWRzdC53aWR0aCgpIHx8ICFkc3QuaGVpZ2h0KCkgfHwgIXNyYy53aWR0aCgpIHx8ICFzcmMu
aGVpZ2h0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0YXJ0QW5pbWF0aW9uKCk7Ci0KLSAg
ICBhdXRvIHN1cmZhY2UgPSBmcmFtZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0gICAg
aWYgKCFzdXJmYWNlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdl
IHlldC4KLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ29sb3IgY29sb3IgPSBzaW5nbGVQaXhlbFNv
bGlkQ29sb3IoKTsKLSAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGZpbGxXaXRo
U29saWRDb2xvcihjb250ZXh0LCBkc3QsIGNvbG9yLCBvcCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBjb250ZXh0LnNhdmUoKTsKLQotICAgIC8vIFNldCB0aGUgY29tcG9zaXRpbmcg
b3BlcmF0aW9uLgotICAgIGlmIChvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyICYmIGJsZW5kTW9k
ZSA9PSBCbGVuZE1vZGVOb3JtYWwgJiYgIWZyYW1lSGFzQWxwaGFBdEluZGV4KG1fY3VycmVudEZy
YW1lKSkKLSAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlQ29w
eSk7Ci0gICAgZWxzZQotICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCwg
YmxlbmRNb2RlKTsKLQotI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0g
ICAgSW50U2l6ZSBzY2FsZWRTaXplID0gY2Fpcm9TdXJmYWNlU2l6ZShzdXJmYWNlLmdldCgpKTsK
LSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gYWRqdXN0U291cmNlUmVjdEZvckRvd25T
YW1wbGluZyhzcmMsIHNjYWxlZFNpemUpOwotI2Vsc2UKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRT
cmNSZWN0KHNyYyk7Ci0jZW5kaWYKLQotICAgIEltYWdlT3JpZW50YXRpb24gZnJhbWVPcmllbnRh
dGlvbihkZXNjcmlwdGlvbi5pbWFnZU9yaWVudGF0aW9uKCkpOwotICAgIGlmIChkZXNjcmlwdGlv
bi5yZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQot
ICAgICAgICBmcmFtZU9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgobV9jdXJy
ZW50RnJhbWUpOwotCi0gICAgRmxvYXRSZWN0IGRzdFJlY3QgPSBkc3Q7Ci0KLSAgICBpZiAoZnJh
bWVPcmllbnRhdGlvbiAhPSBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbikgewotICAgICAgICAvLyBJ
bWFnZU9yaWVudGF0aW9uIGV4cGVjdHMgdGhlIG9yaWdpbiB0byBiZSBhdCAoMCwgMCkuCi0gICAg
ICAgIGNvbnRleHQudHJhbnNsYXRlKGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSk7Ci0gICAgICAg
IGRzdFJlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludCgpKTsKLSAgICAgICAgY29udGV4dC5jb25j
YXRDVE0oZnJhbWVPcmllbnRhdGlvbi50cmFuc2Zvcm1Gcm9tRGVmYXVsdChkc3RSZWN0LnNpemUo
KSkpOwotICAgICAgICBpZiAoZnJhbWVPcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpKSB7
Ci0gICAgICAgICAgICAvLyBUaGUgZGVzdGluYXRpb24gcmVjdGFuZ2xlIHdpbGwgaGF2ZSBpdCdz
IHdpZHRoIGFuZCBoZWlnaHQgYWxyZWFkeSByZXZlcnNlZCBmb3IgdGhlIG9yaWVudGF0aW9uIG9m
Ci0gICAgICAgICAgICAvLyB0aGUgaW1hZ2UsIGFzIGl0IHdhcyBuZWVkZWQgZm9yIHBhZ2UgbGF5
b3V0LCBzbyB3ZSBuZWVkIHRvIHJldmVyc2UgaXQgYmFjayBoZXJlLgotICAgICAgICAgICAgZHN0
UmVjdCA9IEZsb2F0UmVjdChkc3RSZWN0LngoKSwgZHN0UmVjdC55KCksIGRzdFJlY3QuaGVpZ2h0
KCksIGRzdFJlY3Qud2lkdGgoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb250ZXh0LnBs
YXRmb3JtQ29udGV4dCgpLT5kcmF3U3VyZmFjZVRvQ29udGV4dChzdXJmYWNlLmdldCgpLCBkc3RS
ZWN0LCBhZGp1c3RlZFNyY1JlY3QsIGNvbnRleHQpOwotCi0gICAgY29udGV4dC5yZXN0b3JlKCk7
Ci0KLSAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQotICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRp
ZERyYXcodGhpcyk7Ci19Ci0KLWJvb2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0YWRh
dGEpCi17Ci0gICAgaWYgKGNsZWFyTWV0YWRhdGEpCi0gICAgICAgIG1faGF2ZU1ldGFkYXRhID0g
ZmFsc2U7Ci0KLSAgICBpZiAobV9pbWFnZSkgewotICAgICAgICBtX2ltYWdlID0gbnVsbHB0cjsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJv
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtSW1h
Z2VDYWlyby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzBhZGFlYzI3MGUzMWIwNTRhZmM1ZjY2ZDQ4Mjg4YWVi
ZjA2MWUzYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2UuaCIKKworI2lmIFVTRShDQUlSTykKKworI2lu
Y2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8u
aCIKKyNpbmNsdWRlIDxjYWlyby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgUGxh
dGZvcm1JbWFnZTo6Y2xlYXJTdWJJbWFnZXMoKQoreworfQorCitJbnRTaXplIFBsYXRmb3JtSW1h
Z2U6OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBpc05pbCgpID8gSW50U2l6ZSgpIDogY2Fp
cm9TdXJmYWNlU2l6ZShtX2ltYWdlLmdldCgpKTsKK30KKworYm9vbCBQbGF0Zm9ybUltYWdlOjpo
YXNBbHBoYSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzTmlsKCkgfHwgY2Fpcm9fc3VyZmFjZV9n
ZXRfY29udGVudChtX2ltYWdlLmdldCgpKSAhPSBDQUlST19DT05URU5UX0NPTE9SOworfQorCitD
b2xvciBQbGF0Zm9ybUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdAoreworICAg
IGlmIChpc05pbCgpIHx8IHNpemUoKSAhPSBJbnRTaXplKDEsIDEpKQorICAgICAgICByZXR1cm4g
Q29sb3IoKTsKKworICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKG1faW1hZ2UuZ2V0KCkp
ICE9IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkKKyAgICAgICAgcmV0dXJuIENvbG9yKCk7CisK
KyAgICBSR0JBMzIqIHBpeGVsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8UkdCQTMyKj4oY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX2ltYWdlLmdldCgpKSk7CisgICAgcmV0dXJuIGNvbG9y
RnJvbVByZW11bHRpcGxpZWRBUkdCKCpwaXhlbCk7Cit9CisKK2Jvb2wgUGxhdGZvcm1JbWFnZTo6
aXNBbG1vc3RTb2xpZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Zs
b2F0IFBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JikKK3sKKyAgICByZXR1cm4gMTsKK30KKwor
dm9pZCBQbGF0Zm9ybUltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRT
aXplJiwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBtb2RlLCBjb25zdCBJbWFnZU9y
aWVudGF0aW9uJiBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAgICBjb250ZXh0LnNhdmUoKTsKKyAg
ICAKKyAgICAvLyBTZXQgdGhlIGNvbXBvc2l0aW5nIG9wZXJhdGlvbi4KKyAgICBpZiAob3AgPT0g
Q29tcG9zaXRlU291cmNlT3ZlciAmJiBtb2RlID09IEJsZW5kTW9kZU5vcm1hbCAmJiAhaGFzQWxw
aGEoKSkKKyAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlQ29w
eSk7CisgICAgZWxzZQorICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCwg
bW9kZSk7CisgICAgICAgIAorI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcp
CisgICAgSW50U2l6ZSBzY2FsZWRTaXplID0gY2Fpcm9TdXJmYWNlU2l6ZShtX2ltYWdlLmdldCgp
KTsKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gYWRqdXN0U291cmNlUmVjdEZvckRv
d25TYW1wbGluZyhzcmNSZWN0LCBzY2FsZWRTaXplKTsKKyNlbHNlCisgICAgRmxvYXRSZWN0IGFk
anVzdGVkU3JjUmVjdChzcmNSZWN0KTsKKyNlbmRpZgorICAgICAgICAKKyAgICBGbG9hdFJlY3Qg
YWRqdXN0ZWREZXN0UmVjdCA9IGRlc3RSZWN0OworICAgICAgICAKKyAgICBpZiAob3JpZW50YXRp
b24gIT0gRGVmYXVsdEltYWdlT3JpZW50YXRpb24pIHsKKyAgICAgICAgLy8gSW1hZ2VPcmllbnRh
dGlvbiBleHBlY3RzIHRoZSBvcmlnaW4gdG8gYmUgYXQgKDAsIDApLgorICAgICAgICBjb250ZXh0
LnRyYW5zbGF0ZShkZXN0UmVjdC54KCksIGRlc3RSZWN0LnkoKSk7CisgICAgICAgIGFkanVzdGVk
RGVzdFJlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludCgpKTsKKyAgICAgICAgY29udGV4dC5jb25j
YXRDVE0ob3JpZW50YXRpb24udHJhbnNmb3JtRnJvbURlZmF1bHQoYWRqdXN0ZWREZXN0UmVjdC5z
aXplKCkpKTsKKyAgICAgICAgaWYgKG9yaWVudGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkpIHsK
KyAgICAgICAgICAgIC8vIFRoZSBkZXN0aW5hdGlvbiByZWN0YW5nbGUgd2lsbCBoYXZlIGl0J3Mg
d2lkdGggYW5kIGhlaWdodCBhbHJlYWR5IHJldmVyc2VkIGZvciB0aGUgb3JpZW50YXRpb24gb2YK
KyAgICAgICAgICAgIC8vIHRoZSBpbWFnZSwgYXMgaXQgd2FzIG5lZWRlZCBmb3IgcGFnZSBsYXlv
dXQsIHNvIHdlIG5lZWQgdG8gcmV2ZXJzZSBpdCBiYWNrIGhlcmUuCisgICAgICAgICAgICBhZGp1
c3RlZERlc3RSZWN0LnNldFNpemUoYWRqdXN0ZWREZXN0UmVjdC5zaXplKCkudHJhbnNwb3NlZFNp
emUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgp
LT5kcmF3U3VyZmFjZVRvQ29udGV4dChtX2ltYWdlLmdldCgpLCBhZGp1c3RlZERlc3RSZWN0LCBh
ZGp1c3RlZFNyY1JlY3QsIGNvbnRleHQpOworCisgICAgY29udGV4dC5yZXN0b3JlKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzYzgxYTE3MGJlNzlhZTZiZTZjYWNkYzk5
ZjRjMzk4Y2FhZjQyNmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLQotI2lmIFVTRShDRykKLQotI2luY2x1ZGUgIkNv
cmVHcmFwaGljc1NQSS5oIgotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUg
Ikdlb21ldHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKLSNp
bmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCi0jaW5jbHVkZSAiU3ViaW1hZ2VDYWNoZVdpdGhUaW1l
ci5oIgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotI2lmIFVTRShBUFBLSVQpCi0jaW5j
bHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Ci0jZW5kaWYK
LQotI2lmIFBMQVRGT1JNKENPQ09BKQotI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2Uu
aCIKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgPFdlYktpdFN5c3RlbUlu
dGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLW5hbWVzcGFjZSBOYXRpdmVJbWFnZSB7Ci0KLUludFNpemUgc2l6ZShjb25zdCBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4mIGltYWdlKQotewotICAgIEFTU0VSVChpbWFnZSk7Ci0gICAg
cmV0dXJuIEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGltYWdlLmdldCgpKSwgQ0dJbWFnZUdldEhl
aWdodChpbWFnZS5nZXQoKSkpOwotfQotCi1ib29sIGhhc0FscGhhKGNvbnN0IFJldGFpblB0cjxD
R0ltYWdlUmVmPiYpCi17Ci0gICAgLy8gRklYTUU6IEFuc3dlciBjb3JyZWN0bHkgdGhlIHF1ZXN0
aW9uOiBkb2VzIHRoZSBDR0ltYWdlUmVmIGhhdmUgYWxwaGEgY2hhbm5uZWw/Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0gICAgCi1Db2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoY29uc3QgUmV0YWlu
UHRyPENHSW1hZ2VSZWY+JiBpbWFnZSkKLXsKLSAgICBBU1NFUlQoaW1hZ2UpOwotICAgIAotICAg
IGlmIChOYXRpdmVJbWFnZTo6c2l6ZShpbWFnZSkgIT0gSW50U2l6ZSgxLCAxKSkKLSAgICAgICAg
cmV0dXJuIENvbG9yKCk7Ci0gICAgCi0gICAgdW5zaWduZWQgY2hhciBwaXhlbFs0XTsgLy8gUkdC
QQotICAgIGF1dG8gYml0bWFwQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRl
KHBpeGVsLCAxLCAxLCA4LCBzaXplb2YocGl4ZWwpLCBzUkdCQ29sb3JTcGFjZVJlZigpLAotICAg
ICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIz
MkJpZykpOwotCi0gICAgaWYgKCFiaXRtYXBDb250ZXh0KQotICAgICAgICByZXR1cm4gQ29sb3Io
KTsKLSAgICAKLSAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoYml0bWFwQ29udGV4dC5nZXQoKSwg
a0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKGJpdG1hcENvbnRleHQu
Z2V0KCksIENHUmVjdE1ha2UoMCwgMCwgMSwgMSksIGltYWdlLmdldCgpKTsKLSAgICAKLSAgICBp
ZiAoIXBpeGVsWzNdKQotICAgICAgICByZXR1cm4gQ29sb3IoMCwgMCwgMCwgMCk7Ci0KLSAgICBy
ZXR1cm4gQ29sb3IocGl4ZWxbMF0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMV0gKiAyNTUgLyBw
aXhlbFszXSwgcGl4ZWxbMl0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbM10pOwotfQotCi19Ci0K
LWJvb2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpCi17Ci0gICAgaWYgKGNs
ZWFyTWV0YWRhdGEpCi0gICAgICAgIG1faGF2ZU1ldGFkYXRhID0gZmFsc2U7Ci0KLSAgICBtX3N1
YnNhbXBsaW5nTGV2ZWwgPSAwOwotCi0gICAgaWYgKG1faW1hZ2UpIHsKLSNpZiBDQUNIRV9TVUJJ
TUFHRVMKLSAgICAgICAgc3ViaW1hZ2VDYWNoZSgpLmNsZWFySW1hZ2UobV9pbWFnZS5nZXQoKSk7
Ci0jZW5kaWYKLSAgICAgICAgbV9pbWFnZSA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUNHSW1hZ2VSZWYgQml0bWFwSW1hZ2U6
OmdldENHSW1hZ2VSZWYoKQotewotICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKS5nZXQo
KTsKLX0KLQotQ0dJbWFnZVJlZiBCaXRtYXBJbWFnZTo6Z2V0Rmlyc3RDR0ltYWdlUmVmT2ZTaXpl
KGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgc2l6ZV90IGNvdW50ID0gZnJhbWVDb3VudCgp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBDR0lt
YWdlUmVmIGNnSW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleChpKS5nZXQoKTsKLSAgICAgICAgaWYg
KGNnSW1hZ2UgJiYgSW50U2l6ZShDR0ltYWdlR2V0V2lkdGgoY2dJbWFnZSksIENHSW1hZ2VHZXRI
ZWlnaHQoY2dJbWFnZSkpID09IHNpemUpCi0gICAgICAgICAgICByZXR1cm4gY2dJbWFnZTsKLSAg
ICB9Ci0KLSAgICAvLyBGYWxsYmFjayB0byB0aGUgZGVmYXVsdCBDR0ltYWdlUmVmIGlmIHdlIGNh
bid0IGZpbmQgdGhlIHJpZ2h0IHNpemUKLSAgICByZXR1cm4gZ2V0Q0dJbWFnZVJlZigpOwotfQot
Ci1SZXRhaW5QdHI8Q0ZBcnJheVJlZj4gQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VBcnJheSgpCi17
Ci0gICAgc2l6ZV90IGNvdW50ID0gZnJhbWVDb3VudCgpOwotICAgIGlmICghY291bnQpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIENGTXV0YWJsZUFycmF5UmVmIGFycmF5ID0g
Q0ZBcnJheUNyZWF0ZU11dGFibGUoTlVMTCwgY291bnQsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3Mp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBpZiAo
Q0dJbWFnZVJlZiBjdXJyRnJhbWUgPSBmcmFtZUltYWdlQXRJbmRleChpKS5nZXQoKSkKLSAgICAg
ICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheSwgY3VyckZyYW1lKTsKLSAgICB9Ci0gICAg
cmV0dXJuIGFkb3B0Q0YoYXJyYXkpOwotfQotCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCYgY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwgQmxlbmRNb2RlIGJs
ZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKQotewotI2lm
IFBMQVRGT1JNKElPUykKLSAgICBzdGFydEFuaW1hdGlvbihEb05vdENhdGNoVXApOwotI2Vsc2UK
LSAgICBzdGFydEFuaW1hdGlvbigpOwotI2VuZGlmCi0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4gaW1hZ2U7Ci0gICAgLy8gTmV2ZXIgdXNlIHN1YnNhbXBsZWQgaW1hZ2VzIGZvciBkcmF3aW5n
IGludG8gUERGIGNvbnRleHRzLgotICAgIGlmICh3a0NHQ29udGV4dElzUERGQ29udGV4dChjdHh0
LnBsYXRmb3JtQ29udGV4dCgpKSkKLSAgICAgICAgaW1hZ2UgPSBjb3B5VW5zY2FsZWRGcmFtZUlt
YWdlQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIENHUmVjdCB0
cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVjdCA9IENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKGRl
c3RSZWN0LCBDR0NvbnRleHRHZXRDVE0oY3R4dC5wbGF0Zm9ybUNvbnRleHQoKSkpOwotICAgICAg
ICBmbG9hdCBzdWJzYW1wbGluZ1NjYWxlID0gc3RkOjptaW48ZmxvYXQ+KDEsIHN0ZDo6bWF4KHRy
YW5zZm9ybWVkRGVzdGluYXRpb25SZWN0LnNpemUud2lkdGggLyBzcmNSZWN0LndpZHRoKCksIHRy
YW5zZm9ybWVkRGVzdGluYXRpb25SZWN0LnNpemUuaGVpZ2h0IC8gc3JjUmVjdC5oZWlnaHQoKSkp
OwotCi0gICAgICAgIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUsIHN1
YnNhbXBsaW5nU2NhbGUpOwotICAgIH0KLQotICAgIGlmICghaW1hZ2UpIC8vIElmIGl0J3MgdG9v
IGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgQ29sb3IgY29sb3IgPSBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKTsKLSAgICBpZiAoY29s
b3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihjdHh0LCBkZXN0UmVj
dCwgY29sb3IsIGNvbXBvc2l0ZU9wKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8v
IFN1YnNhbXBsaW5nIG1heSBoYXZlIGdpdmVuIHVzIGFuIGltYWdlIHRoYXQgaXMgc21hbGxlciB0
aGFuIHNpemUoKS4KLSAgICBJbnRTaXplIGltYWdlU2l6ZShDR0ltYWdlR2V0V2lkdGgoaW1hZ2Uu
Z2V0KCkpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSk7Ci0gICAgCi0gICAgLy8gc3Jj
UmVjdCBpcyBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHVuc3Vic2FtcGxlZCBpbWFnZSwgc28g
d2UgaGF2ZSB0byBtYXAgaXQgdG8gdGhlIHN1YnNhbXBsZWQgaW1hZ2UuCi0gICAgRmxvYXRSZWN0
IHNjYWxlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGlmIChpbWFnZVNpemUgIT0gbV9zaXplKSB7
Ci0gICAgICAgIEZsb2F0UmVjdCBvcmlnaW5hbEltYWdlQm91bmRzKEZsb2F0UG9pbnQoKSwgbV9z
aXplKTsKLSAgICAgICAgRmxvYXRSZWN0IHN1YnNhbXBsZWRJbWFnZUJvdW5kcyhGbG9hdFBvaW50
KCksIGltYWdlU2l6ZSk7Ci0gICAgICAgIHNjYWxlZFNyY1JlY3QgPSBtYXBSZWN0KHNyY1JlY3Qs
IG9yaWdpbmFsSW1hZ2VCb3VuZHMsIHN1YnNhbXBsZWRJbWFnZUJvdW5kcyk7Ci0gICAgfQotICAg
IAotICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb247Ci0gICAgaWYgKGRlc2NyaXB0aW9u
LnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24pCi0g
ICAgICAgIG9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgobV9jdXJyZW50RnJh
bWUpOwotCi0gICAgY3R4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJl
Y3QsIHNjYWxlZFNyY1JlY3QsIGNvbXBvc2l0ZU9wLCBibGVuZE1vZGUsIG9yaWVudGF0aW9uKTsK
LQotICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCi0gICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlk
RHJhdyh0aGlzKTsKLX0KLQotUmV0YWluUHRyPENHSW1hZ2VSZWY+IEJpdG1hcEltYWdlOjpjb3B5
VW5zY2FsZWRGcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgpCi17Ci0gICAgaWYgKGluZGV4
ID49IGZyYW1lQ291bnQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoaW5k
ZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKLSAgICAg
ICAgY2FjaGVGcmFtZShpbmRleCwgMCk7Ci0KLSAgICBpZiAoIW1fZnJhbWVzW2luZGV4XS5tX3N1
YnNhbXBsaW5nTGV2ZWwpCi0gICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZTsK
LQotICAgIHJldHVybiBtX3NvdXJjZS5jcmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRleCk7Ci19
Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCmluZGV4IGI0MjhkNTBkOTRiZjkyNDI4MDMyODdk
MmVlYzE2YmQ2OWM1MjhkOTIuLjNkYWExMzlhYjdlYTViNDIxNTc3ODgzNWQzNTNkOGFkYjVmMGM3
NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRl
cm5DRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVy
bkNHLmNwcApAQCAtNzIsNyArNzIsNyBAQCBDR1BhdHRlcm5SZWYgUGF0dGVybjo6Y3JlYXRlUGxh
dGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdXNlclNwYWNlVHJhbgogICAgIC8v
IElmIHdlJ3JlIHJlcGVhdGluZyBpbiBib3RoIGRpcmVjdGlvbnMsIHdlIGNhbiB1c2UgaW1hZ2Ut
YmFja2VkIHBhdHRlcm5zCiAgICAgLy8gaW5zdGVhZCBvZiBjdXN0b20gcGF0dGVybnMsIGFuZCBh
dm9pZCB0aWxpbmctZWRnZSBwaXhlbCBjcmFja3MuCiAgICAgaWYgKG1fcmVwZWF0WCAmJiBtX3Jl
cGVhdFkpCi0gICAgICAgIHJldHVybiB3a0NHUGF0dGVybkNyZWF0ZVdpdGhJbWFnZUFuZFRyYW5z
Zm9ybSh0aWxlSW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpLCBwYXR0ZXJuVHJhbnNmb3JtLCB3a1Bh
dHRlcm5UaWxpbmdDb25zdGFudFNwYWNpbmcpOworICAgICAgICByZXR1cm4gd2tDR1BhdHRlcm5D
cmVhdGVXaXRoSW1hZ2VBbmRUcmFuc2Zvcm0odGlsZUltYWdlKCktPm5hdGl2ZUltYWdlKCkuZ2V0
KCksIHBhdHRlcm5UcmFuc2Zvcm0sIHdrUGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2luZyk7CiAK
ICAgICAvLyBJZiBGTFRfTUFYIHNob3VsZCBhbHNvIGJlIHVzZWQgZm9yIHhTdGVwIG9yIHlTdGVw
LCBub3RoaW5nIGlzIHJlbmRlcmVkLiBVc2luZyBmcmFjdGlvbnMgb2YgRkxUX01BWCBhbHNvCiAg
ICAgLy8gcmVzdWx0IGluIG5vdGhpbmcgYmVpbmcgcmVuZGVyZWQuCkBAIC04Myw3ICs4Myw3IEBA
IENHUGF0dGVyblJlZiBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB1c2VyU3BhY2VUcmFuCiAgICAgQ0dGbG9hdCB5U3RlcCA9IG1fcmVwZWF0WSA/
IHRpbGVSZWN0LmhlaWdodCgpIDogKDEgPDwgMjIpOwogCiAgICAgLy8gVGhlIHBhdHRlcm4gd2ls
bCByZWxlYXNlIHRoZSBDR0ltYWdlUmVmIHdoZW4gaXQncyBkb25lIHJlbmRlcmluZyBpbiBwYXR0
ZXJuUmVsZWFzZUNhbGxiYWNrCi0gICAgQ0dJbWFnZVJlZiBwbGF0Zm9ybUltYWdlID0gQ0dJbWFn
ZVJldGFpbih0aWxlSW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpKTsKKyAgICBDR0ltYWdlUmVmIHBs
YXRmb3JtSW1hZ2UgPSB0aWxlSW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKS5sZWFrUmVmKCk7CiAKICAg
ICBjb25zdCBDR1BhdHRlcm5DYWxsYmFja3MgcGF0dGVybkNhbGxiYWNrcyA9IHsgMCwgcGF0dGVy
bkNhbGxiYWNrLCBwYXR0ZXJuUmVsZWFzZUNhbGxiYWNrIH07CiAgICAgcmV0dXJuIENHUGF0dGVy
bkNyZWF0ZShwbGF0Zm9ybUltYWdlLCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgeFN0ZXAs
IHlTdGVwLCBrQ0dQYXR0ZXJuVGlsaW5nQ29uc3RhbnRTcGFjaW5nLCBUUlVFLCAmcGF0dGVybkNh
bGxiYWNrcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QbGF0Zm9ybUltYWdlQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUGxhdGZvcm1JbWFnZUNHLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZmIyZGUwZWExMmRhMjE0ZjEwNDZj
Mzk2MmU4ZWFiNTNjNjQ0MTI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFnZUNHLmNwcApAQCAtMCwwICsxLDE3MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCisKKyNpZiBVU0UoQ0cpCisKKyNp
bmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkNvcmVHcmFwaGljc1NQSS5oIgorI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiU3Vi
aW1hZ2VDYWNoZVdpdGhUaW1lci5oIgorCisjaWYgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgPFdl
YktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKyNlbmRpZgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCit2b2lkIFBsYXRmb3JtSW1hZ2U6OmNsZWFyU3ViSW1h
Z2VzKCkKK3sKKyNpZiBDQUNIRV9TVUJJTUFHRVMKKyAgICBpZiAoIWlzTmlsKCkpCisgICAgICAg
IHN1YmltYWdlQ2FjaGUoKS5jbGVhckltYWdlKGNnSW1hZ2VSZWYoKSk7CisjZW5kaWYKK30KKwor
SW50U2l6ZSBQbGF0Zm9ybUltYWdlOjpzaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNOaWwo
KSA/IEludFNpemUoKSA6IEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGNnSW1hZ2VSZWYoKSksIENH
SW1hZ2VHZXRIZWlnaHQoY2dJbWFnZVJlZigpKSk7Cit9CisKK2Jvb2wgUGxhdGZvcm1JbWFnZTo6
aGFzQWxwaGEoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBBbnN3ZXIgY29ycmVjdGx5IHRoZSBx
dWVzdGlvbjogZG9lcyB0aGUgQ0dJbWFnZVJlZiBoYXZlIGFscGhhIGNoYW5ubmVsPworICAgIHJl
dHVybiB0cnVlOworfQorCitDb2xvciBQbGF0Zm9ybUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29s
b3IoKSBjb25zdAoreworICAgIGlmIChpc05pbCgpIHx8IHNpemUoKSAhPSBJbnRTaXplKDEsIDEp
KQorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICAKKyAgICB1bnNpZ25lZCBjaGFyIHBpeGVs
WzRdOyAvLyBSR0JBCisgICAgYXV0byBiaXRtYXBDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENv
bnRleHRDcmVhdGUocGl4ZWwsIDEsIDEsIDgsIHNpemVvZihwaXhlbCksIHNSR0JDb2xvclNwYWNl
UmVmKCksCisgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCB8IGtDR0JpdG1h
cEJ5dGVPcmRlcjMyQmlnKSk7CisgICAgCisgICAgaWYgKCFiaXRtYXBDb250ZXh0KQorICAgICAg
ICByZXR1cm4gQ29sb3IoKTsKKyAgICAKKyAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoYml0bWFw
Q29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdl
KGJpdG1hcENvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgMSwgMSksIGNnSW1hZ2VSZWYo
KSk7CisgICAgCisgICAgaWYgKCFwaXhlbFszXSkKKyAgICAgICAgcmV0dXJuIENvbG9yKDAsIDAs
IDAsIDApOworICAgIAorICAgIHJldHVybiBDb2xvcihwaXhlbFswXSAqIDI1NSAvIHBpeGVsWzNd
LCBwaXhlbFsxXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsyXSAqIDI1NSAvIHBpeGVsWzNdLCBw
aXhlbFszXSk7Cit9CisgICAgCitib29sIFBsYXRmb3JtSW1hZ2U6OmlzQWxtb3N0U29saWRDb2xv
cigpIGNvbnN0Cit7CisgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IGNnSW1hZ2VSZWYoKTsKKyAgICBB
U1NFUlQoQ0dJbWFnZUdldEJpdHNQZXJDb21wb25lbnQoaW1hZ2UpID09IDgpOworICAgIAorICAg
IENHQml0bWFwSW5mbyBpbWFnZUluZm8gPSBDR0ltYWdlR2V0Qml0bWFwSW5mbyhpbWFnZSk7Cisg
ICAgaWYgKCEoaW1hZ2VJbmZvICYga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUpIHx8IChpbWFn
ZUluZm8gJiBrQ0dCaXRtYXBBbHBoYUluZm9NYXNrKSAhPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlw
bGllZEZpcnN0KSB7CisgICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBiZWluZyBhYmxlIHRvIGhh
bmRsZSBvdGhlciBwaXhlbCBmb3JtYXRzLgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBzaXplX3Qgd2lkdGggPSBD
R0ltYWdlR2V0V2lkdGgoaW1hZ2UpOworICAgIHNpemVfdCBoZWlnaHQgPSBDR0ltYWdlR2V0SGVp
Z2h0KGltYWdlKTsKKyAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBDR0ltYWdlR2V0Qnl0ZXNQZXJS
b3coaW1hZ2UpOworICAgIAorICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHByb3ZpZGVyID0gYWRv
cHRDRihDR0RhdGFQcm92aWRlckNvcHlEYXRhKENHSW1hZ2VHZXREYXRhUHJvdmlkZXIoaW1hZ2Up
KSk7CisgICAgY29uc3QgVUludDgqIGRhdGEgPSBDRkRhdGFHZXRCeXRlUHRyKHByb3ZpZGVyLmdl
dCgpKTsKKyAgICAKKyAgICAvLyBPdmVybGF5IGEgZ3JpZCBvZiBzYW1wbGluZyBkb3RzIG9uIHRv
cCBvZiBhIGdyYXlzY2FsZSB2ZXJzaW9uIG9mIHRoZSBpbWFnZS4KKyAgICAvLyBGb3IgdGhlIGlu
dGVyaW9yIHBvaW50cywgY2FsY3VsYXRlIHRoZSBkaWZmZXJlbmNlIGluIGx1bWluYW5jZSBhbW9u
ZyB0aGUgc2FtcGxlIHBvaW50CisgICAgLy8gYW5kIGl0cyBzdXJyb3VuZHMgcG9pbnRzLCBzY2Fs
ZWQgYnkgdHJhbnNwYXJlbmN5LgorICAgIGNvbnN0IHVuc2lnbmVkIHNhbXBsZVJvd3MgPSA3Owor
ICAgIGNvbnN0IHVuc2lnbmVkIHNhbXBsZUNvbHMgPSA3OworICAgIC8vIEZJWE1FOiBSZWZpbmUg
dGhlIHByb3BlciBudW1iZXIgb2Ygc2FtcGxlcywgYW5kIGFjY29tbW9kYXRlIGRpZmZlcmVudCBh
c3BlY3QgcmF0aW9zLgorICAgIGlmICh3aWR0aCA8IHNhbXBsZUNvbHMgfHwgaGVpZ2h0IDwgc2Ft
cGxlUm93cykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIC8vIEVuc3VyZSB0aGF0
IHRoZSBsYXN0IHJvdy9jb2x1bW4gbGFuZCBvbiB0aGUgaW1hZ2UgcGVyaW1ldGVyLgorICAgIGNv
bnN0IGZsb2F0IHN0cmlkZVdpZHRoID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdpZHRoIC0gMSkgLyAo
c2FtcGxlQ29scyAtIDEpOworICAgIGNvbnN0IGZsb2F0IHN0cmlkZUhlaWdodCA9IHN0YXRpY19j
YXN0PGZsb2F0PihoZWlnaHQgLSAxKSAvIChzYW1wbGVSb3dzIC0gMSk7CisgICAgZmxvYXQgc2Ft
cGxlc1tzYW1wbGVSb3dzXVtzYW1wbGVDb2xzXTsKKyAgICAKKyAgICAvLyBGaW5kIHRoZSBsdW1p
bmFuY2Ugb2YgdGhlIHNhbXBsZSBwb2ludHMuCisgICAgZmxvYXQgeSA9IDA7CisgICAgY29uc3Qg
VUludDgqIHJvdyA9IGRhdGE7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNhbXBsZVJv
d3M7ICsraSkgeworICAgICAgICBmbG9hdCB4ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBq
ID0gMDsgaiA8IHNhbXBsZUNvbHM7ICsraikgeworICAgICAgICAgICAgY29uc3QgVUludDgqIHAw
ID0gcm93ICsgKHN0YXRpY19jYXN0PGludD4oeCArIC41KSkgKiA0OworICAgICAgICAgICAgLy8g
UiBHIEIgQQorICAgICAgICAgICAgc2FtcGxlc1tpXVtqXSA9ICgwLjIxMjUgKiAqcDAgKyAwLjcx
NTQgKiAqKHAwKzEpICsgMC4wNzIxICogKihwMCsyKSkgKiAqKHAwKzMpIC8gMjU1OworICAgICAg
ICAgICAgeCArPSBzdHJpZGVXaWR0aDsKKyAgICAgICAgfQorICAgICAgICB5ICs9IHN0cmlkZUhl
aWdodDsKKyAgICAgICAgcm93ID0gZGF0YSArIChzdGF0aWNfY2FzdDxpbnQ+KHkgKyAuNSkpICog
Ynl0ZXNQZXJSb3c7CisgICAgfQorICAgIAorICAgIC8vIERldGVybWluZSB0aGUgaW1hZ2Ugc2Nv
cmUuCisgICAgZmxvYXQgYWNjdW1TY29yZSA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsg
aSA8IHNhbXBsZVJvd3MgLSAxOyArK2kpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMTsg
aiA8IHNhbXBsZUNvbHMgLSAxOyArK2opIHsKKyAgICAgICAgICAgIGZsb2F0IGRpZmYgPSBzYW1w
bGVzW2kgLSAxXVtqXSArIHNhbXBsZXNbaSArIDFdW2pdICsgc2FtcGxlc1tpXVtqIC0gMV0gKyBz
YW1wbGVzW2ldW2ogKyAxXSAtIDQgKiBzYW1wbGVzW2ldW2pdOworICAgICAgICAgICAgYWNjdW1T
Y29yZSArPSBkaWZmICogZGlmZjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBUaGUg
c2NvcmUgZm9yIGEgZ2l2ZW4gc2FtcGxlIGNhbiBiZSB3aXRoaW4gdGhlIHJhbmdlIG9mIDAgYW5k
IDI1NV4yLgorICAgIHJldHVybiBhY2N1bVNjb3JlIDwgMjUwMCAqIChzYW1wbGVSb3dzIC0gMikg
KiAoc2FtcGxlQ29scyAtIDIpOworfQorCitmbG9hdCBQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGlu
Z1NjYWxlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KQoreworICAgIC8vIE5ldmVyIHVzZSBzdWJzYW1w
bGVkIGltYWdlcyBmb3IgZHJhd2luZyBpbnRvIFBERiBjb250ZXh0cy4KKyAgICBpZiAod2tDR0Nv
bnRleHRJc1BERkNvbnRleHQoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSkpCisgICAgICAgIHJl
dHVybiAxOworICAgIAorICAgIENHUmVjdCB0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVjdCA9IENH
UmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKGRlc3RSZWN0LCBDR0NvbnRleHRHZXRDVE0oY29udGV4
dC5wbGF0Zm9ybUNvbnRleHQoKSkpOworICAgIHJldHVybiBzdGQ6Om1pbjxmbG9hdD4oMSwgc3Rk
OjptYXgodHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS53aWR0aCAvIHNyY1JlY3Qud2lk
dGgoKSwgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS5oZWlnaHQgLyBzcmNSZWN0Lmhl
aWdodCgpKSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1JbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5k
TW9kZSBtb2RlLCBjb25zdCBJbWFnZU9yaWVudGF0aW9uJiBvcmllbnRhdGlvbikgY29uc3QKK3sK
KyAgICAvLyBTdWJzYW1wbGluZyBtYXkgaGF2ZSBnaXZlbiB1cyBhbiBpbWFnZSB0aGF0IGlzIHNt
YWxsZXIgdGhhbiBzaXplKCkuCisgICAgSW50U2l6ZSBzdWJzYW1wbGVkSW1hZ2VTaXplID0gc2l6
ZSgpOworICAgIAorICAgIC8vIHNyY1JlY3QgaXMgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB1
bnN1YnNhbXBsZWQgaW1hZ2UsIHNvIHdlIGhhdmUgdG8gbWFwIGl0IHRvIHRoZSBzdWJzYW1wbGVk
IGltYWdlLgorICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGlm
IChzdWJzYW1wbGVkSW1hZ2VTaXplICE9IHNyY1NpemUpCisgICAgICAgIGFkanVzdGVkU3JjUmVj
dCA9IG1hcFJlY3Qoc3JjUmVjdCwgRmxvYXRSZWN0KHsgfSwgc3JjU2l6ZSksIEZsb2F0UmVjdCh7
IH0sIHN1YnNhbXBsZWRJbWFnZVNpemUpKTsKKyAgICAKKyAgICBjb250ZXh0LmRyYXdOYXRpdmVJ
bWFnZShtX2ltYWdlLCBzdWJzYW1wbGVkSW1hZ2VTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNS
ZWN0LCBvcCwgbW9kZSwgb3JpZW50YXRpb24pOworfQorICAgIAorfQorCisjZW5kaWYgLy8gVVNF
KENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
VGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0KaW5kZXggODk3
MjBkMTczNjVkYTdlOGJhODQ2OWQ1Mjk0NTQ4ZDUxODQ3YTdmZS4uNDQ3NmZjNWY4N2MzNDk4OGY2
ZDlhZDU1ZWViZDhkMWI5YmIwMjJlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRh
dGlvbkNvY29hLm1tCkBAIC0xMjksNyArMTI5LDcgQEAgVGV4dFRyYWNrUmVwcmVzZW50YXRpb25D
b2NvYTo6flRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EoKQogdm9pZCBUZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbkNvY29hOjp1cGRhdGUoKQogewogICAgIGlmIChhdXRvIHJlcHJlc2VudGF0aW9u
ID0gbV9jbGllbnQuY3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZSgpKQotICAgICAg
ICBbbV9sYXllci5nZXQoKSBzZXRDb250ZW50czooaWQpcmVwcmVzZW50YXRpb24tPmdldENHSW1h
Z2VSZWYoKV07CisgICAgICAgIFttX2xheWVyLmdldCgpIHNldENvbnRlbnRzOihpZClyZXByZXNl
bnRhdGlvbi0+bmF0aXZlSW1hZ2UoKS5nZXQoKV07CiB9CiAKIHZvaWQgVGV4dFRyYWNrUmVwcmVz
ZW50YXRpb25Db2NvYTo6c2V0Q29udGVudFNjYWxlKGZsb2F0IHNjYWxlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCmluZGV4IDAxZWI2ZGQz
MDA0M2EyMjUyOTE3NmZkOTEyMTE3ZGM1Nzc2YzE3YmEuLmRjMWM3YzcwOTVkOTQ0YzRjNjJmMWZl
MDkzNTcwMmExM2M3YzdhNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9JbWFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvSW1hZ2VNYWMubW0KQEAgLTg1LDMxICs4NSwyMiBAQCBDRkRhdGFSZWYgQml0bWFw
SW1hZ2U6OmdldFRJRkZSZXByZXNlbnRhdGlvbigpCiAgICAgaWYgKG1fdGlmZlJlcCkKICAgICAg
ICAgcmV0dXJuIG1fdGlmZlJlcC5nZXQoKTsKIAotICAgIHVuc2lnbmVkIG51bUZyYW1lcyA9IGZy
YW1lQ291bnQoKTsKKyAgICBhdXRvIG5hdGl2ZUltYWdlcyA9IHRoaXMtPmZyYW1lc05hdGl2ZUlt
YWdlcygpOwogCi0gICAgLy8gSWYgbnVtRnJhbWVzIGlzIHplcm8sIHdlIGtub3cgZm9yIGNlcnRh
aW4gdGhpcyBpbWFnZSBkb2Vzbid0IGhhdmUgdmFsaWQgZGF0YQorICAgIC8vIElmIGZyYW1lc0lt
YWdlcy5zaXplKCkgaXMgemVybywgd2Uga25vdyBmb3IgY2VydGFpbiB0aGlzIGltYWdlIGRvZXNu
J3QgaGF2ZSB2YWxpZCBkYXRhCiAgICAgLy8gRXZlbiB0aG91Z2ggdGhlIGNhbGwgdG8gQ0dJbWFn
ZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEgd2lsbCBmYWlsIGFuZCB3ZSdsbCBoYW5kbGUgaXQg
Z3JhY2VmdWxseSwKICAgICAvLyBpbiBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgdGhhdCBjYWxsIHdp
bGwgc3BhbSB0aGUgY29uc29sZSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UKLSAgICBpZiAoIW51bUZy
YW1lcykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBWZWN0b3I8Q0dJbWFnZVJlZj4gaW1hZ2Vz
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1GcmFtZXM7ICsraSApIHsKLSAgICAg
ICAgQ0dJbWFnZVJlZiBjZ0ltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkuZ2V0KCk7Ci0gICAg
ICAgIGlmIChjZ0ltYWdlKQotICAgICAgICAgICAgaW1hZ2VzLmFwcGVuZChjZ0ltYWdlKTsKLSAg
ICB9Ci0KLSAgICB1bnNpZ25lZCBudW1WYWxpZEZyYW1lcyA9IGltYWdlcy5zaXplKCk7CisgICAg
aWYgKCFuYXRpdmVJbWFnZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBkYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVN
dXRhYmxlKDAsIDApKTsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZURlc3RpbmF0aW9uUmVmPiBkZXN0
aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YS5n
ZXQoKSwga1VUVHlwZVRJRkYsIG51bVZhbGlkRnJhbWVzLCAwKSk7CisgICAgUmV0YWluUHRyPENH
SW1hZ2VEZXN0aW5hdGlvblJlZj4gZGVzdGluYXRpb24gPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5h
dGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEuZ2V0KCksIGtVVFR5cGVUSUZGLCBuYXRpdmVJbWFnZXMu
c2l6ZSgpLCAwKSk7CiAKICAgICBpZiAoIWRlc3RpbmF0aW9uKQotICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bnVtVmFsaWRGcmFtZXM7ICsraSkKLSAgICAgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2Uo
ZGVzdGluYXRpb24uZ2V0KCksIGltYWdlc1tpXSwgMCk7CisgICAgZm9yIChhdXRvIG5hdGl2ZUlt
YWdlIDogbmF0aXZlSW1hZ2VzKQorICAgICAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShk
ZXN0aW5hdGlvbi5nZXQoKSwgbmF0aXZlSW1hZ2UuZ2V0KCksIDApOwogCiAgICAgQ0dJbWFnZURl
c3RpbmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAppbmRl
eCAyMTc1M2JkMDc4YTFjNTVjMzI3MTljMTQ4NDZmMGY2Yjk5NzVmOGZkLi43MWY5MGIzYTI0NDk1
YmY1N2NiNTgyZTE2N2Y4MjY4MGIxNjIyY2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAKQEAgLTE0Miw2ICsx
NDIsNyBAQCBJbWFnZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFt
ZSYgb3RoZXIpCiAgICAgICAgIHJldHVybiAqdGhpczsKIAogICAgIGNvcHlCaXRtYXBEYXRhKG90
aGVyKTsKKyAgICBzZXRIYXNBbHBoYShvdGhlci5tX2hhc0FscGhhKTsKICAgICBzZXRPcmlnaW5h
bEZyYW1lUmVjdChvdGhlci5vcmlnaW5hbEZyYW1lUmVjdCgpKTsKICAgICBzZXRTdGF0dXMob3Ro
ZXIuc3RhdHVzKCkpOwogICAgIHNldER1cmF0aW9uKG90aGVyLmR1cmF0aW9uKCkpOwpAQCAtMTUy
LDggKzE1Myw3IEBAIEltYWdlRnJhbWUmIEltYWdlRnJhbWU6Om9wZXJhdG9yPShjb25zdCBJbWFn
ZUZyYW1lJiBvdGhlcikKIAogdm9pZCBJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSgpCiB7Ci0g
ICAgbV9iYWNraW5nU3RvcmUuY2xlYXIoKTsKLSAgICBtX2J5dGVzID0gMDsKKyAgICBtX3BpeGVs
cyA9IG51bGxwdHI7CiAgICAgbV9zdGF0dXMgPSBGcmFtZUVtcHR5OwogICAgIC8vIE5PVEU6IERv
IG5vdCByZXNldCBvdGhlciBtZW1iZXJzIGhlcmU7IGNsZWFyRnJhbWVCdWZmZXJDYWNoZSgpIGNh
bGxzIHRoaXMKICAgICAvLyB0byBmcmVlIHRoZSBiaXRtYXAgZGF0YSwgYnV0IG90aGVyIGZ1bmN0
aW9ucyBsaWtlIGluaXRGcmFtZUJ1ZmZlcigpIGFuZApAQCAtMTYzLDI0ICsxNjMsMTYgQEAgdm9p
ZCBJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSgpCiAKIHZvaWQgSW1hZ2VGcmFtZTo6emVyb0Zp
bGxQaXhlbERhdGEoKQogewotICAgIG1lbXNldChtX2J5dGVzLCAwLCBtX3NpemUud2lkdGgoKSAq
IG1fc2l6ZS5oZWlnaHQoKSAqIHNpemVvZihQaXhlbERhdGEpKTsKKyAgICBtX3BpeGVscy0+Y2xl
YXIoKTsKICAgICBtX2hhc0FscGhhID0gdHJ1ZTsKIH0KIAogdm9pZCBJbWFnZUZyYW1lOjp6ZXJv
RmlsbEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIEFTU0VSVChJbnRSZWN0
KEludFBvaW50KCksIG1fc2l6ZSkuY29udGFpbnMocmVjdCkpOwotCiAgICAgaWYgKHJlY3QuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBzaXplX3QgcmVjdFdpZHRoSW5CeXRlcyA9
IHJlY3Qud2lkdGgoKSAqIHNpemVvZihQaXhlbERhdGEpOwotICAgIFBpeGVsRGF0YSogc3RhcnQg
PSBtX2J5dGVzICsgKHJlY3QueSgpICogd2lkdGgoKSkgKyByZWN0LngoKTsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHJlY3QuaGVpZ2h0KCk7ICsraSkgewotICAgICAgICBtZW1zZXQoc3RhcnQs
IDAsIHJlY3RXaWR0aEluQnl0ZXMpOwotICAgICAgICBzdGFydCArPSB3aWR0aCgpOwotICAgIH0K
LQorICAgIG1fcGl4ZWxzLT5jbGVhclJlY3QocmVjdCk7CiAgICAgc2V0SGFzQWxwaGEodHJ1ZSk7
CiB9CiAKQEAgLTE4OSwyNSArMTgxLDIzIEBAIGJvb2wgSW1hZ2VGcmFtZTo6Y29weUJpdG1hcERh
dGEoY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpCiAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fYmFja2luZ1N0b3JlID0gb3RoZXIubV9iYWNraW5n
U3RvcmU7Ci0gICAgbV9ieXRlcyA9IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsKLSAgICBtX3NpemUg
PSBvdGhlci5tX3NpemU7Ci0gICAgc2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7CisgICAg
aWYgKG90aGVyLm1fcGl4ZWxzKQorICAgICAgICBtX3BpeGVscyA9IEJpdG1hcFBpeGVsczo6Y3Jl
YXRlKCpvdGhlci5tX3BpeGVscy5nZXQoKSk7CisgICAgZWxzZQorICAgICAgICBtX3BpeGVscyA9
IG51bGxwdHI7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgSW1hZ2VGcmFtZTo6c2V0U2l6
ZShpbnQgbmV3V2lkdGgsIGludCBuZXdIZWlnaHQpCiB7Ci0gICAgQVNTRVJUKCF3aWR0aCgpICYm
ICFoZWlnaHQoKSk7Ci0gICAgc2l6ZV90IGJhY2tpbmdTdG9yZVNpemUgPSBuZXdXaWR0aCAqIG5l
d0hlaWdodDsKLSAgICBpZiAoIW1fYmFja2luZ1N0b3JlLnRyeVJlc2VydmVDYXBhY2l0eShiYWNr
aW5nU3RvcmVTaXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fYmFja2luZ1N0b3Jl
LnJlc2l6ZShiYWNraW5nU3RvcmVTaXplKTsKLSAgICBtX2J5dGVzID0gbV9iYWNraW5nU3RvcmUu
ZGF0YSgpOwotICAgIG1fc2l6ZSA9IEludFNpemUobmV3V2lkdGgsIG5ld0hlaWdodCk7CisgICAg
QVNTRVJUKCFtX3BpeGVscyk7CisgICAgbV9waXhlbHMgPSBCaXRtYXBQaXhlbHM6OmNyZWF0ZShJ
bnRTaXplKG5ld1dpZHRoLCBuZXdIZWlnaHQpLCBtX3ByZW11bHRpcGx5QWxwaGEpOworICAgIHJl
dHVybiBtX3BpeGVscyAhPSBudWxscHRyOworfQogCi0gICAgemVyb0ZpbGxQaXhlbERhdGEoKTsK
LSAgICByZXR1cm4gdHJ1ZTsKK3ZvaWQgSW1hZ2VGcmFtZTo6Y29weVJvd05UaW1lcyhpbnQgc3Rh
cnRYLCBpbnQgZW5kWCwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCit7CisgICAgbV9waXhlbHMtPnJl
cGVhdEZpcnN0Um93KEludFJlY3Qoc3RhcnRYLCBzdGFydFksIGVuZFggLXN0YXJ0WCAsIGVuZFkg
LSBzdGFydFkpKTsKIH0KIAogYm9vbCBJbWFnZUZyYW1lOjpoYXNBbHBoYSgpIGNvbnN0CkBAIC0y
OTEsNyArMjgxLDcgQEAgdW5zaWduZWQgSW1hZ2VEZWNvZGVyOjpmcmFtZUJ5dGVzQXRJbmRleChz
aXplX3QgaW5kZXgpIGNvbnN0CiAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgPD0g
aW5kZXgpCiAgICAgICAgIHJldHVybiAwOwogICAgIC8vIEZJWE1FOiBVc2UgdGhlIGRpbWVuc2lv
biBvZiB0aGUgcmVxdWVzdGVkIGZyYW1lLgotICAgIHJldHVybiBtX3NpemUuYXJlYSgpICogc2l6
ZW9mKEltYWdlRnJhbWU6OlBpeGVsRGF0YSk7CisgICAgcmV0dXJuIG1fc2l6ZS5hcmVhKCkgKiBz
aXplb2YoUkdCQTMyKTsKIH0KIAogZmxvYXQgSW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0aW9uQXRJ
bmRleChzaXplX3QgaW5kZXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCmluZGV4IDJmOGVlZTE3ODFkMTYyZDg2YzQ5ZmUx
ZGFjNzJhMmU3ZTQwYTVkNmQuLjY0NjQxZGZjMmYwZjNlODk2ZmE0NzJiNDJmZTQyZDNkZmI3MjMx
ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0lt
YWdlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L0ltYWdlRGVjb2Rlci5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5j
bHVkZSAiQml0bWFwUGl4ZWxzLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIklt
YWdlU291cmNlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKQEAgLTU3LDcgKzU4LDYg
QEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICAgICAgRGlzcG9z
ZU92ZXJ3cml0ZVByZXZpb3VzICAvLyBDbGVhciBmcmFtZSB0byBwcmV2aW91cyBmcmFtZWJ1ZmZl
cgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb250ZW50cwogICAg
ICAgICB9OwotICAgICAgICB0eXBlZGVmIHVuc2lnbmVkIFBpeGVsRGF0YTsKIAogICAgICAgICBJ
bWFnZUZyYW1lKCk7CiAKQEAgLTgwLDE3ICs4MCw3IEBAIHVzaW5nIENvbG9yUHJvZmlsZSA9IFZl
Y3RvcjxjaGFyPjsKICAgICAgICAgLy8gQ29waWVzIHRoZSBwaXhlbCBkYXRhIGF0IFsoc3RhcnRY
LCBzdGFydFkpLCAoZW5kWCwgc3RhcnRZKSkgdG8gdGhlCiAgICAgICAgIC8vIHNhbWUgWC1jb29y
ZGluYXRlcyBvbiBlYWNoIHN1YnNlcXVlbnQgcm93IHVwIHRvIGJ1dCBub3QgaW5jbHVkaW5nCiAg
ICAgICAgIC8vIGVuZFkuCi0gICAgICAgIHZvaWQgY29weVJvd05UaW1lcyhpbnQgc3RhcnRYLCBp
bnQgZW5kWCwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFT
U0VSVChzdGFydFggPCB3aWR0aCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChlbmRYIDw9IHdpZHRo
KCkpOwotICAgICAgICAgICAgQVNTRVJUKHN0YXJ0WSA8IGhlaWdodCgpKTsKLSAgICAgICAgICAg
IEFTU0VSVChlbmRZIDw9IGhlaWdodCgpKTsKLSAgICAgICAgICAgIGNvbnN0IGludCByb3dCeXRl
cyA9IChlbmRYIC0gc3RhcnRYKSAqIHNpemVvZihQaXhlbERhdGEpOwotICAgICAgICAgICAgY29u
c3QgUGl4ZWxEYXRhKiBjb25zdCBzdGFydEFkZHIgPSBnZXRBZGRyKHN0YXJ0WCwgc3RhcnRZKTsK
LSAgICAgICAgICAgIGZvciAoaW50IGRlc3RZID0gc3RhcnRZICsgMTsgZGVzdFkgPCBlbmRZOyAr
K2Rlc3RZKQotICAgICAgICAgICAgICAgIG1lbWNweShnZXRBZGRyKHN0YXJ0WCwgZGVzdFkpLCBz
dGFydEFkZHIsIHJvd0J5dGVzKTsKLSAgICAgICAgfQorICAgICAgICB2b2lkIGNvcHlSb3dOVGlt
ZXMoaW50IHN0YXJ0WCwgaW50IGVuZFgsIGludCBzdGFydFksIGludCBlbmRZKTsKIAogICAgICAg
ICAvLyBBbGxvY2F0ZXMgc3BhY2UgZm9yIHRoZSBwaXhlbCBkYXRhLiAgTXVzdCBiZSBjYWxsZWQg
YmVmb3JlIGFueSBwaXhlbHMKICAgICAgICAgLy8gYXJlIHdyaXR0ZW4uICBNdXN0IG9ubHkgYmUg
Y2FsbGVkIG9uY2UuICBSZXR1cm5zIHdoZXRoZXIgYWxsb2NhdGlvbgpAQCAtMTAwLDcgKzkwLDcg
QEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICAvLyBSZXR1cm5z
IGEgY2FsbGVyLW93bmVkIHBvaW50ZXIgdG8gdGhlIHVuZGVybHlpbmcgbmF0aXZlIGltYWdlIGRh
dGEuCiAgICAgICAgIC8vIChBY3R1YWwgdXNlOiBUaGlzIHBvaW50ZXIgd2lsbCBiZSBvd25lZCBi
eSBCaXRtYXBJbWFnZSBhbmQgZnJlZWQgaW4KICAgICAgICAgLy8gRnJhbWVEYXRhOjpjbGVhcigp
KS4KLSAgICAgICAgTmF0aXZlSW1hZ2VQdHIgYXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0OworICAg
ICAgICBOYXRpdmVJbWFnZVB0ciBhc05ld05hdGl2ZUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9w
aXhlbHMtPmltYWdlKCk7IH0KIAogICAgICAgICBib29sIGhhc0FscGhhKCkgY29uc3Q7CiAgICAg
ICAgIGNvbnN0IEludFJlY3QmIG9yaWdpbmFsRnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9v
cmlnaW5hbEZyYW1lUmVjdDsgfQpAQCAtMTE5LDEwMSArMTA5LDQ0IEBAIHVzaW5nIENvbG9yUHJv
ZmlsZSA9IFZlY3RvcjxjaGFyPjsKIAogICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKGludCB4
LCBpbnQgeSwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkK
ICAgICAgICAgewotICAgICAgICAgICAgc2V0UkdCQShnZXRBZGRyKHgsIHkpLCByLCBnLCBiLCBh
KTsKKyAgICAgICAgICAgIG1fcGl4ZWxzLT5zZXRSR0JBKHgsIHksIHIsIGcsIGIsIGEpOwogICAg
ICAgICB9CiAKLSAgICAgICAgaW5saW5lIFBpeGVsRGF0YSogZ2V0QWRkcihpbnQgeCwgaW50IHkp
CisgICAgICAgIGlubGluZSBSR0JBMzIqIGdldEFkZHIoaW50IHgsIGludCB5KQogICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gbV9ieXRlcyArICh5ICogd2lkdGgoKSkgKyB4OworICAgICAg
ICAgICAgcmV0dXJuIG1fcGl4ZWxzLT5hdCh4LCB5KTsKICAgICAgICAgfQogCiAgICAgICAgIGlu
bGluZSBib29sIGhhc1BpeGVsRGF0YSgpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBtX2J5dGVzOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVXNlIGZpeCBwb2ludCBtdWx0
aXBsaWVyIGluc3RlYWQgb2YgaW50ZWdlciBkaXZpc2lvbiBvciBmbG9hdGluZyBwb2ludCBtYXRo
LgotICAgICAgICAvLyBUaGlzIG11bHRpcGxlciBwcm9kdWNlcyBleGFjdGx5IHRoZSBzYW1lIHJl
c3VsdCBmb3IgYWxsIHZhbHVlcyBpbiByYW5nZSAwIC0gMjU1LgotICAgICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgZml4UG9pbnRTaGlmdCA9IDI0OwotICAgICAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgZml4UG9pbnRNdWx0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDEuMCAvIDI1NS4wICog
KDEgPDwgZml4UG9pbnRTaGlmdCkpICsgMTsKLSAgICAgICAgLy8gTXVsdGlwbGllcyB1bnNpZ25l
ZCB2YWx1ZSBieSBmaXhwb2ludCB2YWx1ZSBhbmQgY29udmVydHMgYmFjayB0byB1bnNpZ25lZC4K
LSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZpeFBvaW50VW5zaWduZWRNdWx0aXBseSh1bnNpZ25l
ZCBmaXhlZCwgdW5zaWduZWQgdikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICAoZml4
ZWQgKiB2KSA+PiBmaXhQb2ludFNoaWZ0OworICAgICAgICAgICAgcmV0dXJuIG1fcGl4ZWxzICE9
IG51bGxwdHI7CiAgICAgICAgIH0KIAotICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKFBpeGVs
RGF0YSogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQg
YSkKKyAgICAgICAgaW5saW5lIHZvaWQgc2V0UkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIs
IHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGlmIChtX3ByZW11bHRpcGx5QWxwaGEgJiYgYSA8IDI1NSkgewotICAgICAgICAgICAgICAg
IGlmICghYSkgewotICAgICAgICAgICAgICAgICAgICAqZGVzdCA9IDA7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB1bnNp
Z25lZCBhbHBoYU11bHQgPSBhICogZml4UG9pbnRNdWx0OwotICAgICAgICAgICAgICAgIHIgPSBm
aXhQb2ludFVuc2lnbmVkTXVsdGlwbHkociwgYWxwaGFNdWx0KTsKLSAgICAgICAgICAgICAgICBn
ID0gZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KGcsIGFscGhhTXVsdCk7Ci0gICAgICAgICAgICAg
ICAgYiA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShiLCBhbHBoYU11bHQpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgKmRlc3QgPSAoYSA8PCAyNCB8IHIgPDwgMTYgfCBnIDw8IDggfCBi
KTsKKyAgICAgICAgICAgIG1fcGl4ZWxzLT5zZXRSR0JBKGRlc3QsIHIsIGcsIGIsIGEpOwogICAg
ICAgICB9CiAKICNpZiBFTkFCTEUoQVBORykKLSAgICAgICAgc3RhdGljIGlubGluZSB1bnNpZ25l
ZCBkaXZpZGUyNTUodW5zaWduZWQgYSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIChh
ICsgKGEgPj4gOCkgKyAxKSA+PiA4OwotICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5lIHZvaWQg
b3ZlclJHQkEoUGl4ZWxEYXRhKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25l
ZCBiLCB1bnNpZ25lZCBhKQorICAgICAgICBpbmxpbmUgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRl
c3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGlmICghYSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgICAgIGlmIChhIDwgMjU1KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgYURlc3Qg
PSAoKCpkZXN0KSA+PiAyNCkgJiAyNTU7Ci0gICAgICAgICAgICAgICAgaWYgKGFEZXN0KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJEZXN0ID0gKCgqZGVzdCkgPj4gMTYpICYgMjU1
OwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBnRGVzdCA9ICgoKmRlc3QpID4+IDgpICYg
MjU1OwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBiRGVzdCA9ICgqZGVzdCkgJiAyNTU7
Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFBdXggPSAyNTUgLSBhOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgckRlc3QgPSBkaXZpZGUyNTUockRlc3QgKiBhRGVzdCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBnRGVzdCA9IGRpdmlkZTI1NShnRGVzdCAqIGFEZXN0KTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJEZXN0ID0gZGl2aWRlMjU1KGJEZXN0ICogYURlc3QpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBkaXZpZGUyNTUociAqIGEgKyByRGVz
dCAqIGFBdXgpOwotICAgICAgICAgICAgICAgICAgICBnID0gZGl2aWRlMjU1KGcgKiBhICsgZ0Rl
c3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IGRpdmlkZTI1NShiICogYSArIGJE
ZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAgIGEgKz0gZGl2aWRlMjU1KGFEZXN0ICog
YUF1eCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByID0gKHIgKiAyNTUgKyBhIC0gMSkgLyBhOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZyA9IChnICogMjU1ICsgYSAtIDEpIC8gYTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGIgPSAoYiAqIDI1NSArIGEgLSAxKSAvIGE7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSkgewot
ICAgICAgICAgICAgICAgICAgICByID0gZGl2aWRlMjU1KHIgKiBhKTsKLSAgICAgICAgICAgICAg
ICAgICAgZyA9IGRpdmlkZTI1NShnICogYSk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSBkaXZp
ZGUyNTUoYiAqIGEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICpkZXN0ID0gKGEgPDwgMjQgfCByIDw8IDE2IHwgZyA8PCA4IHwgYik7CisgICAgICAgICAg
ICBtX3BpeGVscy0+b3ZlclJHQkEoZGVzdCwgciwgZywgYiwgYSk7CiAgICAgICAgIH0KICNlbmRp
ZgogCiAgICAgcHJpdmF0ZToKICAgICAgICAgaW50IHdpZHRoKCkgY29uc3QKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOworICAgICAgICAgICAgcmV0dXJuIG1f
cGl4ZWxzLT53aWR0aCgpOwogICAgICAgICB9CiAKICAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3NpemUuaGVpZ2h0KCk7CisgICAgICAg
ICAgICByZXR1cm4gbV9waXhlbHMtPmhlaWdodCgpOwogICAgICAgICB9CiAKLSAgICAgICAgVmVj
dG9yPFBpeGVsRGF0YT4gbV9iYWNraW5nU3RvcmU7Ci0gICAgICAgIFBpeGVsRGF0YSogbV9ieXRl
czsgLy8gVGhlIG1lbW9yeSBpcyBiYWNrZWQgYnkgbV9iYWNraW5nU3RvcmUuCi0gICAgICAgIElu
dFNpemUgbV9zaXplOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qml0bWFwUGl4ZWxzPiBtX3Bp
eGVsczsKKwogICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCBtX2NvbG9yUHJvZmlsZSBhbnlt
b3JlPwogICAgICAgICBDb2xvclByb2ZpbGUgbV9jb2xvclByb2ZpbGU7CiAgICAgICAgIGJvb2wg
bV9oYXNBbHBoYTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4zZmM2MmEzN2Q4MTQ1Y2RkMDdhMTU0ZWQ4Zjc0MTFkZWNhNDZmMGYxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vQml0bWFw
UGl4ZWxzQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
aXRtYXBQaXhlbHMuaCIKKworI2luY2x1ZGUgPGNhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworTmF0aXZlSW1hZ2VQdHIgQml0bWFwUGl4ZWxzOjppbWFnZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKAorICAg
ICAgICByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihjb25zdF9jYXN0PFBpeGVsRGF0
YSo+KG1fcGl4ZWxzKSksCisgICAgICAgIENBSVJPX0ZPUk1BVF9BUkdCMzIsIHdpZHRoKCksIGhl
aWdodCgpLCB3aWR0aCgpICogc2l6ZW9mKFJHQkEzMikpKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA3YjQxMjk1Zjg1NzM1OGZiYmYzNWMxYjA1MjVlOGQ2Y2MzNTIwZjU4
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJ
bWFnZURlY29kZXIuaCIKLQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotTmF0aXZlSW1hZ2VQdHIgSW1hZ2VGcmFtZTo6YXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9k
YXRhKAotICAgICAgICByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihjb25zdF9jYXN0
PFBpeGVsRGF0YSo+KG1fYnl0ZXMpKSwKLSAgICAgICAgQ0FJUk9fRk9STUFUX0FSR0IzMiwgd2lk
dGgoKSwgaGVpZ2h0KCksIHdpZHRoKCkgKiBzaXplb2YoUGl4ZWxEYXRhKSkpOwotfQotCi19IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMu
bW0KaW5kZXggMjE2Y2QwOTNmMjY0NjdjYmE4OGE0M2Y2OTNhYmY0Y2Y1MWRkMWE0ZC4uZDExNDU0
YjA1ZWY4ODk5M2E2Mjg5Mzg5NmJjMGMxMTcyOGM1ZWQ1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFj
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVh
bHRpbWVWaWRlb1NvdXJjZU1hYy5tbQpAQCAtODcsNyArODcsNyBAQCB2b2lkIE1vY2tSZWFsdGlt
ZVZpZGVvU291cmNlTWFjOjp1cGRhdGVQbGF0Zm9ybUxheWVyKCkgY29uc3QKICAgICAgICAgaWYg
KCFpbWFnZSkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIG1fcHJldmlld0ltYWdlID0g
aW1hZ2UtPmdldENHSW1hZ2VSZWYoKTsKKyAgICAgICAgbV9wcmV2aWV3SW1hZ2UgPSBpbWFnZS0+
bmF0aXZlSW1hZ2UoKTsKICAgICAgICAgaWYgKCFtX3ByZXZpZXdJbWFnZSkKICAgICAgICAgICAg
IGJyZWFrOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0lt
YWdlQ0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2lu
LmNwcAppbmRleCAzNmNkNjUxNmU4MGYxNzQ4YmZlYWI3N2E5MzAyNzFjMTIxZGU4MDE5Li40YjRl
Mzc3OWU5NmY3OGM2NTQwYTUzYzQ0NzhjM2JmZDkzNWY1M2U5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAKQEAgLTEzNiw5ICsxMzYsOSBAQCBE
cmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiBpbWcsIEltYWdlT3Jp
ZW50YXRpb25EZXNjcmlwdGlvbikKICAgICBDR0NvbnRleHRTY2FsZUNUTShkcmF3Q29udGV4dCwg
MSwgLTEpOwogICAgIENHQ29udGV4dFNldEZpbGxDb2xvcihkcmF3Q29udGV4dCwgd2hpdGUpOwog
ICAgIENHQ29udGV4dEZpbGxSZWN0KGRyYXdDb250ZXh0LCByZWN0KTsKLSAgICBpZiAoYXV0byBz
cmNJbWFnZSA9IGltZy0+Z2V0Q0dJbWFnZVJlZigpKSB7CisgICAgaWYgKGF1dG8gc3JjSW1hZ2Ug
PSBpbWctPm5hdGl2ZUltYWdlKCkpIHsKICAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGRy
YXdDb250ZXh0LCBrQ0dCbGVuZE1vZGVOb3JtYWwpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1h
Z2UoZHJhd0NvbnRleHQsIHJlY3QsIHNyY0ltYWdlKTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0lt
YWdlKGRyYXdDb250ZXh0LCByZWN0LCBzcmNJbWFnZS5nZXQoKSk7CiAgICAgfQogICAgIENHQ29u
dGV4dFJlbGVhc2UoZHJhd0NvbnRleHQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21h
Yy9NaXNjL1dlYkNhY2hlLm1tIGIvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDYWNoZS5tbQpp
bmRleCBiNjU5ZDZkYmY5YWQ2OTk5YzNhYzk2MmRlOTUxNTc4MDk3ZTFmM2IxLi43YzVlZDIxMGRk
YjJhMzJhNzY2Njc0YzEyMGQ5OTRjMmZhNDdlN2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L21hYy9NaXNjL1dlYkNhY2hlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2Fj
aGUubW0KQEAgLTIwNCw3ICsyMDQsNyBAQCArIChDR0ltYWdlUmVmKWltYWdlRm9yVVJMOihOU1VS
TCAqKXVybAogICAgIFdlYkNvcmU6OkNhY2hlZEltYWdlJiBjYWNoZWRJbWFnZSA9IGRvd25jYXN0
PFdlYkNvcmU6OkNhY2hlZEltYWdlPigqY2FjaGVkUmVzb3VyY2UpOwogICAgIGlmICghY2FjaGVk
SW1hZ2UuaGFzSW1hZ2UoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGNh
Y2hlZEltYWdlLmltYWdlKCktPmdldENHSW1hZ2VSZWYoKTsKKyAgICByZXR1cm4gY2FjaGVkSW1h
Z2UuaW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKS5nZXQoKTsKIH0KIAogI2VuZGlmIC8vIFBMQVRGT1JN
KElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9jZy9XS0lj
b25EYXRhYmFzZUNHLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9jZy9XS0lj
b25EYXRhYmFzZUNHLmNwcAppbmRleCAwZjZkZTdhMTQ2YTYxMWE1MmFhMWU1MzkwMTlmYTZjMWM0
NjcyNWFlLi4zMDU2MzM2Y2I2NmZlNGFmMThiZGM1MjlhY2EyZjhmYzg4MWRmZTU2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0YWJhc2VDRy5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFiYXNl
Q0cuY3BwCkBAIC0zNywxMiArMzcsMjMgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiBDR0lt
YWdlUmVmIFdLSWNvbkRhdGFiYXNlVHJ5R2V0Q0dJbWFnZUZvclVSTChXS0ljb25EYXRhYmFzZVJl
ZiBpY29uRGF0YWJhc2VSZWYsIFdLVVJMUmVmIHVybFJlZiwgV0tTaXplIHNpemUpCiB7CiAgICAg
SW1hZ2UqIGltYWdlID0gdG9JbXBsKGljb25EYXRhYmFzZVJlZiktPmltYWdlRm9yUGFnZVVSTCh0
b1dURlN0cmluZyh1cmxSZWYpKTsKLSAgICByZXR1cm4gaW1hZ2UgPyBpbWFnZS0+Z2V0Rmlyc3RD
R0ltYWdlUmVmT2ZTaXplKEludFNpemUoc3RhdGljX2Nhc3Q8aW50PihzaXplLndpZHRoKSwgc3Rh
dGljX2Nhc3Q8aW50PihzaXplLmhlaWdodCkpKSA6IDA7CisgICAgcmV0dXJuIGltYWdlID8gaW1h
Z2UtPm5hdGl2ZUltYWdlT2ZTaXplKEludFNpemUoc3RhdGljX2Nhc3Q8aW50PihzaXplLndpZHRo
KSwgc3RhdGljX2Nhc3Q8aW50PihzaXplLmhlaWdodCkpKS5nZXQoKSA6IG51bGxwdHI7CiB9CiAK
IENGQXJyYXlSZWYgV0tJY29uRGF0YWJhc2VUcnlDb3B5Q0dJbWFnZUFycmF5Rm9yVVJMKFdLSWNv
bkRhdGFiYXNlUmVmIGljb25EYXRhYmFzZVJlZiwgV0tVUkxSZWYgdXJsUmVmKQogewogICAgIElt
YWdlKiBpbWFnZSA9IHRvSW1wbChpY29uRGF0YWJhc2VSZWYpLT5pbWFnZUZvclBhZ2VVUkwodG9X
VEZTdHJpbmcodXJsUmVmKSk7Ci0gICAgcmV0dXJuIGltYWdlID8gaW1hZ2UtPmdldENHSW1hZ2VB
cnJheSgpLmxlYWtSZWYoKSA6IDA7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICBhdXRvIG5hdGl2ZUltYWdlcyA9IGltYWdlLT5mcmFtZXNOYXRpdmVJbWFn
ZXMoKTsKKyAgICBpZiAoIW5hdGl2ZUltYWdlcy5zaXplKCkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIAorICAgIENGTXV0YWJsZUFycmF5UmVmIGFycmF5ID0gQ0ZBcnJheUNyZWF0ZU11
dGFibGUobnVsbHB0ciwgbmF0aXZlSW1hZ2VzLnNpemUoKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNr
cyk7CisgICAgZm9yIChhdXRvIG5hdGl2ZUltYWdlIDogbmF0aXZlSW1hZ2VzKQorICAgICAgICBD
RkFycmF5QXBwZW5kVmFsdWUoYXJyYXksIG5hdGl2ZUltYWdlLmdldCgpKTsKKyAgICAKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4oQ0ZSZXRhaW4oYXJyYXkpKTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJh
Y3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRl
cmFjdGlvbi5tbQppbmRleCBkYzc5ODNhYjk4OGMyZDA0YTE3MzBlZTEzNzMwM2MyNDQxNjE1MTk3
Li5mYmMzZTVkNGM1NDMwMWNlOTIxN2E0MGY4ZDA4YmQ1ODM1Mjc4N2M2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlv
bi5tbQpAQCAtNDA3MSw3ICs0MDcxLDcgQEAgLSAoVUlJbWFnZSAqKV9wcmVzZW50YXRpb25TbmFw
c2hvdEZvclByZXZpZXdJdGVtQ29udHJvbGxlcjooVUlQcmV2aWV3SXRlbUNvbnRyb2wKIHsKICAg
ICBpZiAoIV9wb3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRpY2F0b3IuY29udGVudEltYWdlKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gW1tbVUlJbWFnZSBhbGxvY10gaW5p
dFdpdGhDR0ltYWdlOl9wb3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRpY2F0b3IuY29udGVudElt
YWdlLT5nZXRDR0ltYWdlUmVmKCldIGF1dG9yZWxlYXNlXTsKKyAgICByZXR1cm4gW1tbVUlJbWFn
ZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdlOl9wb3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRpY2F0
b3IuY29udGVudEltYWdlLT5uYXRpdmVJbWFnZSgpLmdldCgpXSBhdXRvcmVsZWFzZV07CiB9CiAK
IC0gKE5TQXJyYXkgKilfcHJlc2VudGF0aW9uUmVjdHNGb3JQcmV2aWV3SXRlbUNvbnRyb2xsZXI6
KFVJUHJldmlld0l0ZW1Db250cm9sbGVyICopY29udHJvbGxlcgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IDlhMzNmN2NjN2RjN2M3
ZDcyZjlkYTc0MzA5OGI3ZGJjYTgyNDA5Y2YuLmE1MzI1MTA2NzhiOWY1MzUxNDU4YTM4YTlmNDIz
Mzc0N2QwMzVmNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5WaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMv
UGx1Z2luVmlldy5jcHAKQEAgLTE3MjcsNjkgKzE3MjcsNiBAQCB2b2lkIFBsdWdpblZpZXc6Ondp
bmRvd2VkUGx1Z2luVmlzaWJpbGl0eURpZENoYW5nZShib29sIGlzVmlzaWJsZSwgdWludDY0X3Qg
d2luZAogfQogI2VuZGlmCiAKLSNpZiBQTEFURk9STShDT0NPQSkKLXN0YXRpYyBib29sIGlzQWxt
b3N0U29saWRDb2xvcihCaXRtYXBJbWFnZSogYml0bWFwKQotewotICAgIENHSW1hZ2VSZWYgaW1h
Z2UgPSBiaXRtYXAtPmdldENHSW1hZ2VSZWYoKTsKLSAgICBBU1NFUlQoQ0dJbWFnZUdldEJpdHNQ
ZXJDb21wb25lbnQoaW1hZ2UpID09IDgpOwotCi0gICAgQ0dCaXRtYXBJbmZvIGltYWdlSW5mbyA9
IENHSW1hZ2VHZXRCaXRtYXBJbmZvKGltYWdlKTsKLSAgICBpZiAoIShpbWFnZUluZm8gJiBrQ0dC
aXRtYXBCeXRlT3JkZXIzMkxpdHRsZSkgfHwgKGltYWdlSW5mbyAmIGtDR0JpdG1hcEFscGhhSW5m
b01hc2spICE9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QpIHsKLSAgICAgICAgLy8g
RklYTUU6IENvbnNpZGVyIGJlaW5nIGFibGUgdG8gaGFuZGxlIG90aGVyIHBpeGVsIGZvcm1hdHMu
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgc2l6ZV90IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKGltYWdlKTsKLSAgICBz
aXplX3QgaGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChpbWFnZSk7Ci0gICAgc2l6ZV90IGJ5dGVz
UGVyUm93ID0gQ0dJbWFnZUdldEJ5dGVzUGVyUm93KGltYWdlKTsKLQotICAgIFJldGFpblB0cjxD
RkRhdGFSZWY+IHByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNvcHlEYXRhKENHSW1h
Z2VHZXREYXRhUHJvdmlkZXIoaW1hZ2UpKSk7Ci0gICAgY29uc3QgVUludDgqIGRhdGEgPSBDRkRh
dGFHZXRCeXRlUHRyKHByb3ZpZGVyLmdldCgpKTsKLQotICAgIC8vIE92ZXJsYXkgYSBncmlkIG9m
IHNhbXBsaW5nIGRvdHMgb24gdG9wIG9mIGEgZ3JheXNjYWxlIHZlcnNpb24gb2YgdGhlIGltYWdl
LgotICAgIC8vIEZvciB0aGUgaW50ZXJpb3IgcG9pbnRzLCBjYWxjdWxhdGUgdGhlIGRpZmZlcmVu
Y2UgaW4gbHVtaW5hbmNlIGFtb25nIHRoZSBzYW1wbGUgcG9pbnQKLSAgICAvLyBhbmQgaXRzIHN1
cnJvdW5kcyBwb2ludHMsIHNjYWxlZCBieSB0cmFuc3BhcmVuY3kuCi0gICAgY29uc3QgdW5zaWdu
ZWQgc2FtcGxlUm93cyA9IDc7Ci0gICAgY29uc3QgdW5zaWduZWQgc2FtcGxlQ29scyA9IDc7Ci0g
ICAgLy8gRklYTUU6IFJlZmluZSB0aGUgcHJvcGVyIG51bWJlciBvZiBzYW1wbGVzLCBhbmQgYWNj
b21tb2RhdGUgZGlmZmVyZW50IGFzcGVjdCByYXRpb3MuCi0gICAgaWYgKHdpZHRoIDwgc2FtcGxl
Q29scyB8fCBoZWlnaHQgPCBzYW1wbGVSb3dzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAvLyBFbnN1cmUgdGhhdCB0aGUgbGFzdCByb3cvY29sdW1uIGxhbmQgb24gdGhlIGltYWdlIHBl
cmltZXRlci4KLSAgICBjb25zdCBmbG9hdCBzdHJpZGVXaWR0aCA9IHN0YXRpY19jYXN0PGZsb2F0
Pih3aWR0aCAtIDEpIC8gKHNhbXBsZUNvbHMgLSAxKTsKLSAgICBjb25zdCBmbG9hdCBzdHJpZGVI
ZWlnaHQgPSBzdGF0aWNfY2FzdDxmbG9hdD4oaGVpZ2h0IC0gMSkgLyAoc2FtcGxlUm93cyAtIDEp
OwotICAgIGZsb2F0IHNhbXBsZXNbc2FtcGxlUm93c11bc2FtcGxlQ29sc107Ci0KLSAgICAvLyBG
aW5kIHRoZSBsdW1pbmFuY2Ugb2YgdGhlIHNhbXBsZSBwb2ludHMuCi0gICAgZmxvYXQgeSA9IDA7
Ci0gICAgY29uc3QgVUludDgqIHJvdyA9IGRhdGE7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNhbXBsZVJvd3M7ICsraSkgewotICAgICAgICBmbG9hdCB4ID0gMDsKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBqID0gMDsgaiA8IHNhbXBsZUNvbHM7ICsraikgewotICAgICAgICAgICAgY29u
c3QgVUludDgqIHAwID0gcm93ICsgKHN0YXRpY19jYXN0PGludD4oeCArIC41KSkgKiA0OwotICAg
ICAgICAgICAgLy8gUiBHIEIgQQotICAgICAgICAgICAgc2FtcGxlc1tpXVtqXSA9ICgwLjIxMjUg
KiAqcDAgKyAwLjcxNTQgKiAqKHAwKzEpICsgMC4wNzIxICogKihwMCsyKSkgKiAqKHAwKzMpIC8g
MjU1OwotICAgICAgICAgICAgeCArPSBzdHJpZGVXaWR0aDsKLSAgICAgICAgfQotICAgICAgICB5
ICs9IHN0cmlkZUhlaWdodDsKLSAgICAgICAgcm93ID0gZGF0YSArIChzdGF0aWNfY2FzdDxpbnQ+
KHkgKyAuNSkpICogYnl0ZXNQZXJSb3c7Ci0gICAgfQotCi0gICAgLy8gRGV0ZXJtaW5lIHRoZSBp
bWFnZSBzY29yZS4KLSAgICBmbG9hdCBhY2N1bVNjb3JlID0gMDsKLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAxOyBpIDwgc2FtcGxlUm93cyAtIDE7ICsraSkgewotICAgICAgICBmb3IgKHVuc2lnbmVk
IGogPSAxOyBqIDwgc2FtcGxlQ29scyAtIDE7ICsraikgewotICAgICAgICAgICAgZmxvYXQgZGlm
ZiA9IHNhbXBsZXNbaSAtIDFdW2pdICsgc2FtcGxlc1tpICsgMV1bal0gKyBzYW1wbGVzW2ldW2og
LSAxXSArIHNhbXBsZXNbaV1baiArIDFdIC0gNCAqIHNhbXBsZXNbaV1bal07Ci0gICAgICAgICAg
ICBhY2N1bVNjb3JlICs9IGRpZmYgKiBkaWZmOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8g
VGhlIHNjb3JlIGZvciBhIGdpdmVuIHNhbXBsZSBjYW4gYmUgd2l0aGluIHRoZSByYW5nZSBvZiAw
IGFuZCAyNTVeMi4KLSAgICByZXR1cm4gYWNjdW1TY29yZSA8IDI1MDAgKiAoc2FtcGxlUm93cyAt
IDIpICogKHNhbXBsZUNvbHMgLSAyKTsKLX0KLSNlbmRpZgotCiB2b2lkIFBsdWdpblZpZXc6OnBs
dWdpblNuYXBzaG90VGltZXJGaXJlZCgpCiB7CiAjaWYgRU5BQkxFKFBSSU1BUllfU05BUFNIT1RU
RURfUExVR0lOX0hFVVJJU1RJQykKQEAgLTE4MDksNyArMTc0Niw3IEBAIHZvaWQgUGx1Z2luVmll
dzo6cGx1Z2luU25hcHNob3RUaW1lckZpcmVkKCkKIAogICAgICAgICBpZiAoc25hcHNob3RJbWFn
ZSkgewogI2lmIEVOQUJMRShQUklNQVJZX1NOQVBTSE9UVEVEX1BMVUdJTl9IRVVSSVNUSUMpCi0g
ICAgICAgICAgICBib29sIHNuYXBzaG90SXNBbG1vc3RTb2xpZENvbG9yID0gaXNBbG1vc3RTb2xp
ZENvbG9yKGRvd25jYXN0PEJpdG1hcEltYWdlPihzbmFwc2hvdEltYWdlLmdldCgpKSk7CisgICAg
ICAgICAgICBib29sIHNuYXBzaG90SXNBbG1vc3RTb2xpZENvbG9yID0gc3RhdGljX3BvaW50ZXJf
Y2FzdDxCaXRtYXBJbWFnZT4oc25hcHNob3RJbWFnZSktPmlzQWxtb3N0U29saWRDb2xvcigpOwog
ICAgICAgICAgICAgc25hcHNob3RGb3VuZCA9ICFzbmFwc2hvdElzQWxtb3N0U29saWRDb2xvcjsK
ICNlbmRpZgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283440</attachid>
            <date>2016-07-12 12:42:15 -0700</date>
            <delta_ts>2016-07-12 13:04:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159679-20160712124132.patch</filename>
            <type>text/plain</type>
            <size>128200</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzMTAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWM1YmQ5YmQwNmExOWJl
NWNhMDJjNTE3MmQ2ZWYyZWJiZmVjMWMxOS4uNmFlYzQ3MmY4YWVjOGUwNjRkNGYyZmQwODAyYTBm
MWM0NTU4YjI4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxMyBAQAorMjAxNi0wNy0xMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0
IHRoZSBwaXhlbCBkYXRhIG9mIEltYWdlRnJhbWUgdG8gYSBzZXBhcmF0ZSBjbGFzcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5Njc5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgcGl4ZWwg
ZGF0YSBtYW5pcHVsYXRpb24gcGFydCBpbiBJbWFnZUZyYW1lIGludG8gYSBzZXBhcmF0ZSBjbGFz
cworICAgICAgICBhbmQgdGhlbiBtYWtlIGl0IG9wdGlvbmFsIChhbGxvY2F0ZWQgb24gZGVtYW5k
KS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2lu
Q2Fpcm8uY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFBpeGVsczo6Qml0bWFwUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBp
eGVsczo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpoZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFBpeGVsczo6YXQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmNsZWFyUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OnJlcGVhdEZpcnN0Um93KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcFBpeGVsczo6c2V0UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQ
aXhlbHM6Om92ZXJSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6aW5Cb3Vu
ZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Om11bHRpcGx5MjU1KToKKyAgICAgICAgKFdlYkNvcmU6OmRpdmlkZTI1NSk6CisgICAg
ICAgIChXZWJDb3JlOjpkaXZpZGVDZWlsKToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxp
ZWRDaGFubmVsKToKKyAgICAgICAgKFdlYkNvcmU6OnVucHJlbXVsdGlwbGllZENoYW5uZWwpOgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZVByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VVblByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6cGl4ZWxzKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWVEYXRhOjpoYXNQaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y2xlYXJQaXhl
bERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGxQaXhlbERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGxGcmFtZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weUJpdG1hcERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojpjb3B5Um93TlRpbWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0UkdCQSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpnZXRBZGRyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6Omhhc1BpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpvdmVyUkdC
QSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjp3aWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
Y29weVJvd05UaW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpm
aXhQb2ludFVuc2lnbmVkTXVsdGlwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6ZGl2aWRlMjU1KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5j
cHAuCisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmltYWdlKToKKworMjAxNi0wNy0x
MSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAgICAg
IFJlbmFtZSBGcmFtZURhdGEgdG8gSW1hZ2VGcmFtZURhdGEgYW5kIG1vdmUgaXQgdG8gYSBzZXBh
cmF0ZSBmaWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTU0NDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBNb3ZlIEltYWdlRnJhbWVEYXRhIHRvIGEgc2VwYXJhdGUgZmlsZSBzbyBpdCBjYW4gYmUgY2Fj
aGVkIGJ5IEltYWdlU291cmNlCisgICAgICAgIGFuZCB3aWxsIHN0aWxsIGJlIGNvbnN1bWVkIGJ5
IEJpdG1hcEltYWdlLiBNYWtlIHRoZSBkYXRhIG1lbWJlcnMgb2YgSW1hZ2VGcmFtZURhdGEKKyAg
ICAgICAgYmUgcHJpdmF0ZSBhbmQgYWRkIGdldHRlcnMgdG8gcmV0dXJuIHRoZWlyIHZhbHVlcy4K
KworICAgICAgICBObyBuZXcgdGVzdHMgLS0gQ29kZSByZWZhY3RvcmluZywgbm8gYmVoYXZpb3Ig
Y2hhbmdlLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Jp
dG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpCaXRtYXBJbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aGF2ZUZyYW1lSW1hZ2VBdEluZGV4
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNz
YXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6ZW5zdXJlRnJhbWVJc0NhY2hlZCk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcElt
YWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6ZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6aXNBbG1vc3RTb2xpZENvbG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRt
YXBJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjpGcmFtZURhdGEpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp+RnJhbWVEYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6dXNlZEZyYW1lQnl0ZXMpOiBEZWxldGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZURhdGFBdEluZGV4KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ltYWdlRnJhbWVEYXRhLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lRGF0YTo6SW1hZ2VGcmFtZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURh
dGE6On5JbWFnZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6
Y2xlYXJTdWJJbWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmNsZWFy
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpzaW5nbGVQaXhlbFNvbGlkQ29s
b3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmlzQWxtb3N0U29saWRDb2xv
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW1hZ2VGcmFtZURhdGEuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6c3RhdHVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWVEYXRhOjppc0NvbXBsZXRlKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWVEYXRhOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpm
cmFtZUJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjppbWFnZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6b3JpZW50YXRpb24pOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OnN1YnNhbXBsaW5nTGV2ZWwpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZURhdGE6OmR1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWVEYXRhOjpoYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6
aGFzSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6Omhhc01ldGFkYXRh
KToKKworMjAxNi0wNi0yNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUs
Y29tPgorCisgICAgICAgIEludHJvZHVjZSBQbGF0Zm9ybUltYWdlIGFuZCBtYWtlIGl0IGlzIGEg
d3JhcHBlciBmb3IgTmF0aXZlSW1hZ2VQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1ODY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyByZWZhY3RvcmluZyBp
cyB0byBtb3ZlIHRoZSBwbGF0Zm9ybSBpbWFnZSBkZXBlbmRlbnQKKyAgICAgICAgY29kZSBmcm9t
IEJpdG1hcEltYWdlIHRvIFBsYXRmb3JtSW1hZ2UuIFBsYXRmb3JtSW1hZ2UgaXMgcmVzcG9uc2li
bGUgb2YgCisgICAgICAgIGRyYXdpbmcgdGhlIGltYWdlIGFuZCBhbnN3ZXJpbmcgTmF0aXZlSW1h
Z2VQdHIgcXVlc3Rpb25zIHdoZW4gYW4gSW1hZ2VEZWNvZGVyCisgICAgICAgIGlzIG5vdCBhdmFp
bGFibGUuIEFwYXJ0IGZyb20gZHJhd2luZyB0aGUgaW1hZ2UsIHRoZSBxdWVyeSBmdW5jdGlvbnMg
d2lsbCBiZQorICAgICAgICBjYWxsZWQgb25seSB3aGVuIGNvbnN0cnVjdGluZyBhIEZyYW1lRGF0
YSBzbyB3ZSB3aWxsIGtlZXAgZXZlcnl0aGluZyBhcyBhCisgICAgICAgIE5hdGl2ZUltYWdlUHRy
LiBCdXQgd2Ugd2lsbCBjYXN0IHRoZSBOYXRpdmVJbWFnZVB0ciB0byBQbGF0Zm9ybUltYWdlIHdo
ZW4KKyAgICAgICAgYSBwbGF0Zm9ybSBkZXBlbmRlbnQgZnVuY3Rpb24gaXMgbmVlZGVkLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cyAtLSBDb2RlIHJlZmFjdG9yaW5nLCBubyBiZWhhdmlvciBjaGFu
Z2UuCisKKyAgICAgICAgKiBQbGF0Zm9ybUFwcGxlV2luLmNtYWtlOgorICAgICAgICAqIFBsYXRm
b3JtRWZsLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBs
YXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2luQ2Fpcm8uY21ha2U6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRp
bmdzL29iamMvRE9NLm1tOgorICAgICAgICAoLVtET01Ob2RlIGdldFByZXZpZXdTbmFwc2hvdElt
YWdlOmFuZFJlY3RzOl0pOgorICAgICAgICAqIHBhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cu
bW06CisgICAgICAgICgtW1dlYlRleHRJbmRpY2F0b3JWaWV3IGluaXRXaXRoRnJhbWU6dGV4dElu
ZGljYXRvcjptYXJnaW46b2Zmc2V0Ol0pOgorICAgICAgICAoY3JlYXRlQ29udGVudENyb3NzZmFk
ZUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0
bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpu
YXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6bmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZy
YW1lc05hdGl2ZUltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6c2luZ2xl
UGl4ZWxTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjppc0FsbW9z
dFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpGcmFtZURhdGE6OkZyYW1lRGF0YSk6CisgICAgICAgIG1faGFzQWxwaGEgY2FuIGJlIGluaXRp
YWxpemVkIHdpdGggZmFsc2UgYmVjYXVzZSBpdCBpcyBhY2Nlc3NlZCBvbmx5IGluCisgICAgICAg
IEJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleCgpIGFuZCBpdCBpcyBndWFyZGVkIGJ5
IG1faGF2ZU1ldGFkYXRhLgorICAgICAgICBCb3RoIG1faGF2ZU1ldGFkYXRhIGFuZCBtX2hhc0Fs
cGhhIGFyZSBzZXQgaW4gQml0bWFwSW1hZ2UgY29uc3RydWN0b3IKKyAgICAgICAgYW5kIGluIEJp
dG1hcEltYWdlOjpjYWNoZUZyYW1lKCkuCisKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6
fkZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OmNsZWFyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6
Om5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpuYXRpdmVJbWFnZU9mU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZnJhbWVzTmF0aXZlSW1hZ2VzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlOjpnZXRDR0ltYWdlUmVmKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlOjpnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2U6OmdldENHSW1hZ2VBcnJheSk6IERlbGV0ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtSW1hZ2U6OlBsYXRmb3JtSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1JbWFnZTo6aXNOaWwpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6Y2dJ
bWFnZVJlZik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDOjp1cGRhdGVEaXNwbGF5TW9k
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJv
LmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0JpdG1hcEltYWdlQ2Fpcm8uY3BwLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6
Y2xlYXJTdWJJbWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6c2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpoYXNBbHBoYSk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6aXNBbG1vc3RTb2xpZENvbG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1JbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
Qml0bWFwSW1hZ2VDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUGF0dGVybkNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm46OmNyZWF0ZVBsYXRm
b3JtUGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFn
ZUNHLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpjbGVhclN1
YkltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IpOiBNb3ZlZCBmcm9tIFBsdWdpblZp
ZXcuY3BwIHNpbmNlIFBsYXRmb3JtSW1hZ2UgaXMgd2hhdCB0aGlzIGZ1bmN0aW9uIGJlbG9uZ3Mg
dG8uCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKTog
UmV0dXJucyB0aGUgc3ViLXNhbXBsaW5nIHNjYWxlIGJhc2VkIG9uIHRoZSBjb250ZXh0IHNjYWxp
bmcuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpkcmF3KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tOgor
ICAgICAgICAoVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYTo6dXBkYXRlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW06CisgICAgICAgIChX
ZWJDb3JlOjpNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6dXBkYXRlUGxhdGZvcm1MYXllcik6
CisgICAgICAgICogcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZSk6CisKIDIwMTYtMDctMTEgIFNhbSBXZWlu
aWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBTcGVlY2ggU3ludGhlc2lzOiBnZXR0aW5n
IGxpc3Qgb2Ygdm9pY2VzIG5vIGxvbmdlciB3b3JrcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCmluZGV4IGMxYmMw
YmJkZTM2MTI1YzQ2MmJmNDgxZGRhZDVkZDJmODI3ZDUyMzkuLjE4ZDFlYmViZWU5MjBiMmYyOWVm
MzI4NzdkZWQyZTFlY2ZmOTdkNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAor
MjAxNi0wNy0xMSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUsY29tPgor
CisgICAgICAgIEludHJvZHVjZSBQbGF0Zm9ybUltYWdlIGFuZCBtYWtlIGl0IGlzIGEgd3JhcHBl
ciBmb3IgTmF0aXZlSW1hZ2VQdHIKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1ODY4NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogTWlzYy9XZWJDYWNoZS5tbToKKyAgICAgICAgKCtbV2ViQ2FjaGUgaW1h
Z2VGb3JVUkw6XSk6CisKIDIwMTYtMDctMTEgIEVucmljYSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxl
LmNvbT4KIAogICAgICAgICBBZGQgc3ludGhldGljIGNsaWNrIG9yaWdpbiB0byBXS05hdmlnYXRp
b25BY3Rpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYjQ3ZTJjZWE3OWE4ZGQ3YzUzMzVkMmNkNThlNzk2MTUz
MzVjNTAyYy4uZjFmMTY3MjU4NGMwZWU4MTg1OGE3ZTk2NTUzYWNkOWNkMGFjNmZlZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE2LTA3LTExICBTYWlkIEFib3UtSGFsbGF3YSAgPHNh
Ym91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgSW50cm9kdWNlIFBsYXRmb3JtSW1hZ2Ug
YW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVyIGZvciBOYXRpdmVJbWFnZVB0cgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvY2cv
V0tJY29uRGF0YWJhc2VDRy5jcHA6CisgICAgICAgIChXS0ljb25EYXRhYmFzZVRyeUdldENHSW1h
Z2VGb3JVUkwpOgorICAgICAgICAoV0tJY29uRGF0YWJhc2VUcnlDb3B5Q0dJbWFnZUFycmF5Rm9y
VVJMKToKKyAgICAgICAgSXQgd2FzIHRoZSBvbmx5IHBsYWNlIGluIHRoZSBjb2RlIHdoaWNoIHVz
ZXMgQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VBcnJheSgpLgorICAgICAgICBDYWxsIEJpdG1hcElt
YWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMoKSBpbnN0ZWFkIGFuZCBmb3JtIHRoZSByZXR1cm5lZAor
ICAgICAgICBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGJ1aWxkIHRoZSBDRkFycmF5UmVmLgorICAg
ICAgICAKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcHJlc2VudGF0aW9uU25hcHNob3RGb3JQcmV2
aWV3SXRlbUNvbnRyb2xsZXI6XSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdp
blZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRp
bWVyRmlyZWQpOgorICAgICAgICAKKyAgICAgICAgKFdlYktpdDo6aXNBbG1vc3RTb2xpZENvbG9y
KTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSB0aGUgc3RhdGljIGZ1bmN0aW9uIGlzQWxtb3N0U29s
aWRDb2xvciB0byBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKS4KKwogMjAxNi0w
Ny0xMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFtXSzJdW2lP
U10gSW50ZXJtaXR0ZW50IGNyYXNoIGluIFtVSUFwcGxpY2F0aW9uIGJlZ2luQmFja2dyb3VuZFRh
c2tXaXRoTmFtZV0gZXhwaXJhdGlvbiBoYW5kbGVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGU3
OGIwNDJiMTA0MDFlMWY0ZWUzYTJhYjFhMDUyYzIxOGMzYTExZTMuLjIyNmVjOWI4NGU3MjJmZmYz
ZTJmMDRkY2U3ZGI3MGUzZGQ0YjgzYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMjI2LDYg
KzIyMjYsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSVNP
VlRUQ3VlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJh
bWVEYXRhLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlT3JpZW50YXRpb24uY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvSW50UG9pbnQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxl
V2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5jbWFrZQppbmRleCA1
ZmY5OTFmZjdkYTMwOGJiOTE4MmVjZTNiZjEyMTczMGE1NDhkMjg3Li5iYWUzMWVhZjg2ZTdmY2E5
MDU4MjUwOTJhYTM4YTc4YzExZTQyMjAyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVXaW4u
Y21ha2UKQEAgLTU1LDcgKzU1LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2luZ0xheWVyV2luLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XS0NBQ0ZWaWV3TGF5ZXJUcmVlSG9zdC5jcHAKIAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFBv
aW50Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxvYXRSZWN0Q0cuY3BwCkBAIC03
NSw2ICs3NCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
UGF0aENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtl
CmluZGV4IDUxNDUwNGU2ZWMyNWFhNWU0M2I5OTM5OGQ1ZTM1Y2VlZWE3NjZhYTQuLjY0YWUxNzEw
ODlkY2JmMGNkNDViNzBhOWI4ZjcwZWZhOWZmZGVkYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNt
YWtlCkBAIC0xMjIsNyArMTIyLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNwcAogCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1wbC5jcHAKLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ZvbnRDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJm
YnV6ek5HLmNwcApAQCAtMTM0LDYgKzEzMyw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNF
UwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QYXR0ZXJuQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Bs
YXRmb3JtUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1JlZlB0ckNh
aXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RyYW5zZm9ybWF0aW9uTWF0cml4
Q2Fpcm8uY3BwCkBAIC0xNzksOSArMTc5LDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MveDExL1BsYXRmb3JtRGlzcGxheVgxMS5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy94MTEvWFVuaXF1ZVJlc291cmNlLmNwcAogCi0gICAgcGxhdGZvcm0v
aW1hZ2UtZW5jb2RlcnMvSlBFR0ltYWdlRW5jb2Rlci5jcHAKKyAgICBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHAKIAotICAgIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2ltYWdl
LWVuY29kZXJzL0pQRUdJbWFnZUVuY29kZXIuY3BwCiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2Vm
bC9OZXR3b3JrU3RhdGVOb3RpZmllckVmbC5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpp
bmRleCA2NDVhZGQxY2UzODg4OGIwNGQ0YTJkODlhZGEwYTdjNmRlMTk5ODZiLi5kMzFmNTcwNmE2
OTU5YjIzMWI1YmZiMjJmMDdkMTg0M2FlODYxYTFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFr
ZQpAQCAtMTAxLDcgKzEwMSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1wbC5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9YMTEu
Y3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGllcy5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9GbG9hdFJlY3RDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9Gb250Q2Fpcm8uY3BwCkBAIC0xMTUsNiArMTE0LDcgQEAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vUGxhdGZvcm1QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vUmVmUHRyQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3Jt
YXRpb25NYXRyaXhDYWlyby5jcHAKQEAgLTE0OSw3ICsxNDksNyBAQCBsaXN0KEFQUEVORCBXZWJD
b3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAogICAg
IHBsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuY3BwCiAKLSAgICBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHAKIAogICAgIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL2d0ay9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZUd0ay5jcHAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9y
bU1hYy5jbWFrZQppbmRleCA5ZjZmNDk2YjZjYzRlZjZlNGI3NGQ4NGFjMGFhOWRlYTU1YTAyMzdi
Li40ZGRlZDMwODhmNGYzOTZmZWY0NDRlN2VlNjVjNjQxMDY1OGY1ODQxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0
Zm9ybU1hYy5jbWFrZQpAQCAtMzk3LDcgKzM5Nyw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09V
UkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1dlYlN5c3RlbUJhY2tkcm9wTGF5
ZXIubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9XZWJUaWxlZEJhY2tpbmdMYXll
ci5tbQogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L0Zsb2F0UG9pbnRDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5j
cHAKQEAgLTQxNyw2ICs0MTYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NnL1BhdGhDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cu
Y3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFnZUNHLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1N1YmltYWdlQ2FjaGVXaXRoVGltZXIuY3BwCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtV2luQ2Fpcm8uY21ha2UKaW5kZXggMmM1NTNiMDU1MWRhZDY5YWExOTlkOTYwZjU1MjM0
M2Q5MjBmMDdiMy4uMzQyYWE5MjczMmZkOGY5MmU4NWNmYTYyNmQ1NTU3MGVmNjZiNmE2OCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCkBAIC0yMSw3ICsyMSw2IEBAIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dMQ29udGV4dC5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCiAKLSAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0Zsb2F0UmVjdENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRD
YWlyby5jcHAKQEAgLTM0LDYgKzMzLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Q
bGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZv
cm1QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8u
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3JtYXRpb25NYXRyaXhDYWly
by5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAK
IAotICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNw
cAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNw
cAogCiAgICAgcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb25TdHViLmNwcAog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggYzExYmM0N2U1Y2FkNjMwYTM2NTdjZGUxYWQ5ZjdiNzZhMGE1NWM2Ni4uZmYyYTQ5OGJh
OTZiODFkYTAzZjgxYTMwMWE4NWJlMzc0ZDBlYzY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQ4NCw3ICsxNDg0LDcgQEAK
IAkJMzc1Q0QyMzIxMTlENDNDODAwQTJBODU5IC8qIEh5cGhlbmF0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzVDRDIzMTExOUQ0M0M4MDBBMkE4
NTkgLyogSHlwaGVuYXRpb24uaCAqLzsgfTsKIAkJMzc2RENDRTExM0I0Rjk2NjAwMkVCRUZDIC8q
IFRleHRSdW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzc2RENDRTAxM0I0Rjk2NjAwMkVCRUZDIC8qIFRleHRSdW4uY3BwICovOyB9OwogCQkzNzc0
QUJBNTBGQTIxRUI0MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzc0QUJBMzBGQTIxRUI0
MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3
IC8qIEJpdG1hcEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3Bw
ICovOyB9OworCQkzNzdBM0E5MDE1RUZDRTlCMDA1OUY1QzcgLyogUGxhdGZvcm1JbWFnZUNHLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3N0EzQThG
MTVFRkNFOUEwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwICovOyB9OwogCQkzNzkxOUMy
MzBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzkxOUMyMTBCN0QxODg2MDBBNTY5OTgg
LyogUG9zaXRpb25JdGVyYXRvci5jcHAgKi87IH07CiAJCTM3OTE5QzI0MEI3RDE4ODYwMEE1Njk5
OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAzNzkxOUMyMjBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRv
ci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTM3OTI5MTdBMTk4
NUVGMzkwMEY0QjY2MSAvKiBDcmVkZW50aWFsQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc5MjkxNzgxOTg1RUYzOTAwRjRCNjYxIC8qIENyZWRl
bnRpYWxCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTIzMjUsMTAgKzIzMjUsMTQgQEAKIAkJNTNFRDNGREYxNjdBODhFNzAwNjc2MkU2IC8q
IEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFRDNGREQxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJu
YWxTZXR0aW5nc0dlbmVyYXRlZC5oICovOyB9OwogCQk1M0VGNzY2QjE2NTMwQTYxMDA0Q0JFNDkg
LyogU2V0dGluZ3NNYWNyb3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUzRUY3NjZBMTY1MzBBNjEwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oICov
OyB9OwogCQk1M0VGNzY2QzE2NTMxOTk0MDA0Q0JFNDkgLyogU2V0dGluZ3NNYWNyb3MuaCBpbiBD
b3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzRUY3NjZBMTY1MzBBNjEwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oICovOyB9OworCQk1
NTA0RTRDQjFEMzU1N0IyMDBGRTUwODggLyogQml0bWFwUGl4ZWxzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTA0RTRDQTFEMzU1MzJEMDBGRTUwODgg
LyogQml0bWFwUGl4ZWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTUwQTBCQzkwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzcw
ODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovOyB9OwogCQk1NTBBMEJDQTA4
NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxp
ZmllZE5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1NTVCODdFQzFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU1Qjg3RUExQ0FBRjBB
QjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLzsgfTsKIAkJNTU1Qjg3RUQxQ0FBRjBB
QjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNv
ZGVyQ0cuaCAqLzsgfTsKKwkJNTU3NEYwODcxRDAyNzkwOTAwQjlGMTRDIC8qIFBsYXRmb3JtSW1h
Z2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1NzRG
MDg1MUQwMjc0NDQwMEI5RjE0QyAvKiBQbGF0Zm9ybUltYWdlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTVDQkE2QTExRDFERjJFMTAwNDUxODYw
IC8qIEltYWdlRnJhbWVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU1Q0JBNjlGMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1lRGF0YS5j
cHAgKi87IH07CisJCTU1Q0JBNkEyMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1lRGF0YS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVDQkE2QTAx
RDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTcyQTdGMjExQzZFNTcxOTAwOUM2MTQ5IC8q
IFNpbXVsYXRlZENsaWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NzJBN0YyMDFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCAqLzsg
fTsKIAkJNTcyQTdGMjMxQzZFNUE2NjAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MkE3RjIyMUM2RTVB
NjYwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5jcHAgKi87IH07CiAJCTU3RUY1RTYwMUQyMEM4
MzkwMDE3MUU2MCAvKiBUZXh0Q29kZWNSZXBsYWNlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdFRjVFNUYxRDIwQzgzOTAwMTcxRTYwIC8qIFRl
eHRDb2RlY1JlcGxhY2VtZW50LmggKi87IH07CkBAIC05MDYxLDcgKzkwNjUsNyBAQAogCQkzNzZE
Q0NFMDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBUZXh0UnVuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzc3MkIwOTUxNjUzNTg1NjAwMEE0OUNBIC8qIFBvcHVwT3BlbmluZ09ic2VydmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvcHVwT3BlbmluZ09ic2VydmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NzRBQkEzMEZBMjFFQjQwMEFEN0RFOSAvKiBP
dmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdG1hcEltYWdlQ0cuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogUGxhdGZv
cm1JbWFnZUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsYXRm
b3JtSW1hZ2VDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3OTE5QzIxMEI3
RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBQb3NpdGlvbkl0ZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMzc5MTlDMjIwQjdEMTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvc2l0aW9uSXRlcmF0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc5MjkxNzgxOTg1RUYzOTAwRjRCNjYx
IC8qIENyZWRlbnRpYWxCYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENy
ZWRlbnRpYWxCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05OTg5LDEwICs5
OTkzLDE0IEBACiAJCTUzRUQzRkRDMTY3QTg4RTcwMDY3NjJFNiAvKiBKU0ludGVybmFsU2V0dGlu
Z3NHZW5lcmF0ZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJ
bnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTNFRDNGREQxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRl
ZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVybmFsU2V0dGluZ3NH
ZW5lcmF0ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNFRjc2NkExNjUzMEE2
MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNldHRpbmdzTWFjcm9zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1
MDRFNENBMUQzNTUzMkQwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Qml0bWFwUGl4ZWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1MEEwQkM3MDg1
RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllZE5hbWUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTUw
QTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTU1
Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2Rl
ckNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1NzRGMDg1MUQwMjc0NDQwMEI5RjE0QyAv
KiBQbGF0Zm9ybUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2UuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVDQkE2OUYxRDFERjJFMTAwNDUxODYwIC8qIEltYWdl
RnJhbWVEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdl
RnJhbWVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVDQkE2QTAxRDFE
RjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEltYWdlRnJhbWVEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTU1RDQwOEY3MUE3QzYzMTgwMEM3ODQ1MCAvKiBTVkdJbWFnZUNsaWVudHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHSW1hZ2VDbGllbnRzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTU3MkE3RjIwMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGlj
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaW11bGF0ZWRDbGljay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzJBN0YyMjFDNkU1QTY2MDA5QzYxNDkgLyog
U2ltdWxhdGVkQ2xpY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
U2ltdWxhdGVkQ2xpY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjIwMjQs
NyArMjIwMzIsNiBAQAogCQlCMjc1MzUyOTBCMDUzODE0MDAyQ0U2NEYgLyogY2cgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTM3N0EzQThGMTVFRkNFOUEw
MDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCAqLywKIAkJCQkwRkNGMzMyMzBGMkI5NzE1MDA0
QjY3OTUgLyogQ29sb3JDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRGIC8q
IEZsb2F0UG9pbnRDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEZs
b2F0UmVjdENHLmNwcCAqLywKQEAgLTIyMDUxLDYgKzIyMDU4LDcgQEAKIAkJCQlBODBBMzhGRDBF
NTBDQzgyMDBBMjVFQkMgLyogUGF0dGVybkNHLmNwcCAqLywKIAkJCQlCMjc1MzUzNjBCMDUzODE0
MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5jcHAgKi8sCiAJCQkJQjI3NTM1MzcwQjA1Mzgx
NDAwMkNFNjRGIC8qIFBERkRvY3VtZW50SW1hZ2UuaCAqLywKKwkJCQkzNzdBM0E4RjE1RUZDRTlB
MDA1OUY1QzcgLyogUGxhdGZvcm1JbWFnZUNHLmNwcCAqLywKIAkJCQkxRkM0MEZCODE2NTVDNTkx
MDA0MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAgKi8sCiAJCQkJMUZDNDBGQjcx
NjU1QzU5MTAwNDBGMjlFIC8qIFN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCAqLywKIAkJCQlCMjc1
MzUyQTBCMDUzODE0MDAyQ0U2NEYgLyogVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAgKi8sCkBA
IC0yMjExOCw2ICsyMjEyNiw3IEBACiAJCQkJQkVGMjlFRTkxNzE1REQwOTAwQzRCNEM5IC8qIEF1
ZGlvVHJhY2tQcml2YXRlLmggKi8sCiAJCQkJQTg5OTQzMjcwQjQyMzM4NzAwRDdDODAyIC8qIEJp
dG1hcEltYWdlLmNwcCAqLywKIAkJCQlBODk5NDMyNjBCNDIzMzg3MDBEN0M4MDIgLyogQml0bWFw
SW1hZ2UuaCAqLywKKwkJCQk1NTA0RTRDQTFEMzU1MzJEMDBGRTUwODggLyogQml0bWFwUGl4ZWxz
LmggKi8sCiAJCQkJQ0RERTAyRTkxOEIzREZDNzAwQ0Y3RkYxIC8qIENETVNlc3Npb24uaCAqLywK
IAkJCQlCMjc1MzUzODBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3IuY3BwICovLAogCQkJCUIyNzUz
NTM5MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5oICovLApAQCAtMjIyMDIsNiArMjIyMTEsOCBA
QAogCQkJCTQzRDI1OTc2MTNDODE2RjQwMDYwODU1OSAvKiBJbWFnZUJ1ZmZlci5jcHAgKi8sCiAJ
CQkJQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVmZmVyLmggKi8sCiAJCQkJMjJC
RDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0YS5oICovLAorCQkJCTU1Q0JB
NjlGMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1lRGF0YS5jcHAgKi8sCisJCQkJNTVDQkE2
QTAxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggKi8sCiAJCQkJQkM3RjQ0QTcw
QjlFMzI0RTAwQTlEMDgxIC8qIEltYWdlT2JzZXJ2ZXIuaCAqLywKIAkJCQlBODc0OEQ3NDEyQ0Mz
Rjg5MDAxRkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5jcHAgKi8sCiAJCQkJQTg3NDhENjYxMkND
Mzc2MzAwMUZCQTQxIC8qIEltYWdlT3JpZW50YXRpb24uaCAqLywKQEAgLTIyMjUxLDYgKzIyMjYy
LDcgQEAKIAkJCQkyRDUwMDJGQTFCNTZENzk5MDAyMEFBRjcgLyogUGF0aFV0aWxpdGllcy5oICov
LAogCQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmNwcCAqLywKIAkJCQlB
OEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oICovLAorCQkJCTU1NzRGMDg1MUQw
Mjc0NDQwMEI5RjE0QyAvKiBQbGF0Zm9ybUltYWdlLmggKi8sCiAJCQkJMDU2MkY5NjAxNTczRjg4
RjAwMzFDQTE2IC8qIFBsYXRmb3JtTGF5ZXIuaCAqLywKIAkJCQlDRUVGQ0Q3QjE5REIzM0RDMDAz
ODc2RDcgLyogUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmggKi8sCiAJCQkJMDcyODQ3RTIx
NkVCQzVCMDAwNDNDRkE0IC8qIFBsYXRmb3JtVGV4dFRyYWNrLmggKi8sCkBAIC0yNjAxOCw2ICsy
NjAzMCw3IEBACiAJCQkJODVFNzExQjkwQUM1RDUzNTAwNTMyNzBGIC8qIERPTUhUTUxNYXBFbGVt
ZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTE1NzlGMEMwM0JCRDMwMDhCQjBF
RSAvKiBET01IVE1MTWFycXVlZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTE1NkVB
MEMwM0I3NDEwMDhCQjBFRSAvKiBET01IVE1MTWFycXVlZUVsZW1lbnRJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNTU3NEYwODcxRDAyNzkwOTAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTJERUM2NjU1MUM4MkQwNDEwMDk5ODQ2QSAvKiBET01IVE1M
TWVkaWFFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyREVDNjY1MTFDODJEMDE2MDA5OTg0
NkEgLyogRE9NSFRNTE1lZGlhRWxlbWVudEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NUJBNEQxMzBBQTY4ODY4MDA4ODA1MkQgLyogRE9NSFRNTE1lbnVFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKQEAgLTI2NDU5LDYgKzI2NDcyLDcgQEAKIAkJCQlEMzU5RDc4QTEyOUNBMjcxMDAwNkU1
RDIgLyogSFRNTERldGFpbHNFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEVBNzlGQTBB
MTkxNkRGMDBBOEVGNUYgLyogSFRNTERpcmVjdG9yeUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4RUE3Q0I3MEExOTJCOUMwMEE4RUY1RiAvKiBIVE1MRGl2RWxlbWVudC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNTVDQkE2QTIxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEVBNzlGNzBBMTkxNkRGMDBBOEVGNUYgLyogSFRNTERMaXN0
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk4RTUwODI0NUU1OTAwMUU5QUJDIC8q
IEhUTUxEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc3QjM4NjcxMjI4ODNFOTAwQjgx
RkY4IC8qIEhUTUxEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yODM1OSw2ICsy
ODM3Myw3IEBACiAJCQkJQjIyMjc5OTMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0FuaW1hdGVNb3Rp
b25FbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk5NTBEMDBCRjIyMDA3MUI3ODIg
LyogU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3
OTk4MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdBbmltYXRpb25FbGVtZW50LmggaW4gSGVhZGVycyAq
LywKKwkJCQk1NTA0RTRDQjFEMzU1N0IyMDBGRTUwODggLyogQml0bWFwUGl4ZWxzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0MzlEMzM0NTEzQTY5MTFDMDBDMjBGNEYgLyogU1ZHQW5pbWF0b3JGYWN0
b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEZCM0Y4NDEzQkM3NTRDMDA5OUZDMTggLyogU1ZH
QXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5OUMwRDAw
QkYyMjAwNzFCNzgyIC8qIFNWR0NpcmNsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMjk0
MTEsNyArMjk0MjYsNyBAQAogCQkJCUZEQzU0RjA0MTM5OUIwREEwMDhEOTExNyAvKiBCaXF1YWRG
aWx0ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2MDI2MTJCMDI2NzYwMEMxQTM1
OSAvKiBCaXF1YWRQcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg5OTQzMjkwQjQy
MzM4ODAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTM3N0Ez
QTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTM3N0EzQTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTc2RDZDNzgxMjJCOEEzRDAwMUZEMUY3IC8qIEJsb2IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMkVERUYxRjMxMjFCMEVGQzAwNzI2REIyIC8qIEJsb2JEYXRhLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUUxRDMxQ0RDMTkxOTYwMjAwMDEwMDVBMyAvKiBCbG9iRGF0YUZp
bGVSZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTc3NCw2ICsyOTc4OSw3IEBACiAJ
CQkJMkUyRDk5RTgxMEUyQkMxQzAwNDk2MzM3IC8qIERPTUJsb2IubW0gaW4gU291cmNlcyAqLywK
IAkJCQk4NTA4OUNEODBBOThDNDI4MDBBMjc1QUEgLyogRE9NQ0RBVEFTZWN0aW9uLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJODVBQ0E5ODcwQTlCNTIwMzAwNjcxRTkwIC8qIERPTUNoYXJhY3RlckRh
dGEubW0gaW4gU291cmNlcyAqLywKKwkJCQk1NUNCQTZBMTFEMURGMkUxMDA0NTE4NjAgLyogSW1h
Z2VGcmFtZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODUwODlDREEwQTk4QzQyODAwQTI3
NUFBIC8qIERPTUNvbW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJCQk5NzhEMDdCRTE0NUEwRjZD
MDA5NjkwOEQgLyogRE9NQ29yZUV4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NThD
MzhBNjBBQThGMjA0MDBCMTg3QTQgLyogRE9NQ291bnRlci5tbSBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9ET00ubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQppbmRleCA0MDExZWEzZmQ4YzA0Njk3NGM1NWQ0OGUz
OTZmMWI4M2I4MWYzMzVkLi5hNWFjNGYwNWFlMzM5YThkNjQ3MDZjMTBmYzBmN2FmNDA0MjU2MjNj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQpAQCAtNjA2LDcgKzYwNiw3IEBAIC0g
KHZvaWQpZ2V0UHJldmlld1NuYXBzaG90SW1hZ2U6KENHSW1hZ2VSZWYqKWNnSW1hZ2UgYW5kUmVj
dHM6KE5TQXJyYXkgKiopcmVjdHMKIAogICAgIGlmICh0ZXh0SW5kaWNhdG9yKSB7CiAgICAgICAg
IGlmIChJbWFnZSogaW1hZ2UgPSB0ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2UoKSkKLSAgICAg
ICAgICAgICpjZ0ltYWdlID0gKENHSW1hZ2VSZWYpQ0ZBdXRvcmVsZWFzZShDR0ltYWdlUmV0YWlu
KGltYWdlLT5nZXRDR0ltYWdlUmVmKCkpKTsKKyAgICAgICAgICAgICpjZ0ltYWdlID0gaW1hZ2Ut
Pm5hdGl2ZUltYWdlKCkuYXV0b3JlbGVhc2UoKTsKICAgICB9CiAKICAgICBSZXRhaW5QdHI8TlNN
dXRhYmxlQXJyYXk+IHJlY3RBcnJheSA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10g
aW5pdF0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRv
cldpbmRvdy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cu
bW0KaW5kZXggMzY0YTlhODdjZTZmMDY2Mzk0OGI4ODQ2ZThlMmNlNmQxOTBmMjQ4OS4uYTc0ZGE4
NWFjZWNhM2M2Njk4ZGQxNTZhYjMxYTZjOTcxYTM1NGU2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCkBAIC0xNjIsOSArMTYyLDkgQEAgLSAo
aW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFtZSB0ZXh0SW5kaWNhdG9yOihQ
YXNzUmVmUHRyPFRleHRJbmRpY2EKICAgICBjb250ZW50c0ltYWdlTG9naWNhbFNpemUuc2NhbGUo
MSAvIF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VTY2FsZUZhY3RvcigpKTsKICAgICBSZXRh
aW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZTsKICAgICBpZiAoaW5kaWNhdG9yV2FudHND
b250ZW50Q3Jvc3NmYWRlKCpfdGV4dEluZGljYXRvcikpCi0gICAgICAgIGNvbnRlbnRzSW1hZ2Ug
PSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlV2l0aEhpZ2hsaWdodCgpLT5nZXRDR0ltYWdl
UmVmKCk7CisgICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudElt
YWdlV2l0aEhpZ2hsaWdodCgpLT5uYXRpdmVJbWFnZSgpOwogICAgIGVsc2UKLSAgICAgICAgY29u
dGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2UoKS0+Z2V0Q0dJbWFnZVJl
ZigpOworICAgICAgICBjb250ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFn
ZSgpLT5uYXRpdmVJbWFnZSgpOwogCiAgICAgUmV0YWluUHRyPE5TTXV0YWJsZUFycmF5PiBib3Vu
Y2VMYXllcnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdKTsKIApAQCAt
MjY1LDcgKzI2NSw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0FLZXlmcmFtZUFuaW1hdGlvbj4gY3Jl
YXRlQm91bmNlQW5pbWF0aW9uKENGVGltZUludGVydmFsIGR1cmF0CiBzdGF0aWMgUmV0YWluUHRy
PENBQmFzaWNBbmltYXRpb24+IGNyZWF0ZUNvbnRlbnRDcm9zc2ZhZGVBbmltYXRpb24oQ0ZUaW1l
SW50ZXJ2YWwgZHVyYXRpb24sIFRleHRJbmRpY2F0b3ImIHRleHRJbmRpY2F0b3IpCiB7CiAgICAg
UmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGNyb3NzZmFkZUFuaW1hdGlvbiA9IFtDQUJhc2lj
QW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAiY29udGVudHMiXTsKLSAgICBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZSA9IHRleHRJbmRpY2F0b3IuY29udGVudEltYWdl
KCktPmdldENHSW1hZ2VSZWYoKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJ
bWFnZSA9IHRleHRJbmRpY2F0b3IuY29udGVudEltYWdlKCktPm5hdGl2ZUltYWdlKCk7CiAgICAg
W2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRUb1ZhbHVlOihpZCljb250ZW50c0ltYWdlLmdldCgpXTsK
ICAgICBbY3Jvc3NmYWRlQW5pbWF0aW9uIHNldEZpbGxNb2RlOmtDQUZpbGxNb2RlRm9yd2FyZHNd
OwogICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0UmVtb3ZlZE9uQ29tcGxldGlvbjpOT107CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKaW5k
ZXggNDYwZDFiODU2Yjc3YjdjZjRlYzY4OTY1ODFiODMzZDNlN2Y5NzAxNC4uZmM2NDlkMTBhYWI5
YzEzZmZmMjkzMDU1YTcwN2NiNzQ1Mzc0NjkxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcApAQCAtNjgsMTUgKzY4LDEzIEBAIEJpdG1h
cEltYWdlOjpCaXRtYXBJbWFnZShOYXRpdmVJbWFnZVB0ciYmIGltYWdlLCBJbWFnZU9ic2VydmVy
KiBvYnNlcnZlcikKICAgICAsIG1faGF2ZUZyYW1lQ291bnQodHJ1ZSkKICAgICAsIG1fYW5pbWF0
aW9uRmluaXNoZWRXaGVuQ2F0Y2hpbmdVcChmYWxzZSkKIHsKKyAgICBtX2ZyYW1lcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KDEpOworICAgIG1fZnJhbWVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3Zl
KGltYWdlKSk7CisgICAgCiAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhIGRlY29kZXIsIHdl
IGNhbid0IGZpZ3VyZSBvdXQgdGhlIGltYWdlIG9yaWVudGF0aW9uLgogICAgIC8vIFNldCBtX3Np
emVSZXNwZWN0aW5nT3JpZW50YXRpb24gdG8gYmUgdGhlIHNhbWUgYXMgbV9zaXplIHNvIGl0J3Mg
bm90IDB4MC4KLSAgICBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBtX3NpemUgPSBOYXRp
dmVJbWFnZTo6c2l6ZShpbWFnZSk7CisgICAgbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uID0g
bV9zaXplID0gbV9mcmFtZXNbMF0uc2l6ZSgpOwogICAgIG1fZGVjb2RlZFNpemUgPSBtX3NpemUu
YXJlYSgpICogNDsKLSAgICAKLSAgICBtX2ZyYW1lcy5ncm93KDEpOwotICAgIG1fZnJhbWVzWzBd
Lm1faGFzQWxwaGEgPSBOYXRpdmVJbWFnZTo6aGFzQWxwaGEoaW1hZ2UpOwotICAgIG1fZnJhbWVz
WzBdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKLSAgICBtX2ZyYW1lc1swXS5tX2ltYWdlID0gV1RG
TW92ZShpbWFnZSk7CiB9CiAKIEJpdG1hcEltYWdlOjp+Qml0bWFwSW1hZ2UoKQpAQCAtMTA1LDcg
KzEwMyw3IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmhhdmVGcmFtZUltYWdlQXRJbmRleChzaXplX3Qg
aW5kZXgpCiAgICAgaWYgKGluZGV4ID49IG1fZnJhbWVzLnNpemUoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOworICAgIHJldHVy
biBtX2ZyYW1lc1tpbmRleF0uaGFzSW1hZ2UoKTsKIH0KIAogYm9vbCBCaXRtYXBJbWFnZTo6aGFz
U2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdApAQCAtMTI1LDkgKzEyMyw3IEBAIHZvaWQgQml0
bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGRlc3Ryb3lBbGwpCiAgICAgICAgIC8v
IFRoZSB1bmRlcmx5aW5nIGZyYW1lIGlzbid0IGFjdHVhbGx5IGNoYW5naW5nICh3ZSdyZSBqdXN0
IHRyeWluZyB0bwogICAgICAgICAvLyBzYXZlIHRoZSBtZW1vcnkgZm9yIHRoZSBmcmFtZWJ1ZmZl
ciBkYXRhKSwgc28gd2UgZG9uJ3QgbmVlZCB0byBjbGVhcgogICAgICAgICAvLyB0aGUgbWV0YWRh
dGEuCi0gICAgICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMgPSBtX2ZyYW1lc1tpXS5tX2ZyYW1lQnl0
ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1tpXS5jbGVhcihmYWxzZSkpCi0gICAgICAgICAgICBm
cmFtZUJ5dGVzQ2xlYXJlZCArPSBmcmFtZUJ5dGVzOworICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJl
ZCArPSBtX2ZyYW1lc1tpXS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEp
OwogICAgIH0KIAogICAgIG1fc291cmNlLmNsZWFyKGRlc3Ryb3lBbGwsIGNsZWFyQmVmb3JlRnJh
bWUsIGRhdGEoKSwgbV9hbGxEYXRhUmVjZWl2ZWQpOwpAQCAtMTUwLDggKzE0Niw4IEBAIHZvaWQg
Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KGJvb2wgZGVzdHJveUFs
bCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgYWxsRnJhbWVCeXRlcyA9IDA7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAg
YWxsRnJhbWVCeXRlcyArPSBtX2ZyYW1lc1tpXS51c2VkRnJhbWVCeXRlcygpOworICAgIGZvciAo
YXV0byYgZnJhbWUgOiBtX2ZyYW1lcykKKyAgICAgICAgYWxsRnJhbWVCeXRlcyArPSBmcmFtZS5m
cmFtZUJ5dGVzKCk7CiAKICAgICBpZiAoYWxsRnJhbWVCeXRlcyA+IGxhcmdlQW5pbWF0aW9uQ3V0
b2ZmKSB7CiAgICAgICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFnZSAlcCBkZXN0cm95RGVjb2Rl
ZERhdGFJZk5lY2Vzc2FyeSBkZXN0cm95aW5nRGF0YTogYWxsRnJhbWVCeXRlcz0ldSBjdXRvZmY9
JXUiLCB0aGlzLCBhbGxGcmFtZUJ5dGVzLCBsYXJnZUFuaW1hdGlvbkN1dG9mZik7CkBAIC0xNzcs
NyArMTczLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJveU1ldGFkYXRhQW5kTm90aWZ5KHVu
c2lnbmVkIGZyYW1lQnl0ZXNDbGVhcmVkLCBDbGVhcmVkU28KICAgICAgICAgaW1hZ2VPYnNlcnZl
cigpLT5kZWNvZGVkU2l6ZUNoYW5nZWQodGhpcywgLXNhZmVDYXN0PGludD4oZnJhbWVCeXRlc0Ns
ZWFyZWQpKTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgs
IFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZUNhY2hpbmcgZnJh
bWVDYWNoaW5nKQordm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFtZShzaXplX3QgaW5kZXgsIFN1
YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcg
Y2FjaGluZykKIHsKICAgICBzaXplX3QgbnVtRnJhbWVzID0gZnJhbWVDb3VudCgpOwogICAgIEFT
U0VSVChtX2RlY29kZWRTaXplID09IDAgfHwgbnVtRnJhbWVzID4gMSk7CkBAIC0xODUsMjUgKzE4
MSwxMiBAQCB2b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vic2Ft
cGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbQogICAgIGlmIChtX2ZyYW1lcy5zaXplKCkg
PCBudW1GcmFtZXMpCiAgICAgICAgIG1fZnJhbWVzLmdyb3cobnVtRnJhbWVzKTsKIAotICAgIGlm
IChmcmFtZUNhY2hpbmcgPT0gQ2FjaGVNZXRhZGF0YUFuZEZyYW1lKSB7Ci0gICAgICAgIG1fZnJh
bWVzW2luZGV4XS5tX2ltYWdlID0gbV9zb3VyY2UuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5k
ZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOwotICAgICAgICBtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1w
bGluZ0xldmVsID0gc3Vic2FtcGxpbmdMZXZlbDsKLSAgICB9Ci0KLSAgICBtX2ZyYW1lc1tpbmRl
eF0ubV9vcmllbnRhdGlvbiA9IG1fc291cmNlLm9yaWVudGF0aW9uQXRJbmRleChpbmRleCk7Ci0g
ICAgbV9mcmFtZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKLSAgICBtX2ZyYW1lc1tp
bmRleF0ubV9pc0NvbXBsZXRlID0gbV9zb3VyY2UuZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRl
eCk7CisgICAgbV9mcmFtZXNbaW5kZXhdID0gbV9zb3VyY2UuY3JlYXRlRnJhbWVEYXRhQXRJbmRl
eChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgY2FjaGluZyk7CiAKLSAgICBpZiAocmVwZXRpdGlv
bkNvdW50KGZhbHNlKSAhPSBjQW5pbWF0aW9uTm9uZSkKLSAgICAgICAgbV9mcmFtZXNbaW5kZXhd
Lm1fZHVyYXRpb24gPSBtX3NvdXJjZS5mcmFtZUR1cmF0aW9uQXRJbmRleChpbmRleCk7CisgICAg
TE9HKEltYWdlcywgIkJpdG1hcEltYWdlICVwIGNhY2hlRnJhbWUgJWx1ICglcyV1IGJ5dGVzLCBj
b21wbGV0ZSAlZCkiLCB0aGlzLCBpbmRleCwgY2FjaGluZyA9PSBJbWFnZUZyYW1lRGF0YTo6Q2Fj
aGluZzo6TWV0YWRhdGEgPyAibWV0YWRhdGEgb25seSwgIiA6ICIiLCBtX2ZyYW1lc1tpbmRleF0u
ZnJhbWVCeXRlcygpLCBtX2ZyYW1lc1tpbmRleF0uaXNDb21wbGV0ZSgpKTsKIAotICAgIG1fZnJh
bWVzW2luZGV4XS5tX2hhc0FscGhhID0gbV9zb3VyY2UuZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5k
ZXgpOwotICAgIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXMgPSBtX3NvdXJjZS5mcmFtZUJ5
dGVzQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7Ci0KLSAgICBMT0coSW1hZ2VzLCAi
Qml0bWFwSW1hZ2UgJXAgY2FjaGVGcmFtZSAlbHUgKCVzJXUgYnl0ZXMsIGNvbXBsZXRlICVkKSIs
IHRoaXMsIGluZGV4LCBmcmFtZUNhY2hpbmcgPT0gQ2FjaGVNZXRhZGF0YU9ubHkgPyAibWV0YWRh
dGEgb25seSwgIiA6ICIiLCBtX2ZyYW1lc1tpbmRleF0ubV9mcmFtZUJ5dGVzLCBtX2ZyYW1lc1tp
bmRleF0ubV9pc0NvbXBsZXRlKTsKLQotICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkg
ewotICAgICAgICBpbnQgZGVsdGFCeXRlcyA9IHNhZmVDYXN0PGludD4obV9mcmFtZXNbaW5kZXhd
Lm1fZnJhbWVCeXRlcyk7CisgICAgaWYgKG1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpKSB7Cisg
ICAgICAgIGludCBkZWx0YUJ5dGVzID0gc2FmZUNhc3Q8aW50PihtX2ZyYW1lc1tpbmRleF0uZnJh
bWVCeXRlcygpKTsKICAgICAgICAgbV9kZWNvZGVkU2l6ZSArPSBkZWx0YUJ5dGVzOwogICAgICAg
ICAvLyBUaGUgZnVsbHktZGVjb2RlZCBmcmFtZSB3aWxsIHN1YnN1bWUgdGhlIHBhcnRpYWxseSBk
ZWNvZGVkIGRhdGEgdXNlZAogICAgICAgICAvLyB0byBkZXRlcm1pbmUgaW1hZ2UgcHJvcGVydGll
cy4KQEAgLTI4OCwyMSArMjcxLDE5IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKGJv
b2wgYWxsRGF0YVJlY2VpdmVkKQogICAgIC8vIGZyYW1lIGFmZmVjdGVkIGJ5IGFwcGVuZGluZyBu
ZXcgZGF0YSBoZXJlLiBUaHVzIHdlIGhhdmUgdG8gY2xlYXIgYWxsIHRoZQogICAgIC8vIGluY29t
cGxldGUgZnJhbWVzIHRvIGJlIHNhZmUuCiAgICAgdW5zaWduZWQgZnJhbWVCeXRlc0NsZWFyZWQg
PSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmFtZXMuc2l6ZSgpOyArK2kpIHsK
KyAgICBmb3IgKGF1dG8mIGZyYW1lIDogbV9mcmFtZXMpIHsKICAgICAgICAgLy8gTk9URTogRG9u
J3QgY2FsbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KCkgaGVyZSwgdGhhdCB3aWxsIHRyeSB0bwog
ICAgICAgICAvLyBkZWNvZGUgYW55IHVuY2FjaGVkIChpLmUuIG5ldmVyLWRlY29kZWQgb3IKICAg
ICAgICAgLy8gY2xlYXJlZC1vbi1hLXByZXZpb3VzLXBhc3MpIGZyYW1lcyEKLSAgICAgICAgdW5z
aWduZWQgZnJhbWVCeXRlcyA9IG1fZnJhbWVzW2ldLm1fZnJhbWVCeXRlczsKLSAgICAgICAgaWYg
KG1fZnJhbWVzW2ldLm1faGF2ZU1ldGFkYXRhICYmICFtX2ZyYW1lc1tpXS5tX2lzQ29tcGxldGUp
Ci0gICAgICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSAobV9mcmFtZXNbaV0uY2xlYXIodHJ1
ZSkgPyBmcmFtZUJ5dGVzIDogMCk7CisgICAgICAgIGlmIChmcmFtZS5oYXNNZXRhZGF0YSgpICYm
ICFmcmFtZS5pc0NvbXBsZXRlKCkpCisgICAgICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSBm
cmFtZS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6RW1wdHkpOwogICAgIH0KICAgICBk
ZXN0cm95TWV0YWRhdGFBbmROb3RpZnkoZnJhbWVCeXRlc0NsZWFyZWQsIENsZWFyZWRTb3VyY2U6
Ok5vKTsKICNlbHNlCiAgICAgLy8gRklYTUU6IHdoeSBpcyB0aGlzIGRpZmZlcmVudCBmb3IgaU9T
PwogICAgIGludCBkZWx0YUJ5dGVzID0gMDsKICAgICBpZiAoIW1fZnJhbWVzLmlzRW1wdHkoKSkg
ewotICAgICAgICBpbnQgYnl0ZXMgPSBtX2ZyYW1lc1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5tX2Zy
YW1lQnl0ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1ttX2ZyYW1lcy5zaXplKCkgLSAxXS5jbGVh
cih0cnVlKSkgeworICAgICAgICBpZiAoaW50IGJ5dGVzID0gbV9mcmFtZXNbbV9mcmFtZXMuc2l6
ZSgpIC0gMV0uY2xlYXIoSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6OkVtcHR5KSkgewogICAgICAg
ICAgICAgZGVsdGFCeXRlcyArPSBieXRlczsKICAgICAgICAgICAgIGRlbHRhQnl0ZXMgKz0gbV9k
ZWNvZGVkUHJvcGVydGllc1NpemU7CiAgICAgICAgICAgICBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6
ZSA9IDA7CkBAIC0zNjYsMTUgKzM0NywxNSBAQCBib29sIEJpdG1hcEltYWdlOjppc1NpemVBdmFp
bGFibGUoKQogICAgIHJldHVybiBtX3NpemVBdmFpbGFibGU7CiB9CiAKLWJvb2wgQml0bWFwSW1h
Z2U6OmVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4LCBJbWFnZUZyYW1lQ2FjaGluZyBm
cmFtZUNhY2hpbmcpCitib29sIEJpdG1hcEltYWdlOjplbnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVf
dCBpbmRleCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgY2FjaGluZykKIHsKICAgICBpZiAoaW5k
ZXggPj0gZnJhbWVDb3VudCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoaW5k
ZXggPj0gbV9mcmFtZXMuc2l6ZSgpCi0gICAgICAgIHx8IChmcmFtZUNhY2hpbmcgPT0gQ2FjaGVN
ZXRhZGF0YUFuZEZyYW1lICYmICFtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKLSAgICAgICAgfHwg
KGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhT25seSAmJiAhbV9mcmFtZXNbaW5kZXhdLm1f
aGF2ZU1ldGFkYXRhKSkKLSAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgMCwgZnJhbWVDYWNoaW5n
KTsKKyAgICAgICAgfHwgKGNhY2hpbmcgPT0gSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFk
YXRhQW5kSW1hZ2UgJiYgIW1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpKQorICAgICAgICB8fCAo
Y2FjaGluZyA9PSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEgJiYgIW1fZnJhbWVz
W2luZGV4XS5oYXNNZXRhZGF0YSgpKSkKKyAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgMCwgY2Fj
aGluZyk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM4OCwxMCArMzY5LDkgQEAgTmF0aXZl
SW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgZmxv
YXQgcHJlc2VudGF0aW9uU2MKIAogICAgIC8vIFdlIG1heSBoYXZlIGNhY2hlZCBhIGZyYW1lIHdp
dGggYSBoaWdoZXIgc3Vic2FtcGxpbmcgbGV2ZWwsIGluIHdoaWNoIGNhc2Ugd2UgbmVlZCB0bwog
ICAgIC8vIHJlLWRlY29kZSB3aXRoIGEgbG93ZXIgbGV2ZWwuCi0gICAgaWYgKGluZGV4IDwgbV9m
cmFtZXMuc2l6ZSgpICYmIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlICYmIHN1YnNhbXBsaW5nTGV2
ZWwgPCBtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1wbGluZ0xldmVsKSB7CisgICAgaWYgKGluZGV4
IDwgbV9mcmFtZXMuc2l6ZSgpICYmIG1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpICYmIHN1YnNh
bXBsaW5nTGV2ZWwgPCBtX2ZyYW1lc1tpbmRleF0uc3Vic2FtcGxpbmdMZXZlbCgpKSB7CiAgICAg
ICAgIC8vIElmIHRoZSBpbWFnZSBpcyBhbHJlYWR5IGNhY2hlZCwgYnV0IGF0IHRvbyBzbWFsbCBh
IHNpemUsIHJlLWRlY29kZSBhIGxhcmdlciB2ZXJzaW9uLgotICAgICAgICBpbnQgc2l6ZUNoYW5n
ZSA9IC1tX2ZyYW1lc1tpbmRleF0ubV9mcmFtZUJ5dGVzOwotICAgICAgICBtX2ZyYW1lc1tpbmRl
eF0uY2xlYXIodHJ1ZSk7CisgICAgICAgIGludCBzaXplQ2hhbmdlID0gLW1fZnJhbWVzW2luZGV4
XS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6RW1wdHkpOwogICAgICAgICBpbnZhbGlk
YXRlUGxhdGZvcm1EYXRhKCk7CiAgICAgICAgIG1fZGVjb2RlZFNpemUgKz0gc2l6ZUNoYW5nZTsK
ICAgICAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKQEAgLTM5OSw0MCArMzc5LDcyIEBAIE5hdGl2
ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgsIGZs
b2F0IHByZXNlbnRhdGlvblNjCiAgICAgfQogCiAgICAgLy8gSWYgd2UgaGF2ZW4ndCBmZXRjaGVk
IGEgZnJhbWUgeWV0LCBkbyBzby4KLSAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8
ICFtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKLSAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgc3Vi
c2FtcGxpbmdMZXZlbCwgQ2FjaGVNZXRhZGF0YUFuZEZyYW1lKTsKKyAgICBpZiAoaW5kZXggPj0g
bV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0uaGFzSW1hZ2UoKSkKKyAgICAgICAg
Y2FjaGVGcmFtZShpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hp
bmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOworCisgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5pbWFn
ZSgpOworfQorICAgIAorTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKCkK
K3sKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCk7Cit9CisgICAgCitOYXRpdmVJbWFn
ZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkK
K3sKKyAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7CisgICAgCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGF1dG8gaW1hZ2UgPSBmcmFtZUlt
YWdlQXRJbmRleChpKTsKKyAgICAgICAgaWYgKGltYWdlICYmIFBsYXRmb3JtSW1hZ2UoaW1hZ2Up
LnNpemUoKSA9PSBzaXplKQorICAgICAgICAgICAgcmV0dXJuIGltYWdlOworICAgIH0KKyAgICAK
KyAgICAvLyBGYWxsYmFjayB0byB0aGUgZmlyc3QgZnJhbWUgaW1hZ2UgaWYgd2UgY2FuJ3QgZmlu
ZCB0aGUgcmlnaHQgc2l6ZQorICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKTsKK30KKyAg
ICAKK05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFt
ZSgpCit7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKK30K
IAotICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZTsKK1ZlY3RvcjxOYXRpdmVJbWFn
ZVB0cj4gQml0bWFwSW1hZ2U6OmZyYW1lc05hdGl2ZUltYWdlcygpCit7CisgICAgVmVjdG9yPE5h
dGl2ZUltYWdlUHRyPiBpbWFnZXM7CisgICAgc2l6ZV90IGNvdW50ID0gZnJhbWVDb3VudCgpOwor
ICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBp
ZiAoYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpKQorICAgICAgICAgICAgaW1hZ2Vz
LmFwcGVuZChpbWFnZSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBpbWFnZXM7CiB9CiAKIGJv
b2wgQml0bWFwSW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KQogewot
ICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQor
ICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hp
bmc6Ok1ldGFkYXRhKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG1fZnJh
bWVzW2luZGV4XS5tX2lzQ29tcGxldGU7CisgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5pc0Nv
bXBsZXRlKCk7CiB9CiAKIGZsb2F0IEJpdG1hcEltYWdlOjpmcmFtZUR1cmF0aW9uQXRJbmRleChz
aXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBDYWNo
ZU1ldGFkYXRhT25seSkpCisgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBJbWFn
ZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEpKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9kdXJhdGlvbjsKLX0KLQotTmF0aXZlSW1hZ2VQdHIg
Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkKLXsKLSAgICByZXR1cm4g
ZnJhbWVJbWFnZUF0SW5kZXgoY3VycmVudEZyYW1lKCkpOworICAgIHJldHVybiBtX2ZyYW1lc1tp
bmRleF0uZHVyYXRpb24oKTsKIH0KIAogYm9vbCBCaXRtYXBJbWFnZTo6ZnJhbWVIYXNBbHBoYUF0
SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRl
eCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQorICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRl
eCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhKSkKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAKLSAgICBpZiAobV9mcmFtZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRhKQotICAgICAgICBy
ZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faGFzQWxwaGE7CisgICAgaWYgKG1fZnJhbWVzW2luZGV4
XS5oYXNNZXRhZGF0YSgpKQorICAgICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLmhhc0FscGhh
KCk7CiAKICAgICByZXR1cm4gbV9zb3VyY2UuZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5kZXgpOwog
fQpAQCAtNDQ0LDExICs0NTYsMTEgQEAgYm9vbCBCaXRtYXBJbWFnZTo6Y3VycmVudEZyYW1lS25v
d25Ub0JlT3BhcXVlKCkKIAogSW1hZ2VPcmllbnRhdGlvbiBCaXRtYXBJbWFnZTo6ZnJhbWVPcmll
bnRhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICghZW5zdXJlRnJhbWVJc0Nh
Y2hlZChpbmRleCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQorICAgIGlmICghZW5zdXJlRnJhbWVJc0Nh
Y2hlZChpbmRleCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhKSkKICAgICAgICAg
cmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsKIAotICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9o
YXZlTWV0YWRhdGEpCi0gICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9vcmllbnRhdGlv
bjsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhdLmhhc01ldGFkYXRhKCkpCisgICAgICAgIHJldHVy
biBtX2ZyYW1lc1tpbmRleF0ub3JpZW50YXRpb24oKTsKIAogICAgIHJldHVybiBtX3NvdXJjZS5v
cmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOwogfQpAQCAtNzAwLDE3ICs3MTIsNTYgQEAgQ29sb3Ig
Qml0bWFwSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcigpCiAgICAgICAgIHJldHVybiBDb2xv
cigpOwogICAgIAogICAgIEFTU0VSVChtX2ZyYW1lcy5zaXplKCkpOwotICAgIG1fc29saWRDb2xv
ciA9IE5hdGl2ZUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IobV9mcmFtZXNbMF0ubV9pbWFn
ZS5nZXQoKSk7CisgICAgbV9zb2xpZENvbG9yID0gbV9mcmFtZXNbMF0uc2luZ2xlUGl4ZWxTb2xp
ZENvbG9yKCk7CiAgICAgCiAgICAgQVNTRVJUKG1fc29saWRDb2xvcik7CiAgICAgcmV0dXJuIG1f
c29saWRDb2xvci52YWx1ZSgpOwogfQogICAgIAorYm9vbCBCaXRtYXBJbWFnZTo6aXNBbG1vc3RT
b2xpZENvbG9yKCkKK3sKKyAgICBpZiAoZnJhbWVDb3VudCgpICE9IDEpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiBlbnN1cmVGcmFtZUlzQ2FjaGVkKDApICYmIG1fZnJhbWVz
WzBdLmlzQWxtb3N0U29saWRDb2xvcigpOworfQorICAgIAogYm9vbCBCaXRtYXBJbWFnZTo6Y2Fu
QW5pbWF0ZSgpCiB7CiAgICAgcmV0dXJuIHNob3VsZEFuaW1hdGUoKSAmJiBmcmFtZUNvdW50KCkg
PiAxOwogfQogCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBD
b21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUsIEltYWdlT3JpZW50YXRpb25EZXNj
cmlwdGlvbiBkZXNjcmlwdGlvbikKK3sKKyAgICBpZiAoZGVzdFJlY3QuaXNFbXB0eSgpIHx8IHNy
Y1JlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyNpZiBQTEFURk9STShJT1MpCisg
ICAgc3RhcnRBbmltYXRpb24oRG9Ob3RDYXRjaFVwKTsKKyNlbHNlCisgICAgc3RhcnRBbmltYXRp
b24oKTsKKyNlbmRpZgorICAgIAorICAgIENvbG9yIGNvbG9yID0gc2luZ2xlUGl4ZWxTb2xpZENv
bG9yKCk7CisgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgeworICAgICAgICBmaWxsV2l0aFNvbGlk
Q29sb3IoY29udGV4dCwgZGVzdFJlY3QsIGNvbG9yLCBvcCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZy
YW1lLCBQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKGNvbnRleHQsIGRlc3RSZWN0LCBz
cmNSZWN0KSk7CisgICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3Qg
aGF2ZSBhbiBpbWFnZSB5ZXQuCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBJbWFnZU9yaWVu
dGF0aW9uIG9yaWVudGF0aW9uKGRlc2NyaXB0aW9uLmltYWdlT3JpZW50YXRpb24oKSk7CisgICAg
aWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdl
T3JpZW50YXRpb24pCisgICAgICAgIG9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5k
ZXgobV9jdXJyZW50RnJhbWUpOworICAgIAorICAgIFBsYXRmb3JtSW1hZ2UoaW1hZ2UpLmRyYXco
Y29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG1fc2l6ZSwgb3AsIG1vZGUsIG9yaWVudGF0aW9u
KTsKKyAgICAKKyAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQorICAgICAgICBpbWFnZU9ic2VydmVy
KCktPmRpZERyYXcodGhpcyk7Cit9CisgICAgCiB2b2lkIEJpdG1hcEltYWdlOjpkdW1wKFRleHRT
dHJlYW0mIHRzKSBjb25zdAogewogICAgIEltYWdlOjpkdW1wKHRzKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCmluZGV4IDA3NTg5MjljZDg3ZmFk
YWNmMDJiNmVkOGVlYWZlN2RlZmQ2NmYwYzUuLjIyMThjODI0YjUyOGZkNjM5YmFiMTM4ZGVjYzk4
Yjk4MTZhMTY4MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuaApAQCAtMjgsMTEgKzI4LDEzIEBACiAjaWZuZGVmIEJpdG1hcEltYWdlX2gKICNk
ZWZpbmUgQml0bWFwSW1hZ2VfaAogCi0jaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJDb2xv
ci5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW1hZ2VGcmFtZURhdGEuaCIKICNp
bmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKICNp
bmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgogCiAjaWYgVVNF
KENHKSB8fCBVU0UoQVBQS0lUKQogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KQEAgLTQ3LDYz
ICs0OSw5IEBAIHR5cGVkZWYgc3RydWN0IEhCSVRNQVBfXyAqSEJJVE1BUDsKICNlbmRpZgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgc3RydWN0IEZyYW1lRGF0YTsKLX0KLQotbmFtZXNwYWNl
IFdURiB7Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgVmVjdG9yVHJhaXRzPFdlYkNvcmU6OkZyYW1l
RGF0YT4gOiBwdWJsaWMgU2ltcGxlQ2xhc3NWZWN0b3JUcmFpdHMgewotICAgICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBjYW5Jbml0aWFsaXplV2l0aE1lbXNldCA9IGZhbHNlOyAvLyBOb3QgYWxsIEZy
YW1lRGF0YSBtZW1iZXJzIGluaXRpYWxpemUgdG8gMC4KLSAgICB9OwotfQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIFRpbWVyOwogCi1uYW1lc3BhY2UgTmF0aXZlSW1hZ2UgewotICAg
IEludFNpemUgc2l6ZShjb25zdCBOYXRpdmVJbWFnZVB0ciYpOwotICAgIGJvb2wgaGFzQWxwaGEo
Y29uc3QgTmF0aXZlSW1hZ2VQdHImKTsKLSAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3Io
Y29uc3QgTmF0aXZlSW1hZ2VQdHImKTsKLX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBGcmFtZURhdGEgQ2xhc3MKLS8vID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1zdHJ1Y3QgRnJhbWVE
YXRhIHsKLXB1YmxpYzoKLSAgICBGcmFtZURhdGEoKQotICAgICAgICA6IG1faGF2ZU1ldGFkYXRh
KGZhbHNlKQotICAgICAgICAsIG1faXNDb21wbGV0ZShmYWxzZSkKLSAgICAgICAgLCBtX2hhc0Fs
cGhhKHRydWUpCi0gICAgewotICAgIH0KLQotICAgIH5GcmFtZURhdGEoKQotICAgIHsgCi0gICAg
ICAgIGNsZWFyKHRydWUpOwotICAgIH0KLQotICAgIC8vIENsZWFyIHRoZSBjYWNoZWQgaW1hZ2Ug
ZGF0YSBvbiB0aGUgZnJhbWUsIGFuZCAob3B0aW9uYWxseSkgdGhlIG1ldGFkYXRhLgotICAgIC8v
IFJldHVybnMgd2hldGhlciB0aGVyZSB3YXMgY2FjaGVkIGltYWdlIGRhdGEgdG8gY2xlYXIuCi0g
ICAgYm9vbCBjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpOwotICAgIAotICAgIHVuc2lnbmVkIHVz
ZWRGcmFtZUJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZSA/IG1fZnJhbWVCeXRlcyA6IDA7
IH0KLQotICAgIE5hdGl2ZUltYWdlUHRyIG1faW1hZ2U7Ci0gICAgSW1hZ2VPcmllbnRhdGlvbiBt
X29yaWVudGF0aW9uIHsgRGVmYXVsdEltYWdlT3JpZW50YXRpb24gfTsKLSAgICBTdWJzYW1wbGlu
Z0xldmVsIG1fc3Vic2FtcGxpbmdMZXZlbCB7IDAgfTsKLSAgICBmbG9hdCBtX2R1cmF0aW9uIHsg
MCB9OwotICAgIGJvb2wgbV9oYXZlTWV0YWRhdGEgOiAxOwotICAgIGJvb2wgbV9pc0NvbXBsZXRl
IDogMTsKLSAgICBib29sIG1faGFzQWxwaGEgOiAxOwotICAgIHVuc2lnbmVkIG1fZnJhbWVCeXRl
cyB7IDAgfTsKLX07Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS8vIEJpdG1hcEltYWdlIENsYXNzCi0vLyA9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KIGNsYXNzIEJpdG1hcEltYWdlIGZpbmFs
IDogcHVibGljIEltYWdlIHsKICAgICBmcmllbmQgY2xhc3MgR2VuZXJhdGVkSW1hZ2U7CiAgICAg
ZnJpZW5kIGNsYXNzIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOwpAQCAtMTU1LDEyICsxMDMsNiBA
QCBwdWJsaWM6CiAgICAgQ0ZEYXRhUmVmIGdldFRJRkZSZXByZXNlbnRhdGlvbigpIG92ZXJyaWRl
OwogI2VuZGlmCiAKLSNpZiBVU0UoQ0cpCi0gICAgV0VCQ09SRV9FWFBPUlQgQ0dJbWFnZVJlZiBn
ZXRDR0ltYWdlUmVmKCkgb3ZlcnJpZGU7Ci0gICAgQ0dJbWFnZVJlZiBnZXRGaXJzdENHSW1hZ2VS
ZWZPZlNpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwotICAgIFJldGFpblB0cjxDRkFycmF5
UmVmPiBnZXRDR0ltYWdlQXJyYXkoKSBvdmVycmlkZTsKLSNlbmRpZgotCiAjaWYgUExBVEZPUk0o
V0lOKQogICAgIGJvb2wgZ2V0SEJJVE1BUChIQklUTUFQKSBvdmVycmlkZTsKICAgICBib29sIGdl
dEhCSVRNQVBPZlNpemUoSEJJVE1BUCwgY29uc3QgSW50U2l6ZSopIG92ZXJyaWRlOwpAQCAtMTc0
LDggKzExNiwxMyBAQCBwdWJsaWM6CiAgICAgRXZhc19PYmplY3QqIGdldEV2YXNPYmplY3QoRXZh
cyopIG92ZXJyaWRlOwogI2VuZGlmCiAKKyAgICBXRUJDT1JFX0VYUE9SVCBOYXRpdmVJbWFnZVB0
ciBuYXRpdmVJbWFnZSgpIG92ZXJyaWRlOworICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdl
T2ZTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKICAgICBOYXRpdmVJbWFnZVB0ciBuYXRp
dmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIG92ZXJyaWRlOwogICAgIEltYWdlT3JpZW50YXRpb24g
b3JpZW50YXRpb25Gb3JDdXJyZW50RnJhbWUoKSBvdmVycmlkZSB7IHJldHVybiBmcmFtZU9yaWVu
dGF0aW9uQXRJbmRleChjdXJyZW50RnJhbWUoKSk7IH0KKyAgICBWZWN0b3I8TmF0aXZlSW1hZ2VQ
dHI+IGZyYW1lc05hdGl2ZUltYWdlcygpIG92ZXJyaWRlOworICAgIAorICAgIFdFQkNPUkVfRVhQ
T1JUIGJvb2wgaXNBbG1vc3RTb2xpZENvbG9yKCk7CiAKICAgICBib29sIGN1cnJlbnRGcmFtZUtu
b3duVG9CZU9wYXF1ZSgpIG92ZXJyaWRlOwogCkBAIC0yMTUsNyArMTYyLDYgQEAgcHJvdGVjdGVk
OgogICAgIHNpemVfdCBmcmFtZUNvdW50KCk7CiAKICAgICBOYXRpdmVJbWFnZVB0ciBmcmFtZUlt
YWdlQXRJbmRleChzaXplX3QsIGZsb2F0IHByZXNlbnRhdGlvblNjYWxlSGludCA9IDEpOwotICAg
IE5hdGl2ZUltYWdlUHRyIGNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCk7CiAK
ICAgICBib29sIGhhdmVGcmFtZUltYWdlQXRJbmRleChzaXplX3QpOwogCkBAIC0yMjUsMTEgKzE3
MSwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBmcmFtZU9yaWVudGF0aW9u
QXRJbmRleChzaXplX3QpOwogCiAgICAgLy8gRGVjb2RlcyBhbmQgY2FjaGVzIGEgZnJhbWUuIE5l
dmVyIGFjY2Vzc2VkIGV4Y2VwdCBpbnRlcm5hbGx5LgotICAgIGVudW0gSW1hZ2VGcmFtZUNhY2hp
bmcgeyBDYWNoZU1ldGFkYXRhT25seSwgQ2FjaGVNZXRhZGF0YUFuZEZyYW1lIH07Ci0gICAgdm9p
ZCBjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZUNh
Y2hpbmcgPSBDYWNoZU1ldGFkYXRhQW5kRnJhbWUpOworICAgIHZvaWQgY2FjaGVGcmFtZShzaXpl
X3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nID0gSW1h
Z2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOwogCiAgICAgLy8gQ2FsbGVk
IGJlZm9yZSBhY2Nlc3NpbmcgbV9mcmFtZXNbaW5kZXhdIGZvciBpbmZvIHdpdGhvdXQgZGVjb2Rp
bmcuIFJldHVybnMgZmFsc2Ugb24gaW5kZXggb3V0IG9mIGJvdW5kcy4KLSAgICBib29sIGVuc3Vy
ZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4LCBJbWFnZUZyYW1lQ2FjaGluZyA9IENhY2hlTWV0
YWRhdGFBbmRGcmFtZSk7CisgICAgYm9vbCBlbnN1cmVGcmFtZUlzQ2FjaGVkKHNpemVfdCBpbmRl
eCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgPSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0
YWRhdGFBbmRJbWFnZSk7CiAKICAgICAvLyBDYWxsZWQgdG8gaW52YWxpZGF0ZSBjYWNoZWQgZGF0
YS4gV2hlbiB8ZGVzdHJveUFsbHwgaXMgdHJ1ZSwgd2Ugd2lwZSBvdXQKICAgICAvLyB0aGUgZW50
aXJlIGZyYW1lIGJ1ZmZlciBjYWNoZSBhbmQgdGVsbCB0aGUgaW1hZ2Ugc291cmNlIHRvIGRlc3Ry
b3kKQEAgLTI5Miw3ICsyMzcsNyBAQCBwcml2YXRlOgogICAgIG11dGFibGUgSW50U2l6ZSBtX3Np
emVSZXNwZWN0aW5nT3JpZW50YXRpb247CiAKICAgICBzaXplX3QgbV9jdXJyZW50RnJhbWUgeyAw
IH07IC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBmcmFtZSBvZiBhbmltYXRpb24uCi0gICAg
VmVjdG9yPEZyYW1lRGF0YSwgMT4gbV9mcmFtZXM7IC8vIEFuIGFycmF5IG9mIHRoZSBjYWNoZWQg
ZnJhbWVzIG9mIHRoZSBhbmltYXRpb24uIFdlIGhhdmUgdG8gcmVmIGZyYW1lcyB0byBwaW4gdGhl
bSBpbiB0aGUgY2FjaGUuCisgICAgVmVjdG9yPEltYWdlRnJhbWVEYXRhLCAxPiBtX2ZyYW1lczsg
Ly8gQW4gYXJyYXkgb2YgdGhlIGNhY2hlZCBmcmFtZXMgb2YgdGhlIGFuaW1hdGlvbi4gV2UgaGF2
ZSB0byByZWYgZnJhbWVzIHRvIHBpbiB0aGVtIGluIHRoZSBjYWNoZS4KIAogICAgIHN0ZDo6dW5p
cXVlX3B0cjxUaW1lcj4gbV9mcmFtZVRpbWVyOwogICAgIGludCBtX3JlcGV0aXRpb25Db3VudCB7
IGNBbmltYXRpb25Ob25lIH07IC8vIEhvdyBtYW55IHRvdGFsIGFuaW1hdGlvbiBsb29wcyB3ZSBz
aG91bGQgZG8uIFRoaXMgd2lsbCBiZSBjQW5pbWF0aW9uTm9uZSBpZiB0aGlzIGltYWdlIHR5cGUg
aXMgaW5jYXBhYmxlIG9mIGFuaW1hdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwUGl4ZWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTY4MWU0YTZjNGNjMDlmZTk0YmRk
ODE0NWQxMDRiZjBiZmQyZTlmMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oCkBAIC0wLDAgKzEsMTczIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6
ZS5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQml0bWFwUGl4ZWxzIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gY3JlYXRlKGNvbnN0
IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPEJpdG1hcFBpeGVscz4oc2l6ZSwgcHJlbXVsdGlwbHlBbHBo
YSk7CisgICAgfQorCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxCaXRtYXBQaXhlbHM+IGNy
ZWF0ZShjb25zdCBCaXRtYXBQaXhlbHMmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8Qml0bWFwUGl4ZWxzPihvdGhlcik7CisgICAgfQorCisgICAgQml0bWFw
UGl4ZWxzKGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSA9IHRydWUp
CisgICAgICAgIDogbV9wcmVtdWx0aXBseUFscGhhKHByZW11bHRpcGx5QWxwaGEpCisgICAgewor
ICAgICAgICBBU1NFUlQoIXNpemUuaXNFbXB0eSgpKTsKKyAgICAgICAgc2V0U2l6ZShzaXplKTsK
KyAgICB9CisKKyAgICBCaXRtYXBQaXhlbHMoY29uc3QgQml0bWFwUGl4ZWxzJiBvdGhlcikKKyAg
ICB7CisgICAgICAgIGlmICh0aGlzID09ICZvdGhlcikKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCisgICAgICAgIG1fYmFja2luZ1N0b3JlID0gb3RoZXIubV9iYWNraW5nU3RvcmU7Cisg
ICAgICAgIG1fcGl4ZWxzID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOworICAgICAgICBtX3NpemUg
PSBvdGhlci5tX3NpemU7CisgICAgICAgIG1fcHJlbXVsdGlwbHlBbHBoYSA9IG90aGVyLm1fcHJl
bXVsdGlwbHlBbHBoYTsKKyAgICB9CisKKyAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBt
X3NpemUud2lkdGgoKTsgfQorICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUu
aGVpZ2h0KCk7IH0KKworICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlKCkgY29uc3Q7CisKKyAgICBi
b29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAgIGlmICghbV9i
YWNraW5nU3RvcmUudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUuYXJlYSgpKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIG1fYmFja2luZ1N0b3JlLnJlc2l6ZShz
aXplLmFyZWEoKSk7CisgICAgICAgIG1fcGl4ZWxzID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOwor
ICAgICAgICBtX3NpemUgPSBzaXplOworICAgICAgICBjbGVhcigpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBSR0JBMzIqIGF0KGludCB4LCBpbnQgeSkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3BpeGVscyArIHkgKiBtX3NpemUud2lkdGgoKSArIHg7CisgICAg
fQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtZW1zZXQobV9waXhlbHMsIDAs
IG1fc2l6ZS5hcmVhKCkgKiBzaXplb2YoUkdCQTMyKSk7CisgICAgfQorCisgICAgdm9pZCBjbGVh
clJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIGlmIChyZWN0LmlzRW1w
dHkoKSB8fCBpbkJvdW5kcyhyZWN0KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgICAgIHNpemVfdCByZWN0V2lkdGhJbkJ5dGVzID0gcmVjdC53aWR0aCgpICogc2l6ZW9mKFJH
QkEzMik7CisgICAgICAgIFJHQkEzMiogc3RhcnQgPSBhdChyZWN0LngoKSwgcmVjdC55KCkpOwor
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QuaGVpZ2h0KCk7ICsraSkgeworICAgICAg
ICAgICAgbWVtc2V0KHN0YXJ0LCAwLCByZWN0V2lkdGhJbkJ5dGVzKTsKKyAgICAgICAgICAgIHN0
YXJ0ICs9IG1fc2l6ZS53aWR0aCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCByZXBl
YXRGaXJzdFJvdyhjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHJlY3Qu
aXNFbXB0eSgpIHx8IGluQm91bmRzKHJlY3QpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAKKyAgICAgICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkgKiBzaXpl
b2YoUkdCQTMyKTsKKyAgICAgICAgUkdCQTMyKiBzcmMgPSBhdChyZWN0LngoKSwgcmVjdC55KCkp
OworICAgICAgICBSR0JBMzIqIGRlc3QgPSBzcmMgKyBtX3NpemUud2lkdGgoKTsKKyAgICAgICAg
Zm9yIChpbnQgaSA9IDE7IGkgPCByZWN0LmhlaWdodCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1l
bWNweShkZXN0LCBzcmMsIHJlY3RXaWR0aEluQnl0ZXMpOworICAgICAgICAgICAgZGVzdCArPSBt
X3NpemUud2lkdGgoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgc2V0UkdCQShpbnQg
eCwgaW50IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEp
CisgICAgeworICAgICAgICBzZXRSR0JBKGF0KHgsIHkpLCByLCBnLCBiLCBhKTsKKyAgICB9CisK
KyAgICB2b2lkIHNldFJHQkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1
bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5
QWxwaGEgfHwgYSA+PSAyNTUpCisgICAgICAgICAgICAqZGVzdCA9IG1ha2VSR0JBKHIsIGcsIGIs
IGEpOworICAgICAgICBlbHNlIGlmICghYSkKKyAgICAgICAgICAgICpkZXN0ID0gMDsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgKmRlc3QgPSBtYWtlUHJlbXVsdGlwbGllZFJHQkEociwgZywg
YiwgYSk7CisgICAgfQorCisgICAgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVk
IHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAgeworICAgICAgICBp
ZiAoIWEpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoYSA+PSAy
NTUgfHwgIWFscGhhQ2hhbm5lbCgqZGVzdCkpIHsKKyAgICAgICAgICAgIHNldFJHQkEoZGVzdCwg
ciwgZywgYiwgYSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKQorICAgICAgICAgICAgKmRlc3QgPSBtYWtl
UHJlbXVsdGlwbGllZFJHQkEocmVkQ2hhbm5lbCgqZGVzdCksIGdyZWVuQ2hhbm5lbCgqZGVzdCks
IGJsdWVDaGFubmVsKCpkZXN0KSwgYWxwaGFDaGFubmVsKCpkZXN0KSk7CisgICAgICAgIAorICAg
ICAgICBSR0JBMzIgc3JjID0gbWFrZVJHQkEociwgZywgYiwgYSk7CisgICAgICAgICpkZXN0ID0g
Q29sb3IoKmRlc3QpLmJsZW5kKHNyYykucmdiKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIW1f
cHJlbXVsdGlwbHlBbHBoYSkKKyAgICAgICAgICAgICpkZXN0ID0gbWFrZVVuUHJlbXVsdGlwbGll
ZFJHQkEocmVkQ2hhbm5lbCgqZGVzdCksIGdyZWVuQ2hhbm5lbCgqZGVzdCksIGJsdWVDaGFubmVs
KCpkZXN0KSwgYWxwaGFDaGFubmVsKCpkZXN0KSk7CisgICAgfQorCisgICAgYm9vbCBpbkJvdW5k
cyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSW50
UmVjdChJbnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHBvaW50KTsKKyAgICB9CisKKyAgICBi
b29sIGluQm91bmRzKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHJlY3QpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBWZWN0b3I8UkdCQTMyPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBSR0JB
MzIqIG1fcGl4ZWxzIHsgbnVsbHB0ciB9OworICAgIEludFNpemUgbV9zaXplOworICAgIGJvb2wg
bV9wcmVtdWx0aXBseUFscGhhIHsgdHJ1ZSB9OworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCmluZGV4IDRlMjVhYTZmZDc0ZDFlNDZjNTQxNjE0OThi
YzE3MmJmNjAwODc1ZDEuLjQzOWY1YTYzYzdiZWJlNTYwNDJiMjRlN2Q3MmVjY2VjZjM2YzQwYzkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKQEAgLTQ5LDYg
KzQ5LDQwIEBAIGNvbnN0IFJHQkEzMiBDb2xvcjo6dHJhbnNwYXJlbnQ7CiBzdGF0aWMgY29uc3Qg
UkdCQTMyIGxpZ2h0ZW5lZEJsYWNrID0gMHhGRjU0NTQ1NDsKIHN0YXRpYyBjb25zdCBSR0JBMzIg
ZGFya2VuZWRXaGl0ZSA9IDB4RkZBQkFCQUI7CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbXVs
dGlwbHkyNTUodW5zaWduZWQgYykKK3sKKyAgICAvLyBjICogMjU1CisgICAgLy8gICA9IGMgKiAo
MjU2IC0gMSkKKyAgICAvLyAgID0gYyAqIDI1NiAtIGMKKyAgICByZXR1cm4gKGMgPDwgOCkgLSBj
OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRpdmlkZTI1NSh1bnNpZ25lZCBjKQorewor
ICAgIC8vIGMgLyAyNTUKKyAgICAvLyAgID0gYyAvIDI1NiAqICgxICsgMSAvIDI1NSkKKyAgICAv
LyAgID0gKGMgKyBjIC8gMjU1KSAvIDI1NgorICAgIC8vICAgPSAoYyArIChjICsgYyAvIDI1NSkg
LyAyNTYpIC8gMjU2CisgICAgLy8gICA9IChjICsgYyAvIDI1NiArIGMgLyAoMjU1IHggMjU2KSkg
LyAyNTYKKyAgICAvLyAgfj0gKGMgKyBjIC8gMjU2ICsgMSkgLyAyNTYKKyAgICByZXR1cm4gKGMg
KyAoYyA+PiA4KSArIDEpID4+IDg7Cit9CisgICAgCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRp
dmlkZUNlaWwodW5zaWduZWQgYywgdW5zaWduZWQgZCkKK3sKKyAgICByZXR1cm4gKGMgKyBkIC0g
MSkgLyBkOworfQorICAgIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBwcmVtdWx0aXBsaWVkQ2hh
bm5lbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBhKQoreworICAgIHJldHVybiBkaXZpZGUyNTUoYyAq
IGEpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHVucHJlbXVsdGlwbGllZENoYW5uZWwo
dW5zaWduZWQgYywgdW5zaWduZWQgYSkKK3sKKyAgICByZXR1cm4gZGl2aWRlQ2VpbChtdWx0aXBs
eTI1NShjKSwgYSk7Cit9CisgICAgCiBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBi
KQogewogICAgIHJldHVybiAweEZGMDAwMDAwIHwgc3RkOjptYXgoMCwgc3RkOjptaW4ociwgMjU1
KSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAyNTUpKSA8PCA4IHwgc3RkOjptYXgo
MCwgc3RkOjptaW4oYiwgMjU1KSk7CkBAIC01OSw2ICs5MywxNiBAQCBSR0JBMzIgbWFrZVJHQkEo
aW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCiAgICAgcmV0dXJuIHN0ZDo6bWF4KDAsIHN0ZDo6
bWluKGEsIDI1NSkpIDw8IDI0IHwgc3RkOjptYXgoMCwgc3RkOjptaW4ociwgMjU1KSkgPDwgMTYg
fCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAyNTUpKSA8PCA4IHwgc3RkOjptYXgoMCwgc3RkOjpt
aW4oYiwgMjU1KSk7CiB9CiAKK1JHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGlu
dCBnLCBpbnQgYiwgaW50IGEpCit7CisgICAgcmV0dXJuIG1ha2VSR0JBKHByZW11bHRpcGxpZWRD
aGFubmVsKHIsIGEpLCBwcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBhKSwgcHJlbXVsdGlwbGllZENo
YW5uZWwoYiwgYSksIGEpOworfQorICAgIAorUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRSR0JB
KGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQoreworICAgIHJldHVybiBtYWtlUkdCQSh1bnBy
ZW11bHRpcGxpZWRDaGFubmVsKHIsIGEpLCB1bnByZW11bHRpcGxpZWRDaGFubmVsKGcsIGEpLCB1
bnByZW11bHRpcGxpZWRDaGFubmVsKGIsIGEpLCBhKTsKK30KKyAgICAKIHN0YXRpYyBpbnQgY29s
b3JGbG9hdFRvUkdCQUJ5dGUoZmxvYXQgZikKIHsKICAgICAvLyBXZSB1c2UgbHJvdW5kZiBhbmQg
MjU1IGluc3RlYWQgb2YgbmV4dGFmdGVyZigyNTYsIDApIHRvIG1hdGNoIENHJ3Mgcm91bmRpbmcK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCmluZGV4IGRkMjYyNzBiYjQ2
NjBiMzNhZTA3MGU4Yzk0NDUyMGQ3Mjg0NTRiOGEuLmE1NDUzMmM3NzU1YTdjODc2OTM2MjQwY2Fl
NGVjMzdhNGRhMGQwNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
aApAQCAtNTQsNiArNTQsOCBAQCB0eXBlZGVmIHVuc2lnbmVkIFJHQkEzMjsgLy8gRGVwcmVjYXRl
ZDogVHlwZSBmb3IgYW4gUkdCQSBxdWFkcnVwbGV0LiBVc2UgUkdCQSBjbAogCiBXRUJDT1JFX0VY
UE9SVCBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBiKTsKIFdFQkNPUkVfRVhQT1JU
IFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7CitXRUJDT1JFX0VY
UE9SVCBSR0JBMzIgbWFrZVByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGlu
dCBhKTsKK1dFQkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQg
ciwgaW50IGcsIGludCBiLCBpbnQgYSk7CiAKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBjb2xvcldp
dGhPdmVycmlkZUFscGhhKFJHQkEzMiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSk7CiBXRUJD
T1JFX0VYUE9SVCBSR0JBMzIgY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIE9w
dGlvbmFsPGZsb2F0PiBvdmVycmlkZUFscGhhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZS5oCmluZGV4IDdhMjk5OTJmNzcxODhlMDM4MjhkODBhNjViOGJlMmNkOGRjMmRl
NzYuLjhlN2I1MmIxZjRmMzFjNzRhM2NiMmExMzIxNWRhNzdhMmIxOGMwN2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaApAQCAtMTM3LDggKzEzNywxMSBAQCBwdWJs
aWM6CiAKICAgICBlbnVtIFRpbGVSdWxlIHsgU3RyZXRjaFRpbGUsIFJvdW5kVGlsZSwgU3BhY2VU
aWxlLCBSZXBlYXRUaWxlIH07CiAKKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUlt
YWdlKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwgTmF0aXZlSW1hZ2VQdHIgbmF0
aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50U2l6ZSYpIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICB2
aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgeyByZXR1
cm4gbnVsbHB0cjsgfQogICAgIHZpcnR1YWwgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkZv
ckN1cnJlbnRGcmFtZSgpIHsgcmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsgfQorICAgIHZpcnR1
YWwgVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBmcmFtZXNOYXRpdmVJbWFnZXMoKSB7IHJldHVybiB7
IH07IH0KIAogICAgIC8vIEFjY2Vzc29ycyBmb3IgbmF0aXZlIGltYWdlIGZvcm1hdHMuCiAKQEAg
LTE1MCwxMiArMTUzLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgQ0ZEYXRhUmVmIGdldFRJRkZS
ZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCi0jaWYgVVNFKENH
KQotICAgIHZpcnR1YWwgQ0dJbWFnZVJlZiBnZXRDR0ltYWdlUmVmKCkgeyByZXR1cm4gbnVsbHB0
cjsgfQotICAgIHZpcnR1YWwgQ0dJbWFnZVJlZiBnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUoY29u
c3QgSW50U2l6ZSYpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIFJldGFpblB0cjxD
RkFycmF5UmVmPiBnZXRDR0ltYWdlQXJyYXkoKSB7IHJldHVybiBudWxscHRyOyB9Ci0jZW5kaWYK
LQogI2lmIFBMQVRGT1JNKFdJTikKICAgICB2aXJ0dWFsIGJvb2wgZ2V0SEJJVE1BUChIQklUTUFQ
KSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBnZXRIQklUTUFQT2ZTaXplKEhC
SVRNQVAsIGNvbnN0IEludFNpemUqKSB7IHJldHVybiBmYWxzZTsgfQpAQCAtMTc5LDYgKzE3Niw4
IEBAIHB1YmxpYzoKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgdmlydHVhbCBib29sIG5vdFNv
bGlkQ29sb3IoKSB7IHJldHVybiB0cnVlOyB9CiAjZW5kaWYKKyAgICAKKyAgICB2aXJ0dWFsIHZv
aWQgbGF5b3V0SWZOZWVkZWQoKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRleHRTdHJl
YW0mKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VGcmFtZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VGcmFtZURhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmZDIwY2Y4ZTYxZjRiMWExZmUwOGViMzMy
YjcxNjU3ZjAxNDhjMTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5jcHAKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkltYWdlRnJhbWVEYXRhLmgiCisKKyNpbmNsdWRlICJDb2xvci5oIgorCisj
aWYgVVNFKENHKQorI2luY2x1ZGUgIkltYWdlRGVjb2RlckNHLmgiCisjZWxzZQorI2luY2x1ZGUg
IkltYWdlRGVjb2Rlci5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VGcmFtZURhdGE6OkltYWdlRnJhbWVEYXRhKCkK
K3sKK30KKworSW1hZ2VGcmFtZURhdGE6OkltYWdlRnJhbWVEYXRhKE5hdGl2ZUltYWdlUHRyJiYg
aW1hZ2UpCisgICAgOiBtX3N0YXR1cyhEZWNvZGluZ1N0YXR1czo6Q29tcGxldGUpCisgICAgLCBt
X2ltYWdlKFdURk1vdmUoaW1hZ2UpKQoreworICAgIG1fc2l6ZSA9IFBsYXRmb3JtSW1hZ2UobV9p
bWFnZSkuc2l6ZSgpOworICAgIG1faGFzQWxwaGEgPSBQbGF0Zm9ybUltYWdlKG1faW1hZ2UpLmhh
c0FscGhhKCk7Cit9CisKK0ltYWdlRnJhbWVEYXRhOjpJbWFnZUZyYW1lRGF0YShJbWFnZURlY29k
ZXImIGRlY29kZXIsIHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xl
dmVsLCBDYWNoaW5nIGZyYW1lQ2FjaGluZykKK3sKKyAgICBBU1NFUlQoZnJhbWVDYWNoaW5nID09
IENhY2hpbmc6Ok1ldGFkYXRhIHx8IGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YUFu
ZEltYWdlKTsKKyAgICAKKyAgICBpZiAoZnJhbWVDYWNoaW5nID09IENhY2hpbmc6OkltYWdlIHx8
IGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YUFuZEltYWdlKSB7CisgICAgICAgIG1f
aW1hZ2UgPSBkZWNvZGVyLmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KGluZGV4LCBzdWJzYW1wbGlu
Z0xldmVsKTsKKyAgICAgICAgbV9zdWJzYW1wbGluZ0xldmVsID0gc3Vic2FtcGxpbmdMZXZlbDsK
KyAgICB9CisgICAgCisgICAgaWYgKGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YSB8
fCBmcmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSkgeworICAgICAgICBt
X29yaWVudGF0aW9uID0gZGVjb2Rlci5vcmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOworICAgICAg
ICBtX3N0YXR1cyA9IGRlY29kZXIuZnJhbWVJc0NvbXBsZXRlQXRJbmRleChpbmRleCkgPyBEZWNv
ZGluZ1N0YXR1czo6Q29tcGxldGUgOiBEZWNvZGluZ1N0YXR1czo6UGFydGlhbDsKKyAgICAgICAg
CisgICAgICAgIGlmIChkZWNvZGVyLnJlcGV0aXRpb25Db3VudCgpICE9IGNBbmltYXRpb25Ob25l
KQorICAgICAgICAgICAgbV9kdXJhdGlvbiA9IGRlY29kZXIuZnJhbWVEdXJhdGlvbkF0SW5kZXgo
aW5kZXgpOworICAgICAgICAKKyAgICAgICAgbV9oYXNBbHBoYSA9IGRlY29kZXIuZnJhbWVIYXNB
bHBoYUF0SW5kZXgoaW5kZXgpOworICAgICAgICBtX3NpemUgPSBkZWNvZGVyLmZyYW1lU2l6ZUF0
SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOworICAgIH0KK30KKworSW1hZ2VGcmFtZURh
dGE6On5JbWFnZUZyYW1lRGF0YSgpCit7CisgICAgY2xlYXJTdWJJbWFnZXMoKTsKK30KKyAgICAK
K0ltYWdlRnJhbWVEYXRhJiBJbWFnZUZyYW1lRGF0YTo6b3BlcmF0b3I9KGNvbnN0IEltYWdlRnJh
bWVEYXRhJiBvdGhlcikKK3sKKyAgICBpZiAodGhpcyA9PSAmb3RoZXIpCisgICAgICAgIHJldHVy
biAqdGhpczsKKworICAgIG1fc3RhdHVzID0gb3RoZXIubV9zdGF0dXM7CisgICAgbV9zaXplID0g
b3RoZXIubV9zaXplOworICAgIG1faW1hZ2UgPSBvdGhlci5tX2ltYWdlOworICAgIAorICAgIG1f
cGl4ZWxzID0gb3RoZXIucGl4ZWxzKCkgPyBCaXRtYXBQaXhlbHM6OmNyZWF0ZSgqb3RoZXIucGl4
ZWxzKCkpIDogbnVsbHB0cjsKKyAgICAKKyAgICBtX29yaWVudGF0aW9uID0gb3RoZXIubV9vcmll
bnRhdGlvbjsKKyAgICBtX3N1YnNhbXBsaW5nTGV2ZWwgPSBvdGhlci5tX3N1YnNhbXBsaW5nTGV2
ZWw7CisgICAgbV9kdXJhdGlvbiA9IG90aGVyLm1fZHVyYXRpb247CisgICAgbV9oYXNBbHBoYSA9
IG90aGVyLm1faGFzQWxwaGE7CisgICAgcmV0dXJuICp0aGlzOworfQorCit2b2lkIEltYWdlRnJh
bWVEYXRhOjpjbGVhclN1YkltYWdlcygpCit7CisgICAgaWYgKCFtX2ltYWdlKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5jbGVhclN1YkltYWdlcygp
OworfQorCit1bnNpZ25lZCBJbWFnZUZyYW1lRGF0YTo6Y2xlYXIoQ2FjaGluZyBmcmFtZUNhY2hp
bmcpCit7CisgICAgQVNTRVJUKGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpFbXB0eSB8fCBmcmFt
ZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGEpOworICAgIAorICAgIHVuc2lnbmVkIGZyYW1l
Qnl0ZXMgPSB0aGlzLT5mcmFtZUJ5dGVzKCk7CisgICAgCisgICAgY2xlYXJTdWJJbWFnZXMoKTsK
KyAgICAKKyAgICBpZiAoZnJhbWVDYWNoaW5nID09IENhY2hpbmc6OkVtcHR5KQorICAgICAgICAq
dGhpcyA9IEltYWdlRnJhbWVEYXRhKCk7CisgICAgZWxzZQorICAgICAgICBtX2ltYWdlID0gbnVs
bHB0cjsKKyAgICAKKyAgICByZXR1cm4gZnJhbWVCeXRlczsKK30KKworQ29sb3IgSW1hZ2VGcmFt
ZURhdGE6OnNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKCFoYXNJbWFn
ZSgpIHx8IG1fc2l6ZSAhPSBJbnRTaXplKDEsIDEpKQorICAgICAgICByZXR1cm4gQ29sb3IoKTsK
KyAgICAKKyAgICByZXR1cm4gUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5zaW5nbGVQaXhlbFNvbGlk
Q29sb3IoKTsKK30KKworYm9vbCBJbWFnZUZyYW1lRGF0YTo6aXNBbG1vc3RTb2xpZENvbG9yKCkg
Y29uc3QKK3sKKyAgICBpZiAoIWhhc0ltYWdlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICByZXR1cm4gUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5pc0FsbW9zdFNvbGlkQ29sb3Io
KTsKK30KKyAgICAKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlRnJhbWVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bWFnZUZyYW1lRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjliMTRhZGFlYTU5ZTk5N2VmZTY0ODgxN2I4YWE5
ZGM5OGVlZWRmN2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9JbWFnZUZyYW1lRGF0YS5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJCaXRtYXBQaXhlbHMuaCIKKyNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCisjaW5jbHVk
ZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgQ29sb3I7CitjbGFzcyBJbWFnZURlY29kZXI7CisKKy8vIFN1YnNh
bXBsaW5nTGV2ZWwuIDAgaXMgbm8gc3Vic2FtcGxpbmcsIDEgaXMgaGFsZiBkaW1lbnNpb25zIG9u
IGVhY2ggYXhpcyBldGMuCit1c2luZyBTdWJzYW1wbGluZ0xldmVsID0gdWludDhfdDsKKworZW51
bSA6IFN1YnNhbXBsaW5nTGV2ZWwgeworICAgIE1pblN1YnNhbXBsaW5nTGV2ZWwgPSAwLAorICAg
IE1heFN1YnNhbXBsaW5nTGV2ZWwgPSAzLAorICAgIERlZmF1bHRTdWJzYW1wbGluZ0xldmVsID0g
TWluU3Vic2FtcGxpbmdMZXZlbAorfTsKKworY2xhc3MgSW1hZ2VGcmFtZURhdGEgeworcHVibGlj
OgorICAgIGVudW0gY2xhc3MgQ2FjaGluZyB7IEVtcHR5LCBNZXRhZGF0YSwgSW1hZ2UsIE1ldGFk
YXRhQW5kSW1hZ2UgfTsKKyAgICBlbnVtIGNsYXNzIERlY29kaW5nU3RhdHVzIHsgRW1wdHksIFBh
cnRpYWwsIENvbXBsZXRlIH07CisgICAgCisgICAgSW1hZ2VGcmFtZURhdGEoKTsKKyAgICBJbWFn
ZUZyYW1lRGF0YShOYXRpdmVJbWFnZVB0ciYmKTsKKyAgICBJbWFnZUZyYW1lRGF0YShJbWFnZURl
Y29kZXImLCBzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgPSBEZWZhdWx0U3Vic2FtcGxp
bmdMZXZlbCwgQ2FjaGluZyA9IENhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOworICAgIEltYWdl
RnJhbWVEYXRhKGNvbnN0IEltYWdlRnJhbWVEYXRhJiBvdGhlcikgeyBvcGVyYXRvcj0ob3RoZXIp
OyB9CisKKyAgICB+SW1hZ2VGcmFtZURhdGEoKTsKKworICAgIEltYWdlRnJhbWVEYXRhJiBvcGVy
YXRvcj0oY29uc3QgSW1hZ2VGcmFtZURhdGEmIG90aGVyKTsKKyAgICAKKyAgICB1bnNpZ25lZCBj
bGVhcihDYWNoaW5nKTsKKyAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdDsK
KyAgICBib29sIGlzQWxtb3N0U29saWRDb2xvcigpIGNvbnN0OworICAgIAorICAgIERlY29kaW5n
U3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CisgICAgYm9vbCBpc0Nv
bXBsZXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXMgPT0gRGVjb2RpbmdTdGF0dXM6OkNvbXBs
ZXRlOyB9CisgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAg
dW5zaWduZWQgZnJhbWVCeXRlcygpIGNvbnN0IHsgcmV0dXJuIGhhc0ltYWdlKCkgPyBtX3NpemUu
YXJlYSgpICogNCA6IDA7IH0KKyAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZSgpIGNvbnN0IHsgcmV0
dXJuIG1faW1hZ2U7IH0KKyAgICBCaXRtYXBQaXhlbHMqIHBpeGVscygpIGNvbnN0IHsgcmV0dXJu
IG1fcGl4ZWxzID8gbV9waXhlbHMuZ2V0KCkgOiBudWxscHRyOyB9CisgICAgCisgICAgSW1hZ2VP
cmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZW50YXRpb247IH0K
KyAgICBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwoKSBjb25zdCB7IHJldHVybiBt
X3N1YnNhbXBsaW5nTGV2ZWw7IH0KKyAgICBmbG9hdCBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZHVyYXRpb247IH0KKyAgICAKKyAgICBib29sIGhhc0FscGhhKCkgY29uc3QgeyByZXR1cm4g
bV9oYXNBbHBoYTsgfQorICAgIGJvb2wgaGFzSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdl
OyB9CisgICAgYm9vbCBoYXNNZXRhZGF0YSgpIGNvbnN0IHsgcmV0dXJuICFtX3NpemUuaXNFbXB0
eSgpOyB9CisgICAgYm9vbCBoYXNQaXhlbHMoKSBjb25zdCB7IHJldHVybiBtX3BpeGVscyAhPSBu
dWxscHRyOyB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgY2xlYXJTdWJJbWFnZXMoKTsKKyAg
ICAKKyAgICBEZWNvZGluZ1N0YXR1cyBtX3N0YXR1cyB7IERlY29kaW5nU3RhdHVzOjpFbXB0eSB9
OworICAgIEludFNpemUgbV9zaXplOworICAgIE5hdGl2ZUltYWdlUHRyIG1faW1hZ2U7CisgICAg
c3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gbV9waXhlbHM7CisgICAgCisgICAgSW1hZ2VP
cmllbnRhdGlvbiBtX29yaWVudGF0aW9uIHsgRGVmYXVsdEltYWdlT3JpZW50YXRpb24gfTsKKyAg
ICBTdWJzYW1wbGluZ0xldmVsIG1fc3Vic2FtcGxpbmdMZXZlbCB7IDAgfTsKKyAgICBmbG9hdCBt
X2R1cmF0aW9uIHsgMCB9OworICAgIGJvb2wgbV9oYXNBbHBoYSB7IHRydWUgfTsKK307CisgICAg
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNv
dXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5j
cHAKaW5kZXggZGRkOGE1NWJhMDkwNmM1ODY2YTE5MmNmOGU0MTRlYTcwN2I3MjhhYy4uODJmNmUy
ZDZlNDU0MzNkYTFhN2Q1NmIzNzBkZmE2MWE0YzQxOTEzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcApAQCAtMjI0LDYgKzIyNCwxMSBA
QCBOYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6
ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldgogICAgIHJldHVybiBpbml0aWFsaXplZCgpID8gbV9k
ZWNvZGVyLT5jcmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCkg
OiBudWxscHRyOwogfQogCitJbWFnZUZyYW1lRGF0YSBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJhbWVE
YXRhQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZl
bCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgY2FjaGluZykKK3sKKyAgICByZXR1cm4gaW5pdGlh
bGl6ZWQoKSA/IEltYWdlRnJhbWVEYXRhKCptX2RlY29kZXIsIGluZGV4LCBzdWJzYW1wbGluZ0xl
dmVsLCBjYWNoaW5nKSA6IEltYWdlRnJhbWVEYXRhKCk7Cit9CisgICAgCiB2b2lkIEltYWdlU291
cmNlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAogewogICAgIGlmIChtX2FsbG93U3Vic2Ft
cGxpbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
aAppbmRleCA2MDM1NzM5YjdlOGIwOTZkYzhkZmU5YzUzMGE0MmM2ZjI5MWJkYTAwLi5hNDBjN2Nl
OTMwN2NkYWRmMDc5YWI3MDFhODI3OTliNjkwNTI5ZDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKQEAgLTI3LDYgKzI3LDcgQEAKICNpZm5k
ZWYgSW1hZ2VTb3VyY2VfaAogI2RlZmluZSBJbWFnZVNvdXJjZV9oCiAKKyNpbmNsdWRlICJJbWFn
ZUZyYW1lRGF0YS5oIgogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJJ
bnRQb2ludC5oIgogI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCkBAIC02Myw5ICs2NCw2IEBA
IGNvbnN0IGludCBjQW5pbWF0aW9uTG9vcE9uY2UgPSAwOwogY29uc3QgaW50IGNBbmltYXRpb25M
b29wSW5maW5pdGUgPSAtMTsKIGNvbnN0IGludCBjQW5pbWF0aW9uTm9uZSA9IC0yOwogCi0vLyBT
dWJzYW1wbGluZ0xldmVsLiAwIGlzIG5vIHN1YnNhbXBsaW5nLCAxIGlzIGhhbGYgZGltZW5zaW9u
cyBvbiBlYWNoIGF4aXMgZXRjLgotdHlwZWRlZiBzaG9ydCBTdWJzYW1wbGluZ0xldmVsOwotCiBj
bGFzcyBJbWFnZVNvdXJjZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSW1hZ2VTb3VyY2Up
OwogICAgIGZyaWVuZCBjbGFzcyBCaXRtYXBJbWFnZTsKQEAgLTEzMiwxOCArMTMwLDE5IEBAIHB1
YmxpYzoKICAgICBib29sIGFsbG93U3Vic2FtcGxpbmdPZkZyYW1lQXRJbmRleChzaXplX3QpIGNv
bnN0OwogICAgIAogICAgIC8vIFNpemUgb2Ygb3B0aW9uYWxseSBzdWJzYW1wbGVkIGZyYW1lLgot
ICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSAw
LCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0gPSBEb05vdFJlc3BlY3RJbWFnZU9yaWVudGF0
aW9uKSBjb25zdDsKKyAgICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1w
bGluZ0xldmVsID0gRGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwsIFJlc3BlY3RJbWFnZU9yaWVudGF0
aW9uRW51bSA9IERvTm90UmVzcGVjdEltYWdlT3JpZW50YXRpb24pIGNvbnN0OwogICAgIAogICAg
IC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBkZWNvZGVkIGZyYW1lLiBJZiB0
aGUgZnJhbWUgaXMgbm90IHlldAogICAgIC8vIGRlY29kZWQgdGhlbiByZXR1cm4gMC4KLSAgICB1
bnNpZ25lZCBmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSAwKSBj
b25zdDsKKyAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5n
TGV2ZWwgPSBEZWZhdWx0U3Vic2FtcGxpbmdMZXZlbCkgY29uc3Q7CiAgICAgCiAgICAgZmxvYXQg
ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90KTsKICAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVu
dGF0aW9uQXRJbmRleChzaXplX3QpIGNvbnN0OyAvLyBFWElGIGltYWdlIG9yaWVudGF0aW9uCiAg
ICAgCiAgICAgLy8gQ2FsbGVycyBzaG91bGQgbm90IGNhbGwgdGhpcyBhZnRlciBjYWxsaW5nIGNs
ZWFyKCkgd2l0aCBhIGhpZ2hlciBpbmRleDsKICAgICAvLyBzZWUgY29tbWVudHMgb24gY2xlYXIo
KSBhYm92ZS4KLSAgICBOYXRpdmVJbWFnZVB0ciBjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXpl
X3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSAwKTsKKyAgICBOYXRpdmVJbWFnZVB0ciBjcmVhdGVGcmFt
ZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBEZWZhdWx0U3Vic2FtcGxp
bmdMZXZlbCk7CisgICAgSW1hZ2VGcmFtZURhdGEgY3JlYXRlRnJhbWVEYXRhQXRJbmRleChzaXpl
X3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBEZWZhdWx0U3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFt
ZURhdGE6OkNhY2hpbmcgPSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGFBbmRJbWFn
ZSk7CiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVf
dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9y
bUltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdl
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYWI3YWVhNDg5ZjNlYjJhODI4NzcxYzIxMDNlOGQ0ZDBiZTE3YmU1ZAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRm
b3JtSW1hZ2UuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFw
cGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiR3JhcGhpY3NUeXBl
cy5oIgorI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFn
ZVB0ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENvbG9yOworY2xhc3MgRmxv
YXRSZWN0OworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKKworY2xhc3Mg
UGxhdGZvcm1JbWFnZSB7CitwdWJsaWM6CisgICAgUGxhdGZvcm1JbWFnZShjb25zdCBOYXRpdmVJ
bWFnZVB0ciYgaW1hZ2UpCisgICAgICAgIDogbV9pbWFnZShpbWFnZSkKKyAgICB7CisgICAgfQor
CisgICAgYm9vbCBpc05pbCgpIGNvbnN0IHsgcmV0dXJuICFtX2ltYWdlOyB9CisgICAgdm9pZCBj
bGVhclN1YkltYWdlcygpOworCisgICAgSW50U2l6ZSBzaXplKCkgY29uc3Q7CisgICAgYm9vbCBo
YXNBbHBoYSgpIGNvbnN0OworICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0
OworICAgIGJvb2wgaXNBbG1vc3RTb2xpZENvbG9yKCkgY29uc3Q7CisgICAgdm9pZCBkcmF3KEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3IsIEJs
ZW5kTW9kZSwgY29uc3QgSW1hZ2VPcmllbnRhdGlvbiYpIGNvbnN0OworCisgICAgc3RhdGljIGZs
b2F0IHN1YnNhbXBsaW5nU2NhbGUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiBk
ZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KTsKKworcHJpdmF0ZToKKyNpZiBVU0Uo
Q0cpCisgICAgQ0dJbWFnZVJlZiBjZ0ltYWdlUmVmKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZSA/
IG1faW1hZ2UuZ2V0KCkgOiBudWxscHRyOyB9CisjZW5kaWYKKyAgICBOYXRpdmVJbWFnZVB0ciBt
X2ltYWdlOworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZP
YmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCmluZGV4IGY0YzE0NTdi
YmIyNTU3NTRmMDBhMDYyNWVlODNlMDRkYTdjNmVmY2YuLmQ1MjBmNWQ1ODVhYzYwZGJhZWUyNTVl
MWI4M2MyNGRjNjg3MjEwYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZG
T2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRp
b24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0KQEAgLTIxMiw3
ICsyMTIsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQzo6dXBk
YXRlRGlzcGxheU1vZGUoKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBtX3BhdXNlZEltYWdlID0gaW1hZ2UtPmdldENH
SW1hZ2VSZWYoKTsKKyAgICAgICAgICAgICAgICBtX3BhdXNlZEltYWdlID0gaW1hZ2UtPm5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgICAgICAgICAgICAgaWYgKCFtX3BhdXNlZElt
YWdlKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fZGlzcGxheU1vZGUgPSBQYWludEl0QmxhY2s7
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc3MjJiZWM1M2FiOGEwOGE4ZGE4NTI4YjllMGQ3
YzRkMGNkNDEzNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJv
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KLSAqIENvcHlyaWdo
dCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9yZz4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkJpdG1hcEltYWdlLmgiCi0KLSNpZiBVU0UoQ0FJUk8pCi0KLSNpbmNsdWRlICJDYWlyb1V0
aWxpdGllcy5oIgotI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJQbGF0Zm9y
bUNvbnRleHRDYWlyby5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8Y2Fpcm8uaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgTmF0aXZlSW1hZ2UgewotCi1JbnRT
aXplIHNpemUoY29uc3QgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4mIGltYWdlKQotewotICAgIHJl
dHVybiBjYWlyb1N1cmZhY2VTaXplKGltYWdlLmdldCgpKTsKLX0KLQotYm9vbCBoYXNBbHBoYShj
b25zdCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYgaW1hZ2UpCi17Ci0gICAgcmV0dXJuIGNhaXJv
X3N1cmZhY2VfZ2V0X2NvbnRlbnQoaW1hZ2UuZ2V0KCkpICE9IENBSVJPX0NPTlRFTlRfQ09MT1I7
Ci19Ci0KLUNvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcihjb25zdCBSZWZQdHI8Y2Fpcm9fc3Vy
ZmFjZV90PiYgaW1hZ2UpCi17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICAKLSAgICBpZiAoTmF0
aXZlSW1hZ2U6OnNpemUoaW1hZ2UpICE9IEludFNpemUoMSwgMSkpCi0gICAgICAgIHJldHVybiBD
b2xvcigpOwotCi0gICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5cGUoaW1hZ2UuZ2V0KCkpICE9
IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0KLSAg
ICBSR0JBMzIqIHBpeGVsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8UkdCQTMyKj4oY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFnZS5nZXQoKSkpOwotICAgIHJldHVybiBjb2xvckZyb21Q
cmVtdWx0aXBsaWVkQVJHQigqcGl4ZWwpOwotfQotCi19Ci0KLXZvaWQgQml0bWFwSW1hZ2U6OmRy
YXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3Qg
RmxvYXRSZWN0JiBzcmMsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLAotICAgIEJsZW5kTW9kZSBibGVu
ZE1vZGUsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikKLXsKLSAgICBp
ZiAoIWRzdC53aWR0aCgpIHx8ICFkc3QuaGVpZ2h0KCkgfHwgIXNyYy53aWR0aCgpIHx8ICFzcmMu
aGVpZ2h0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0YXJ0QW5pbWF0aW9uKCk7Ci0KLSAg
ICBhdXRvIHN1cmZhY2UgPSBmcmFtZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0gICAg
aWYgKCFzdXJmYWNlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdl
IHlldC4KLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ29sb3IgY29sb3IgPSBzaW5nbGVQaXhlbFNv
bGlkQ29sb3IoKTsKLSAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGZpbGxXaXRo
U29saWRDb2xvcihjb250ZXh0LCBkc3QsIGNvbG9yLCBvcCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBjb250ZXh0LnNhdmUoKTsKLQotICAgIC8vIFNldCB0aGUgY29tcG9zaXRpbmcg
b3BlcmF0aW9uLgotICAgIGlmIChvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyICYmIGJsZW5kTW9k
ZSA9PSBCbGVuZE1vZGVOb3JtYWwgJiYgIWZyYW1lSGFzQWxwaGFBdEluZGV4KG1fY3VycmVudEZy
YW1lKSkKLSAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlQ29w
eSk7Ci0gICAgZWxzZQotICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCwg
YmxlbmRNb2RlKTsKLQotI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCi0g
ICAgSW50U2l6ZSBzY2FsZWRTaXplID0gY2Fpcm9TdXJmYWNlU2l6ZShzdXJmYWNlLmdldCgpKTsK
LSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gYWRqdXN0U291cmNlUmVjdEZvckRvd25T
YW1wbGluZyhzcmMsIHNjYWxlZFNpemUpOwotI2Vsc2UKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRT
cmNSZWN0KHNyYyk7Ci0jZW5kaWYKLQotICAgIEltYWdlT3JpZW50YXRpb24gZnJhbWVPcmllbnRh
dGlvbihkZXNjcmlwdGlvbi5pbWFnZU9yaWVudGF0aW9uKCkpOwotICAgIGlmIChkZXNjcmlwdGlv
bi5yZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQot
ICAgICAgICBmcmFtZU9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgobV9jdXJy
ZW50RnJhbWUpOwotCi0gICAgRmxvYXRSZWN0IGRzdFJlY3QgPSBkc3Q7Ci0KLSAgICBpZiAoZnJh
bWVPcmllbnRhdGlvbiAhPSBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbikgewotICAgICAgICAvLyBJ
bWFnZU9yaWVudGF0aW9uIGV4cGVjdHMgdGhlIG9yaWdpbiB0byBiZSBhdCAoMCwgMCkuCi0gICAg
ICAgIGNvbnRleHQudHJhbnNsYXRlKGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSk7Ci0gICAgICAg
IGRzdFJlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludCgpKTsKLSAgICAgICAgY29udGV4dC5jb25j
YXRDVE0oZnJhbWVPcmllbnRhdGlvbi50cmFuc2Zvcm1Gcm9tRGVmYXVsdChkc3RSZWN0LnNpemUo
KSkpOwotICAgICAgICBpZiAoZnJhbWVPcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpKSB7
Ci0gICAgICAgICAgICAvLyBUaGUgZGVzdGluYXRpb24gcmVjdGFuZ2xlIHdpbGwgaGF2ZSBpdCdz
IHdpZHRoIGFuZCBoZWlnaHQgYWxyZWFkeSByZXZlcnNlZCBmb3IgdGhlIG9yaWVudGF0aW9uIG9m
Ci0gICAgICAgICAgICAvLyB0aGUgaW1hZ2UsIGFzIGl0IHdhcyBuZWVkZWQgZm9yIHBhZ2UgbGF5
b3V0LCBzbyB3ZSBuZWVkIHRvIHJldmVyc2UgaXQgYmFjayBoZXJlLgotICAgICAgICAgICAgZHN0
UmVjdCA9IEZsb2F0UmVjdChkc3RSZWN0LngoKSwgZHN0UmVjdC55KCksIGRzdFJlY3QuaGVpZ2h0
KCksIGRzdFJlY3Qud2lkdGgoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb250ZXh0LnBs
YXRmb3JtQ29udGV4dCgpLT5kcmF3U3VyZmFjZVRvQ29udGV4dChzdXJmYWNlLmdldCgpLCBkc3RS
ZWN0LCBhZGp1c3RlZFNyY1JlY3QsIGNvbnRleHQpOwotCi0gICAgY29udGV4dC5yZXN0b3JlKCk7
Ci0KLSAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQotICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRp
ZERyYXcodGhpcyk7Ci19Ci0KLWJvb2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0YWRh
dGEpCi17Ci0gICAgaWYgKGNsZWFyTWV0YWRhdGEpCi0gICAgICAgIG1faGF2ZU1ldGFkYXRhID0g
ZmFsc2U7Ci0KLSAgICBpZiAobV9pbWFnZSkgewotICAgICAgICBtX2ltYWdlID0gbnVsbHB0cjsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENBSVJPKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJv
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtSW1h
Z2VDYWlyby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzBhZGFlYzI3MGUzMWIwNTRhZmM1ZjY2ZDQ4Mjg4YWVi
ZjA2MWUzYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAKQEAgLTAsMCArMSwxMTEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2UuaCIKKworI2lmIFVTRShDQUlSTykKKworI2lu
Y2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8u
aCIKKyNpbmNsdWRlIDxjYWlyby5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgUGxh
dGZvcm1JbWFnZTo6Y2xlYXJTdWJJbWFnZXMoKQoreworfQorCitJbnRTaXplIFBsYXRmb3JtSW1h
Z2U6OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBpc05pbCgpID8gSW50U2l6ZSgpIDogY2Fp
cm9TdXJmYWNlU2l6ZShtX2ltYWdlLmdldCgpKTsKK30KKworYm9vbCBQbGF0Zm9ybUltYWdlOjpo
YXNBbHBoYSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzTmlsKCkgfHwgY2Fpcm9fc3VyZmFjZV9n
ZXRfY29udGVudChtX2ltYWdlLmdldCgpKSAhPSBDQUlST19DT05URU5UX0NPTE9SOworfQorCitD
b2xvciBQbGF0Zm9ybUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdAoreworICAg
IGlmIChpc05pbCgpIHx8IHNpemUoKSAhPSBJbnRTaXplKDEsIDEpKQorICAgICAgICByZXR1cm4g
Q29sb3IoKTsKKworICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKG1faW1hZ2UuZ2V0KCkp
ICE9IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkKKyAgICAgICAgcmV0dXJuIENvbG9yKCk7CisK
KyAgICBSR0JBMzIqIHBpeGVsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8UkdCQTMyKj4oY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX2ltYWdlLmdldCgpKSk7CisgICAgcmV0dXJuIGNvbG9y
RnJvbVByZW11bHRpcGxpZWRBUkdCKCpwaXhlbCk7Cit9CisKK2Jvb2wgUGxhdGZvcm1JbWFnZTo6
aXNBbG1vc3RTb2xpZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Zs
b2F0IFBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUoR3JhcGhpY3NDb250ZXh0JiwgY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JikKK3sKKyAgICByZXR1cm4gMTsKK30KKwor
dm9pZCBQbGF0Zm9ybUltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBJbnRT
aXplJiwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBtb2RlLCBjb25zdCBJbWFnZU9y
aWVudGF0aW9uJiBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAgICBjb250ZXh0LnNhdmUoKTsKKyAg
ICAKKyAgICAvLyBTZXQgdGhlIGNvbXBvc2l0aW5nIG9wZXJhdGlvbi4KKyAgICBpZiAob3AgPT0g
Q29tcG9zaXRlU291cmNlT3ZlciAmJiBtb2RlID09IEJsZW5kTW9kZU5vcm1hbCAmJiAhaGFzQWxw
aGEoKSkKKyAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlQ29w
eSk7CisgICAgZWxzZQorICAgICAgICBjb250ZXh0LnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCwg
bW9kZSk7CisgICAgICAgIAorI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcp
CisgICAgSW50U2l6ZSBzY2FsZWRTaXplID0gY2Fpcm9TdXJmYWNlU2l6ZShtX2ltYWdlLmdldCgp
KTsKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gYWRqdXN0U291cmNlUmVjdEZvckRv
d25TYW1wbGluZyhzcmNSZWN0LCBzY2FsZWRTaXplKTsKKyNlbHNlCisgICAgRmxvYXRSZWN0IGFk
anVzdGVkU3JjUmVjdChzcmNSZWN0KTsKKyNlbmRpZgorICAgICAgICAKKyAgICBGbG9hdFJlY3Qg
YWRqdXN0ZWREZXN0UmVjdCA9IGRlc3RSZWN0OworICAgICAgICAKKyAgICBpZiAob3JpZW50YXRp
b24gIT0gRGVmYXVsdEltYWdlT3JpZW50YXRpb24pIHsKKyAgICAgICAgLy8gSW1hZ2VPcmllbnRh
dGlvbiBleHBlY3RzIHRoZSBvcmlnaW4gdG8gYmUgYXQgKDAsIDApLgorICAgICAgICBjb250ZXh0
LnRyYW5zbGF0ZShkZXN0UmVjdC54KCksIGRlc3RSZWN0LnkoKSk7CisgICAgICAgIGFkanVzdGVk
RGVzdFJlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludCgpKTsKKyAgICAgICAgY29udGV4dC5jb25j
YXRDVE0ob3JpZW50YXRpb24udHJhbnNmb3JtRnJvbURlZmF1bHQoYWRqdXN0ZWREZXN0UmVjdC5z
aXplKCkpKTsKKyAgICAgICAgaWYgKG9yaWVudGF0aW9uLnVzZXNXaWR0aEFzSGVpZ2h0KCkpIHsK
KyAgICAgICAgICAgIC8vIFRoZSBkZXN0aW5hdGlvbiByZWN0YW5nbGUgd2lsbCBoYXZlIGl0J3Mg
d2lkdGggYW5kIGhlaWdodCBhbHJlYWR5IHJldmVyc2VkIGZvciB0aGUgb3JpZW50YXRpb24gb2YK
KyAgICAgICAgICAgIC8vIHRoZSBpbWFnZSwgYXMgaXQgd2FzIG5lZWRlZCBmb3IgcGFnZSBsYXlv
dXQsIHNvIHdlIG5lZWQgdG8gcmV2ZXJzZSBpdCBiYWNrIGhlcmUuCisgICAgICAgICAgICBhZGp1
c3RlZERlc3RSZWN0LnNldFNpemUoYWRqdXN0ZWREZXN0UmVjdC5zaXplKCkudHJhbnNwb3NlZFNp
emUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgp
LT5kcmF3U3VyZmFjZVRvQ29udGV4dChtX2ltYWdlLmdldCgpLCBhZGp1c3RlZERlc3RSZWN0LCBh
ZGp1c3RlZFNyY1JlY3QsIGNvbnRleHQpOworCisgICAgY29udGV4dC5yZXN0b3JlKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzYzgxYTE3MGJlNzlhZTZiZTZjYWNkYzk5
ZjRjMzk4Y2FhZjQyNmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5j
cHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLQotI2lmIFVTRShDRykKLQotI2luY2x1ZGUgIkNv
cmVHcmFwaGljc1NQSS5oIgotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUg
Ikdlb21ldHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKLSNp
bmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCi0jaW5jbHVkZSAiU3ViaW1hZ2VDYWNoZVdpdGhUaW1l
ci5oIgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotI2lmIFVTRShBUFBLSVQpCi0jaW5j
bHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Ci0jZW5kaWYK
LQotI2lmIFBMQVRGT1JNKENPQ09BKQotI2luY2x1ZGUgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2Uu
aCIKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0lOKQotI2luY2x1ZGUgPFdlYktpdFN5c3RlbUlu
dGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLSNlbmRpZgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLW5hbWVzcGFjZSBOYXRpdmVJbWFnZSB7Ci0KLUludFNpemUgc2l6ZShjb25zdCBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4mIGltYWdlKQotewotICAgIEFTU0VSVChpbWFnZSk7Ci0gICAg
cmV0dXJuIEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGltYWdlLmdldCgpKSwgQ0dJbWFnZUdldEhl
aWdodChpbWFnZS5nZXQoKSkpOwotfQotCi1ib29sIGhhc0FscGhhKGNvbnN0IFJldGFpblB0cjxD
R0ltYWdlUmVmPiYpCi17Ci0gICAgLy8gRklYTUU6IEFuc3dlciBjb3JyZWN0bHkgdGhlIHF1ZXN0
aW9uOiBkb2VzIHRoZSBDR0ltYWdlUmVmIGhhdmUgYWxwaGEgY2hhbm5uZWw/Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0gICAgCi1Db2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoY29uc3QgUmV0YWlu
UHRyPENHSW1hZ2VSZWY+JiBpbWFnZSkKLXsKLSAgICBBU1NFUlQoaW1hZ2UpOwotICAgIAotICAg
IGlmIChOYXRpdmVJbWFnZTo6c2l6ZShpbWFnZSkgIT0gSW50U2l6ZSgxLCAxKSkKLSAgICAgICAg
cmV0dXJuIENvbG9yKCk7Ci0gICAgCi0gICAgdW5zaWduZWQgY2hhciBwaXhlbFs0XTsgLy8gUkdC
QQotICAgIGF1dG8gYml0bWFwQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3JlYXRl
KHBpeGVsLCAxLCAxLCA4LCBzaXplb2YocGl4ZWwpLCBzUkdCQ29sb3JTcGFjZVJlZigpLAotICAg
ICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIz
MkJpZykpOwotCi0gICAgaWYgKCFiaXRtYXBDb250ZXh0KQotICAgICAgICByZXR1cm4gQ29sb3Io
KTsKLSAgICAKLSAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoYml0bWFwQ29udGV4dC5nZXQoKSwg
a0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgQ0dDb250ZXh0RHJhd0ltYWdlKGJpdG1hcENvbnRleHQu
Z2V0KCksIENHUmVjdE1ha2UoMCwgMCwgMSwgMSksIGltYWdlLmdldCgpKTsKLSAgICAKLSAgICBp
ZiAoIXBpeGVsWzNdKQotICAgICAgICByZXR1cm4gQ29sb3IoMCwgMCwgMCwgMCk7Ci0KLSAgICBy
ZXR1cm4gQ29sb3IocGl4ZWxbMF0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMV0gKiAyNTUgLyBw
aXhlbFszXSwgcGl4ZWxbMl0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbM10pOwotfQotCi19Ci0K
LWJvb2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpCi17Ci0gICAgaWYgKGNs
ZWFyTWV0YWRhdGEpCi0gICAgICAgIG1faGF2ZU1ldGFkYXRhID0gZmFsc2U7Ci0KLSAgICBtX3N1
YnNhbXBsaW5nTGV2ZWwgPSAwOwotCi0gICAgaWYgKG1faW1hZ2UpIHsKLSNpZiBDQUNIRV9TVUJJ
TUFHRVMKLSAgICAgICAgc3ViaW1hZ2VDYWNoZSgpLmNsZWFySW1hZ2UobV9pbWFnZS5nZXQoKSk7
Ci0jZW5kaWYKLSAgICAgICAgbV9pbWFnZSA9IG51bGxwdHI7Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUNHSW1hZ2VSZWYgQml0bWFwSW1hZ2U6
OmdldENHSW1hZ2VSZWYoKQotewotICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKS5nZXQo
KTsKLX0KLQotQ0dJbWFnZVJlZiBCaXRtYXBJbWFnZTo6Z2V0Rmlyc3RDR0ltYWdlUmVmT2ZTaXpl
KGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgc2l6ZV90IGNvdW50ID0gZnJhbWVDb3VudCgp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBDR0lt
YWdlUmVmIGNnSW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleChpKS5nZXQoKTsKLSAgICAgICAgaWYg
KGNnSW1hZ2UgJiYgSW50U2l6ZShDR0ltYWdlR2V0V2lkdGgoY2dJbWFnZSksIENHSW1hZ2VHZXRI
ZWlnaHQoY2dJbWFnZSkpID09IHNpemUpCi0gICAgICAgICAgICByZXR1cm4gY2dJbWFnZTsKLSAg
ICB9Ci0KLSAgICAvLyBGYWxsYmFjayB0byB0aGUgZGVmYXVsdCBDR0ltYWdlUmVmIGlmIHdlIGNh
bid0IGZpbmQgdGhlIHJpZ2h0IHNpemUKLSAgICByZXR1cm4gZ2V0Q0dJbWFnZVJlZigpOwotfQot
Ci1SZXRhaW5QdHI8Q0ZBcnJheVJlZj4gQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VBcnJheSgpCi17
Ci0gICAgc2l6ZV90IGNvdW50ID0gZnJhbWVDb3VudCgpOwotICAgIGlmICghY291bnQpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIENGTXV0YWJsZUFycmF5UmVmIGFycmF5ID0g
Q0ZBcnJheUNyZWF0ZU11dGFibGUoTlVMTCwgY291bnQsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3Mp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBpZiAo
Q0dJbWFnZVJlZiBjdXJyRnJhbWUgPSBmcmFtZUltYWdlQXRJbmRleChpKS5nZXQoKSkKLSAgICAg
ICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheSwgY3VyckZyYW1lKTsKLSAgICB9Ci0gICAg
cmV0dXJuIGFkb3B0Q0YoYXJyYXkpOwotfQotCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCYgY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwgQmxlbmRNb2RlIGJs
ZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uKQotewotI2lm
IFBMQVRGT1JNKElPUykKLSAgICBzdGFydEFuaW1hdGlvbihEb05vdENhdGNoVXApOwotI2Vsc2UK
LSAgICBzdGFydEFuaW1hdGlvbigpOwotI2VuZGlmCi0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4gaW1hZ2U7Ci0gICAgLy8gTmV2ZXIgdXNlIHN1YnNhbXBsZWQgaW1hZ2VzIGZvciBkcmF3aW5n
IGludG8gUERGIGNvbnRleHRzLgotICAgIGlmICh3a0NHQ29udGV4dElzUERGQ29udGV4dChjdHh0
LnBsYXRmb3JtQ29udGV4dCgpKSkKLSAgICAgICAgaW1hZ2UgPSBjb3B5VW5zY2FsZWRGcmFtZUlt
YWdlQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIENHUmVjdCB0
cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVjdCA9IENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKGRl
c3RSZWN0LCBDR0NvbnRleHRHZXRDVE0oY3R4dC5wbGF0Zm9ybUNvbnRleHQoKSkpOwotICAgICAg
ICBmbG9hdCBzdWJzYW1wbGluZ1NjYWxlID0gc3RkOjptaW48ZmxvYXQ+KDEsIHN0ZDo6bWF4KHRy
YW5zZm9ybWVkRGVzdGluYXRpb25SZWN0LnNpemUud2lkdGggLyBzcmNSZWN0LndpZHRoKCksIHRy
YW5zZm9ybWVkRGVzdGluYXRpb25SZWN0LnNpemUuaGVpZ2h0IC8gc3JjUmVjdC5oZWlnaHQoKSkp
OwotCi0gICAgICAgIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUsIHN1
YnNhbXBsaW5nU2NhbGUpOwotICAgIH0KLQotICAgIGlmICghaW1hZ2UpIC8vIElmIGl0J3MgdG9v
IGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgotICAgICAgICByZXR1cm47Ci0gICAg
Ci0gICAgQ29sb3IgY29sb3IgPSBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKTsKLSAgICBpZiAoY29s
b3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihjdHh0LCBkZXN0UmVj
dCwgY29sb3IsIGNvbXBvc2l0ZU9wKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8v
IFN1YnNhbXBsaW5nIG1heSBoYXZlIGdpdmVuIHVzIGFuIGltYWdlIHRoYXQgaXMgc21hbGxlciB0
aGFuIHNpemUoKS4KLSAgICBJbnRTaXplIGltYWdlU2l6ZShDR0ltYWdlR2V0V2lkdGgoaW1hZ2Uu
Z2V0KCkpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSk7Ci0gICAgCi0gICAgLy8gc3Jj
UmVjdCBpcyBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHVuc3Vic2FtcGxlZCBpbWFnZSwgc28g
d2UgaGF2ZSB0byBtYXAgaXQgdG8gdGhlIHN1YnNhbXBsZWQgaW1hZ2UuCi0gICAgRmxvYXRSZWN0
IHNjYWxlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGlmIChpbWFnZVNpemUgIT0gbV9zaXplKSB7
Ci0gICAgICAgIEZsb2F0UmVjdCBvcmlnaW5hbEltYWdlQm91bmRzKEZsb2F0UG9pbnQoKSwgbV9z
aXplKTsKLSAgICAgICAgRmxvYXRSZWN0IHN1YnNhbXBsZWRJbWFnZUJvdW5kcyhGbG9hdFBvaW50
KCksIGltYWdlU2l6ZSk7Ci0gICAgICAgIHNjYWxlZFNyY1JlY3QgPSBtYXBSZWN0KHNyY1JlY3Qs
IG9yaWdpbmFsSW1hZ2VCb3VuZHMsIHN1YnNhbXBsZWRJbWFnZUJvdW5kcyk7Ci0gICAgfQotICAg
IAotICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb247Ci0gICAgaWYgKGRlc2NyaXB0aW9u
LnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24pCi0g
ICAgICAgIG9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgobV9jdXJyZW50RnJh
bWUpOwotCi0gICAgY3R4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UsIGltYWdlU2l6ZSwgZGVzdFJl
Y3QsIHNjYWxlZFNyY1JlY3QsIGNvbXBvc2l0ZU9wLCBibGVuZE1vZGUsIG9yaWVudGF0aW9uKTsK
LQotICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCi0gICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlk
RHJhdyh0aGlzKTsKLX0KLQotUmV0YWluUHRyPENHSW1hZ2VSZWY+IEJpdG1hcEltYWdlOjpjb3B5
VW5zY2FsZWRGcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgpCi17Ci0gICAgaWYgKGluZGV4
ID49IGZyYW1lQ291bnQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoaW5k
ZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKLSAgICAg
ICAgY2FjaGVGcmFtZShpbmRleCwgMCk7Ci0KLSAgICBpZiAoIW1fZnJhbWVzW2luZGV4XS5tX3N1
YnNhbXBsaW5nTGV2ZWwpCi0gICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZTsK
LQotICAgIHJldHVybiBtX3NvdXJjZS5jcmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRleCk7Ci19
Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCmluZGV4IGI0MjhkNTBkOTRiZjkyNDI4MDMyODdk
MmVlYzE2YmQ2OWM1MjhkOTIuLjNkYWExMzlhYjdlYTViNDIxNTc3ODgzNWQzNTNkOGFkYjVmMGM3
NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRl
cm5DRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVy
bkNHLmNwcApAQCAtNzIsNyArNzIsNyBAQCBDR1BhdHRlcm5SZWYgUGF0dGVybjo6Y3JlYXRlUGxh
dGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdXNlclNwYWNlVHJhbgogICAgIC8v
IElmIHdlJ3JlIHJlcGVhdGluZyBpbiBib3RoIGRpcmVjdGlvbnMsIHdlIGNhbiB1c2UgaW1hZ2Ut
YmFja2VkIHBhdHRlcm5zCiAgICAgLy8gaW5zdGVhZCBvZiBjdXN0b20gcGF0dGVybnMsIGFuZCBh
dm9pZCB0aWxpbmctZWRnZSBwaXhlbCBjcmFja3MuCiAgICAgaWYgKG1fcmVwZWF0WCAmJiBtX3Jl
cGVhdFkpCi0gICAgICAgIHJldHVybiB3a0NHUGF0dGVybkNyZWF0ZVdpdGhJbWFnZUFuZFRyYW5z
Zm9ybSh0aWxlSW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpLCBwYXR0ZXJuVHJhbnNmb3JtLCB3a1Bh
dHRlcm5UaWxpbmdDb25zdGFudFNwYWNpbmcpOworICAgICAgICByZXR1cm4gd2tDR1BhdHRlcm5D
cmVhdGVXaXRoSW1hZ2VBbmRUcmFuc2Zvcm0odGlsZUltYWdlKCktPm5hdGl2ZUltYWdlKCkuZ2V0
KCksIHBhdHRlcm5UcmFuc2Zvcm0sIHdrUGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2luZyk7CiAK
ICAgICAvLyBJZiBGTFRfTUFYIHNob3VsZCBhbHNvIGJlIHVzZWQgZm9yIHhTdGVwIG9yIHlTdGVw
LCBub3RoaW5nIGlzIHJlbmRlcmVkLiBVc2luZyBmcmFjdGlvbnMgb2YgRkxUX01BWCBhbHNvCiAg
ICAgLy8gcmVzdWx0IGluIG5vdGhpbmcgYmVpbmcgcmVuZGVyZWQuCkBAIC04Myw3ICs4Myw3IEBA
IENHUGF0dGVyblJlZiBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiB1c2VyU3BhY2VUcmFuCiAgICAgQ0dGbG9hdCB5U3RlcCA9IG1fcmVwZWF0WSA/
IHRpbGVSZWN0LmhlaWdodCgpIDogKDEgPDwgMjIpOwogCiAgICAgLy8gVGhlIHBhdHRlcm4gd2ls
bCByZWxlYXNlIHRoZSBDR0ltYWdlUmVmIHdoZW4gaXQncyBkb25lIHJlbmRlcmluZyBpbiBwYXR0
ZXJuUmVsZWFzZUNhbGxiYWNrCi0gICAgQ0dJbWFnZVJlZiBwbGF0Zm9ybUltYWdlID0gQ0dJbWFn
ZVJldGFpbih0aWxlSW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpKTsKKyAgICBDR0ltYWdlUmVmIHBs
YXRmb3JtSW1hZ2UgPSB0aWxlSW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKS5sZWFrUmVmKCk7CiAKICAg
ICBjb25zdCBDR1BhdHRlcm5DYWxsYmFja3MgcGF0dGVybkNhbGxiYWNrcyA9IHsgMCwgcGF0dGVy
bkNhbGxiYWNrLCBwYXR0ZXJuUmVsZWFzZUNhbGxiYWNrIH07CiAgICAgcmV0dXJuIENHUGF0dGVy
bkNyZWF0ZShwbGF0Zm9ybUltYWdlLCB0aWxlUmVjdCwgcGF0dGVyblRyYW5zZm9ybSwgeFN0ZXAs
IHlTdGVwLCBrQ0dQYXR0ZXJuVGlsaW5nQ29uc3RhbnRTcGFjaW5nLCBUUlVFLCAmcGF0dGVybkNh
bGxiYWNrcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QbGF0Zm9ybUltYWdlQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvUGxhdGZvcm1JbWFnZUNHLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZmIyZGUwZWExMmRhMjE0ZjEwNDZj
Mzk2MmU4ZWFiNTNjNjQ0MTI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFnZUNHLmNwcApAQCAtMCwwICsxLDE3MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCisKKyNpZiBVU0UoQ0cpCisKKyNp
bmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkNvcmVHcmFwaGljc1NQSS5oIgorI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiU3Vi
aW1hZ2VDYWNoZVdpdGhUaW1lci5oIgorCisjaWYgUExBVEZPUk0oV0lOKQorI2luY2x1ZGUgPFdl
YktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KKyNlbmRpZgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCit2b2lkIFBsYXRmb3JtSW1hZ2U6OmNsZWFyU3ViSW1h
Z2VzKCkKK3sKKyNpZiBDQUNIRV9TVUJJTUFHRVMKKyAgICBpZiAoIWlzTmlsKCkpCisgICAgICAg
IHN1YmltYWdlQ2FjaGUoKS5jbGVhckltYWdlKGNnSW1hZ2VSZWYoKSk7CisjZW5kaWYKK30KKwor
SW50U2l6ZSBQbGF0Zm9ybUltYWdlOjpzaXplKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNOaWwo
KSA/IEludFNpemUoKSA6IEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGNnSW1hZ2VSZWYoKSksIENH
SW1hZ2VHZXRIZWlnaHQoY2dJbWFnZVJlZigpKSk7Cit9CisKK2Jvb2wgUGxhdGZvcm1JbWFnZTo6
aGFzQWxwaGEoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBBbnN3ZXIgY29ycmVjdGx5IHRoZSBx
dWVzdGlvbjogZG9lcyB0aGUgQ0dJbWFnZVJlZiBoYXZlIGFscGhhIGNoYW5ubmVsPworICAgIHJl
dHVybiB0cnVlOworfQorCitDb2xvciBQbGF0Zm9ybUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29s
b3IoKSBjb25zdAoreworICAgIGlmIChpc05pbCgpIHx8IHNpemUoKSAhPSBJbnRTaXplKDEsIDEp
KQorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICAKKyAgICB1bnNpZ25lZCBjaGFyIHBpeGVs
WzRdOyAvLyBSR0JBCisgICAgYXV0byBiaXRtYXBDb250ZXh0ID0gYWRvcHRDRihDR0JpdG1hcENv
bnRleHRDcmVhdGUocGl4ZWwsIDEsIDEsIDgsIHNpemVvZihwaXhlbCksIHNSR0JDb2xvclNwYWNl
UmVmKCksCisgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCB8IGtDR0JpdG1h
cEJ5dGVPcmRlcjMyQmlnKSk7CisgICAgCisgICAgaWYgKCFiaXRtYXBDb250ZXh0KQorICAgICAg
ICByZXR1cm4gQ29sb3IoKTsKKyAgICAKKyAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoYml0bWFw
Q29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdl
KGJpdG1hcENvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgMSwgMSksIGNnSW1hZ2VSZWYo
KSk7CisgICAgCisgICAgaWYgKCFwaXhlbFszXSkKKyAgICAgICAgcmV0dXJuIENvbG9yKDAsIDAs
IDAsIDApOworICAgIAorICAgIHJldHVybiBDb2xvcihwaXhlbFswXSAqIDI1NSAvIHBpeGVsWzNd
LCBwaXhlbFsxXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsyXSAqIDI1NSAvIHBpeGVsWzNdLCBw
aXhlbFszXSk7Cit9CisgICAgCitib29sIFBsYXRmb3JtSW1hZ2U6OmlzQWxtb3N0U29saWRDb2xv
cigpIGNvbnN0Cit7CisgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IGNnSW1hZ2VSZWYoKTsKKyAgICBB
U1NFUlQoQ0dJbWFnZUdldEJpdHNQZXJDb21wb25lbnQoaW1hZ2UpID09IDgpOworICAgIAorICAg
IENHQml0bWFwSW5mbyBpbWFnZUluZm8gPSBDR0ltYWdlR2V0Qml0bWFwSW5mbyhpbWFnZSk7Cisg
ICAgaWYgKCEoaW1hZ2VJbmZvICYga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUpIHx8IChpbWFn
ZUluZm8gJiBrQ0dCaXRtYXBBbHBoYUluZm9NYXNrKSAhPSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlw
bGllZEZpcnN0KSB7CisgICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBiZWluZyBhYmxlIHRvIGhh
bmRsZSBvdGhlciBwaXhlbCBmb3JtYXRzLgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBzaXplX3Qgd2lkdGggPSBD
R0ltYWdlR2V0V2lkdGgoaW1hZ2UpOworICAgIHNpemVfdCBoZWlnaHQgPSBDR0ltYWdlR2V0SGVp
Z2h0KGltYWdlKTsKKyAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBDR0ltYWdlR2V0Qnl0ZXNQZXJS
b3coaW1hZ2UpOworICAgIAorICAgIFJldGFpblB0cjxDRkRhdGFSZWY+IHByb3ZpZGVyID0gYWRv
cHRDRihDR0RhdGFQcm92aWRlckNvcHlEYXRhKENHSW1hZ2VHZXREYXRhUHJvdmlkZXIoaW1hZ2Up
KSk7CisgICAgY29uc3QgVUludDgqIGRhdGEgPSBDRkRhdGFHZXRCeXRlUHRyKHByb3ZpZGVyLmdl
dCgpKTsKKyAgICAKKyAgICAvLyBPdmVybGF5IGEgZ3JpZCBvZiBzYW1wbGluZyBkb3RzIG9uIHRv
cCBvZiBhIGdyYXlzY2FsZSB2ZXJzaW9uIG9mIHRoZSBpbWFnZS4KKyAgICAvLyBGb3IgdGhlIGlu
dGVyaW9yIHBvaW50cywgY2FsY3VsYXRlIHRoZSBkaWZmZXJlbmNlIGluIGx1bWluYW5jZSBhbW9u
ZyB0aGUgc2FtcGxlIHBvaW50CisgICAgLy8gYW5kIGl0cyBzdXJyb3VuZHMgcG9pbnRzLCBzY2Fs
ZWQgYnkgdHJhbnNwYXJlbmN5LgorICAgIGNvbnN0IHVuc2lnbmVkIHNhbXBsZVJvd3MgPSA3Owor
ICAgIGNvbnN0IHVuc2lnbmVkIHNhbXBsZUNvbHMgPSA3OworICAgIC8vIEZJWE1FOiBSZWZpbmUg
dGhlIHByb3BlciBudW1iZXIgb2Ygc2FtcGxlcywgYW5kIGFjY29tbW9kYXRlIGRpZmZlcmVudCBh
c3BlY3QgcmF0aW9zLgorICAgIGlmICh3aWR0aCA8IHNhbXBsZUNvbHMgfHwgaGVpZ2h0IDwgc2Ft
cGxlUm93cykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIC8vIEVuc3VyZSB0aGF0
IHRoZSBsYXN0IHJvdy9jb2x1bW4gbGFuZCBvbiB0aGUgaW1hZ2UgcGVyaW1ldGVyLgorICAgIGNv
bnN0IGZsb2F0IHN0cmlkZVdpZHRoID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdpZHRoIC0gMSkgLyAo
c2FtcGxlQ29scyAtIDEpOworICAgIGNvbnN0IGZsb2F0IHN0cmlkZUhlaWdodCA9IHN0YXRpY19j
YXN0PGZsb2F0PihoZWlnaHQgLSAxKSAvIChzYW1wbGVSb3dzIC0gMSk7CisgICAgZmxvYXQgc2Ft
cGxlc1tzYW1wbGVSb3dzXVtzYW1wbGVDb2xzXTsKKyAgICAKKyAgICAvLyBGaW5kIHRoZSBsdW1p
bmFuY2Ugb2YgdGhlIHNhbXBsZSBwb2ludHMuCisgICAgZmxvYXQgeSA9IDA7CisgICAgY29uc3Qg
VUludDgqIHJvdyA9IGRhdGE7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNhbXBsZVJv
d3M7ICsraSkgeworICAgICAgICBmbG9hdCB4ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBq
ID0gMDsgaiA8IHNhbXBsZUNvbHM7ICsraikgeworICAgICAgICAgICAgY29uc3QgVUludDgqIHAw
ID0gcm93ICsgKHN0YXRpY19jYXN0PGludD4oeCArIC41KSkgKiA0OworICAgICAgICAgICAgLy8g
UiBHIEIgQQorICAgICAgICAgICAgc2FtcGxlc1tpXVtqXSA9ICgwLjIxMjUgKiAqcDAgKyAwLjcx
NTQgKiAqKHAwKzEpICsgMC4wNzIxICogKihwMCsyKSkgKiAqKHAwKzMpIC8gMjU1OworICAgICAg
ICAgICAgeCArPSBzdHJpZGVXaWR0aDsKKyAgICAgICAgfQorICAgICAgICB5ICs9IHN0cmlkZUhl
aWdodDsKKyAgICAgICAgcm93ID0gZGF0YSArIChzdGF0aWNfY2FzdDxpbnQ+KHkgKyAuNSkpICog
Ynl0ZXNQZXJSb3c7CisgICAgfQorICAgIAorICAgIC8vIERldGVybWluZSB0aGUgaW1hZ2Ugc2Nv
cmUuCisgICAgZmxvYXQgYWNjdW1TY29yZSA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsg
aSA8IHNhbXBsZVJvd3MgLSAxOyArK2kpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMTsg
aiA8IHNhbXBsZUNvbHMgLSAxOyArK2opIHsKKyAgICAgICAgICAgIGZsb2F0IGRpZmYgPSBzYW1w
bGVzW2kgLSAxXVtqXSArIHNhbXBsZXNbaSArIDFdW2pdICsgc2FtcGxlc1tpXVtqIC0gMV0gKyBz
YW1wbGVzW2ldW2ogKyAxXSAtIDQgKiBzYW1wbGVzW2ldW2pdOworICAgICAgICAgICAgYWNjdW1T
Y29yZSArPSBkaWZmICogZGlmZjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBUaGUg
c2NvcmUgZm9yIGEgZ2l2ZW4gc2FtcGxlIGNhbiBiZSB3aXRoaW4gdGhlIHJhbmdlIG9mIDAgYW5k
IDI1NV4yLgorICAgIHJldHVybiBhY2N1bVNjb3JlIDwgMjUwMCAqIChzYW1wbGVSb3dzIC0gMikg
KiAoc2FtcGxlQ29scyAtIDIpOworfQorCitmbG9hdCBQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGlu
Z1NjYWxlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KQoreworICAgIC8vIE5ldmVyIHVzZSBzdWJzYW1w
bGVkIGltYWdlcyBmb3IgZHJhd2luZyBpbnRvIFBERiBjb250ZXh0cy4KKyAgICBpZiAod2tDR0Nv
bnRleHRJc1BERkNvbnRleHQoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSkpCisgICAgICAgIHJl
dHVybiAxOworICAgIAorICAgIENHUmVjdCB0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVjdCA9IENH
UmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKGRlc3RSZWN0LCBDR0NvbnRleHRHZXRDVE0oY29udGV4
dC5wbGF0Zm9ybUNvbnRleHQoKSkpOworICAgIHJldHVybiBzdGQ6Om1pbjxmbG9hdD4oMSwgc3Rk
OjptYXgodHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS53aWR0aCAvIHNyY1JlY3Qud2lk
dGgoKSwgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS5oZWlnaHQgLyBzcmNSZWN0Lmhl
aWdodCgpKSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1JbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQm
IGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5k
TW9kZSBtb2RlLCBjb25zdCBJbWFnZU9yaWVudGF0aW9uJiBvcmllbnRhdGlvbikgY29uc3QKK3sK
KyAgICAvLyBTdWJzYW1wbGluZyBtYXkgaGF2ZSBnaXZlbiB1cyBhbiBpbWFnZSB0aGF0IGlzIHNt
YWxsZXIgdGhhbiBzaXplKCkuCisgICAgSW50U2l6ZSBzdWJzYW1wbGVkSW1hZ2VTaXplID0gc2l6
ZSgpOworICAgIAorICAgIC8vIHNyY1JlY3QgaXMgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB1
bnN1YnNhbXBsZWQgaW1hZ2UsIHNvIHdlIGhhdmUgdG8gbWFwIGl0IHRvIHRoZSBzdWJzYW1wbGVk
IGltYWdlLgorICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3QgPSBzcmNSZWN0OworICAgIGlm
IChzdWJzYW1wbGVkSW1hZ2VTaXplICE9IHNyY1NpemUpCisgICAgICAgIGFkanVzdGVkU3JjUmVj
dCA9IG1hcFJlY3Qoc3JjUmVjdCwgRmxvYXRSZWN0KHsgfSwgc3JjU2l6ZSksIEZsb2F0UmVjdCh7
IH0sIHN1YnNhbXBsZWRJbWFnZVNpemUpKTsKKyAgICAKKyAgICBjb250ZXh0LmRyYXdOYXRpdmVJ
bWFnZShtX2ltYWdlLCBzdWJzYW1wbGVkSW1hZ2VTaXplLCBkZXN0UmVjdCwgYWRqdXN0ZWRTcmNS
ZWN0LCBvcCwgbW9kZSwgb3JpZW50YXRpb24pOworfQorICAgIAorfQorCisjZW5kaWYgLy8gVVNF
KENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
VGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0KaW5kZXggODk3
MjBkMTczNjVkYTdlOGJhODQ2OWQ1Mjk0NTQ4ZDUxODQ3YTdmZS4uNDQ3NmZjNWY4N2MzNDk4OGY2
ZDlhZDU1ZWViZDhkMWI5YmIwMjJlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRh
dGlvbkNvY29hLm1tCkBAIC0xMjksNyArMTI5LDcgQEAgVGV4dFRyYWNrUmVwcmVzZW50YXRpb25D
b2NvYTo6flRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EoKQogdm9pZCBUZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbkNvY29hOjp1cGRhdGUoKQogewogICAgIGlmIChhdXRvIHJlcHJlc2VudGF0aW9u
ID0gbV9jbGllbnQuY3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRpb25JbWFnZSgpKQotICAgICAg
ICBbbV9sYXllci5nZXQoKSBzZXRDb250ZW50czooaWQpcmVwcmVzZW50YXRpb24tPmdldENHSW1h
Z2VSZWYoKV07CisgICAgICAgIFttX2xheWVyLmdldCgpIHNldENvbnRlbnRzOihpZClyZXByZXNl
bnRhdGlvbi0+bmF0aXZlSW1hZ2UoKS5nZXQoKV07CiB9CiAKIHZvaWQgVGV4dFRyYWNrUmVwcmVz
ZW50YXRpb25Db2NvYTo6c2V0Q29udGVudFNjYWxlKGZsb2F0IHNjYWxlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFjLm1tCmluZGV4IDAxZWI2ZGQz
MDA0M2EyMjUyOTE3NmZkOTEyMTE3ZGM1Nzc2YzE3YmEuLmRjMWM3YzcwOTVkOTQ0YzRjNjJmMWZl
MDkzNTcwMmExM2M3YzdhNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9JbWFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvSW1hZ2VNYWMubW0KQEAgLTg1LDMxICs4NSwyMiBAQCBDRkRhdGFSZWYgQml0bWFw
SW1hZ2U6OmdldFRJRkZSZXByZXNlbnRhdGlvbigpCiAgICAgaWYgKG1fdGlmZlJlcCkKICAgICAg
ICAgcmV0dXJuIG1fdGlmZlJlcC5nZXQoKTsKIAotICAgIHVuc2lnbmVkIG51bUZyYW1lcyA9IGZy
YW1lQ291bnQoKTsKKyAgICBhdXRvIG5hdGl2ZUltYWdlcyA9IHRoaXMtPmZyYW1lc05hdGl2ZUlt
YWdlcygpOwogCi0gICAgLy8gSWYgbnVtRnJhbWVzIGlzIHplcm8sIHdlIGtub3cgZm9yIGNlcnRh
aW4gdGhpcyBpbWFnZSBkb2Vzbid0IGhhdmUgdmFsaWQgZGF0YQorICAgIC8vIElmIGZyYW1lc0lt
YWdlcy5zaXplKCkgaXMgemVybywgd2Uga25vdyBmb3IgY2VydGFpbiB0aGlzIGltYWdlIGRvZXNu
J3QgaGF2ZSB2YWxpZCBkYXRhCiAgICAgLy8gRXZlbiB0aG91Z2ggdGhlIGNhbGwgdG8gQ0dJbWFn
ZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEgd2lsbCBmYWlsIGFuZCB3ZSdsbCBoYW5kbGUgaXQg
Z3JhY2VmdWxseSwKICAgICAvLyBpbiBjZXJ0YWluIGNpcmN1bXN0YW5jZXMgdGhhdCBjYWxsIHdp
bGwgc3BhbSB0aGUgY29uc29sZSB3aXRoIGFuIGVycm9yIG1lc3NhZ2UKLSAgICBpZiAoIW51bUZy
YW1lcykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBWZWN0b3I8Q0dJbWFnZVJlZj4gaW1hZ2Vz
OwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1GcmFtZXM7ICsraSApIHsKLSAgICAg
ICAgQ0dJbWFnZVJlZiBjZ0ltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkuZ2V0KCk7Ci0gICAg
ICAgIGlmIChjZ0ltYWdlKQotICAgICAgICAgICAgaW1hZ2VzLmFwcGVuZChjZ0ltYWdlKTsKLSAg
ICB9Ci0KLSAgICB1bnNpZ25lZCBudW1WYWxpZEZyYW1lcyA9IGltYWdlcy5zaXplKCk7CisgICAg
aWYgKCFuYXRpdmVJbWFnZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAg
IFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBkYXRhID0gYWRvcHRDRihDRkRhdGFDcmVhdGVN
dXRhYmxlKDAsIDApKTsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZURlc3RpbmF0aW9uUmVmPiBkZXN0
aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEoZGF0YS5n
ZXQoKSwga1VUVHlwZVRJRkYsIG51bVZhbGlkRnJhbWVzLCAwKSk7CisgICAgUmV0YWluUHRyPENH
SW1hZ2VEZXN0aW5hdGlvblJlZj4gZGVzdGluYXRpb24gPSBhZG9wdENGKENHSW1hZ2VEZXN0aW5h
dGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEuZ2V0KCksIGtVVFR5cGVUSUZGLCBuYXRpdmVJbWFnZXMu
c2l6ZSgpLCAwKSk7CiAKICAgICBpZiAoIWRlc3RpbmF0aW9uKQotICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bnVtVmFsaWRGcmFtZXM7ICsraSkKLSAgICAgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2Uo
ZGVzdGluYXRpb24uZ2V0KCksIGltYWdlc1tpXSwgMCk7CisgICAgZm9yIChhdXRvIG5hdGl2ZUlt
YWdlIDogbmF0aXZlSW1hZ2VzKQorICAgICAgICBDR0ltYWdlRGVzdGluYXRpb25BZGRJbWFnZShk
ZXN0aW5hdGlvbi5nZXQoKSwgbmF0aXZlSW1hZ2UuZ2V0KCksIDApOwogCiAgICAgQ0dJbWFnZURl
c3RpbmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAppbmRl
eCAyMTc1M2JkMDc4YTFjNTVjMzI3MTljMTQ4NDZmMGY2Yjk5NzVmOGZkLi43MWY5MGIzYTI0NDk1
YmY1N2NiNTgyZTE2N2Y4MjY4MGIxNjIyY2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAKQEAgLTE0Miw2ICsx
NDIsNyBAQCBJbWFnZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFt
ZSYgb3RoZXIpCiAgICAgICAgIHJldHVybiAqdGhpczsKIAogICAgIGNvcHlCaXRtYXBEYXRhKG90
aGVyKTsKKyAgICBzZXRIYXNBbHBoYShvdGhlci5tX2hhc0FscGhhKTsKICAgICBzZXRPcmlnaW5h
bEZyYW1lUmVjdChvdGhlci5vcmlnaW5hbEZyYW1lUmVjdCgpKTsKICAgICBzZXRTdGF0dXMob3Ro
ZXIuc3RhdHVzKCkpOwogICAgIHNldER1cmF0aW9uKG90aGVyLmR1cmF0aW9uKCkpOwpAQCAtMTUy
LDggKzE1Myw3IEBAIEltYWdlRnJhbWUmIEltYWdlRnJhbWU6Om9wZXJhdG9yPShjb25zdCBJbWFn
ZUZyYW1lJiBvdGhlcikKIAogdm9pZCBJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSgpCiB7Ci0g
ICAgbV9iYWNraW5nU3RvcmUuY2xlYXIoKTsKLSAgICBtX2J5dGVzID0gMDsKKyAgICBtX3BpeGVs
cyA9IG51bGxwdHI7CiAgICAgbV9zdGF0dXMgPSBGcmFtZUVtcHR5OwogICAgIC8vIE5PVEU6IERv
IG5vdCByZXNldCBvdGhlciBtZW1iZXJzIGhlcmU7IGNsZWFyRnJhbWVCdWZmZXJDYWNoZSgpIGNh
bGxzIHRoaXMKICAgICAvLyB0byBmcmVlIHRoZSBiaXRtYXAgZGF0YSwgYnV0IG90aGVyIGZ1bmN0
aW9ucyBsaWtlIGluaXRGcmFtZUJ1ZmZlcigpIGFuZApAQCAtMTYzLDI0ICsxNjMsMTYgQEAgdm9p
ZCBJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSgpCiAKIHZvaWQgSW1hZ2VGcmFtZTo6emVyb0Zp
bGxQaXhlbERhdGEoKQogewotICAgIG1lbXNldChtX2J5dGVzLCAwLCBtX3NpemUud2lkdGgoKSAq
IG1fc2l6ZS5oZWlnaHQoKSAqIHNpemVvZihQaXhlbERhdGEpKTsKKyAgICBtX3BpeGVscy0+Y2xl
YXIoKTsKICAgICBtX2hhc0FscGhhID0gdHJ1ZTsKIH0KIAogdm9pZCBJbWFnZUZyYW1lOjp6ZXJv
RmlsbEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIEFTU0VSVChJbnRSZWN0
KEludFBvaW50KCksIG1fc2l6ZSkuY29udGFpbnMocmVjdCkpOwotCiAgICAgaWYgKHJlY3QuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBzaXplX3QgcmVjdFdpZHRoSW5CeXRlcyA9
IHJlY3Qud2lkdGgoKSAqIHNpemVvZihQaXhlbERhdGEpOwotICAgIFBpeGVsRGF0YSogc3RhcnQg
PSBtX2J5dGVzICsgKHJlY3QueSgpICogd2lkdGgoKSkgKyByZWN0LngoKTsKLSAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IHJlY3QuaGVpZ2h0KCk7ICsraSkgewotICAgICAgICBtZW1zZXQoc3RhcnQs
IDAsIHJlY3RXaWR0aEluQnl0ZXMpOwotICAgICAgICBzdGFydCArPSB3aWR0aCgpOwotICAgIH0K
LQorICAgIG1fcGl4ZWxzLT5jbGVhclJlY3QocmVjdCk7CiAgICAgc2V0SGFzQWxwaGEodHJ1ZSk7
CiB9CiAKQEAgLTE4OSwyNSArMTgxLDIzIEBAIGJvb2wgSW1hZ2VGcmFtZTo6Y29weUJpdG1hcERh
dGEoY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpCiAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fYmFja2luZ1N0b3JlID0gb3RoZXIubV9iYWNraW5n
U3RvcmU7Ci0gICAgbV9ieXRlcyA9IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsKLSAgICBtX3NpemUg
PSBvdGhlci5tX3NpemU7Ci0gICAgc2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7CisgICAg
aWYgKG90aGVyLm1fcGl4ZWxzKQorICAgICAgICBtX3BpeGVscyA9IEJpdG1hcFBpeGVsczo6Y3Jl
YXRlKCpvdGhlci5tX3BpeGVscy5nZXQoKSk7CisgICAgZWxzZQorICAgICAgICBtX3BpeGVscyA9
IG51bGxwdHI7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgSW1hZ2VGcmFtZTo6c2V0U2l6
ZShpbnQgbmV3V2lkdGgsIGludCBuZXdIZWlnaHQpCiB7Ci0gICAgQVNTRVJUKCF3aWR0aCgpICYm
ICFoZWlnaHQoKSk7Ci0gICAgc2l6ZV90IGJhY2tpbmdTdG9yZVNpemUgPSBuZXdXaWR0aCAqIG5l
d0hlaWdodDsKLSAgICBpZiAoIW1fYmFja2luZ1N0b3JlLnRyeVJlc2VydmVDYXBhY2l0eShiYWNr
aW5nU3RvcmVTaXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fYmFja2luZ1N0b3Jl
LnJlc2l6ZShiYWNraW5nU3RvcmVTaXplKTsKLSAgICBtX2J5dGVzID0gbV9iYWNraW5nU3RvcmUu
ZGF0YSgpOwotICAgIG1fc2l6ZSA9IEludFNpemUobmV3V2lkdGgsIG5ld0hlaWdodCk7CisgICAg
QVNTRVJUKCFtX3BpeGVscyk7CisgICAgbV9waXhlbHMgPSBCaXRtYXBQaXhlbHM6OmNyZWF0ZShJ
bnRTaXplKG5ld1dpZHRoLCBuZXdIZWlnaHQpLCBtX3ByZW11bHRpcGx5QWxwaGEpOworICAgIHJl
dHVybiBtX3BpeGVscyAhPSBudWxscHRyOworfQogCi0gICAgemVyb0ZpbGxQaXhlbERhdGEoKTsK
LSAgICByZXR1cm4gdHJ1ZTsKK3ZvaWQgSW1hZ2VGcmFtZTo6Y29weVJvd05UaW1lcyhpbnQgc3Rh
cnRYLCBpbnQgZW5kWCwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCit7CisgICAgbV9waXhlbHMtPnJl
cGVhdEZpcnN0Um93KEludFJlY3Qoc3RhcnRYLCBzdGFydFksIGVuZFggLXN0YXJ0WCAsIGVuZFkg
LSBzdGFydFkpKTsKIH0KIAogYm9vbCBJbWFnZUZyYW1lOjpoYXNBbHBoYSgpIGNvbnN0CkBAIC0y
OTEsNyArMjgxLDcgQEAgdW5zaWduZWQgSW1hZ2VEZWNvZGVyOjpmcmFtZUJ5dGVzQXRJbmRleChz
aXplX3QgaW5kZXgpIGNvbnN0CiAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgPD0g
aW5kZXgpCiAgICAgICAgIHJldHVybiAwOwogICAgIC8vIEZJWE1FOiBVc2UgdGhlIGRpbWVuc2lv
biBvZiB0aGUgcmVxdWVzdGVkIGZyYW1lLgotICAgIHJldHVybiBtX3NpemUuYXJlYSgpICogc2l6
ZW9mKEltYWdlRnJhbWU6OlBpeGVsRGF0YSk7CisgICAgcmV0dXJuIG1fc2l6ZS5hcmVhKCkgKiBz
aXplb2YoUkdCQTMyKTsKIH0KIAogZmxvYXQgSW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0aW9uQXRJ
bmRleChzaXplX3QgaW5kZXgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCmluZGV4IDJmOGVlZTE3ODFkMTYyZDg2YzQ5ZmUx
ZGFjNzJhMmU3ZTQwYTVkNmQuLjY0NjQxZGZjMmYwZjNlODk2ZmE0NzJiNDJmZTQyZDNkZmI3MjMx
ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0lt
YWdlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L0ltYWdlRGVjb2Rlci5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5j
bHVkZSAiQml0bWFwUGl4ZWxzLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIklt
YWdlU291cmNlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKQEAgLTU3LDcgKzU4LDYg
QEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICAgICAgRGlzcG9z
ZU92ZXJ3cml0ZVByZXZpb3VzICAvLyBDbGVhciBmcmFtZSB0byBwcmV2aW91cyBmcmFtZWJ1ZmZl
cgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb250ZW50cwogICAg
ICAgICB9OwotICAgICAgICB0eXBlZGVmIHVuc2lnbmVkIFBpeGVsRGF0YTsKIAogICAgICAgICBJ
bWFnZUZyYW1lKCk7CiAKQEAgLTgwLDE3ICs4MCw3IEBAIHVzaW5nIENvbG9yUHJvZmlsZSA9IFZl
Y3RvcjxjaGFyPjsKICAgICAgICAgLy8gQ29waWVzIHRoZSBwaXhlbCBkYXRhIGF0IFsoc3RhcnRY
LCBzdGFydFkpLCAoZW5kWCwgc3RhcnRZKSkgdG8gdGhlCiAgICAgICAgIC8vIHNhbWUgWC1jb29y
ZGluYXRlcyBvbiBlYWNoIHN1YnNlcXVlbnQgcm93IHVwIHRvIGJ1dCBub3QgaW5jbHVkaW5nCiAg
ICAgICAgIC8vIGVuZFkuCi0gICAgICAgIHZvaWQgY29weVJvd05UaW1lcyhpbnQgc3RhcnRYLCBp
bnQgZW5kWCwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFT
U0VSVChzdGFydFggPCB3aWR0aCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChlbmRYIDw9IHdpZHRo
KCkpOwotICAgICAgICAgICAgQVNTRVJUKHN0YXJ0WSA8IGhlaWdodCgpKTsKLSAgICAgICAgICAg
IEFTU0VSVChlbmRZIDw9IGhlaWdodCgpKTsKLSAgICAgICAgICAgIGNvbnN0IGludCByb3dCeXRl
cyA9IChlbmRYIC0gc3RhcnRYKSAqIHNpemVvZihQaXhlbERhdGEpOwotICAgICAgICAgICAgY29u
c3QgUGl4ZWxEYXRhKiBjb25zdCBzdGFydEFkZHIgPSBnZXRBZGRyKHN0YXJ0WCwgc3RhcnRZKTsK
LSAgICAgICAgICAgIGZvciAoaW50IGRlc3RZID0gc3RhcnRZICsgMTsgZGVzdFkgPCBlbmRZOyAr
K2Rlc3RZKQotICAgICAgICAgICAgICAgIG1lbWNweShnZXRBZGRyKHN0YXJ0WCwgZGVzdFkpLCBz
dGFydEFkZHIsIHJvd0J5dGVzKTsKLSAgICAgICAgfQorICAgICAgICB2b2lkIGNvcHlSb3dOVGlt
ZXMoaW50IHN0YXJ0WCwgaW50IGVuZFgsIGludCBzdGFydFksIGludCBlbmRZKTsKIAogICAgICAg
ICAvLyBBbGxvY2F0ZXMgc3BhY2UgZm9yIHRoZSBwaXhlbCBkYXRhLiAgTXVzdCBiZSBjYWxsZWQg
YmVmb3JlIGFueSBwaXhlbHMKICAgICAgICAgLy8gYXJlIHdyaXR0ZW4uICBNdXN0IG9ubHkgYmUg
Y2FsbGVkIG9uY2UuICBSZXR1cm5zIHdoZXRoZXIgYWxsb2NhdGlvbgpAQCAtMTAwLDcgKzkwLDcg
QEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICAvLyBSZXR1cm5z
IGEgY2FsbGVyLW93bmVkIHBvaW50ZXIgdG8gdGhlIHVuZGVybHlpbmcgbmF0aXZlIGltYWdlIGRh
dGEuCiAgICAgICAgIC8vIChBY3R1YWwgdXNlOiBUaGlzIHBvaW50ZXIgd2lsbCBiZSBvd25lZCBi
eSBCaXRtYXBJbWFnZSBhbmQgZnJlZWQgaW4KICAgICAgICAgLy8gRnJhbWVEYXRhOjpjbGVhcigp
KS4KLSAgICAgICAgTmF0aXZlSW1hZ2VQdHIgYXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0OworICAg
ICAgICBOYXRpdmVJbWFnZVB0ciBhc05ld05hdGl2ZUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9w
aXhlbHMtPmltYWdlKCk7IH0KIAogICAgICAgICBib29sIGhhc0FscGhhKCkgY29uc3Q7CiAgICAg
ICAgIGNvbnN0IEludFJlY3QmIG9yaWdpbmFsRnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9v
cmlnaW5hbEZyYW1lUmVjdDsgfQpAQCAtMTE5LDEwMSArMTA5LDQ0IEBAIHVzaW5nIENvbG9yUHJv
ZmlsZSA9IFZlY3RvcjxjaGFyPjsKIAogICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKGludCB4
LCBpbnQgeSwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkK
ICAgICAgICAgewotICAgICAgICAgICAgc2V0UkdCQShnZXRBZGRyKHgsIHkpLCByLCBnLCBiLCBh
KTsKKyAgICAgICAgICAgIG1fcGl4ZWxzLT5zZXRSR0JBKHgsIHksIHIsIGcsIGIsIGEpOwogICAg
ICAgICB9CiAKLSAgICAgICAgaW5saW5lIFBpeGVsRGF0YSogZ2V0QWRkcihpbnQgeCwgaW50IHkp
CisgICAgICAgIGlubGluZSBSR0JBMzIqIGdldEFkZHIoaW50IHgsIGludCB5KQogICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gbV9ieXRlcyArICh5ICogd2lkdGgoKSkgKyB4OworICAgICAg
ICAgICAgcmV0dXJuIG1fcGl4ZWxzLT5hdCh4LCB5KTsKICAgICAgICAgfQogCiAgICAgICAgIGlu
bGluZSBib29sIGhhc1BpeGVsRGF0YSgpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBtX2J5dGVzOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVXNlIGZpeCBwb2ludCBtdWx0
aXBsaWVyIGluc3RlYWQgb2YgaW50ZWdlciBkaXZpc2lvbiBvciBmbG9hdGluZyBwb2ludCBtYXRo
LgotICAgICAgICAvLyBUaGlzIG11bHRpcGxlciBwcm9kdWNlcyBleGFjdGx5IHRoZSBzYW1lIHJl
c3VsdCBmb3IgYWxsIHZhbHVlcyBpbiByYW5nZSAwIC0gMjU1LgotICAgICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgZml4UG9pbnRTaGlmdCA9IDI0OwotICAgICAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgZml4UG9pbnRNdWx0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDEuMCAvIDI1NS4wICog
KDEgPDwgZml4UG9pbnRTaGlmdCkpICsgMTsKLSAgICAgICAgLy8gTXVsdGlwbGllcyB1bnNpZ25l
ZCB2YWx1ZSBieSBmaXhwb2ludCB2YWx1ZSBhbmQgY29udmVydHMgYmFjayB0byB1bnNpZ25lZC4K
LSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZpeFBvaW50VW5zaWduZWRNdWx0aXBseSh1bnNpZ25l
ZCBmaXhlZCwgdW5zaWduZWQgdikKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICAoZml4
ZWQgKiB2KSA+PiBmaXhQb2ludFNoaWZ0OworICAgICAgICAgICAgcmV0dXJuIG1fcGl4ZWxzICE9
IG51bGxwdHI7CiAgICAgICAgIH0KIAotICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKFBpeGVs
RGF0YSogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQg
YSkKKyAgICAgICAgaW5saW5lIHZvaWQgc2V0UkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIs
IHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIGlmIChtX3ByZW11bHRpcGx5QWxwaGEgJiYgYSA8IDI1NSkgewotICAgICAgICAgICAgICAg
IGlmICghYSkgewotICAgICAgICAgICAgICAgICAgICAqZGVzdCA9IDA7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB1bnNp
Z25lZCBhbHBoYU11bHQgPSBhICogZml4UG9pbnRNdWx0OwotICAgICAgICAgICAgICAgIHIgPSBm
aXhQb2ludFVuc2lnbmVkTXVsdGlwbHkociwgYWxwaGFNdWx0KTsKLSAgICAgICAgICAgICAgICBn
ID0gZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KGcsIGFscGhhTXVsdCk7Ci0gICAgICAgICAgICAg
ICAgYiA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShiLCBhbHBoYU11bHQpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgKmRlc3QgPSAoYSA8PCAyNCB8IHIgPDwgMTYgfCBnIDw8IDggfCBi
KTsKKyAgICAgICAgICAgIG1fcGl4ZWxzLT5zZXRSR0JBKGRlc3QsIHIsIGcsIGIsIGEpOwogICAg
ICAgICB9CiAKICNpZiBFTkFCTEUoQVBORykKLSAgICAgICAgc3RhdGljIGlubGluZSB1bnNpZ25l
ZCBkaXZpZGUyNTUodW5zaWduZWQgYSkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIChh
ICsgKGEgPj4gOCkgKyAxKSA+PiA4OwotICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5lIHZvaWQg
b3ZlclJHQkEoUGl4ZWxEYXRhKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25l
ZCBiLCB1bnNpZ25lZCBhKQorICAgICAgICBpbmxpbmUgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRl
c3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGlmICghYSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAg
ICAgICAgICAgIGlmIChhIDwgMjU1KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgYURlc3Qg
PSAoKCpkZXN0KSA+PiAyNCkgJiAyNTU7Ci0gICAgICAgICAgICAgICAgaWYgKGFEZXN0KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJEZXN0ID0gKCgqZGVzdCkgPj4gMTYpICYgMjU1
OwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBnRGVzdCA9ICgoKmRlc3QpID4+IDgpICYg
MjU1OwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBiRGVzdCA9ICgqZGVzdCkgJiAyNTU7
Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFBdXggPSAyNTUgLSBhOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgckRlc3QgPSBkaXZpZGUyNTUockRlc3QgKiBhRGVzdCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBnRGVzdCA9IGRpdmlkZTI1NShnRGVzdCAqIGFEZXN0KTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJEZXN0ID0gZGl2aWRlMjU1KGJEZXN0ICogYURlc3QpOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBkaXZpZGUyNTUociAqIGEgKyByRGVz
dCAqIGFBdXgpOwotICAgICAgICAgICAgICAgICAgICBnID0gZGl2aWRlMjU1KGcgKiBhICsgZ0Rl
c3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IGRpdmlkZTI1NShiICogYSArIGJE
ZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAgIGEgKz0gZGl2aWRlMjU1KGFEZXN0ICog
YUF1eCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICByID0gKHIgKiAyNTUgKyBhIC0gMSkgLyBhOwotICAgICAg
ICAgICAgICAgICAgICAgICAgZyA9IChnICogMjU1ICsgYSAtIDEpIC8gYTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIGIgPSAoYiAqIDI1NSArIGEgLSAxKSAvIGE7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSkgewot
ICAgICAgICAgICAgICAgICAgICByID0gZGl2aWRlMjU1KHIgKiBhKTsKLSAgICAgICAgICAgICAg
ICAgICAgZyA9IGRpdmlkZTI1NShnICogYSk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSBkaXZp
ZGUyNTUoYiAqIGEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICpkZXN0ID0gKGEgPDwgMjQgfCByIDw8IDE2IHwgZyA8PCA4IHwgYik7CisgICAgICAgICAg
ICBtX3BpeGVscy0+b3ZlclJHQkEoZGVzdCwgciwgZywgYiwgYSk7CiAgICAgICAgIH0KICNlbmRp
ZgogCiAgICAgcHJpdmF0ZToKICAgICAgICAgaW50IHdpZHRoKCkgY29uc3QKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOworICAgICAgICAgICAgcmV0dXJuIG1f
cGl4ZWxzLT53aWR0aCgpOwogICAgICAgICB9CiAKICAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3NpemUuaGVpZ2h0KCk7CisgICAgICAg
ICAgICByZXR1cm4gbV9waXhlbHMtPmhlaWdodCgpOwogICAgICAgICB9CiAKLSAgICAgICAgVmVj
dG9yPFBpeGVsRGF0YT4gbV9iYWNraW5nU3RvcmU7Ci0gICAgICAgIFBpeGVsRGF0YSogbV9ieXRl
czsgLy8gVGhlIG1lbW9yeSBpcyBiYWNrZWQgYnkgbV9iYWNraW5nU3RvcmUuCi0gICAgICAgIElu
dFNpemUgbV9zaXplOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qml0bWFwUGl4ZWxzPiBtX3Bp
eGVsczsKKwogICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCBtX2NvbG9yUHJvZmlsZSBhbnlt
b3JlPwogICAgICAgICBDb2xvclByb2ZpbGUgbV9jb2xvclByb2ZpbGU7CiAgICAgICAgIGJvb2wg
bV9oYXNBbHBoYTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4wNDhmZTcwOTYzMTIzNDk5NjEwOTg5MzRlOWRlNmU1YTgzMmJlY2ZiCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vQml0bWFw
UGl4ZWxzQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
aXRtYXBQaXhlbHMuaCIKKworI2luY2x1ZGUgPGNhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworTmF0aXZlSW1hZ2VQdHIgQml0bWFwUGl4ZWxzOjppbWFnZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKAorICAg
ICAgICByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihjb25zdF9jYXN0PFJHQkEzMio+
KG1fcGl4ZWxzKSksCisgICAgICAgIENBSVJPX0ZPUk1BVF9BUkdCMzIsIHdpZHRoKCksIGhlaWdo
dCgpLCB3aWR0aCgpICogc2l6ZW9mKFJHQkEzMikpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Y2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA3YjQxMjk1Zjg1NzM1OGZiYmYzNWMxYjA1MjVlOGQ2Y2MzNTIwZjU4Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYg
QXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFn
ZURlY29kZXIuaCIKLQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotTmF0aXZlSW1hZ2VQdHIgSW1hZ2VGcmFtZTo6YXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRh
KAotICAgICAgICByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihjb25zdF9jYXN0PFBp
eGVsRGF0YSo+KG1fYnl0ZXMpKSwKLSAgICAgICAgQ0FJUk9fRk9STUFUX0FSR0IzMiwgd2lkdGgo
KSwgaGVpZ2h0KCksIHdpZHRoKCkgKiBzaXplb2YoUGl4ZWxEYXRhKSkpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0K
aW5kZXggMjE2Y2QwOTNmMjY0NjdjYmE4OGE0M2Y2OTNhYmY0Y2Y1MWRkMWE0ZC4uZDExNDU0YjA1
ZWY4ODk5M2E2Mjg5Mzg5NmJjMGMxMTcyOGM1ZWQ1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRp
bWVWaWRlb1NvdXJjZU1hYy5tbQpAQCAtODcsNyArODcsNyBAQCB2b2lkIE1vY2tSZWFsdGltZVZp
ZGVvU291cmNlTWFjOjp1cGRhdGVQbGF0Zm9ybUxheWVyKCkgY29uc3QKICAgICAgICAgaWYgKCFp
bWFnZSkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIG1fcHJldmlld0ltYWdlID0gaW1h
Z2UtPmdldENHSW1hZ2VSZWYoKTsKKyAgICAgICAgbV9wcmV2aWV3SW1hZ2UgPSBpbWFnZS0+bmF0
aXZlSW1hZ2UoKTsKICAgICAgICAgaWYgKCFtX3ByZXZpZXdJbWFnZSkKICAgICAgICAgICAgIGJy
ZWFrOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdl
Q0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNw
cAppbmRleCAzNmNkNjUxNmU4MGYxNzQ4YmZlYWI3N2E5MzAyNzFjMTIxZGU4MDE5Li40YjRlMzc3
OWU5NmY3OGM2NTQwYTUzYzQ0NzhjM2JmZDkzNWY1M2U5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAKQEAgLTEzNiw5ICsxMzYsOSBAQCBEcmFn
SW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiBpbWcsIEltYWdlT3JpZW50
YXRpb25EZXNjcmlwdGlvbikKICAgICBDR0NvbnRleHRTY2FsZUNUTShkcmF3Q29udGV4dCwgMSwg
LTEpOwogICAgIENHQ29udGV4dFNldEZpbGxDb2xvcihkcmF3Q29udGV4dCwgd2hpdGUpOwogICAg
IENHQ29udGV4dEZpbGxSZWN0KGRyYXdDb250ZXh0LCByZWN0KTsKLSAgICBpZiAoYXV0byBzcmNJ
bWFnZSA9IGltZy0+Z2V0Q0dJbWFnZVJlZigpKSB7CisgICAgaWYgKGF1dG8gc3JjSW1hZ2UgPSBp
bWctPm5hdGl2ZUltYWdlKCkpIHsKICAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGRyYXdD
b250ZXh0LCBrQ0dCbGVuZE1vZGVOb3JtYWwpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2Uo
ZHJhd0NvbnRleHQsIHJlY3QsIHNyY0ltYWdlKTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdl
KGRyYXdDb250ZXh0LCByZWN0LCBzcmNJbWFnZS5nZXQoKSk7CiAgICAgfQogICAgIENHQ29udGV4
dFJlbGVhc2UoZHJhd0NvbnRleHQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9N
aXNjL1dlYkNhY2hlLm1tIGIvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDYWNoZS5tbQppbmRl
eCBiNjU5ZDZkYmY5YWQ2OTk5YzNhYzk2MmRlOTUxNTc4MDk3ZTFmM2IxLi43YzVlZDIxMGRkYjJh
MzJhNzY2Njc0YzEyMGQ5OTRjMmZhNDdlN2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21h
Yy9NaXNjL1dlYkNhY2hlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUu
bW0KQEAgLTIwNCw3ICsyMDQsNyBAQCArIChDR0ltYWdlUmVmKWltYWdlRm9yVVJMOihOU1VSTCAq
KXVybAogICAgIFdlYkNvcmU6OkNhY2hlZEltYWdlJiBjYWNoZWRJbWFnZSA9IGRvd25jYXN0PFdl
YkNvcmU6OkNhY2hlZEltYWdlPigqY2FjaGVkUmVzb3VyY2UpOwogICAgIGlmICghY2FjaGVkSW1h
Z2UuaGFzSW1hZ2UoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGNhY2hl
ZEltYWdlLmltYWdlKCktPmdldENHSW1hZ2VSZWYoKTsKKyAgICByZXR1cm4gY2FjaGVkSW1hZ2Uu
aW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKS5nZXQoKTsKIH0KIAogI2VuZGlmIC8vIFBMQVRGT1JNKElP
UykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9jZy9XS0ljb25E
YXRhYmFzZUNHLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9jZy9XS0ljb25E
YXRhYmFzZUNHLmNwcAppbmRleCAwZjZkZTdhMTQ2YTYxMWE1MmFhMWU1MzkwMTlmYTZjMWM0Njcy
NWFlLi4zMDU2MzM2Y2I2NmZlNGFmMThiZGM1MjlhY2EyZjhmYzg4MWRmZTU2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0YWJhc2VDRy5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFiYXNlQ0cu
Y3BwCkBAIC0zNywxMiArMzcsMjMgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiBDR0ltYWdl
UmVmIFdLSWNvbkRhdGFiYXNlVHJ5R2V0Q0dJbWFnZUZvclVSTChXS0ljb25EYXRhYmFzZVJlZiBp
Y29uRGF0YWJhc2VSZWYsIFdLVVJMUmVmIHVybFJlZiwgV0tTaXplIHNpemUpCiB7CiAgICAgSW1h
Z2UqIGltYWdlID0gdG9JbXBsKGljb25EYXRhYmFzZVJlZiktPmltYWdlRm9yUGFnZVVSTCh0b1dU
RlN0cmluZyh1cmxSZWYpKTsKLSAgICByZXR1cm4gaW1hZ2UgPyBpbWFnZS0+Z2V0Rmlyc3RDR0lt
YWdlUmVmT2ZTaXplKEludFNpemUoc3RhdGljX2Nhc3Q8aW50PihzaXplLndpZHRoKSwgc3RhdGlj
X2Nhc3Q8aW50PihzaXplLmhlaWdodCkpKSA6IDA7CisgICAgcmV0dXJuIGltYWdlID8gaW1hZ2Ut
Pm5hdGl2ZUltYWdlT2ZTaXplKEludFNpemUoc3RhdGljX2Nhc3Q8aW50PihzaXplLndpZHRoKSwg
c3RhdGljX2Nhc3Q8aW50PihzaXplLmhlaWdodCkpKS5nZXQoKSA6IG51bGxwdHI7CiB9CiAKIENG
QXJyYXlSZWYgV0tJY29uRGF0YWJhc2VUcnlDb3B5Q0dJbWFnZUFycmF5Rm9yVVJMKFdLSWNvbkRh
dGFiYXNlUmVmIGljb25EYXRhYmFzZVJlZiwgV0tVUkxSZWYgdXJsUmVmKQogewogICAgIEltYWdl
KiBpbWFnZSA9IHRvSW1wbChpY29uRGF0YWJhc2VSZWYpLT5pbWFnZUZvclBhZ2VVUkwodG9XVEZT
dHJpbmcodXJsUmVmKSk7Ci0gICAgcmV0dXJuIGltYWdlID8gaW1hZ2UtPmdldENHSW1hZ2VBcnJh
eSgpLmxlYWtSZWYoKSA6IDA7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICBhdXRvIG5hdGl2ZUltYWdlcyA9IGltYWdlLT5mcmFtZXNOYXRpdmVJbWFnZXMo
KTsKKyAgICBpZiAoIW5hdGl2ZUltYWdlcy5zaXplKCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIAorICAgIENGTXV0YWJsZUFycmF5UmVmIGFycmF5ID0gQ0ZBcnJheUNyZWF0ZU11dGFi
bGUobnVsbHB0ciwgbmF0aXZlSW1hZ2VzLnNpemUoKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcyk7
CisgICAgZm9yIChhdXRvIG5hdGl2ZUltYWdlIDogbmF0aXZlSW1hZ2VzKQorICAgICAgICBDRkFy
cmF5QXBwZW5kVmFsdWUoYXJyYXksIG5hdGl2ZUltYWdlLmdldCgpKTsKKyAgICAKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4oQ0ZSZXRhaW4oYXJyYXkpKTsKIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rp
b24ubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFj
dGlvbi5tbQppbmRleCBkYzc5ODNhYjk4OGMyZDA0YTE3MzBlZTEzNzMwM2MyNDQxNjE1MTk3Li5m
YmMzZTVkNGM1NDMwMWNlOTIxN2E0MGY4ZDA4YmQ1ODM1Mjc4N2M2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bQpAQCAtNDA3MSw3ICs0MDcxLDcgQEAgLSAoVUlJbWFnZSAqKV9wcmVzZW50YXRpb25TbmFwc2hv
dEZvclByZXZpZXdJdGVtQ29udHJvbGxlcjooVUlQcmV2aWV3SXRlbUNvbnRyb2wKIHsKICAgICBp
ZiAoIV9wb3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRpY2F0b3IuY29udGVudEltYWdlKQogICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gW1tbVUlJbWFnZSBhbGxvY10gaW5pdFdp
dGhDR0ltYWdlOl9wb3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRpY2F0b3IuY29udGVudEltYWdl
LT5nZXRDR0ltYWdlUmVmKCldIGF1dG9yZWxlYXNlXTsKKyAgICByZXR1cm4gW1tbVUlJbWFnZSBh
bGxvY10gaW5pdFdpdGhDR0ltYWdlOl9wb3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRpY2F0b3Iu
Y29udGVudEltYWdlLT5uYXRpdmVJbWFnZSgpLmdldCgpXSBhdXRvcmVsZWFzZV07CiB9CiAKIC0g
KE5TQXJyYXkgKilfcHJlc2VudGF0aW9uUmVjdHNGb3JQcmV2aWV3SXRlbUNvbnRyb2xsZXI6KFVJ
UHJldmlld0l0ZW1Db250cm9sbGVyICopY29udHJvbGxlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IDlhMzNmN2NjN2RjN2M3ZDcy
ZjlkYTc0MzA5OGI3ZGJjYTgyNDA5Y2YuLmE1MzI1MTA2NzhiOWY1MzUxNDU4YTM4YTlmNDIzMzc0
N2QwMzVmNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9Q
bHVnaW5WaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1
Z2luVmlldy5jcHAKQEAgLTE3MjcsNjkgKzE3MjcsNiBAQCB2b2lkIFBsdWdpblZpZXc6OndpbmRv
d2VkUGx1Z2luVmlzaWJpbGl0eURpZENoYW5nZShib29sIGlzVmlzaWJsZSwgdWludDY0X3Qgd2lu
ZAogfQogI2VuZGlmCiAKLSNpZiBQTEFURk9STShDT0NPQSkKLXN0YXRpYyBib29sIGlzQWxtb3N0
U29saWRDb2xvcihCaXRtYXBJbWFnZSogYml0bWFwKQotewotICAgIENHSW1hZ2VSZWYgaW1hZ2Ug
PSBiaXRtYXAtPmdldENHSW1hZ2VSZWYoKTsKLSAgICBBU1NFUlQoQ0dJbWFnZUdldEJpdHNQZXJD
b21wb25lbnQoaW1hZ2UpID09IDgpOwotCi0gICAgQ0dCaXRtYXBJbmZvIGltYWdlSW5mbyA9IENH
SW1hZ2VHZXRCaXRtYXBJbmZvKGltYWdlKTsKLSAgICBpZiAoIShpbWFnZUluZm8gJiBrQ0dCaXRt
YXBCeXRlT3JkZXIzMkxpdHRsZSkgfHwgKGltYWdlSW5mbyAmIGtDR0JpdG1hcEFscGhhSW5mb01h
c2spICE9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QpIHsKLSAgICAgICAgLy8gRklY
TUU6IENvbnNpZGVyIGJlaW5nIGFibGUgdG8gaGFuZGxlIG90aGVyIHBpeGVsIGZvcm1hdHMuCi0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotCi0gICAgc2l6ZV90IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKGltYWdlKTsKLSAgICBzaXpl
X3QgaGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChpbWFnZSk7Ci0gICAgc2l6ZV90IGJ5dGVzUGVy
Um93ID0gQ0dJbWFnZUdldEJ5dGVzUGVyUm93KGltYWdlKTsKLQotICAgIFJldGFpblB0cjxDRkRh
dGFSZWY+IHByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNvcHlEYXRhKENHSW1hZ2VH
ZXREYXRhUHJvdmlkZXIoaW1hZ2UpKSk7Ci0gICAgY29uc3QgVUludDgqIGRhdGEgPSBDRkRhdGFH
ZXRCeXRlUHRyKHByb3ZpZGVyLmdldCgpKTsKLQotICAgIC8vIE92ZXJsYXkgYSBncmlkIG9mIHNh
bXBsaW5nIGRvdHMgb24gdG9wIG9mIGEgZ3JheXNjYWxlIHZlcnNpb24gb2YgdGhlIGltYWdlLgot
ICAgIC8vIEZvciB0aGUgaW50ZXJpb3IgcG9pbnRzLCBjYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2Ug
aW4gbHVtaW5hbmNlIGFtb25nIHRoZSBzYW1wbGUgcG9pbnQKLSAgICAvLyBhbmQgaXRzIHN1cnJv
dW5kcyBwb2ludHMsIHNjYWxlZCBieSB0cmFuc3BhcmVuY3kuCi0gICAgY29uc3QgdW5zaWduZWQg
c2FtcGxlUm93cyA9IDc7Ci0gICAgY29uc3QgdW5zaWduZWQgc2FtcGxlQ29scyA9IDc7Ci0gICAg
Ly8gRklYTUU6IFJlZmluZSB0aGUgcHJvcGVyIG51bWJlciBvZiBzYW1wbGVzLCBhbmQgYWNjb21t
b2RhdGUgZGlmZmVyZW50IGFzcGVjdCByYXRpb3MuCi0gICAgaWYgKHdpZHRoIDwgc2FtcGxlQ29s
cyB8fCBoZWlnaHQgPCBzYW1wbGVSb3dzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAv
LyBFbnN1cmUgdGhhdCB0aGUgbGFzdCByb3cvY29sdW1uIGxhbmQgb24gdGhlIGltYWdlIHBlcmlt
ZXRlci4KLSAgICBjb25zdCBmbG9hdCBzdHJpZGVXaWR0aCA9IHN0YXRpY19jYXN0PGZsb2F0Pih3
aWR0aCAtIDEpIC8gKHNhbXBsZUNvbHMgLSAxKTsKLSAgICBjb25zdCBmbG9hdCBzdHJpZGVIZWln
aHQgPSBzdGF0aWNfY2FzdDxmbG9hdD4oaGVpZ2h0IC0gMSkgLyAoc2FtcGxlUm93cyAtIDEpOwot
ICAgIGZsb2F0IHNhbXBsZXNbc2FtcGxlUm93c11bc2FtcGxlQ29sc107Ci0KLSAgICAvLyBGaW5k
IHRoZSBsdW1pbmFuY2Ugb2YgdGhlIHNhbXBsZSBwb2ludHMuCi0gICAgZmxvYXQgeSA9IDA7Ci0g
ICAgY29uc3QgVUludDgqIHJvdyA9IGRhdGE7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNhbXBsZVJvd3M7ICsraSkgewotICAgICAgICBmbG9hdCB4ID0gMDsKLSAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gMDsgaiA8IHNhbXBsZUNvbHM7ICsraikgewotICAgICAgICAgICAgY29uc3Qg
VUludDgqIHAwID0gcm93ICsgKHN0YXRpY19jYXN0PGludD4oeCArIC41KSkgKiA0OwotICAgICAg
ICAgICAgLy8gUiBHIEIgQQotICAgICAgICAgICAgc2FtcGxlc1tpXVtqXSA9ICgwLjIxMjUgKiAq
cDAgKyAwLjcxNTQgKiAqKHAwKzEpICsgMC4wNzIxICogKihwMCsyKSkgKiAqKHAwKzMpIC8gMjU1
OwotICAgICAgICAgICAgeCArPSBzdHJpZGVXaWR0aDsKLSAgICAgICAgfQotICAgICAgICB5ICs9
IHN0cmlkZUhlaWdodDsKLSAgICAgICAgcm93ID0gZGF0YSArIChzdGF0aWNfY2FzdDxpbnQ+KHkg
KyAuNSkpICogYnl0ZXNQZXJSb3c7Ci0gICAgfQotCi0gICAgLy8gRGV0ZXJtaW5lIHRoZSBpbWFn
ZSBzY29yZS4KLSAgICBmbG9hdCBhY2N1bVNjb3JlID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkg
PSAxOyBpIDwgc2FtcGxlUm93cyAtIDE7ICsraSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGog
PSAxOyBqIDwgc2FtcGxlQ29scyAtIDE7ICsraikgewotICAgICAgICAgICAgZmxvYXQgZGlmZiA9
IHNhbXBsZXNbaSAtIDFdW2pdICsgc2FtcGxlc1tpICsgMV1bal0gKyBzYW1wbGVzW2ldW2ogLSAx
XSArIHNhbXBsZXNbaV1baiArIDFdIC0gNCAqIHNhbXBsZXNbaV1bal07Ci0gICAgICAgICAgICBh
Y2N1bVNjb3JlICs9IGRpZmYgKiBkaWZmOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhl
IHNjb3JlIGZvciBhIGdpdmVuIHNhbXBsZSBjYW4gYmUgd2l0aGluIHRoZSByYW5nZSBvZiAwIGFu
ZCAyNTVeMi4KLSAgICByZXR1cm4gYWNjdW1TY29yZSA8IDI1MDAgKiAoc2FtcGxlUm93cyAtIDIp
ICogKHNhbXBsZUNvbHMgLSAyKTsKLX0KLSNlbmRpZgotCiB2b2lkIFBsdWdpblZpZXc6OnBsdWdp
blNuYXBzaG90VGltZXJGaXJlZCgpCiB7CiAjaWYgRU5BQkxFKFBSSU1BUllfU05BUFNIT1RURURf
UExVR0lOX0hFVVJJU1RJQykKQEAgLTE4MDksNyArMTc0Niw3IEBAIHZvaWQgUGx1Z2luVmlldzo6
cGx1Z2luU25hcHNob3RUaW1lckZpcmVkKCkKIAogICAgICAgICBpZiAoc25hcHNob3RJbWFnZSkg
ewogI2lmIEVOQUJMRShQUklNQVJZX1NOQVBTSE9UVEVEX1BMVUdJTl9IRVVSSVNUSUMpCi0gICAg
ICAgICAgICBib29sIHNuYXBzaG90SXNBbG1vc3RTb2xpZENvbG9yID0gaXNBbG1vc3RTb2xpZENv
bG9yKGRvd25jYXN0PEJpdG1hcEltYWdlPihzbmFwc2hvdEltYWdlLmdldCgpKSk7CisgICAgICAg
ICAgICBib29sIHNuYXBzaG90SXNBbG1vc3RTb2xpZENvbG9yID0gc3RhdGljX3BvaW50ZXJfY2Fz
dDxCaXRtYXBJbWFnZT4oc25hcHNob3RJbWFnZSktPmlzQWxtb3N0U29saWRDb2xvcigpOwogICAg
ICAgICAgICAgc25hcHNob3RGb3VuZCA9ICFzbmFwc2hvdElzQWxtb3N0U29saWRDb2xvcjsKICNl
bmRpZgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283443</attachid>
            <date>2016-07-12 13:04:03 -0700</date>
            <delta_ts>2016-07-12 14:48:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159679-20160712130320.patch</filename>
            <type>text/plain</type>
            <size>134846</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzMTAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWM1YmQ5YmQwNmExOWJl
NWNhMDJjNTE3MmQ2ZWYyZWJiZmVjMWMxOS4uMDNjMzQwODkyMzNlZDQ0NWU2YmEyNmRjNDBiNzcy
MGJlNzUwODMxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIyNiBAQAorMjAxNi0wNy0xMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0
IHRoZSBwaXhlbCBkYXRhIG9mIEltYWdlRnJhbWUgdG8gYSBzZXBhcmF0ZSBjbGFzcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5Njc5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgcGl4ZWwg
ZGF0YSBtYW5pcHVsYXRpb24gcGFydCBpbiBJbWFnZUZyYW1lIGludG8gYSBzZXBhcmF0ZSBjbGFz
cworICAgICAgICBhbmQgdGhlbiBtYWtlIGl0IG9wdGlvbmFsIChhbGxvY2F0ZWQgb24gZGVtYW5k
KS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2lu
Q2Fpcm8uY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFBpeGVsczo6Qml0bWFwUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBp
eGVsczo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpoZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFBpeGVsczo6YXQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmNsZWFyUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OnJlcGVhdEZpcnN0Um93KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcFBpeGVsczo6c2V0UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQ
aXhlbHM6Om92ZXJSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6aW5Cb3Vu
ZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Om11bHRpcGx5MjU1KToKKyAgICAgICAgKFdlYkNvcmU6OmRpdmlkZTI1NSk6CisgICAg
ICAgIChXZWJDb3JlOjpkaXZpZGVDZWlsKToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxp
ZWRDaGFubmVsKToKKyAgICAgICAgKFdlYkNvcmU6OnVucHJlbXVsdGlwbGllZENoYW5uZWwpOgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZVByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VVblByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6cGl4ZWxzKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWVEYXRhOjpoYXNQaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y2xlYXJQaXhl
bERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGxQaXhlbERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGxGcmFtZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weUJpdG1hcERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojpjb3B5Um93TlRpbWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0UkdCQSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpnZXRBZGRyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6Omhhc1BpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpvdmVyUkdC
QSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjp3aWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
Y29weVJvd05UaW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpm
aXhQb2ludFVuc2lnbmVkTXVsdGlwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6ZGl2aWRlMjU1KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHA6IFJlbmFtZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5j
cHAuCisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmltYWdlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3cpOgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpzZXRQaXhlbCk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVy
OjpvdXRwdXRTY2FubGluZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Bu
Zy9QTkdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxSR0IpOgor
ICAgICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFBp
eGVsUHJlbXVsdGlwbGllZFJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVy
Ojpyb3dBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpmcmFt
ZUNvbXBsZXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJ
bWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0VCUEltYWdlRGVjb2Rlcjo6ZGVj
b2RlKToKKworMjAxNi0wNy0xMSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBw
bGUsY29tPgorCisgICAgICAgIFJlbmFtZSBGcmFtZURhdGEgdG8gSW1hZ2VGcmFtZURhdGEgYW5k
IG1vdmUgaXQgdG8gYSBzZXBhcmF0ZSBmaWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTU0NDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBNb3ZlIEltYWdlRnJhbWVEYXRhIHRvIGEgc2VwYXJhdGUgZmls
ZSBzbyBpdCBjYW4gYmUgY2FjaGVkIGJ5IEltYWdlU291cmNlCisgICAgICAgIGFuZCB3aWxsIHN0
aWxsIGJlIGNvbnN1bWVkIGJ5IEJpdG1hcEltYWdlLiBNYWtlIHRoZSBkYXRhIG1lbWJlcnMgb2Yg
SW1hZ2VGcmFtZURhdGEKKyAgICAgICAgYmUgcHJpdmF0ZSBhbmQgYWRkIGdldHRlcnMgdG8gcmV0
dXJuIHRoZWlyIHZhbHVlcy4KKworICAgICAgICBObyBuZXcgdGVzdHMgLS0gQ29kZSByZWZhY3Rv
cmluZywgbm8gYmVoYXZpb3IgY2hhbmdlLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cEltYWdlOjpCaXRtYXBJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6aGF2
ZUZyYW1lSW1hZ2VBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0
cm95RGVjb2RlZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lE
ZWNvZGVkRGF0YUlmTmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpj
YWNoZUZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZW5zdXJlRnJhbWVJc0NhY2hlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OkJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleCk6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6Qml0bWFwSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6aXNBbG1vc3RTb2xpZENvbG9yKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRh
OjpGcmFtZURhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp+RnJh
bWVEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6dXNlZEZyYW1l
Qnl0ZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlU291cmNlOjpjcmVhdGVGcmFtZURhdGFBdElu
ZGV4KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ltYWdlRnJhbWVEYXRhLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6SW1hZ2VGcmFtZURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZURhdGE6On5JbWFnZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lRGF0YTo6Y2xlYXJTdWJJbWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZURhdGE6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpz
aW5nbGVQaXhlbFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6
OmlzQWxtb3N0U29saWRDb2xvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaW1hZ2VG
cmFtZURhdGEuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6c3Rh
dHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjppc0NvbXBsZXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRnJhbWVEYXRhOjpmcmFtZUJ5dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWVEYXRhOjppbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6b3JpZW50
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OnN1YnNhbXBsaW5nTGV2
ZWwpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmR1cmF0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpoYXNBbHBoYSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lRGF0YTo6aGFzSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFt
ZURhdGE6Omhhc01ldGFkYXRhKToKKworMjAxNi0wNi0yNCAgU2FpZCBBYm91LUhhbGxhd2EgIDxz
YWJvdWhhbGxhd2FAYXBwbGUsY29tPgorCisgICAgICAgIEludHJvZHVjZSBQbGF0Zm9ybUltYWdl
IGFuZCBtYWtlIGl0IGlzIGEgd3JhcHBlciBmb3IgTmF0aXZlSW1hZ2VQdHIKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODY4NAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSBtYWluIHB1cnBvc2Ugb2Yg
dGhpcyByZWZhY3RvcmluZyBpcyB0byBtb3ZlIHRoZSBwbGF0Zm9ybSBpbWFnZSBkZXBlbmRlbnQK
KyAgICAgICAgY29kZSBmcm9tIEJpdG1hcEltYWdlIHRvIFBsYXRmb3JtSW1hZ2UuIFBsYXRmb3Jt
SW1hZ2UgaXMgcmVzcG9uc2libGUgb2YgCisgICAgICAgIGRyYXdpbmcgdGhlIGltYWdlIGFuZCBh
bnN3ZXJpbmcgTmF0aXZlSW1hZ2VQdHIgcXVlc3Rpb25zIHdoZW4gYW4gSW1hZ2VEZWNvZGVyCisg
ICAgICAgIGlzIG5vdCBhdmFpbGFibGUuIEFwYXJ0IGZyb20gZHJhd2luZyB0aGUgaW1hZ2UsIHRo
ZSBxdWVyeSBmdW5jdGlvbnMgd2lsbCBiZQorICAgICAgICBjYWxsZWQgb25seSB3aGVuIGNvbnN0
cnVjdGluZyBhIEZyYW1lRGF0YSBzbyB3ZSB3aWxsIGtlZXAgZXZlcnl0aGluZyBhcyBhCisgICAg
ICAgIE5hdGl2ZUltYWdlUHRyLiBCdXQgd2Ugd2lsbCBjYXN0IHRoZSBOYXRpdmVJbWFnZVB0ciB0
byBQbGF0Zm9ybUltYWdlIHdoZW4KKyAgICAgICAgYSBwbGF0Zm9ybSBkZXBlbmRlbnQgZnVuY3Rp
b24gaXMgbmVlZGVkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAtLSBDb2RlIHJlZmFjdG9yaW5n
LCBubyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAgKiBQbGF0Zm9ybUFwcGxlV2luLmNtYWtl
OgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtTWFjLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2lu
Q2Fpcm8uY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGJpbmRpbmdzL29iamMvRE9NLm1tOgorICAgICAgICAoLVtET01Ob2RlIGdl
dFByZXZpZXdTbmFwc2hvdEltYWdlOmFuZFJlY3RzOl0pOgorICAgICAgICAqIHBhZ2UvbWFjL1Rl
eHRJbmRpY2F0b3JXaW5kb3cubW06CisgICAgICAgICgtW1dlYlRleHRJbmRpY2F0b3JWaWV3IGlu
aXRXaXRoRnJhbWU6dGV4dEluZGljYXRvcjptYXJnaW46b2Zmc2V0Ol0pOgorICAgICAgICAoY3Jl
YXRlQ29udGVudENyb3NzZmFkZUFuaW1hdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvQml0bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1h
cEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkZXN0cm95RGVjb2RlZERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlm
TmVjZXNzYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkYXRhQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Qml0bWFwSW1hZ2U6OmZyYW1lc05hdGl2ZUltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBJbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFw
SW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmg6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OkZyYW1lRGF0YSk6CisgICAgICAgIG1faGFz
QWxwaGEgY2FuIGJlIGluaXRpYWxpemVkIHdpdGggZmFsc2UgYmVjYXVzZSBpdCBpcyBhY2Nlc3Nl
ZCBvbmx5IGluCisgICAgICAgIEJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJbmRleCgpIGFu
ZCBpdCBpcyBndWFyZGVkIGJ5IG1faGF2ZU1ldGFkYXRhLgorICAgICAgICBCb3RoIG1faGF2ZU1l
dGFkYXRhIGFuZCBtX2hhc0FscGhhIGFyZSBzZXQgaW4gQml0bWFwSW1hZ2UgY29uc3RydWN0b3IK
KyAgICAgICAgYW5kIGluIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKCkuCisKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lRGF0YTo6fkZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURh
dGE6OmNsZWFyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2U6Om5hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
OjpuYXRpdmVJbWFnZU9mU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZnJhbWVzTmF0
aXZlSW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpnZXRDR0ltYWdlUmVmKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmdldENHSW1hZ2VBcnJheSk6IERl
bGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OlBsYXRmb3JtSW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6aXNOaWwpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1JbWFnZTo6Y2dJbWFnZVJlZik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1t
OgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpD
Ojp1cGRhdGVEaXNwbGF5TW9kZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
UGxhdGZvcm1JbWFnZUNhaXJvLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwLgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1JbWFnZTo6Y2xlYXJTdWJJbWFnZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1JbWFnZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpoYXNB
bHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaW5nbGVQaXhlbFNvbGlk
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6aXNBbG1vc3RTb2xpZENv
bG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHA6IFJlbW92ZWQuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBh
dHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUGxhdGZvcm1JbWFnZUNHLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUltYWdlOjpjbGVhclN1YkltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUlt
YWdlOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IpOiBN
b3ZlZCBmcm9tIFBsdWdpblZpZXcuY3BwIHNpbmNlIFBsYXRmb3JtSW1hZ2UgaXMgd2hhdCB0aGlz
IGZ1bmN0aW9uIGJlbG9uZ3MgdG8uCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpz
dWJzYW1wbGluZ1NjYWxlKTogUmV0dXJucyB0aGUgc3ViLXNhbXBsaW5nIHNjYWxlIGJhc2VkIG9u
IHRoZSBjb250ZXh0IHNjYWxpbmcuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpk
cmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9UZXh0VHJhY2tSZXByZXNl
bnRhdGlvbkNvY29hLm1tOgorICAgICAgICAoVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYTo6
dXBkYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW06Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Z2V0VElGRlJlcHJlc2VudGF0aW9uKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6dXBk
YXRlUGxhdGZvcm1MYXllcik6CisgICAgICAgICogcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2lu
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZSk6CisKIDIw
MTYtMDctMTEgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBTcGVlY2gg
U3ludGhlc2lzOiBnZXR0aW5nIGxpc3Qgb2Ygdm9pY2VzIG5vIGxvbmdlciB3b3JrcwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9tYWMvQ2hh
bmdlTG9nCmluZGV4IGMxYmMwYmJkZTM2MTI1YzQ2MmJmNDgxZGRhZDVkZDJmODI3ZDUyMzkuLjE4
ZDFlYmViZWU5MjBiMmYyOWVmMzI4NzdkZWQyZTFlY2ZmOTdkNDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMyBAQAorMjAxNi0wNy0xMSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhh
bGxhd2FAYXBwbGUsY29tPgorCisgICAgICAgIEludHJvZHVjZSBQbGF0Zm9ybUltYWdlIGFuZCBt
YWtlIGl0IGlzIGEgd3JhcHBlciBmb3IgTmF0aXZlSW1hZ2VQdHIKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1ODY4NAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogTWlzYy9XZWJDYWNoZS5tbToKKyAgICAg
ICAgKCtbV2ViQ2FjaGUgaW1hZ2VGb3JVUkw6XSk6CisKIDIwMTYtMDctMTEgIEVucmljYSBDYXN1
Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgc3ludGhldGljIGNsaWNrIG9y
aWdpbiB0byBXS05hdmlnYXRpb25BY3Rpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYjQ3ZTJjZWE3OWE4ZGQ3
YzUzMzVkMmNkNThlNzk2MTUzMzVjNTAyYy4uZjFmMTY3MjU4NGMwZWU4MTg1OGE3ZTk2NTUzYWNk
OWNkMGFjNmZlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDE2LTA3LTExICBTYWlk
IEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAgSW50cm9k
dWNlIFBsYXRmb3JtSW1hZ2UgYW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVyIGZvciBOYXRpdmVJbWFn
ZVB0cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU4
Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0YWJhc2VDRy5jcHA6CisgICAgICAgIChXS0ljb25E
YXRhYmFzZVRyeUdldENHSW1hZ2VGb3JVUkwpOgorICAgICAgICAoV0tJY29uRGF0YWJhc2VUcnlD
b3B5Q0dJbWFnZUFycmF5Rm9yVVJMKToKKyAgICAgICAgSXQgd2FzIHRoZSBvbmx5IHBsYWNlIGlu
IHRoZSBjb2RlIHdoaWNoIHVzZXMgQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VBcnJheSgpLgorICAg
ICAgICBDYWxsIEJpdG1hcEltYWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMoKSBpbnN0ZWFkIGFuZCBm
b3JtIHRoZSByZXR1cm5lZAorICAgICAgICBWZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGJ1aWxkIHRo
ZSBDRkFycmF5UmVmLgorICAgICAgICAKKyAgICAgICAgKiBVSVByb2Nlc3MvaW9zL1dLQ29udGVu
dFZpZXdJbnRlcmFjdGlvbi5tbToKKyAgICAgICAgKC1bV0tDb250ZW50VmlldyBfcHJlc2VudGF0
aW9uU25hcHNob3RGb3JQcmV2aWV3SXRlbUNvbnRyb2xsZXI6XSk6CisgICAgICAgICogV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbHVnaW5WaWV3
OjpwbHVnaW5TbmFwc2hvdFRpbWVyRmlyZWQpOgorICAgICAgICAKKyAgICAgICAgKFdlYktpdDo6
aXNBbG1vc3RTb2xpZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgTW92ZSB0aGUgc3RhdGljIGZ1
bmN0aW9uIGlzQWxtb3N0U29saWRDb2xvciB0byBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlk
Q29sb3IoKS4KKwogMjAxNi0wNy0xMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgog
CiAgICAgICAgIFtXSzJdW2lPU10gSW50ZXJtaXR0ZW50IGNyYXNoIGluIFtVSUFwcGxpY2F0aW9u
IGJlZ2luQmFja2dyb3VuZFRhc2tXaXRoTmFtZV0gZXhwaXJhdGlvbiBoYW5kbGVyCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CmluZGV4IGU3OGIwNDJiMTA0MDFlMWY0ZWUzYTJhYjFhMDUyYzIxOGMzYTExZTMu
LjIyNmVjOWI4NGU3MjJmZmYzZTJmMDRkY2U3ZGI3MGUzZGQ0YjgzYjYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CkBAIC0yMjI2LDYgKzIyMjYsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvSVNPVlRUQ3VlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmNwcAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
T3JpZW50YXRpb24uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW50UG9pbnQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBs
ZVdpbi5jbWFrZQppbmRleCA1ZmY5OTFmZjdkYTMwOGJiOTE4MmVjZTNiZjEyMTczMGE1NDhkMjg3
Li5iYWUzMWVhZjg2ZTdmY2E5MDU4MjUwOTJhYTM4YTc4YzExZTQyMjAyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtQXBwbGVXaW4uY21ha2UKQEAgLTU1LDcgKzU1LDYgQEAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dlYlRpbGVkQmFja2lu
Z0xheWVyV2luLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9XS0NBQ0ZWaWV3TGF5
ZXJUcmVlSG9zdC5jcHAKIAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cu
Y3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQ29sb3JDRy5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9GbG9hdFBvaW50Q0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvRmxv
YXRSZWN0Q0cuY3BwCkBAIC03NSw2ICs3NCw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNF
UwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvUGF0aENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1Bh
dHRlcm5DRy5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4IDUxNDUwNGU2ZWMyNWFhNWU0M2I5OTM5OGQ1ZTM1Y2Vl
ZWE3NjZhYTQuLjY0YWUxNzEwODlkY2JmMGNkNDViNzBhOWI4ZjcwZWZhOWZmZGVkYmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0xMjIsNyArMTIyLDYgQEAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNwcAog
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQmFja2luZ1N0b3JlQmFja2VuZENhaXJvSW1w
bC5jcHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcApAQCAtMTM0LDYgKzEzMyw3IEBAIGxpc3QoQVBQ
RU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdGhDYWly
by5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXR0ZXJuQ2Fpcm8uY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1Db250ZXh0Q2Fpcm8uY3BwCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL1JlZlB0ckNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Ry
YW5zZm9ybWF0aW9uTWF0cml4Q2Fpcm8uY3BwCkBAIC0xNzksOSArMTc5LDkgQEAgbGlzdChBUFBF
TkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MveDExL1BsYXRmb3JtRGlz
cGxheVgxMS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy94MTEvWFVuaXF1ZVJlc291cmNlLmNw
cAogCi0gICAgcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvSlBFR0ltYWdlRW5jb2Rlci5jcHAKKyAg
ICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHAKIAot
ICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAor
ICAgIHBsYXRmb3JtL2ltYWdlLWVuY29kZXJzL0pQRUdJbWFnZUVuY29kZXIuY3BwCiAKICAgICBw
bGF0Zm9ybS9uZXR3b3JrL2VmbC9OZXR3b3JrU3RhdGVOb3RpZmllckVmbC5jcHAKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUdUSy5jbWFrZQppbmRleCA2NDVhZGQxY2UzODg4OGIwNGQ0YTJkODlhZGEwYTdjNmRl
MTk5ODZiLi5kMzFmNTcwNmE2OTU5YjIzMWI1YmZiMjJmMDdkMTg0M2FlODYxYTFlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMTAxLDcgKzEwMSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUwogCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQmFja2luZ1N0b3JlQmFj
a2VuZENhaXJvSW1wbC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3Rv
cmVCYWNrZW5kQ2Fpcm9YMTEuY3BwCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFw
SW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9DYWlyb1V0aWxpdGll
cy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9GbG9hdFJlY3RDYWlyby5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCkBAIC0xMTUsNiArMTE0LDcg
QEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWly
by5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxhdGZvcm1QYXRoQ2Fpcm8uY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vVHJhbnNmb3JtYXRpb25NYXRyaXhDYWlyby5jcHAKQEAgLTE0OSw3ICsxNDksNyBA
QCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5
TGlua1N0dWJzLmNwcAogICAgIHBsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuY3BwCiAKLSAgICBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKKyAgICBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHAKIAogICAg
IHBsYXRmb3JtL21lZGlhc3RyZWFtL2d0ay9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZUd0ay5j
cHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1NYWMuY21ha2UgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQppbmRleCA5ZjZmNDk2YjZjYzRlZjZlNGI3NGQ4
NGFjMGFhOWRlYTU1YTAyMzdiLi40ZGRlZDMwODhmNGYzOTZmZWY0NDRlN2VlNjVjNjQxMDY1OGY1
ODQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQorKysgYi9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZQpAQCAtMzk3LDcgKzM5Nyw2IEBAIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1dl
YlN5c3RlbUJhY2tkcm9wTGF5ZXIubW0KICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9X
ZWJUaWxlZEJhY2tpbmdMYXllci5tbQogCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFw
SW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Db2xvckNHLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9pbnRDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9GbG9hdFJlY3RDRy5jcHAKQEAgLTQxNyw2ICs0MTYsNyBAQCBsaXN0KEFQUEVORCBXZWJD
b3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QREZEb2N1bWVudEltYWdlLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdGhDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9QYXR0ZXJuQ0cuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1J
bWFnZUNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1N1YmltYWdlQ2FjaGVXaXRoVGlt
ZXIuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5j
cHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZSBi
L1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKaW5kZXggMmM1NTNiMDU1MWRh
ZDY5YWExOTlkOTYwZjU1MjM0M2Q5MjBmMDdiMy4uMzQyYWE5MjczMmZkOGY5MmU4NWNmYTYyNmQ1
NTU3MGVmNjZiNmE2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWly
by5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCkBAIC0y
MSw3ICsyMSw2IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0dMQ29udGV4dC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3Bs
YXkuY3BwCiAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Zsb2F0UmVjdENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKQEAgLTM0LDYgKzMzLDcgQEAgbGlzdChBUFBFTkQg
V2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vUGxhdGZvcm1QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vUmVmUHRyQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNm
b3JtYXRpb25NYXRyaXhDYWlyby5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0
ZU1lZGlhRm91bmRhdGlvbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9u
dERhdGFDYWlyb1dpbi5jcHAKIAotICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0lt
YWdlRGVjb2RlckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0Jp
dG1hcFBpeGVsc0NhaXJvLmNwcAogCiAgICAgcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFn
ZVNlc3Npb25TdHViLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzExYmM0N2U1Y2FkNjMwYTM2NTdjZGUxYWQ5ZjdiNzZh
MGE1NWM2Ni4uZmYyYTQ5OGJhOTZiODFkYTAzZjgxYTMwMWE4NWJlMzc0ZDBlYzY1OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MTQ4NCw3ICsxNDg0LDcgQEAKIAkJMzc1Q0QyMzIxMTlENDNDODAwQTJBODU5IC8qIEh5cGhlbmF0
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzVD
RDIzMTExOUQ0M0M4MDBBMkE4NTkgLyogSHlwaGVuYXRpb24uaCAqLzsgfTsKIAkJMzc2RENDRTEx
M0I0Rjk2NjAwMkVCRUZDIC8qIFRleHRSdW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzc2RENDRTAxM0I0Rjk2NjAwMkVCRUZDIC8qIFRleHRSdW4u
Y3BwICovOyB9OwogCQkzNzc0QUJBNTBGQTIxRUI0MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1
ZXN0Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzNzc0QUJBMzBGQTIxRUI0MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMzc3QTNB
OTAxNUVGQ0U5QjAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8q
IEJpdG1hcEltYWdlQ0cuY3BwICovOyB9OworCQkzNzdBM0E5MDE1RUZDRTlCMDA1OUY1QzcgLyog
UGxhdGZvcm1JbWFnZUNHLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3Bw
ICovOyB9OwogCQkzNzkxOUMyMzBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzkxOUMy
MTBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRvci5jcHAgKi87IH07CiAJCTM3OTE5
QzI0MEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzkxOUMyMjBCN0QxODg2MDBBNTY5OTgg
LyogUG9zaXRpb25JdGVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07
IH07CiAJCTM3OTI5MTdBMTk4NUVGMzkwMEY0QjY2MSAvKiBDcmVkZW50aWFsQmFzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc5MjkxNzgxOTg1RUYz
OTAwRjRCNjYxIC8qIENyZWRlbnRpYWxCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIzMjUsMTAgKzIzMjUsMTQgQEAKIAkJNTNFRDNGREYx
NjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTNFRDNGREQxNjdBODhFNzAw
Njc2MkU2IC8qIEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZC5oICovOyB9OwogCQk1M0VGNzY2
QjE2NTMwQTYxMDA0Q0JFNDkgLyogU2V0dGluZ3NNYWNyb3MuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRUY3NjZBMTY1MzBBNjEwMDRDQkU0OSAvKiBT
ZXR0aW5nc01hY3Jvcy5oICovOyB9OwogCQk1M0VGNzY2QzE2NTMxOTk0MDA0Q0JFNDkgLyogU2V0
dGluZ3NNYWNyb3MuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUzRUY3NjZBMTY1MzBBNjEwMDRDQkU0OSAvKiBTZXR0aW5nc01h
Y3Jvcy5oICovOyB9OworCQk1NTA0RTRDQjFEMzU1N0IyMDBGRTUwODggLyogQml0bWFwUGl4ZWxz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTA0RTRD
QTFEMzU1MzJEMDBGRTUwODggLyogQml0bWFwUGl4ZWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTUwQTBCQzkwODVGNjAzOTAwNzM1M0Q2IC8q
IFF1YWxpZmllZE5hbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTUwQTBCQzcwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICov
OyB9OwogCQk1NTBBMEJDQTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVGNjAz
OTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQk1NTVCODdFQzFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VE
ZWNvZGVyQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTU1Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLzsgfTsK
IAkJNTU1Qjg3RUQxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTVCODdFQjFDQUFGMEFCMDAz
NDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCAqLzsgfTsKKwkJNTU3NEYwODcxRDAyNzkwOTAwQjlG
MTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU1NzRGMDg1MUQwMjc0NDQwMEI5RjE0QyAvKiBQbGF0Zm9ybUltYWdlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNTVDQkE2
QTExRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1Q0JBNjlGMUQxREYyRTEwMDQ1MTg2MCAv
KiBJbWFnZUZyYW1lRGF0YS5jcHAgKi87IH07CisJCTU1Q0JBNkEyMUQxREYyRTEwMDQ1MTg2MCAv
KiBJbWFnZUZyYW1lRGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTVDQkE2QTAxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNTcyQTdGMjEx
QzZFNTcxOTAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzJBN0YyMDFDNkU1NzE5MDA5QzYxNDkgLyogU2lt
dWxhdGVkQ2xpY2suaCAqLzsgfTsKIAkJNTcyQTdGMjMxQzZFNUE2NjAwOUM2MTQ5IC8qIFNpbXVs
YXRlZENsaWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU3MkE3RjIyMUM2RTVBNjYwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5jcHAgKi87IH07
CiAJCTU3RUY1RTYwMUQyMEM4MzkwMDE3MUU2MCAvKiBUZXh0Q29kZWNSZXBsYWNlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdFRjVFNUYxRDIw
QzgzOTAwMTcxRTYwIC8qIFRleHRDb2RlY1JlcGxhY2VtZW50LmggKi87IH07CkBAIC05MDYxLDcg
KzkwNjUsNyBAQAogCQkzNzZEQ0NFMDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0UnVuLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc3MkIwOTUxNjUzNTg1NjAwMEE0OUNBIC8qIFBvcHVwT3Bl
bmluZ09ic2VydmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvcHVwT3Bl
bmluZ09ic2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NzRBQkEzMEZB
MjFFQjQwMEFEN0RFOSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBCaXRtYXBJ
bWFnZUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdG1hcElt
YWdlQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkzNzdBM0E4RjE1RUZDRTlB
MDA1OUY1QzcgLyogUGxhdGZvcm1JbWFnZUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFBsYXRmb3JtSW1hZ2VDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTM3OTE5QzIxMEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQb3NpdGlvbkl0ZXJhdG9yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc5MTlDMjIwQjdEMTg4NjAwQTU2OTk4
IC8qIFBvc2l0aW9uSXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBvc2l0aW9uSXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc5Mjkx
NzgxOTg1RUYzOTAwRjRCNjYxIC8qIENyZWRlbnRpYWxCYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENyZWRlbnRpYWxCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC05OTg5LDEwICs5OTkzLDE0IEBACiAJCTUzRUQzRkRDMTY3QTg4RTcwMDY3NjJFNiAv
KiBKU0ludGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSlNJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNFRDNGREQxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJu
YWxTZXR0aW5nc0dlbmVyYXRlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0ludGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNTNFRjc2NkExNjUzMEE2MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNldHRpbmdzTWFjcm9zLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTU1MDRFNENBMUQzNTUzMkQwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQml0bWFwUGl4ZWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTU1MEEwQkM3MDg1RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGgg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxp
ZmllZE5hbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNU
YWJzID0gMDsgfTsKIAkJNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50
V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUXVh
bGlmaWVkTmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNU
YWJzID0gMDsgfTsKIAkJNTU1Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNH
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlRGVjb2RlckNH
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5
NDI1IC8qIEltYWdlRGVjb2RlckNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEltYWdlRGVjb2RlckNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1NzRGMDg1
MUQwMjc0NDQwMEI5RjE0QyAvKiBQbGF0Zm9ybUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRm
b3JtSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVDQkE2OUYxRDFERjJF
MTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEltYWdlRnJhbWVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNTVDQkE2QTAxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlRnJhbWVEYXRhLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTU1RDQwOEY3MUE3QzYzMTgwMEM3ODQ1MCAvKiBTVkdJbWFnZUNs
aWVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHSW1hZ2VDbGllbnRz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MkE3RjIwMUM2RTU3MTkwMDlDNjE0
OSAvKiBTaW11bGF0ZWRDbGljay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
aW11bGF0ZWRDbGljay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzJBN0YyMjFD
NkU1QTY2MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2ltdWxhdGVkQ2xpY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMjIwMjQsNyArMjIwMzIsNiBAQAogCQlCMjc1MzUyOTBCMDUzODE0MDAyQ0U2
NEYgLyogY2cgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJ
CTM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCAqLywKIAkJCQkw
RkNGMzMyMzBGMkI5NzE1MDA0QjY3OTUgLyogQ29sb3JDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkIw
QjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0UG9pbnRDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkMwQjA1
MzgxNDAwMkNFNjRGIC8qIEZsb2F0UmVjdENHLmNwcCAqLywKQEAgLTIyMDUxLDYgKzIyMDU4LDcg
QEAKIAkJCQlBODBBMzhGRDBFNTBDQzgyMDBBMjVFQkMgLyogUGF0dGVybkNHLmNwcCAqLywKIAkJ
CQlCMjc1MzUzNjBCMDUzODE0MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5jcHAgKi8sCiAJ
CQkJQjI3NTM1MzcwQjA1MzgxNDAwMkNFNjRGIC8qIFBERkRvY3VtZW50SW1hZ2UuaCAqLywKKwkJ
CQkzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogUGxhdGZvcm1JbWFnZUNHLmNwcCAqLywKIAkJ
CQkxRkM0MEZCODE2NTVDNTkxMDA0MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAg
Ki8sCiAJCQkJMUZDNDBGQjcxNjU1QzU5MTAwNDBGMjlFIC8qIFN1YmltYWdlQ2FjaGVXaXRoVGlt
ZXIuaCAqLywKIAkJCQlCMjc1MzUyQTBCMDUzODE0MDAyQ0U2NEYgLyogVHJhbnNmb3JtYXRpb25N
YXRyaXhDRy5jcHAgKi8sCkBAIC0yMjExOCw2ICsyMjEyNiw3IEBACiAJCQkJQkVGMjlFRTkxNzE1
REQwOTAwQzRCNEM5IC8qIEF1ZGlvVHJhY2tQcml2YXRlLmggKi8sCiAJCQkJQTg5OTQzMjcwQjQy
MzM4NzAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmNwcCAqLywKIAkJCQlBODk5NDMyNjBCNDIzMzg3
MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuaCAqLywKKwkJCQk1NTA0RTRDQTFEMzU1MzJEMDBGRTUw
ODggLyogQml0bWFwUGl4ZWxzLmggKi8sCiAJCQkJQ0RERTAyRTkxOEIzREZDNzAwQ0Y3RkYxIC8q
IENETVNlc3Npb24uaCAqLywKIAkJCQlCMjc1MzUzODBCMDUzODE0MDAyQ0U2NEYgLyogQ29sb3Iu
Y3BwICovLAogCQkJCUIyNzUzNTM5MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5oICovLApAQCAt
MjIyMDIsNiArMjIyMTEsOCBAQAogCQkJCTQzRDI1OTc2MTNDODE2RjQwMDYwODU1OSAvKiBJbWFn
ZUJ1ZmZlci5jcHAgKi8sCiAJCQkJQjJBMTBCOTEwQjM4MThCRDAwMDk5QUE0IC8qIEltYWdlQnVm
ZmVyLmggKi8sCiAJCQkJMjJCRDlGN0QxMzUzNjI1QzAwOUJEMTAyIC8qIEltYWdlQnVmZmVyRGF0
YS5oICovLAorCQkJCTU1Q0JBNjlGMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFnZUZyYW1lRGF0YS5j
cHAgKi8sCisJCQkJNTVDQkE2QTAxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmgg
Ki8sCiAJCQkJQkM3RjQ0QTcwQjlFMzI0RTAwQTlEMDgxIC8qIEltYWdlT2JzZXJ2ZXIuaCAqLywK
IAkJCQlBODc0OEQ3NDEyQ0MzRjg5MDAxRkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5jcHAgKi8s
CiAJCQkJQTg3NDhENjYxMkNDMzc2MzAwMUZCQTQxIC8qIEltYWdlT3JpZW50YXRpb24uaCAqLywK
QEAgLTIyMjUxLDYgKzIyMjYyLDcgQEAKIAkJCQkyRDUwMDJGQTFCNTZENzk5MDAyMEFBRjcgLyog
UGF0aFV0aWxpdGllcy5oICovLAogCQkJCUE4RkE2RTVDMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0
ZXJuLmNwcCAqLywKIAkJCQlBOEZBNkU1QjBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oICov
LAorCQkJCTU1NzRGMDg1MUQwMjc0NDQwMEI5RjE0QyAvKiBQbGF0Zm9ybUltYWdlLmggKi8sCiAJ
CQkJMDU2MkY5NjAxNTczRjg4RjAwMzFDQTE2IC8qIFBsYXRmb3JtTGF5ZXIuaCAqLywKIAkJCQlD
RUVGQ0Q3QjE5REIzM0RDMDAzODc2RDcgLyogUGxhdGZvcm1NZWRpYVJlc291cmNlTG9hZGVyLmgg
Ki8sCiAJCQkJMDcyODQ3RTIxNkVCQzVCMDAwNDNDRkE0IC8qIFBsYXRmb3JtVGV4dFRyYWNrLmgg
Ki8sCkBAIC0yNjAxOCw2ICsyNjAzMCw3IEBACiAJCQkJODVFNzExQjkwQUM1RDUzNTAwNTMyNzBG
IC8qIERPTUhUTUxNYXBFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNTE1
NzlGMEMwM0JCRDMwMDhCQjBFRSAvKiBET01IVE1MTWFycXVlZUVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDNTE1NkVBMEMwM0I3NDEwMDhCQjBFRSAvKiBET01IVE1MTWFycXVlZUVsZW1l
bnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTU3NEYwODcxRDAyNzkwOTAwQjlGMTRD
IC8qIFBsYXRmb3JtSW1hZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERUM2NjU1MUM4MkQwNDEw
MDk5ODQ2QSAvKiBET01IVE1MTWVkaWFFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyREVD
NjY1MTFDODJEMDE2MDA5OTg0NkEgLyogRE9NSFRNTE1lZGlhRWxlbWVudEludGVybmFsLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NUJBNEQxMzBBQTY4ODY4MDA4ODA1MkQgLyogRE9NSFRNTE1lbnVF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTI2NDU5LDYgKzI2NDcyLDcgQEAKIAkJCQlEMzU5
RDc4QTEyOUNBMjcxMDAwNkU1RDIgLyogSFRNTERldGFpbHNFbGVtZW50LmggaW4gSGVhZGVycyAq
LywKIAkJCQlBOEVBNzlGQTBBMTkxNkRGMDBBOEVGNUYgLyogSFRNTERpcmVjdG9yeUVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE3Q0I3MEExOTJCOUMwMEE4RUY1RiAvKiBIVE1MRGl2
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTVDQkE2QTIxRDFERjJFMTAwNDUxODYwIC8q
IEltYWdlRnJhbWVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEVBNzlGNzBBMTkxNkRGMDBB
OEVGNUYgLyogSFRNTERMaXN0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTNGMTk4RTUw
ODI0NUU1OTAwMUU5QUJDIC8qIEhUTUxEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc3
QjM4NjcxMjI4ODNFOTAwQjgxRkY4IC8qIEhUTUxEb2N1bWVudFBhcnNlci5oIGluIEhlYWRlcnMg
Ki8sCkBAIC0yODM1OSw2ICsyODM3Myw3IEBACiAJCQkJQjIyMjc5OTMwRDAwQkYyMjAwNzFCNzgy
IC8qIFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk5
NTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIyMjI3OTk4MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdBbmltYXRpb25FbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk1NTA0RTRDQjFEMzU1N0IyMDBGRTUwODggLyogQml0
bWFwUGl4ZWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzlEMzM0NTEzQTY5MTFDMDBDMjBGNEYg
LyogU1ZHQW5pbWF0b3JGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwOEZCM0Y4NDEzQkM3
NTRDMDA5OUZDMTggLyogU1ZHQXR0cmlidXRlVG9Qcm9wZXJ0eU1hcC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQjIyMjc5OUMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0NpcmNsZUVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLApAQCAtMjk0MTEsNyArMjk0MjYsNyBAQAogCQkJCUZEQzU0RjA0MTM5OUIwREEw
MDhEOTExNyAvKiBCaXF1YWRGaWx0ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZEMzE2
MDI2MTJCMDI2NzYwMEMxQTM1OSAvKiBCaXF1YWRQcm9jZXNzb3IuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTg5OTQzMjkwQjQyMzM4ODAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmNwcCBpbiBTb3Vy
Y2VzICovLAotCQkJCTM3N0EzQTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTM3N0EzQTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBQbGF0Zm9y
bUltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTc2RDZDNzgxMjJCOEEzRDAwMUZEMUY3
IC8qIEJsb2IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkVERUYxRjMxMjFCMEVGQzAwNzI2REIy
IC8qIEJsb2JEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxRDMxQ0RDMTkxOTYwMjAwMDEw
MDVBMyAvKiBCbG9iRGF0YUZpbGVSZWZlcmVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTc3
NCw2ICsyOTc4OSw3IEBACiAJCQkJMkUyRDk5RTgxMEUyQkMxQzAwNDk2MzM3IC8qIERPTUJsb2Iu
bW0gaW4gU291cmNlcyAqLywKIAkJCQk4NTA4OUNEODBBOThDNDI4MDBBMjc1QUEgLyogRE9NQ0RB
VEFTZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODVBQ0E5ODcwQTlCNTIwMzAwNjcxRTkw
IC8qIERPTUNoYXJhY3RlckRhdGEubW0gaW4gU291cmNlcyAqLywKKwkJCQk1NUNCQTZBMTFEMURG
MkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODUw
ODlDREEwQTk4QzQyODAwQTI3NUFBIC8qIERPTUNvbW1lbnQubW0gaW4gU291cmNlcyAqLywKIAkJ
CQk5NzhEMDdCRTE0NUEwRjZDMDA5NjkwOEQgLyogRE9NQ29yZUV4Y2VwdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NThDMzhBNjBBQThGMjA0MDBCMTg3QTQgLyogRE9NQ291bnRlci5tbSBp
biBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9E
T00ubW0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQppbmRleCA0MDExZWEz
ZmQ4YzA0Njk3NGM1NWQ0OGUzOTZmMWI4M2I4MWYzMzVkLi5hNWFjNGYwNWFlMzM5YThkNjQ3MDZj
MTBmYzBmN2FmNDA0MjU2MjNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9v
YmpjL0RPTS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbQpAQCAt
NjA2LDcgKzYwNiw3IEBAIC0gKHZvaWQpZ2V0UHJldmlld1NuYXBzaG90SW1hZ2U6KENHSW1hZ2VS
ZWYqKWNnSW1hZ2UgYW5kUmVjdHM6KE5TQXJyYXkgKiopcmVjdHMKIAogICAgIGlmICh0ZXh0SW5k
aWNhdG9yKSB7CiAgICAgICAgIGlmIChJbWFnZSogaW1hZ2UgPSB0ZXh0SW5kaWNhdG9yLT5jb250
ZW50SW1hZ2UoKSkKLSAgICAgICAgICAgICpjZ0ltYWdlID0gKENHSW1hZ2VSZWYpQ0ZBdXRvcmVs
ZWFzZShDR0ltYWdlUmV0YWluKGltYWdlLT5nZXRDR0ltYWdlUmVmKCkpKTsKKyAgICAgICAgICAg
ICpjZ0ltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlKCkuYXV0b3JlbGVhc2UoKTsKICAgICB9CiAK
ICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IHJlY3RBcnJheSA9IGFkb3B0TlMoW1tOU011
dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvbWFjL1Rl
eHRJbmRpY2F0b3JXaW5kb3cubW0KaW5kZXggMzY0YTlhODdjZTZmMDY2Mzk0OGI4ODQ2ZThlMmNl
NmQxOTBmMjQ4OS4uYTc0ZGE4NWFjZWNhM2M2Njk4ZGQxNTZhYjMxYTZjOTcxYTM1NGU2ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCkBAIC0x
NjIsOSArMTYyLDkgQEAgLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KE5TUmVjdClmcmFt
ZSB0ZXh0SW5kaWNhdG9yOihQYXNzUmVmUHRyPFRleHRJbmRpY2EKICAgICBjb250ZW50c0ltYWdl
TG9naWNhbFNpemUuc2NhbGUoMSAvIF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VTY2FsZUZh
Y3RvcigpKTsKICAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZTsKICAgICBp
ZiAoaW5kaWNhdG9yV2FudHNDb250ZW50Q3Jvc3NmYWRlKCpfdGV4dEluZGljYXRvcikpCi0gICAg
ICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdlV2l0aEhpZ2hs
aWdodCgpLT5nZXRDR0ltYWdlUmVmKCk7CisgICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dElu
ZGljYXRvci0+Y29udGVudEltYWdlV2l0aEhpZ2hsaWdodCgpLT5uYXRpdmVJbWFnZSgpOwogICAg
IGVsc2UKLSAgICAgICAgY29udGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1h
Z2UoKS0+Z2V0Q0dJbWFnZVJlZigpOworICAgICAgICBjb250ZW50c0ltYWdlID0gX3RleHRJbmRp
Y2F0b3ItPmNvbnRlbnRJbWFnZSgpLT5uYXRpdmVJbWFnZSgpOwogCiAgICAgUmV0YWluUHRyPE5T
TXV0YWJsZUFycmF5PiBib3VuY2VMYXllcnMgPSBhZG9wdE5TKFtbTlNNdXRhYmxlQXJyYXkgYWxs
b2NdIGluaXRdKTsKIApAQCAtMjY1LDcgKzI2NSw3IEBAIHN0YXRpYyBSZXRhaW5QdHI8Q0FLZXlm
cmFtZUFuaW1hdGlvbj4gY3JlYXRlQm91bmNlQW5pbWF0aW9uKENGVGltZUludGVydmFsIGR1cmF0
CiBzdGF0aWMgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGNyZWF0ZUNvbnRlbnRDcm9zc2Zh
ZGVBbmltYXRpb24oQ0ZUaW1lSW50ZXJ2YWwgZHVyYXRpb24sIFRleHRJbmRpY2F0b3ImIHRleHRJ
bmRpY2F0b3IpCiB7CiAgICAgUmV0YWluUHRyPENBQmFzaWNBbmltYXRpb24+IGNyb3NzZmFkZUFu
aW1hdGlvbiA9IFtDQUJhc2ljQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOkAiY29udGVu
dHMiXTsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudHNJbWFnZSA9IHRleHRJbmRp
Y2F0b3IuY29udGVudEltYWdlKCktPmdldENHSW1hZ2VSZWYoKTsKKyAgICBSZXRhaW5QdHI8Q0dJ
bWFnZVJlZj4gY29udGVudHNJbWFnZSA9IHRleHRJbmRpY2F0b3IuY29udGVudEltYWdlKCktPm5h
dGl2ZUltYWdlKCk7CiAgICAgW2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRUb1ZhbHVlOihpZCljb250
ZW50c0ltYWdlLmdldCgpXTsKICAgICBbY3Jvc3NmYWRlQW5pbWF0aW9uIHNldEZpbGxNb2RlOmtD
QUZpbGxNb2RlRm9yd2FyZHNdOwogICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0UmVtb3ZlZE9u
Q29tcGxldGlvbjpOT107CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9CaXRtYXBJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9C
aXRtYXBJbWFnZS5jcHAKaW5kZXggNDYwZDFiODU2Yjc3YjdjZjRlYzY4OTY1ODFiODMzZDNlN2Y5
NzAxNC4uZmM2NDlkMTBhYWI5YzEzZmZmMjkzMDU1YTcwN2NiNzQ1Mzc0NjkxOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcApAQCAtNjgs
MTUgKzY4LDEzIEBAIEJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShOYXRpdmVJbWFnZVB0ciYmIGlt
YWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICAsIG1faGF2ZUZyYW1lQ291bnQodHJ1
ZSkKICAgICAsIG1fYW5pbWF0aW9uRmluaXNoZWRXaGVuQ2F0Y2hpbmdVcChmYWxzZSkKIHsKKyAg
ICBtX2ZyYW1lcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDEpOworICAgIG1fZnJhbWVzLnVuY2hl
Y2tlZEFwcGVuZChXVEZNb3ZlKGltYWdlKSk7CisgICAgCiAgICAgLy8gU2luY2Ugd2UgZG9uJ3Qg
aGF2ZSBhIGRlY29kZXIsIHdlIGNhbid0IGZpZ3VyZSBvdXQgdGhlIGltYWdlIG9yaWVudGF0aW9u
LgogICAgIC8vIFNldCBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gdG8gYmUgdGhlIHNhbWUg
YXMgbV9zaXplIHNvIGl0J3Mgbm90IDB4MC4KLSAgICBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRp
b24gPSBtX3NpemUgPSBOYXRpdmVJbWFnZTo6c2l6ZShpbWFnZSk7CisgICAgbV9zaXplUmVzcGVj
dGluZ09yaWVudGF0aW9uID0gbV9zaXplID0gbV9mcmFtZXNbMF0uc2l6ZSgpOwogICAgIG1fZGVj
b2RlZFNpemUgPSBtX3NpemUuYXJlYSgpICogNDsKLSAgICAKLSAgICBtX2ZyYW1lcy5ncm93KDEp
OwotICAgIG1fZnJhbWVzWzBdLm1faGFzQWxwaGEgPSBOYXRpdmVJbWFnZTo6aGFzQWxwaGEoaW1h
Z2UpOwotICAgIG1fZnJhbWVzWzBdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKLSAgICBtX2ZyYW1l
c1swXS5tX2ltYWdlID0gV1RGTW92ZShpbWFnZSk7CiB9CiAKIEJpdG1hcEltYWdlOjp+Qml0bWFw
SW1hZ2UoKQpAQCAtMTA1LDcgKzEwMyw3IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmhhdmVGcmFtZUlt
YWdlQXRJbmRleChzaXplX3QgaW5kZXgpCiAgICAgaWYgKGluZGV4ID49IG1fZnJhbWVzLnNpemUo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5t
X2ltYWdlOworICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0uaGFzSW1hZ2UoKTsKIH0KIAogYm9v
bCBCaXRtYXBJbWFnZTo6aGFzU2luZ2xlU2VjdXJpdHlPcmlnaW4oKSBjb25zdApAQCAtMTI1LDkg
KzEyMyw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YShib29sIGRlc3Ry
b3lBbGwpCiAgICAgICAgIC8vIFRoZSB1bmRlcmx5aW5nIGZyYW1lIGlzbid0IGFjdHVhbGx5IGNo
YW5naW5nICh3ZSdyZSBqdXN0IHRyeWluZyB0bwogICAgICAgICAvLyBzYXZlIHRoZSBtZW1vcnkg
Zm9yIHRoZSBmcmFtZWJ1ZmZlciBkYXRhKSwgc28gd2UgZG9uJ3QgbmVlZCB0byBjbGVhcgogICAg
ICAgICAvLyB0aGUgbWV0YWRhdGEuCi0gICAgICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMgPSBtX2Zy
YW1lc1tpXS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1tpXS5jbGVhcihmYWxz
ZSkpCi0gICAgICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSBmcmFtZUJ5dGVzOworICAgICAg
ICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSBtX2ZyYW1lc1tpXS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6
Q2FjaGluZzo6TWV0YWRhdGEpOwogICAgIH0KIAogICAgIG1fc291cmNlLmNsZWFyKGRlc3Ryb3lB
bGwsIGNsZWFyQmVmb3JlRnJhbWUsIGRhdGEoKSwgbV9hbGxEYXRhUmVjZWl2ZWQpOwpAQCAtMTUw
LDggKzE0Niw4IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YUlmTmVjZXNz
YXJ5KGJvb2wgZGVzdHJveUFsbCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgYWxs
RnJhbWVCeXRlcyA9IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lcy5zaXpl
KCk7ICsraSkKLSAgICAgICAgYWxsRnJhbWVCeXRlcyArPSBtX2ZyYW1lc1tpXS51c2VkRnJhbWVC
eXRlcygpOworICAgIGZvciAoYXV0byYgZnJhbWUgOiBtX2ZyYW1lcykKKyAgICAgICAgYWxsRnJh
bWVCeXRlcyArPSBmcmFtZS5mcmFtZUJ5dGVzKCk7CiAKICAgICBpZiAoYWxsRnJhbWVCeXRlcyA+
IGxhcmdlQW5pbWF0aW9uQ3V0b2ZmKSB7CiAgICAgICAgIExPRyhJbWFnZXMsICJCaXRtYXBJbWFn
ZSAlcCBkZXN0cm95RGVjb2RlZERhdGFJZk5lY2Vzc2FyeSBkZXN0cm95aW5nRGF0YTogYWxsRnJh
bWVCeXRlcz0ldSBjdXRvZmY9JXUiLCB0aGlzLCBhbGxGcmFtZUJ5dGVzLCBsYXJnZUFuaW1hdGlv
bkN1dG9mZik7CkBAIC0xNzcsNyArMTczLDcgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZGVzdHJveU1l
dGFkYXRhQW5kTm90aWZ5KHVuc2lnbmVkIGZyYW1lQnl0ZXNDbGVhcmVkLCBDbGVhcmVkU28KICAg
ICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kZWNvZGVkU2l6ZUNoYW5nZWQodGhpcywgLXNhZmVDYXN0
PGludD4oZnJhbWVCeXRlc0NsZWFyZWQpKTsKIH0KIAotdm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVG
cmFtZShzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgSW1h
Z2VGcmFtZUNhY2hpbmcgZnJhbWVDYWNoaW5nKQordm9pZCBCaXRtYXBJbWFnZTo6Y2FjaGVGcmFt
ZShzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VG
cmFtZURhdGE6OkNhY2hpbmcgY2FjaGluZykKIHsKICAgICBzaXplX3QgbnVtRnJhbWVzID0gZnJh
bWVDb3VudCgpOwogICAgIEFTU0VSVChtX2RlY29kZWRTaXplID09IDAgfHwgbnVtRnJhbWVzID4g
MSk7CkBAIC0xODUsMjUgKzE4MSwxMiBAQCB2b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNp
emVfdCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbQogICAgIGlm
IChtX2ZyYW1lcy5zaXplKCkgPCBudW1GcmFtZXMpCiAgICAgICAgIG1fZnJhbWVzLmdyb3cobnVt
RnJhbWVzKTsKIAotICAgIGlmIChmcmFtZUNhY2hpbmcgPT0gQ2FjaGVNZXRhZGF0YUFuZEZyYW1l
KSB7Ci0gICAgICAgIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlID0gbV9zb3VyY2UuY3JlYXRlRnJh
bWVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOwotICAgICAgICBtX2ZyYW1l
c1tpbmRleF0ubV9zdWJzYW1wbGluZ0xldmVsID0gc3Vic2FtcGxpbmdMZXZlbDsKLSAgICB9Ci0K
LSAgICBtX2ZyYW1lc1tpbmRleF0ubV9vcmllbnRhdGlvbiA9IG1fc291cmNlLm9yaWVudGF0aW9u
QXRJbmRleChpbmRleCk7Ci0gICAgbV9mcmFtZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRhID0gdHJ1
ZTsKLSAgICBtX2ZyYW1lc1tpbmRleF0ubV9pc0NvbXBsZXRlID0gbV9zb3VyY2UuZnJhbWVJc0Nv
bXBsZXRlQXRJbmRleChpbmRleCk7CisgICAgbV9mcmFtZXNbaW5kZXhdID0gbV9zb3VyY2UuY3Jl
YXRlRnJhbWVEYXRhQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgY2FjaGluZyk7CiAK
LSAgICBpZiAocmVwZXRpdGlvbkNvdW50KGZhbHNlKSAhPSBjQW5pbWF0aW9uTm9uZSkKLSAgICAg
ICAgbV9mcmFtZXNbaW5kZXhdLm1fZHVyYXRpb24gPSBtX3NvdXJjZS5mcmFtZUR1cmF0aW9uQXRJ
bmRleChpbmRleCk7CisgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdlICVwIGNhY2hlRnJhbWUg
JWx1ICglcyV1IGJ5dGVzLCBjb21wbGV0ZSAlZCkiLCB0aGlzLCBpbmRleCwgY2FjaGluZyA9PSBJ
bWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEgPyAibWV0YWRhdGEgb25seSwgIiA6ICIi
LCBtX2ZyYW1lc1tpbmRleF0uZnJhbWVCeXRlcygpLCBtX2ZyYW1lc1tpbmRleF0uaXNDb21wbGV0
ZSgpKTsKIAotICAgIG1fZnJhbWVzW2luZGV4XS5tX2hhc0FscGhhID0gbV9zb3VyY2UuZnJhbWVI
YXNBbHBoYUF0SW5kZXgoaW5kZXgpOwotICAgIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXMg
PSBtX3NvdXJjZS5mcmFtZUJ5dGVzQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7Ci0K
LSAgICBMT0coSW1hZ2VzLCAiQml0bWFwSW1hZ2UgJXAgY2FjaGVGcmFtZSAlbHUgKCVzJXUgYnl0
ZXMsIGNvbXBsZXRlICVkKSIsIHRoaXMsIGluZGV4LCBmcmFtZUNhY2hpbmcgPT0gQ2FjaGVNZXRh
ZGF0YU9ubHkgPyAibWV0YWRhdGEgb25seSwgIiA6ICIiLCBtX2ZyYW1lc1tpbmRleF0ubV9mcmFt
ZUJ5dGVzLCBtX2ZyYW1lc1tpbmRleF0ubV9pc0NvbXBsZXRlKTsKLQotICAgIGlmIChtX2ZyYW1l
c1tpbmRleF0ubV9pbWFnZSkgewotICAgICAgICBpbnQgZGVsdGFCeXRlcyA9IHNhZmVDYXN0PGlu
dD4obV9mcmFtZXNbaW5kZXhdLm1fZnJhbWVCeXRlcyk7CisgICAgaWYgKG1fZnJhbWVzW2luZGV4
XS5oYXNJbWFnZSgpKSB7CisgICAgICAgIGludCBkZWx0YUJ5dGVzID0gc2FmZUNhc3Q8aW50Piht
X2ZyYW1lc1tpbmRleF0uZnJhbWVCeXRlcygpKTsKICAgICAgICAgbV9kZWNvZGVkU2l6ZSArPSBk
ZWx0YUJ5dGVzOwogICAgICAgICAvLyBUaGUgZnVsbHktZGVjb2RlZCBmcmFtZSB3aWxsIHN1YnN1
bWUgdGhlIHBhcnRpYWxseSBkZWNvZGVkIGRhdGEgdXNlZAogICAgICAgICAvLyB0byBkZXRlcm1p
bmUgaW1hZ2UgcHJvcGVydGllcy4KQEAgLTI4OCwyMSArMjcxLDE5IEBAIGJvb2wgQml0bWFwSW1h
Z2U6OmRhdGFDaGFuZ2VkKGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogICAgIC8vIGZyYW1lIGFmZmVj
dGVkIGJ5IGFwcGVuZGluZyBuZXcgZGF0YSBoZXJlLiBUaHVzIHdlIGhhdmUgdG8gY2xlYXIgYWxs
IHRoZQogICAgIC8vIGluY29tcGxldGUgZnJhbWVzIHRvIGJlIHNhZmUuCiAgICAgdW5zaWduZWQg
ZnJhbWVCeXRlc0NsZWFyZWQgPSAwOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9mcmFt
ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICBmb3IgKGF1dG8mIGZyYW1lIDogbV9mcmFtZXMpIHsKICAg
ICAgICAgLy8gTk9URTogRG9uJ3QgY2FsbCBmcmFtZUlzQ29tcGxldGVBdEluZGV4KCkgaGVyZSwg
dGhhdCB3aWxsIHRyeSB0bwogICAgICAgICAvLyBkZWNvZGUgYW55IHVuY2FjaGVkIChpLmUuIG5l
dmVyLWRlY29kZWQgb3IKICAgICAgICAgLy8gY2xlYXJlZC1vbi1hLXByZXZpb3VzLXBhc3MpIGZy
YW1lcyEKLSAgICAgICAgdW5zaWduZWQgZnJhbWVCeXRlcyA9IG1fZnJhbWVzW2ldLm1fZnJhbWVC
eXRlczsKLSAgICAgICAgaWYgKG1fZnJhbWVzW2ldLm1faGF2ZU1ldGFkYXRhICYmICFtX2ZyYW1l
c1tpXS5tX2lzQ29tcGxldGUpCi0gICAgICAgICAgICBmcmFtZUJ5dGVzQ2xlYXJlZCArPSAobV9m
cmFtZXNbaV0uY2xlYXIodHJ1ZSkgPyBmcmFtZUJ5dGVzIDogMCk7CisgICAgICAgIGlmIChmcmFt
ZS5oYXNNZXRhZGF0YSgpICYmICFmcmFtZS5pc0NvbXBsZXRlKCkpCisgICAgICAgICAgICBmcmFt
ZUJ5dGVzQ2xlYXJlZCArPSBmcmFtZS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6RW1w
dHkpOwogICAgIH0KICAgICBkZXN0cm95TWV0YWRhdGFBbmROb3RpZnkoZnJhbWVCeXRlc0NsZWFy
ZWQsIENsZWFyZWRTb3VyY2U6Ok5vKTsKICNlbHNlCiAgICAgLy8gRklYTUU6IHdoeSBpcyB0aGlz
IGRpZmZlcmVudCBmb3IgaU9TPwogICAgIGludCBkZWx0YUJ5dGVzID0gMDsKICAgICBpZiAoIW1f
ZnJhbWVzLmlzRW1wdHkoKSkgewotICAgICAgICBpbnQgYnl0ZXMgPSBtX2ZyYW1lc1ttX2ZyYW1l
cy5zaXplKCkgLSAxXS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIGlmIChtX2ZyYW1lc1ttX2ZyYW1l
cy5zaXplKCkgLSAxXS5jbGVhcih0cnVlKSkgeworICAgICAgICBpZiAoaW50IGJ5dGVzID0gbV9m
cmFtZXNbbV9mcmFtZXMuc2l6ZSgpIC0gMV0uY2xlYXIoSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6
OkVtcHR5KSkgewogICAgICAgICAgICAgZGVsdGFCeXRlcyArPSBieXRlczsKICAgICAgICAgICAg
IGRlbHRhQnl0ZXMgKz0gbV9kZWNvZGVkUHJvcGVydGllc1NpemU7CiAgICAgICAgICAgICBtX2Rl
Y29kZWRQcm9wZXJ0aWVzU2l6ZSA9IDA7CkBAIC0zNjYsMTUgKzM0NywxNSBAQCBib29sIEJpdG1h
cEltYWdlOjppc1NpemVBdmFpbGFibGUoKQogICAgIHJldHVybiBtX3NpemVBdmFpbGFibGU7CiB9
CiAKLWJvb2wgQml0bWFwSW1hZ2U6OmVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4LCBJ
bWFnZUZyYW1lQ2FjaGluZyBmcmFtZUNhY2hpbmcpCitib29sIEJpdG1hcEltYWdlOjplbnN1cmVG
cmFtZUlzQ2FjaGVkKHNpemVfdCBpbmRleCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgY2FjaGlu
ZykKIHsKICAgICBpZiAoaW5kZXggPj0gZnJhbWVDb3VudCgpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpCi0gICAgICAgIHx8IChmcmFt
ZUNhY2hpbmcgPT0gQ2FjaGVNZXRhZGF0YUFuZEZyYW1lICYmICFtX2ZyYW1lc1tpbmRleF0ubV9p
bWFnZSkKLSAgICAgICAgfHwgKGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhT25seSAmJiAh
bV9mcmFtZXNbaW5kZXhdLm1faGF2ZU1ldGFkYXRhKSkKLSAgICAgICAgY2FjaGVGcmFtZShpbmRl
eCwgMCwgZnJhbWVDYWNoaW5nKTsKKyAgICAgICAgfHwgKGNhY2hpbmcgPT0gSW1hZ2VGcmFtZURh
dGE6OkNhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UgJiYgIW1fZnJhbWVzW2luZGV4XS5oYXNJbWFn
ZSgpKQorICAgICAgICB8fCAoY2FjaGluZyA9PSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0
YWRhdGEgJiYgIW1fZnJhbWVzW2luZGV4XS5oYXNNZXRhZGF0YSgpKSkKKyAgICAgICAgY2FjaGVG
cmFtZShpbmRleCwgMCwgY2FjaGluZyk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTM4OCwx
MCArMzY5LDkgQEAgTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4
KHNpemVfdCBpbmRleCwgZmxvYXQgcHJlc2VudGF0aW9uU2MKIAogICAgIC8vIFdlIG1heSBoYXZl
IGNhY2hlZCBhIGZyYW1lIHdpdGggYSBoaWdoZXIgc3Vic2FtcGxpbmcgbGV2ZWwsIGluIHdoaWNo
IGNhc2Ugd2UgbmVlZCB0bwogICAgIC8vIHJlLWRlY29kZSB3aXRoIGEgbG93ZXIgbGV2ZWwuCi0g
ICAgaWYgKGluZGV4IDwgbV9mcmFtZXMuc2l6ZSgpICYmIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdl
ICYmIHN1YnNhbXBsaW5nTGV2ZWwgPCBtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1wbGluZ0xldmVs
KSB7CisgICAgaWYgKGluZGV4IDwgbV9mcmFtZXMuc2l6ZSgpICYmIG1fZnJhbWVzW2luZGV4XS5o
YXNJbWFnZSgpICYmIHN1YnNhbXBsaW5nTGV2ZWwgPCBtX2ZyYW1lc1tpbmRleF0uc3Vic2FtcGxp
bmdMZXZlbCgpKSB7CiAgICAgICAgIC8vIElmIHRoZSBpbWFnZSBpcyBhbHJlYWR5IGNhY2hlZCwg
YnV0IGF0IHRvbyBzbWFsbCBhIHNpemUsIHJlLWRlY29kZSBhIGxhcmdlciB2ZXJzaW9uLgotICAg
ICAgICBpbnQgc2l6ZUNoYW5nZSA9IC1tX2ZyYW1lc1tpbmRleF0ubV9mcmFtZUJ5dGVzOwotICAg
ICAgICBtX2ZyYW1lc1tpbmRleF0uY2xlYXIodHJ1ZSk7CisgICAgICAgIGludCBzaXplQ2hhbmdl
ID0gLW1fZnJhbWVzW2luZGV4XS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6RW1wdHkp
OwogICAgICAgICBpbnZhbGlkYXRlUGxhdGZvcm1EYXRhKCk7CiAgICAgICAgIG1fZGVjb2RlZFNp
emUgKz0gc2l6ZUNoYW5nZTsKICAgICAgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKQEAgLTM5OSw0
MCArMzc5LDcyIEBAIE5hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRl
eChzaXplX3QgaW5kZXgsIGZsb2F0IHByZXNlbnRhdGlvblNjCiAgICAgfQogCiAgICAgLy8gSWYg
d2UgaGF2ZW4ndCBmZXRjaGVkIGEgZnJhbWUgeWV0LCBkbyBzby4KLSAgICBpZiAoaW5kZXggPj0g
bV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZSkKLSAgICAgICAgY2Fj
aGVGcmFtZShpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgQ2FjaGVNZXRhZGF0YUFuZEZyYW1lKTsK
KyAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRleF0uaGFz
SW1hZ2UoKSkKKyAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgSW1h
Z2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOworCisgICAgcmV0dXJuIG1f
ZnJhbWVzW2luZGV4XS5pbWFnZSgpOworfQorICAgIAorTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1h
Z2U6Om5hdGl2ZUltYWdlKCkKK3sKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCk7Cit9
CisgICAgCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VPZlNpemUoY29u
c3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7Cisg
ICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGF1
dG8gaW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleChpKTsKKyAgICAgICAgaWYgKGltYWdlICYmIFBs
YXRmb3JtSW1hZ2UoaW1hZ2UpLnNpemUoKSA9PSBzaXplKQorICAgICAgICAgICAgcmV0dXJuIGlt
YWdlOworICAgIH0KKyAgICAKKyAgICAvLyBGYWxsYmFjayB0byB0aGUgZmlyc3QgZnJhbWUgaW1h
Z2UgaWYgd2UgY2FuJ3QgZmluZCB0aGUgcmlnaHQgc2l6ZQorICAgIHJldHVybiBmcmFtZUltYWdl
QXRJbmRleCgwKTsKK30KKyAgICAKK05hdGl2ZUltYWdlUHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSgpCit7CisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KG1f
Y3VycmVudEZyYW1lKTsKK30KIAotICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9pbWFnZTsK
K1ZlY3RvcjxOYXRpdmVJbWFnZVB0cj4gQml0bWFwSW1hZ2U6OmZyYW1lc05hdGl2ZUltYWdlcygp
Cit7CisgICAgVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBpbWFnZXM7CisgICAgc2l6ZV90IGNvdW50
ID0gZnJhbWVDb3VudCgpOworICAgIAorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7
ICsraSkgeworICAgICAgICBpZiAoYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpKQor
ICAgICAgICAgICAgaW1hZ2VzLmFwcGVuZChpbWFnZSk7CisgICAgfQorICAgIAorICAgIHJldHVy
biBpbWFnZXM7CiB9CiAKIGJvb2wgQml0bWFwSW1hZ2U6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgo
c2l6ZV90IGluZGV4KQogewotICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCwgQ2Fj
aGVNZXRhZGF0YU9ubHkpKQorICAgIGlmICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCwgSW1h
Z2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2lzQ29tcGxldGU7CisgICAgcmV0dXJuIG1f
ZnJhbWVzW2luZGV4XS5pc0NvbXBsZXRlKCk7CiB9CiAKIGZsb2F0IEJpdG1hcEltYWdlOjpmcmFt
ZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlz
Q2FjaGVkKGluZGV4LCBDYWNoZU1ldGFkYXRhT25seSkpCisgICAgaWYgKCFlbnN1cmVGcmFtZUlz
Q2FjaGVkKGluZGV4LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEpKQogICAgICAg
ICByZXR1cm4gMDsKIAotICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ubV9kdXJhdGlvbjsKLX0K
LQotTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCkKLXsKLSAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoY3VycmVudEZyYW1lKCkpOworICAg
IHJldHVybiBtX2ZyYW1lc1tpbmRleF0uZHVyYXRpb24oKTsKIH0KIAogYm9vbCBCaXRtYXBJbWFn
ZTo6ZnJhbWVIYXNBbHBoYUF0SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlmICghZW5zdXJl
RnJhbWVJc0NhY2hlZChpbmRleCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQorICAgIGlmICghZW5zdXJl
RnJhbWVJc0NhY2hlZChpbmRleCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhKSkK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAobV9mcmFtZXNbaW5kZXhdLm1faGF2ZU1l
dGFkYXRhKQotICAgICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faGFzQWxwaGE7CisgICAg
aWYgKG1fZnJhbWVzW2luZGV4XS5oYXNNZXRhZGF0YSgpKQorICAgICAgICByZXR1cm4gbV9mcmFt
ZXNbaW5kZXhdLmhhc0FscGhhKCk7CiAKICAgICByZXR1cm4gbV9zb3VyY2UuZnJhbWVIYXNBbHBo
YUF0SW5kZXgoaW5kZXgpOwogfQpAQCAtNDQ0LDExICs0NTYsMTEgQEAgYm9vbCBCaXRtYXBJbWFn
ZTo6Y3VycmVudEZyYW1lS25vd25Ub0JlT3BhcXVlKCkKIAogSW1hZ2VPcmllbnRhdGlvbiBCaXRt
YXBJbWFnZTo6ZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4KQogewotICAgIGlm
ICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCwgQ2FjaGVNZXRhZGF0YU9ubHkpKQorICAgIGlm
ICghZW5zdXJlRnJhbWVJc0NhY2hlZChpbmRleCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1l
dGFkYXRhKSkKICAgICAgICAgcmV0dXJuIEltYWdlT3JpZW50YXRpb24oKTsKIAotICAgIGlmICht
X2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEpCi0gICAgICAgIHJldHVybiBtX2ZyYW1lc1tp
bmRleF0ubV9vcmllbnRhdGlvbjsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhdLmhhc01ldGFkYXRh
KCkpCisgICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0ub3JpZW50YXRpb24oKTsKIAogICAg
IHJldHVybiBtX3NvdXJjZS5vcmllbnRhdGlvbkF0SW5kZXgoaW5kZXgpOwogfQpAQCAtNzAwLDE3
ICs3MTIsNTYgQEAgQ29sb3IgQml0bWFwSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcigpCiAg
ICAgICAgIHJldHVybiBDb2xvcigpOwogICAgIAogICAgIEFTU0VSVChtX2ZyYW1lcy5zaXplKCkp
OwotICAgIG1fc29saWRDb2xvciA9IE5hdGl2ZUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29sb3Io
bV9mcmFtZXNbMF0ubV9pbWFnZS5nZXQoKSk7CisgICAgbV9zb2xpZENvbG9yID0gbV9mcmFtZXNb
MF0uc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCk7CiAgICAgCiAgICAgQVNTRVJUKG1fc29saWRDb2xv
cik7CiAgICAgcmV0dXJuIG1fc29saWRDb2xvci52YWx1ZSgpOwogfQogICAgIAorYm9vbCBCaXRt
YXBJbWFnZTo6aXNBbG1vc3RTb2xpZENvbG9yKCkKK3sKKyAgICBpZiAoZnJhbWVDb3VudCgpICE9
IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBlbnN1cmVGcmFtZUlzQ2Fj
aGVkKDApICYmIG1fZnJhbWVzWzBdLmlzQWxtb3N0U29saWRDb2xvcigpOworfQorICAgIAogYm9v
bCBCaXRtYXBJbWFnZTo6Y2FuQW5pbWF0ZSgpCiB7CiAgICAgcmV0dXJuIHNob3VsZEFuaW1hdGUo
KSAmJiBmcmFtZUNvdW50KCkgPiAxOwogfQogCit2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBvcCwgQmxlbmRNb2RlIG1vZGUsIElt
YWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikKK3sKKyAgICBpZiAoZGVzdFJl
Y3QuaXNFbXB0eSgpIHx8IHNyY1JlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyNp
ZiBQTEFURk9STShJT1MpCisgICAgc3RhcnRBbmltYXRpb24oRG9Ob3RDYXRjaFVwKTsKKyNlbHNl
CisgICAgc3RhcnRBbmltYXRpb24oKTsKKyNlbmRpZgorICAgIAorICAgIENvbG9yIGNvbG9yID0g
c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCk7CisgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgeworICAg
ICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY29udGV4dCwgZGVzdFJlY3QsIGNvbG9yLCBvcCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1hZ2VB
dEluZGV4KG1fY3VycmVudEZyYW1lLCBQbGF0Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKGNv
bnRleHQsIGRlc3RSZWN0LCBzcmNSZWN0KSk7CisgICAgaWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0
b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKGRlc2NyaXB0aW9uLmltYWdlT3Jp
ZW50YXRpb24oKSk7CisgICAgaWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9u
KCkgPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24pCisgICAgICAgIG9yaWVudGF0aW9uID0gZnJh
bWVPcmllbnRhdGlvbkF0SW5kZXgobV9jdXJyZW50RnJhbWUpOworICAgIAorICAgIFBsYXRmb3Jt
SW1hZ2UoaW1hZ2UpLmRyYXcoY29udGV4dCwgZGVzdFJlY3QsIHNyY1JlY3QsIG1fc2l6ZSwgb3As
IG1vZGUsIG9yaWVudGF0aW9uKTsKKyAgICAKKyAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQorICAg
ICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7Cit9CisgICAgCiB2b2lkIEJpdG1h
cEltYWdlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAogewogICAgIEltYWdlOjpkdW1wKHRz
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcElt
YWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5oCmlu
ZGV4IDA3NTg5MjljZDg3ZmFkYWNmMDJiNmVkOGVlYWZlN2RlZmQ2NmYwYzUuLjIyMThjODI0YjUy
OGZkNjM5YmFiMTM4ZGVjYzk4Yjk4MTZhMTY4MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaApAQCAtMjgsMTEgKzI4LDEzIEBACiAjaWZuZGVm
IEJpdG1hcEltYWdlX2gKICNkZWZpbmUgQml0bWFwSW1hZ2VfaAogCi0jaW5jbHVkZSAiSW1hZ2Uu
aCIKICNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiSW1h
Z2VGcmFtZURhdGEuaCIKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAi
SW1hZ2VTb3VyY2UuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1J
bWFnZS5oIgogCiAjaWYgVVNFKENHKSB8fCBVU0UoQVBQS0lUKQogI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KQEAgLTQ3LDYzICs0OSw5IEBAIHR5cGVkZWYgc3RydWN0IEhCSVRNQVBfXyAqSEJJ
VE1BUDsKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgc3RydWN0IEZyYW1lRGF0
YTsKLX0KLQotbmFtZXNwYWNlIFdURiB7Ci0gICAgdGVtcGxhdGU8PiBzdHJ1Y3QgVmVjdG9yVHJh
aXRzPFdlYkNvcmU6OkZyYW1lRGF0YT4gOiBwdWJsaWMgU2ltcGxlQ2xhc3NWZWN0b3JUcmFpdHMg
ewotICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBjYW5Jbml0aWFsaXplV2l0aE1lbXNldCA9IGZh
bHNlOyAvLyBOb3QgYWxsIEZyYW1lRGF0YSBtZW1iZXJzIGluaXRpYWxpemUgdG8gMC4KLSAgICB9
OwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFRpbWVyOwogCi1uYW1lc3BhY2Ug
TmF0aXZlSW1hZ2UgewotICAgIEludFNpemUgc2l6ZShjb25zdCBOYXRpdmVJbWFnZVB0ciYpOwot
ICAgIGJvb2wgaGFzQWxwaGEoY29uc3QgTmF0aXZlSW1hZ2VQdHImKTsKLSAgICBDb2xvciBzaW5n
bGVQaXhlbFNvbGlkQ29sb3IoY29uc3QgTmF0aXZlSW1hZ2VQdHImKTsKLX0KLQotLy8gPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBGcmFtZURhdGEg
Q2xhc3MKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotCi1zdHJ1Y3QgRnJhbWVEYXRhIHsKLXB1YmxpYzoKLSAgICBGcmFtZURhdGEoKQotICAgICAg
ICA6IG1faGF2ZU1ldGFkYXRhKGZhbHNlKQotICAgICAgICAsIG1faXNDb21wbGV0ZShmYWxzZSkK
LSAgICAgICAgLCBtX2hhc0FscGhhKHRydWUpCi0gICAgewotICAgIH0KLQotICAgIH5GcmFtZURh
dGEoKQotICAgIHsgCi0gICAgICAgIGNsZWFyKHRydWUpOwotICAgIH0KLQotICAgIC8vIENsZWFy
IHRoZSBjYWNoZWQgaW1hZ2UgZGF0YSBvbiB0aGUgZnJhbWUsIGFuZCAob3B0aW9uYWxseSkgdGhl
IG1ldGFkYXRhLgotICAgIC8vIFJldHVybnMgd2hldGhlciB0aGVyZSB3YXMgY2FjaGVkIGltYWdl
IGRhdGEgdG8gY2xlYXIuCi0gICAgYm9vbCBjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpOwotICAg
IAotICAgIHVuc2lnbmVkIHVzZWRGcmFtZUJ5dGVzKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZSA/
IG1fZnJhbWVCeXRlcyA6IDA7IH0KLQotICAgIE5hdGl2ZUltYWdlUHRyIG1faW1hZ2U7Ci0gICAg
SW1hZ2VPcmllbnRhdGlvbiBtX29yaWVudGF0aW9uIHsgRGVmYXVsdEltYWdlT3JpZW50YXRpb24g
fTsKLSAgICBTdWJzYW1wbGluZ0xldmVsIG1fc3Vic2FtcGxpbmdMZXZlbCB7IDAgfTsKLSAgICBm
bG9hdCBtX2R1cmF0aW9uIHsgMCB9OwotICAgIGJvb2wgbV9oYXZlTWV0YWRhdGEgOiAxOwotICAg
IGJvb2wgbV9pc0NvbXBsZXRlIDogMTsKLSAgICBib29sIG1faGFzQWxwaGEgOiAxOwotICAgIHVu
c2lnbmVkIG1fZnJhbWVCeXRlcyB7IDAgfTsKLX07Ci0KLS8vID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIEJpdG1hcEltYWdlIENsYXNzCi0vLyA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KIGNsYXNz
IEJpdG1hcEltYWdlIGZpbmFsIDogcHVibGljIEltYWdlIHsKICAgICBmcmllbmQgY2xhc3MgR2Vu
ZXJhdGVkSW1hZ2U7CiAgICAgZnJpZW5kIGNsYXNzIENyb3NzZmFkZUdlbmVyYXRlZEltYWdlOwpA
QCAtMTU1LDEyICsxMDMsNiBAQCBwdWJsaWM6CiAgICAgQ0ZEYXRhUmVmIGdldFRJRkZSZXByZXNl
bnRhdGlvbigpIG92ZXJyaWRlOwogI2VuZGlmCiAKLSNpZiBVU0UoQ0cpCi0gICAgV0VCQ09SRV9F
WFBPUlQgQ0dJbWFnZVJlZiBnZXRDR0ltYWdlUmVmKCkgb3ZlcnJpZGU7Ci0gICAgQ0dJbWFnZVJl
ZiBnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwotICAg
IFJldGFpblB0cjxDRkFycmF5UmVmPiBnZXRDR0ltYWdlQXJyYXkoKSBvdmVycmlkZTsKLSNlbmRp
ZgotCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIGJvb2wgZ2V0SEJJVE1BUChIQklUTUFQKSBvdmVy
cmlkZTsKICAgICBib29sIGdldEhCSVRNQVBPZlNpemUoSEJJVE1BUCwgY29uc3QgSW50U2l6ZSop
IG92ZXJyaWRlOwpAQCAtMTc0LDggKzExNiwxMyBAQCBwdWJsaWM6CiAgICAgRXZhc19PYmplY3Qq
IGdldEV2YXNPYmplY3QoRXZhcyopIG92ZXJyaWRlOwogI2VuZGlmCiAKKyAgICBXRUJDT1JFX0VY
UE9SVCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSgpIG92ZXJyaWRlOworICAgIE5hdGl2ZUlt
YWdlUHRyIG5hdGl2ZUltYWdlT2ZTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKICAgICBO
YXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIG92ZXJyaWRlOwogICAg
IEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb25Gb3JDdXJyZW50RnJhbWUoKSBvdmVycmlkZSB7
IHJldHVybiBmcmFtZU9yaWVudGF0aW9uQXRJbmRleChjdXJyZW50RnJhbWUoKSk7IH0KKyAgICBW
ZWN0b3I8TmF0aXZlSW1hZ2VQdHI+IGZyYW1lc05hdGl2ZUltYWdlcygpIG92ZXJyaWRlOworICAg
IAorICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNBbG1vc3RTb2xpZENvbG9yKCk7CiAKICAgICBi
b29sIGN1cnJlbnRGcmFtZUtub3duVG9CZU9wYXF1ZSgpIG92ZXJyaWRlOwogCkBAIC0yMTUsNyAr
MTYyLDYgQEAgcHJvdGVjdGVkOgogICAgIHNpemVfdCBmcmFtZUNvdW50KCk7CiAKICAgICBOYXRp
dmVJbWFnZVB0ciBmcmFtZUltYWdlQXRJbmRleChzaXplX3QsIGZsb2F0IHByZXNlbnRhdGlvblNj
YWxlSGludCA9IDEpOwotICAgIE5hdGl2ZUltYWdlUHRyIGNvcHlVbnNjYWxlZEZyYW1lSW1hZ2VB
dEluZGV4KHNpemVfdCk7CiAKICAgICBib29sIGhhdmVGcmFtZUltYWdlQXRJbmRleChzaXplX3Qp
OwogCkBAIC0yMjUsMTEgKzE3MSwxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgSW1hZ2VPcmllbnRhdGlv
biBmcmFtZU9yaWVudGF0aW9uQXRJbmRleChzaXplX3QpOwogCiAgICAgLy8gRGVjb2RlcyBhbmQg
Y2FjaGVzIGEgZnJhbWUuIE5ldmVyIGFjY2Vzc2VkIGV4Y2VwdCBpbnRlcm5hbGx5LgotICAgIGVu
dW0gSW1hZ2VGcmFtZUNhY2hpbmcgeyBDYWNoZU1ldGFkYXRhT25seSwgQ2FjaGVNZXRhZGF0YUFu
ZEZyYW1lIH07Ci0gICAgdm9pZCBjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdM
ZXZlbCwgSW1hZ2VGcmFtZUNhY2hpbmcgPSBDYWNoZU1ldGFkYXRhQW5kRnJhbWUpOworICAgIHZv
aWQgY2FjaGVGcmFtZShzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlRnJhbWVE
YXRhOjpDYWNoaW5nID0gSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2Up
OwogCiAgICAgLy8gQ2FsbGVkIGJlZm9yZSBhY2Nlc3NpbmcgbV9mcmFtZXNbaW5kZXhdIGZvciBp
bmZvIHdpdGhvdXQgZGVjb2RpbmcuIFJldHVybnMgZmFsc2Ugb24gaW5kZXggb3V0IG9mIGJvdW5k
cy4KLSAgICBib29sIGVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4LCBJbWFnZUZyYW1l
Q2FjaGluZyA9IENhY2hlTWV0YWRhdGFBbmRGcmFtZSk7CisgICAgYm9vbCBlbnN1cmVGcmFtZUlz
Q2FjaGVkKHNpemVfdCBpbmRleCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgPSBJbWFnZUZyYW1l
RGF0YTo6Q2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSk7CiAKICAgICAvLyBDYWxsZWQgdG8gaW52
YWxpZGF0ZSBjYWNoZWQgZGF0YS4gV2hlbiB8ZGVzdHJveUFsbHwgaXMgdHJ1ZSwgd2Ugd2lwZSBv
dXQKICAgICAvLyB0aGUgZW50aXJlIGZyYW1lIGJ1ZmZlciBjYWNoZSBhbmQgdGVsbCB0aGUgaW1h
Z2Ugc291cmNlIHRvIGRlc3Ryb3kKQEAgLTI5Miw3ICsyMzcsNyBAQCBwcml2YXRlOgogICAgIG11
dGFibGUgSW50U2l6ZSBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb247CiAKICAgICBzaXplX3Qg
bV9jdXJyZW50RnJhbWUgeyAwIH07IC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBmcmFtZSBv
ZiBhbmltYXRpb24uCi0gICAgVmVjdG9yPEZyYW1lRGF0YSwgMT4gbV9mcmFtZXM7IC8vIEFuIGFy
cmF5IG9mIHRoZSBjYWNoZWQgZnJhbWVzIG9mIHRoZSBhbmltYXRpb24uIFdlIGhhdmUgdG8gcmVm
IGZyYW1lcyB0byBwaW4gdGhlbSBpbiB0aGUgY2FjaGUuCisgICAgVmVjdG9yPEltYWdlRnJhbWVE
YXRhLCAxPiBtX2ZyYW1lczsgLy8gQW4gYXJyYXkgb2YgdGhlIGNhY2hlZCBmcmFtZXMgb2YgdGhl
IGFuaW1hdGlvbi4gV2UgaGF2ZSB0byByZWYgZnJhbWVzIHRvIHBpbiB0aGVtIGluIHRoZSBjYWNo
ZS4KIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxUaW1lcj4gbV9mcmFtZVRpbWVyOwogICAgIGludCBt
X3JlcGV0aXRpb25Db3VudCB7IGNBbmltYXRpb25Ob25lIH07IC8vIEhvdyBtYW55IHRvdGFsIGFu
aW1hdGlvbiBsb29wcyB3ZSBzaG91bGQgZG8uIFRoaXMgd2lsbCBiZSBjQW5pbWF0aW9uTm9uZSBp
ZiB0aGlzIGltYWdlIHR5cGUgaXMgaW5jYXBhYmxlIG9mIGFuaW1hdGlvbi4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwUGl4ZWxzLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTY4
MWU0YTZjNGNjMDlmZTk0YmRkODE0NWQxMDRiZjBiZmQyZTlmMgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oCkBAIC0wLDAg
KzEsMTczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJJbnRSZWN0Lmgi
CisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgiCisKKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQml0
bWFwUGl4ZWxzIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBp
eGVscz4gY3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkK
KyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEJpdG1hcFBpeGVscz4oc2l6
ZSwgcHJlbXVsdGlwbHlBbHBoYSk7CisgICAgfQorCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxCaXRtYXBQaXhlbHM+IGNyZWF0ZShjb25zdCBCaXRtYXBQaXhlbHMmIG90aGVyKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8Qml0bWFwUGl4ZWxzPihvdGhlcik7Cisg
ICAgfQorCisgICAgQml0bWFwUGl4ZWxzKGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVs
dGlwbHlBbHBoYSA9IHRydWUpCisgICAgICAgIDogbV9wcmVtdWx0aXBseUFscGhhKHByZW11bHRp
cGx5QWxwaGEpCisgICAgeworICAgICAgICBBU1NFUlQoIXNpemUuaXNFbXB0eSgpKTsKKyAgICAg
ICAgc2V0U2l6ZShzaXplKTsKKyAgICB9CisKKyAgICBCaXRtYXBQaXhlbHMoY29uc3QgQml0bWFw
UGl4ZWxzJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICh0aGlzID09ICZvdGhlcikKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIG1fYmFja2luZ1N0b3JlID0gb3RoZXIu
bV9iYWNraW5nU3RvcmU7CisgICAgICAgIG1fcGl4ZWxzID0gbV9iYWNraW5nU3RvcmUuZGF0YSgp
OworICAgICAgICBtX3NpemUgPSBvdGhlci5tX3NpemU7CisgICAgICAgIG1fcHJlbXVsdGlwbHlB
bHBoYSA9IG90aGVyLm1fcHJlbXVsdGlwbHlBbHBoYTsKKyAgICB9CisKKyAgICBpbnQgd2lkdGgo
KSBjb25zdCB7IHJldHVybiBtX3NpemUud2lkdGgoKTsgfQorICAgIGludCBoZWlnaHQoKSBjb25z
dCB7IHJldHVybiBtX3NpemUuaGVpZ2h0KCk7IH0KKworICAgIE5hdGl2ZUltYWdlUHRyIGltYWdl
KCkgY29uc3Q7CisKKyAgICBib29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICB7
CisgICAgICAgIGlmICghbV9iYWNraW5nU3RvcmUudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUuYXJl
YSgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIG1fYmFj
a2luZ1N0b3JlLnJlc2l6ZShzaXplLmFyZWEoKSk7CisgICAgICAgIG1fcGl4ZWxzID0gbV9iYWNr
aW5nU3RvcmUuZGF0YSgpOworICAgICAgICBtX3NpemUgPSBzaXplOworICAgICAgICBjbGVhcigp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBSR0JBMzIqIGF0KGludCB4LCBp
bnQgeSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BpeGVscyArIHkgKiBtX3NpemUu
d2lkdGgoKSArIHg7CisgICAgfQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBt
ZW1zZXQobV9waXhlbHMsIDAsIG1fc2l6ZS5hcmVhKCkgKiBzaXplb2YoUkdCQTMyKSk7CisgICAg
fQorCisgICAgdm9pZCBjbGVhclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKKyAgICB7CisgICAg
ICAgIGlmIChyZWN0LmlzRW1wdHkoKSB8fCBpbkJvdW5kcyhyZWN0KSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCByZWN0V2lkdGhJbkJ5dGVzID0gcmVjdC53
aWR0aCgpICogc2l6ZW9mKFJHQkEzMik7CisgICAgICAgIFJHQkEzMiogc3RhcnQgPSBhdChyZWN0
LngoKSwgcmVjdC55KCkpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QuaGVpZ2h0
KCk7ICsraSkgeworICAgICAgICAgICAgbWVtc2V0KHN0YXJ0LCAwLCByZWN0V2lkdGhJbkJ5dGVz
KTsKKyAgICAgICAgICAgIHN0YXJ0ICs9IG1fc2l6ZS53aWR0aCgpOworICAgICAgICB9CisgICAg
fQorCisgICAgdm9pZCByZXBlYXRGaXJzdFJvdyhjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsK
KyAgICAgICAgaWYgKHJlY3QuaXNFbXB0eSgpIHx8IGluQm91bmRzKHJlY3QpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSBy
ZWN0LndpZHRoKCkgKiBzaXplb2YoUkdCQTMyKTsKKyAgICAgICAgUkdCQTMyKiBzcmMgPSBhdChy
ZWN0LngoKSwgcmVjdC55KCkpOworICAgICAgICBSR0JBMzIqIGRlc3QgPSBzcmMgKyBtX3NpemUu
d2lkdGgoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCByZWN0LmhlaWdodCgpOyArK2kp
IHsKKyAgICAgICAgICAgIG1lbWNweShkZXN0LCBzcmMsIHJlY3RXaWR0aEluQnl0ZXMpOworICAg
ICAgICAgICAgZGVzdCArPSBtX3NpemUud2lkdGgoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHZvaWQgc2V0UkdCQShpbnQgeCwgaW50IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2ln
bmVkIGIsIHVuc2lnbmVkIGEpCisgICAgeworICAgICAgICBzZXRSR0JBKGF0KHgsIHkpLCByLCBn
LCBiLCBhKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFJHQkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25l
ZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAg
aWYgKCFtX3ByZW11bHRpcGx5QWxwaGEgfHwgYSA+PSAyNTUpCisgICAgICAgICAgICAqZGVzdCA9
IG1ha2VSR0JBKHIsIGcsIGIsIGEpOworICAgICAgICBlbHNlIGlmICghYSkKKyAgICAgICAgICAg
ICpkZXN0ID0gMDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKmRlc3QgPSBtYWtlUHJlbXVs
dGlwbGllZFJHQkEociwgZywgYiwgYSk7CisgICAgfQorCisgICAgdm9pZCBvdmVyUkdCQShSR0JB
MzIqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEp
CisgICAgeworICAgICAgICBpZiAoIWEpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgICAgICBpZiAoYSA+PSAyNTUgfHwgIWFscGhhQ2hhbm5lbCgqZGVzdCkpIHsKKyAgICAgICAg
ICAgIHNldFJHQkEoZGVzdCwgciwgZywgYiwgYSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKQorICAgICAg
ICAgICAgKmRlc3QgPSBtYWtlUHJlbXVsdGlwbGllZFJHQkEocmVkQ2hhbm5lbCgqZGVzdCksIGdy
ZWVuQ2hhbm5lbCgqZGVzdCksIGJsdWVDaGFubmVsKCpkZXN0KSwgYWxwaGFDaGFubmVsKCpkZXN0
KSk7CisgICAgICAgIAorICAgICAgICBSR0JBMzIgc3JjID0gbWFrZVJHQkEociwgZywgYiwgYSk7
CisgICAgICAgICpkZXN0ID0gQ29sb3IoKmRlc3QpLmJsZW5kKHNyYykucmdiKCk7CisgICAgICAg
IAorICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkKKyAgICAgICAgICAgICpkZXN0ID0g
bWFrZVVuUHJlbXVsdGlwbGllZFJHQkEocmVkQ2hhbm5lbCgqZGVzdCksIGdyZWVuQ2hhbm5lbCgq
ZGVzdCksIGJsdWVDaGFubmVsKCpkZXN0KSwgYWxwaGFDaGFubmVsKCpkZXN0KSk7CisgICAgfQor
CisgICAgYm9vbCBpbkJvdW5kcyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHBvaW50
KTsKKyAgICB9CisKKyAgICBib29sIGluQm91bmRzKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUpLmNvbnRh
aW5zKHJlY3QpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8UkdCQTMyPiBtX2JhY2tp
bmdTdG9yZTsKKyAgICBSR0JBMzIqIG1fcGl4ZWxzIHsgbnVsbHB0ciB9OworICAgIEludFNpemUg
bV9zaXplOworICAgIGJvb2wgbV9wcmVtdWx0aXBseUFscGhhIHsgdHJ1ZSB9OworfTsKKworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCmluZGV4IDRlMjVhYTZm
ZDc0ZDFlNDZjNTQxNjE0OThiYzE3MmJmNjAwODc1ZDEuLjQzOWY1YTYzYzdiZWJlNTYwNDJiMjRl
N2Q3MmVjY2VjZjM2YzQwYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5jcHAKQEAgLTQ5LDYgKzQ5LDQwIEBAIGNvbnN0IFJHQkEzMiBDb2xvcjo6dHJhbnNwYXJl
bnQ7CiBzdGF0aWMgY29uc3QgUkdCQTMyIGxpZ2h0ZW5lZEJsYWNrID0gMHhGRjU0NTQ1NDsKIHN0
YXRpYyBjb25zdCBSR0JBMzIgZGFya2VuZWRXaGl0ZSA9IDB4RkZBQkFCQUI7CiAKK3N0YXRpYyBp
bmxpbmUgdW5zaWduZWQgbXVsdGlwbHkyNTUodW5zaWduZWQgYykKK3sKKyAgICAvLyBjICogMjU1
CisgICAgLy8gICA9IGMgKiAoMjU2IC0gMSkKKyAgICAvLyAgID0gYyAqIDI1NiAtIGMKKyAgICBy
ZXR1cm4gKGMgPDwgOCkgLSBjOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRpdmlkZTI1
NSh1bnNpZ25lZCBjKQoreworICAgIC8vIGMgLyAyNTUKKyAgICAvLyAgID0gYyAvIDI1NiAqICgx
ICsgMSAvIDI1NSkKKyAgICAvLyAgID0gKGMgKyBjIC8gMjU1KSAvIDI1NgorICAgIC8vICAgPSAo
YyArIChjICsgYyAvIDI1NSkgLyAyNTYpIC8gMjU2CisgICAgLy8gICA9IChjICsgYyAvIDI1NiAr
IGMgLyAoMjU1IHggMjU2KSkgLyAyNTYKKyAgICAvLyAgfj0gKGMgKyBjIC8gMjU2ICsgMSkgLyAy
NTYKKyAgICByZXR1cm4gKGMgKyAoYyA+PiA4KSArIDEpID4+IDg7Cit9CisgICAgCitzdGF0aWMg
aW5saW5lIHVuc2lnbmVkIGRpdmlkZUNlaWwodW5zaWduZWQgYywgdW5zaWduZWQgZCkKK3sKKyAg
ICByZXR1cm4gKGMgKyBkIC0gMSkgLyBkOworfQorICAgIAorc3RhdGljIGlubGluZSB1bnNpZ25l
ZCBwcmVtdWx0aXBsaWVkQ2hhbm5lbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBhKQoreworICAgIHJl
dHVybiBkaXZpZGUyNTUoYyAqIGEpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHVucHJl
bXVsdGlwbGllZENoYW5uZWwodW5zaWduZWQgYywgdW5zaWduZWQgYSkKK3sKKyAgICByZXR1cm4g
ZGl2aWRlQ2VpbChtdWx0aXBseTI1NShjKSwgYSk7Cit9CisgICAgCiBSR0JBMzIgbWFrZVJHQihp
bnQgciwgaW50IGcsIGludCBiKQogewogICAgIHJldHVybiAweEZGMDAwMDAwIHwgc3RkOjptYXgo
MCwgc3RkOjptaW4ociwgMjU1KSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAyNTUp
KSA8PCA4IHwgc3RkOjptYXgoMCwgc3RkOjptaW4oYiwgMjU1KSk7CkBAIC01OSw2ICs5MywxNiBA
QCBSR0JBMzIgbWFrZVJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCiAgICAgcmV0dXJu
IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGEsIDI1NSkpIDw8IDI0IHwgc3RkOjptYXgoMCwgc3RkOjpt
aW4ociwgMjU1KSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAyNTUpKSA8PCA4IHwg
c3RkOjptYXgoMCwgc3RkOjptaW4oYiwgMjU1KSk7CiB9CiAKK1JHQkEzMiBtYWtlUHJlbXVsdGlw
bGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCit7CisgICAgcmV0dXJuIG1ha2VS
R0JBKHByZW11bHRpcGxpZWRDaGFubmVsKHIsIGEpLCBwcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBh
KSwgcHJlbXVsdGlwbGllZENoYW5uZWwoYiwgYSksIGEpOworfQorICAgIAorUkdCQTMyIG1ha2VV
blByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQoreworICAgIHJl
dHVybiBtYWtlUkdCQSh1bnByZW11bHRpcGxpZWRDaGFubmVsKHIsIGEpLCB1bnByZW11bHRpcGxp
ZWRDaGFubmVsKGcsIGEpLCB1bnByZW11bHRpcGxpZWRDaGFubmVsKGIsIGEpLCBhKTsKK30KKyAg
ICAKIHN0YXRpYyBpbnQgY29sb3JGbG9hdFRvUkdCQUJ5dGUoZmxvYXQgZikKIHsKICAgICAvLyBX
ZSB1c2UgbHJvdW5kZiBhbmQgMjU1IGluc3RlYWQgb2YgbmV4dGFmdGVyZigyNTYsIDApIHRvIG1h
dGNoIENHJ3Mgcm91bmRpbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5o
CmluZGV4IGRkMjYyNzBiYjQ2NjBiMzNhZTA3MGU4Yzk0NDUyMGQ3Mjg0NTRiOGEuLmE1NDUzMmM3
NzU1YTdjODc2OTM2MjQwY2FlNGVjMzdhNGRhMGQwNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvQ29sb3IuaApAQCAtNTQsNiArNTQsOCBAQCB0eXBlZGVmIHVuc2lnbmVkIFJH
QkEzMjsgLy8gRGVwcmVjYXRlZDogVHlwZSBmb3IgYW4gUkdCQSBxdWFkcnVwbGV0LiBVc2UgUkdC
QSBjbAogCiBXRUJDT1JFX0VYUE9SVCBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBi
KTsKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBp
bnQgYSk7CitXRUJDT1JFX0VYUE9SVCBSR0JBMzIgbWFrZVByZW11bHRpcGxpZWRSR0JBKGludCBy
LCBpbnQgZywgaW50IGIsIGludCBhKTsKK1dFQkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlVW5QcmVt
dWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7CiAKIFdFQkNPUkVfRVhQ
T1JUIFJHQkEzMiBjb2xvcldpdGhPdmVycmlkZUFscGhhKFJHQkEzMiBjb2xvciwgZmxvYXQgb3Zl
cnJpZGVBbHBoYSk7CiBXRUJDT1JFX0VYUE9SVCBSR0JBMzIgY29sb3JXaXRoT3ZlcnJpZGVBbHBo
YShSR0JBMzIgY29sb3IsIE9wdGlvbmFsPGZsb2F0PiBvdmVycmlkZUFscGhhKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZS5oCmluZGV4IDdhMjk5OTJmNzcxODhlMDM4Mjhk
ODBhNjViOGJlMmNkOGRjMmRlNzYuLjhlN2I1MmIxZjRmMzFjNzRhM2NiMmExMzIxNWRhNzdhMmIx
OGMwN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaApAQCAtMTM3
LDggKzEzNywxMSBAQCBwdWJsaWM6CiAKICAgICBlbnVtIFRpbGVSdWxlIHsgU3RyZXRjaFRpbGUs
IFJvdW5kVGlsZSwgU3BhY2VUaWxlLCBSZXBlYXRUaWxlIH07CiAKKyAgICB2aXJ0dWFsIE5hdGl2
ZUltYWdlUHRyIG5hdGl2ZUltYWdlKCkgeyByZXR1cm4gbnVsbHB0cjsgfQorICAgIHZpcnR1YWwg
TmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VPZlNpemUoY29uc3QgSW50U2l6ZSYpIHsgcmV0dXJu
IG51bGxwdHI7IH0KICAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKCkgeyByZXR1cm4gbnVsbHB0cjsgfQogICAgIHZpcnR1YWwgSW1hZ2VPcmllbnRh
dGlvbiBvcmllbnRhdGlvbkZvckN1cnJlbnRGcmFtZSgpIHsgcmV0dXJuIEltYWdlT3JpZW50YXRp
b24oKTsgfQorICAgIHZpcnR1YWwgVmVjdG9yPE5hdGl2ZUltYWdlUHRyPiBmcmFtZXNOYXRpdmVJ
bWFnZXMoKSB7IHJldHVybiB7IH07IH0KIAogICAgIC8vIEFjY2Vzc29ycyBmb3IgbmF0aXZlIGlt
YWdlIGZvcm1hdHMuCiAKQEAgLTE1MCwxMiArMTUzLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
Q0ZEYXRhUmVmIGdldFRJRkZSZXByZXNlbnRhdGlvbigpIHsgcmV0dXJuIG51bGxwdHI7IH0KICNl
bmRpZgogCi0jaWYgVVNFKENHKQotICAgIHZpcnR1YWwgQ0dJbWFnZVJlZiBnZXRDR0ltYWdlUmVm
KCkgeyByZXR1cm4gbnVsbHB0cjsgfQotICAgIHZpcnR1YWwgQ0dJbWFnZVJlZiBnZXRGaXJzdENH
SW1hZ2VSZWZPZlNpemUoY29uc3QgSW50U2l6ZSYpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2
aXJ0dWFsIFJldGFpblB0cjxDRkFycmF5UmVmPiBnZXRDR0ltYWdlQXJyYXkoKSB7IHJldHVybiBu
dWxscHRyOyB9Ci0jZW5kaWYKLQogI2lmIFBMQVRGT1JNKFdJTikKICAgICB2aXJ0dWFsIGJvb2wg
Z2V0SEJJVE1BUChIQklUTUFQKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBn
ZXRIQklUTUFQT2ZTaXplKEhCSVRNQVAsIGNvbnN0IEludFNpemUqKSB7IHJldHVybiBmYWxzZTsg
fQpAQCAtMTc5LDYgKzE3Niw4IEBAIHB1YmxpYzoKICNpZiAhQVNTRVJUX0RJU0FCTEVECiAgICAg
dmlydHVhbCBib29sIG5vdFNvbGlkQ29sb3IoKSB7IHJldHVybiB0cnVlOyB9CiAjZW5kaWYKKyAg
ICAKKyAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0SWZOZWVkZWQoKSB7IH0KIAogICAgIHZpcnR1YWwg
dm9pZCBkdW1wKFRleHRTdHJlYW0mKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmZDIwY2Y4
ZTYxZjRiMWExZmUwOGViMzMyYjcxNjU3ZjAxNDhjMTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5jcHAKQEAgLTAsMCAr
MSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdlRnJhbWVEYXRhLmgiCisKKyNpbmNs
dWRlICJDb2xvci5oIgorCisjaWYgVVNFKENHKQorI2luY2x1ZGUgIkltYWdlRGVjb2RlckNHLmgi
CisjZWxzZQorI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJQ
bGF0Zm9ybUltYWdlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworSW1hZ2VGcmFtZURhdGE6
OkltYWdlRnJhbWVEYXRhKCkKK3sKK30KKworSW1hZ2VGcmFtZURhdGE6OkltYWdlRnJhbWVEYXRh
KE5hdGl2ZUltYWdlUHRyJiYgaW1hZ2UpCisgICAgOiBtX3N0YXR1cyhEZWNvZGluZ1N0YXR1czo6
Q29tcGxldGUpCisgICAgLCBtX2ltYWdlKFdURk1vdmUoaW1hZ2UpKQoreworICAgIG1fc2l6ZSA9
IFBsYXRmb3JtSW1hZ2UobV9pbWFnZSkuc2l6ZSgpOworICAgIG1faGFzQWxwaGEgPSBQbGF0Zm9y
bUltYWdlKG1faW1hZ2UpLmhhc0FscGhhKCk7Cit9CisKK0ltYWdlRnJhbWVEYXRhOjpJbWFnZUZy
YW1lRGF0YShJbWFnZURlY29kZXImIGRlY29kZXIsIHNpemVfdCBpbmRleCwgU3Vic2FtcGxpbmdM
ZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBDYWNoaW5nIGZyYW1lQ2FjaGluZykKK3sKKyAgICBBU1NF
UlQoZnJhbWVDYWNoaW5nID09IENhY2hpbmc6Ok1ldGFkYXRhIHx8IGZyYW1lQ2FjaGluZyA9PSBD
YWNoaW5nOjpNZXRhZGF0YUFuZEltYWdlKTsKKyAgICAKKyAgICBpZiAoZnJhbWVDYWNoaW5nID09
IENhY2hpbmc6OkltYWdlIHx8IGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YUFuZElt
YWdlKSB7CisgICAgICAgIG1faW1hZ2UgPSBkZWNvZGVyLmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4
KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsKKyAgICAgICAgbV9zdWJzYW1wbGluZ0xldmVsID0g
c3Vic2FtcGxpbmdMZXZlbDsKKyAgICB9CisgICAgCisgICAgaWYgKGZyYW1lQ2FjaGluZyA9PSBD
YWNoaW5nOjpNZXRhZGF0YSB8fCBmcmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGFBbmRJ
bWFnZSkgeworICAgICAgICBtX29yaWVudGF0aW9uID0gZGVjb2Rlci5vcmllbnRhdGlvbkF0SW5k
ZXgoaW5kZXgpOworICAgICAgICBtX3N0YXR1cyA9IGRlY29kZXIuZnJhbWVJc0NvbXBsZXRlQXRJ
bmRleChpbmRleCkgPyBEZWNvZGluZ1N0YXR1czo6Q29tcGxldGUgOiBEZWNvZGluZ1N0YXR1czo6
UGFydGlhbDsKKyAgICAgICAgCisgICAgICAgIGlmIChkZWNvZGVyLnJlcGV0aXRpb25Db3VudCgp
ICE9IGNBbmltYXRpb25Ob25lKQorICAgICAgICAgICAgbV9kdXJhdGlvbiA9IGRlY29kZXIuZnJh
bWVEdXJhdGlvbkF0SW5kZXgoaW5kZXgpOworICAgICAgICAKKyAgICAgICAgbV9oYXNBbHBoYSA9
IGRlY29kZXIuZnJhbWVIYXNBbHBoYUF0SW5kZXgoaW5kZXgpOworICAgICAgICBtX3NpemUgPSBk
ZWNvZGVyLmZyYW1lU2l6ZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpOworICAgIH0K
K30KKworSW1hZ2VGcmFtZURhdGE6On5JbWFnZUZyYW1lRGF0YSgpCit7CisgICAgY2xlYXJTdWJJ
bWFnZXMoKTsKK30KKyAgICAKK0ltYWdlRnJhbWVEYXRhJiBJbWFnZUZyYW1lRGF0YTo6b3BlcmF0
b3I9KGNvbnN0IEltYWdlRnJhbWVEYXRhJiBvdGhlcikKK3sKKyAgICBpZiAodGhpcyA9PSAmb3Ro
ZXIpCisgICAgICAgIHJldHVybiAqdGhpczsKKworICAgIG1fc3RhdHVzID0gb3RoZXIubV9zdGF0
dXM7CisgICAgbV9zaXplID0gb3RoZXIubV9zaXplOworICAgIG1faW1hZ2UgPSBvdGhlci5tX2lt
YWdlOworICAgIAorICAgIG1fcGl4ZWxzID0gb3RoZXIucGl4ZWxzKCkgPyBCaXRtYXBQaXhlbHM6
OmNyZWF0ZSgqb3RoZXIucGl4ZWxzKCkpIDogbnVsbHB0cjsKKyAgICAKKyAgICBtX29yaWVudGF0
aW9uID0gb3RoZXIubV9vcmllbnRhdGlvbjsKKyAgICBtX3N1YnNhbXBsaW5nTGV2ZWwgPSBvdGhl
ci5tX3N1YnNhbXBsaW5nTGV2ZWw7CisgICAgbV9kdXJhdGlvbiA9IG90aGVyLm1fZHVyYXRpb247
CisgICAgbV9oYXNBbHBoYSA9IG90aGVyLm1faGFzQWxwaGE7CisgICAgcmV0dXJuICp0aGlzOwor
fQorCit2b2lkIEltYWdlRnJhbWVEYXRhOjpjbGVhclN1YkltYWdlcygpCit7CisgICAgaWYgKCFt
X2ltYWdlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUGxhdGZvcm1JbWFnZShtX2ltYWdl
KS5jbGVhclN1YkltYWdlcygpOworfQorCit1bnNpZ25lZCBJbWFnZUZyYW1lRGF0YTo6Y2xlYXIo
Q2FjaGluZyBmcmFtZUNhY2hpbmcpCit7CisgICAgQVNTRVJUKGZyYW1lQ2FjaGluZyA9PSBDYWNo
aW5nOjpFbXB0eSB8fCBmcmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGEpOworICAgIAor
ICAgIHVuc2lnbmVkIGZyYW1lQnl0ZXMgPSB0aGlzLT5mcmFtZUJ5dGVzKCk7CisgICAgCisgICAg
Y2xlYXJTdWJJbWFnZXMoKTsKKyAgICAKKyAgICBpZiAoZnJhbWVDYWNoaW5nID09IENhY2hpbmc6
OkVtcHR5KQorICAgICAgICAqdGhpcyA9IEltYWdlRnJhbWVEYXRhKCk7CisgICAgZWxzZQorICAg
ICAgICBtX2ltYWdlID0gbnVsbHB0cjsKKyAgICAKKyAgICByZXR1cm4gZnJhbWVCeXRlczsKK30K
KworQ29sb3IgSW1hZ2VGcmFtZURhdGE6OnNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0Cit7
CisgICAgaWYgKCFoYXNJbWFnZSgpIHx8IG1fc2l6ZSAhPSBJbnRTaXplKDEsIDEpKQorICAgICAg
ICByZXR1cm4gQ29sb3IoKTsKKyAgICAKKyAgICByZXR1cm4gUGxhdGZvcm1JbWFnZShtX2ltYWdl
KS5zaW5nbGVQaXhlbFNvbGlkQ29sb3IoKTsKK30KKworYm9vbCBJbWFnZUZyYW1lRGF0YTo6aXNB
bG1vc3RTb2xpZENvbG9yKCkgY29uc3QKK3sKKyAgICBpZiAoIWhhc0ltYWdlKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXR1cm4gUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5p
c0FsbW9zdFNvbGlkQ29sb3IoKTsKK30KKyAgICAKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjliMTRhZGFlYTU5
ZTk5N2VmZTY0ODgxN2I4YWE5ZGM5OGVlZWRmN2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5oCkBAIC0wLDAgKzEsOTUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJCaXRtYXBQaXhlbHMuaCIKKyNpbmNsdWRlICJJbWFnZU9yaWVu
dGF0aW9uLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRy
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ29sb3I7CitjbGFzcyBJbWFnZURl
Y29kZXI7CisKKy8vIFN1YnNhbXBsaW5nTGV2ZWwuIDAgaXMgbm8gc3Vic2FtcGxpbmcsIDEgaXMg
aGFsZiBkaW1lbnNpb25zIG9uIGVhY2ggYXhpcyBldGMuCit1c2luZyBTdWJzYW1wbGluZ0xldmVs
ID0gdWludDhfdDsKKworZW51bSA6IFN1YnNhbXBsaW5nTGV2ZWwgeworICAgIE1pblN1YnNhbXBs
aW5nTGV2ZWwgPSAwLAorICAgIE1heFN1YnNhbXBsaW5nTGV2ZWwgPSAzLAorICAgIERlZmF1bHRT
dWJzYW1wbGluZ0xldmVsID0gTWluU3Vic2FtcGxpbmdMZXZlbAorfTsKKworY2xhc3MgSW1hZ2VG
cmFtZURhdGEgeworcHVibGljOgorICAgIGVudW0gY2xhc3MgQ2FjaGluZyB7IEVtcHR5LCBNZXRh
ZGF0YSwgSW1hZ2UsIE1ldGFkYXRhQW5kSW1hZ2UgfTsKKyAgICBlbnVtIGNsYXNzIERlY29kaW5n
U3RhdHVzIHsgRW1wdHksIFBhcnRpYWwsIENvbXBsZXRlIH07CisgICAgCisgICAgSW1hZ2VGcmFt
ZURhdGEoKTsKKyAgICBJbWFnZUZyYW1lRGF0YShOYXRpdmVJbWFnZVB0ciYmKTsKKyAgICBJbWFn
ZUZyYW1lRGF0YShJbWFnZURlY29kZXImLCBzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2ZWwg
PSBEZWZhdWx0U3Vic2FtcGxpbmdMZXZlbCwgQ2FjaGluZyA9IENhY2hpbmc6Ok1ldGFkYXRhQW5k
SW1hZ2UpOworICAgIEltYWdlRnJhbWVEYXRhKGNvbnN0IEltYWdlRnJhbWVEYXRhJiBvdGhlcikg
eyBvcGVyYXRvcj0ob3RoZXIpOyB9CisKKyAgICB+SW1hZ2VGcmFtZURhdGEoKTsKKworICAgIElt
YWdlRnJhbWVEYXRhJiBvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZURhdGEmIG90aGVyKTsKKyAg
ICAKKyAgICB1bnNpZ25lZCBjbGVhcihDYWNoaW5nKTsKKyAgICBDb2xvciBzaW5nbGVQaXhlbFNv
bGlkQ29sb3IoKSBjb25zdDsKKyAgICBib29sIGlzQWxtb3N0U29saWRDb2xvcigpIGNvbnN0Owor
ICAgIAorICAgIERlY29kaW5nU3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVz
OyB9CisgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXMgPT0gRGVj
b2RpbmdTdGF0dXM6OkNvbXBsZXRlOyB9CisgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9zaXplOyB9CisgICAgdW5zaWduZWQgZnJhbWVCeXRlcygpIGNvbnN0IHsgcmV0dXJuIGhh
c0ltYWdlKCkgPyBtX3NpemUuYXJlYSgpICogNCA6IDA7IH0KKyAgICBOYXRpdmVJbWFnZVB0ciBp
bWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7IH0KKyAgICBCaXRtYXBQaXhlbHMqIHBpeGVs
cygpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxzID8gbV9waXhlbHMuZ2V0KCkgOiBudWxscHRyOyB9
CisgICAgCisgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fb3JpZW50YXRpb247IH0KKyAgICBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwo
KSBjb25zdCB7IHJldHVybiBtX3N1YnNhbXBsaW5nTGV2ZWw7IH0KKyAgICBmbG9hdCBkdXJhdGlv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KKyAgICAKKyAgICBib29sIGhhc0FscGhh
KCkgY29uc3QgeyByZXR1cm4gbV9oYXNBbHBoYTsgfQorICAgIGJvb2wgaGFzSW1hZ2UoKSBjb25z
dCB7IHJldHVybiBtX2ltYWdlOyB9CisgICAgYm9vbCBoYXNNZXRhZGF0YSgpIGNvbnN0IHsgcmV0
dXJuICFtX3NpemUuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBoYXNQaXhlbHMoKSBjb25zdCB7IHJl
dHVybiBtX3BpeGVscyAhPSBudWxscHRyOyB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgY2xl
YXJTdWJJbWFnZXMoKTsKKyAgICAKKyAgICBEZWNvZGluZ1N0YXR1cyBtX3N0YXR1cyB7IERlY29k
aW5nU3RhdHVzOjpFbXB0eSB9OworICAgIEludFNpemUgbV9zaXplOworICAgIE5hdGl2ZUltYWdl
UHRyIG1faW1hZ2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gbV9waXhlbHM7
CisgICAgCisgICAgSW1hZ2VPcmllbnRhdGlvbiBtX29yaWVudGF0aW9uIHsgRGVmYXVsdEltYWdl
T3JpZW50YXRpb24gfTsKKyAgICBTdWJzYW1wbGluZ0xldmVsIG1fc3Vic2FtcGxpbmdMZXZlbCB7
IDAgfTsKKyAgICBmbG9hdCBtX2R1cmF0aW9uIHsgMCB9OworICAgIGJvb2wgbV9oYXNBbHBoYSB7
IHRydWUgfTsKK307CisgICAgCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZVNvdXJjZS5jcHAKaW5kZXggZGRkOGE1NWJhMDkwNmM1ODY2YTE5MmNmOGU0MTRl
YTcwN2I3MjhhYy4uODJmNmUyZDZlNDU0MzNkYTFhN2Q1NmIzNzBkZmE2MWE0YzQxOTEzNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcApA
QCAtMjI0LDYgKzIyNCwxMSBAQCBOYXRpdmVJbWFnZVB0ciBJbWFnZVNvdXJjZTo6Y3JlYXRlRnJh
bWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldgogICAgIHJldHVybiBp
bml0aWFsaXplZCgpID8gbV9kZWNvZGVyLT5jcmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRleCwg
c3Vic2FtcGxpbmdMZXZlbCkgOiBudWxscHRyOwogfQogCitJbWFnZUZyYW1lRGF0YSBJbWFnZVNv
dXJjZTo6Y3JlYXRlRnJhbWVEYXRhQXRJbmRleChzaXplX3QgaW5kZXgsIFN1YnNhbXBsaW5nTGV2
ZWwgc3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgY2FjaGluZykKK3sK
KyAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSA/IEltYWdlRnJhbWVEYXRhKCptX2RlY29kZXIsIGlu
ZGV4LCBzdWJzYW1wbGluZ0xldmVsLCBjYWNoaW5nKSA6IEltYWdlRnJhbWVEYXRhKCk7Cit9Cisg
ICAgCiB2b2lkIEltYWdlU291cmNlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAogewogICAg
IGlmIChtX2FsbG93U3Vic2FtcGxpbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VTb3VyY2UuaAppbmRleCA2MDM1NzM5YjdlOGIwOTZkYzhkZmU5YzUzMGE0MmM2
ZjI5MWJkYTAwLi5hNDBjN2NlOTMwN2NkYWRmMDc5YWI3MDFhODI3OTliNjkwNTI5ZDQ3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKQEAgLTI3
LDYgKzI3LDcgQEAKICNpZm5kZWYgSW1hZ2VTb3VyY2VfaAogI2RlZmluZSBJbWFnZVNvdXJjZV9o
CiAKKyNpbmNsdWRlICJJbWFnZUZyYW1lRGF0YS5oIgogI2luY2x1ZGUgIkltYWdlT3JpZW50YXRp
b24uaCIKICNpbmNsdWRlICJJbnRQb2ludC5oIgogI2luY2x1ZGUgIk5hdGl2ZUltYWdlUHRyLmgi
CkBAIC02Myw5ICs2NCw2IEBAIGNvbnN0IGludCBjQW5pbWF0aW9uTG9vcE9uY2UgPSAwOwogY29u
c3QgaW50IGNBbmltYXRpb25Mb29wSW5maW5pdGUgPSAtMTsKIGNvbnN0IGludCBjQW5pbWF0aW9u
Tm9uZSA9IC0yOwogCi0vLyBTdWJzYW1wbGluZ0xldmVsLiAwIGlzIG5vIHN1YnNhbXBsaW5nLCAx
IGlzIGhhbGYgZGltZW5zaW9ucyBvbiBlYWNoIGF4aXMgZXRjLgotdHlwZWRlZiBzaG9ydCBTdWJz
YW1wbGluZ0xldmVsOwotCiBjbGFzcyBJbWFnZVNvdXJjZSB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoSW1hZ2VTb3VyY2UpOwogICAgIGZyaWVuZCBjbGFzcyBCaXRtYXBJbWFnZTsKQEAgLTEz
MiwxOCArMTMwLDE5IEBAIHB1YmxpYzoKICAgICBib29sIGFsbG93U3Vic2FtcGxpbmdPZkZyYW1l
QXRJbmRleChzaXplX3QpIGNvbnN0OwogICAgIAogICAgIC8vIFNpemUgb2Ygb3B0aW9uYWxseSBz
dWJzYW1wbGVkIGZyYW1lLgotICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRleChzaXplX3QsIFN1
YnNhbXBsaW5nTGV2ZWwgPSAwLCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0gPSBEb05vdFJl
c3BlY3RJbWFnZU9yaWVudGF0aW9uKSBjb25zdDsKKyAgICBJbnRTaXplIGZyYW1lU2l6ZUF0SW5k
ZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gRGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwsIFJl
c3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSA9IERvTm90UmVzcGVjdEltYWdlT3JpZW50YXRpb24p
IGNvbnN0OwogICAgIAogICAgIC8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBk
ZWNvZGVkIGZyYW1lLiBJZiB0aGUgZnJhbWUgaXMgbm90IHlldAogICAgIC8vIGRlY29kZWQgdGhl
biByZXR1cm4gMC4KLSAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQXRJbmRleChzaXplX3QsIFN1YnNh
bXBsaW5nTGV2ZWwgPSAwKSBjb25zdDsKKyAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQXRJbmRleChz
aXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBEZWZhdWx0U3Vic2FtcGxpbmdMZXZlbCkgY29uc3Q7
CiAgICAgCiAgICAgZmxvYXQgZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90KTsKICAgICBJbWFn
ZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uQXRJbmRleChzaXplX3QpIGNvbnN0OyAvLyBFWElGIGlt
YWdlIG9yaWVudGF0aW9uCiAgICAgCiAgICAgLy8gQ2FsbGVycyBzaG91bGQgbm90IGNhbGwgdGhp
cyBhZnRlciBjYWxsaW5nIGNsZWFyKCkgd2l0aCBhIGhpZ2hlciBpbmRleDsKICAgICAvLyBzZWUg
Y29tbWVudHMgb24gY2xlYXIoKSBhYm92ZS4KLSAgICBOYXRpdmVJbWFnZVB0ciBjcmVhdGVGcmFt
ZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSAwKTsKKyAgICBOYXRpdmVJ
bWFnZVB0ciBjcmVhdGVGcmFtZUltYWdlQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwg
PSBEZWZhdWx0U3Vic2FtcGxpbmdMZXZlbCk7CisgICAgSW1hZ2VGcmFtZURhdGEgY3JlYXRlRnJh
bWVEYXRhQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwgPSBEZWZhdWx0U3Vic2FtcGxp
bmdMZXZlbCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgPSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGlu
Zzo6TWV0YWRhdGFBbmRJbWFnZSk7CiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQgY2xlYXJGcmFt
ZUJ1ZmZlckNhY2hlKHNpemVfdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9QbGF0Zm9ybUltYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWI3YWVhNDg5ZjNlYjJhODI4NzcxYzIx
MDNlOGQ0ZDBiZTE3YmU1ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtSW1hZ2UuaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiR3JhcGhpY3NUeXBlcy5oIgorI2luY2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKKyNp
bmNsdWRlICJOYXRpdmVJbWFnZVB0ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IENvbG9yOworY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIEdyYXBoaWNz
Q29udGV4dDsKKworY2xhc3MgUGxhdGZvcm1JbWFnZSB7CitwdWJsaWM6CisgICAgUGxhdGZvcm1J
bWFnZShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UpCisgICAgICAgIDogbV9pbWFnZShpbWFn
ZSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBpc05pbCgpIGNvbnN0IHsgcmV0dXJuICFtX2lt
YWdlOyB9CisgICAgdm9pZCBjbGVhclN1YkltYWdlcygpOworCisgICAgSW50U2l6ZSBzaXplKCkg
Y29uc3Q7CisgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0OworICAgIENvbG9yIHNpbmdsZVBpeGVs
U29saWRDb2xvcigpIGNvbnN0OworICAgIGJvb2wgaXNBbG1vc3RTb2xpZENvbG9yKCkgY29uc3Q7
CisgICAgdm9pZCBkcmF3KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29t
cG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSwgY29uc3QgSW1hZ2VPcmllbnRhdGlvbiYpIGNvbnN0
OworCisgICAgc3RhdGljIGZsb2F0IHN1YnNhbXBsaW5nU2NhbGUoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KTsKKwor
cHJpdmF0ZToKKyNpZiBVU0UoQ0cpCisgICAgQ0dJbWFnZVJlZiBjZ0ltYWdlUmVmKCkgY29uc3Qg
eyByZXR1cm4gbV9pbWFnZSA/IG1faW1hZ2UuZ2V0KCkgOiBudWxscHRyOyB9CisjZW5kaWYKKyAg
ICBOYXRpdmVJbWFnZVB0ciBtX2ltYWdlOworfTsKKworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2
YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpD
Lm1tCmluZGV4IGY0YzE0NTdiYmIyNTU3NTRmMDBhMDYyNWVlODNlMDRkYTdjNmVmY2YuLmQ1MjBm
NWQ1ODVhYzYwZGJhZWUyNTVlMWI4M2MyNGRjNjg3MjEwYTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJp
dmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFW
Rk9iakMubW0KQEAgLTIxMiw3ICsyMTIsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U3RyZWFtQVZGT2JqQzo6dXBkYXRlRGlzcGxheU1vZGUoKQogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBtX3BhdXNlZElt
YWdlID0gaW1hZ2UtPmdldENHSW1hZ2VSZWYoKTsKKyAgICAgICAgICAgICAgICBtX3BhdXNlZElt
YWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgICAgICAgICAg
ICAgaWYgKCFtX3BhdXNlZEltYWdlKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fZGlzcGxheU1v
ZGUgPSBQYWludEl0QmxhY2s7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VD
YWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJ
bWFnZUNhaXJvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTc3MjJiZWM1M2Fi
OGEwOGE4ZGE4NTI4YjllMGQ3YzRkMGNkNDEzNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9CaXRtYXBJbWFnZUNhaXJvLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2Vy
LmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBEaXJrIFNjaHVsemUgPGtyaXRAd2Via2l0Lm9y
Zz4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUg
ImNvbmZpZy5oIgotI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0KLSNpZiBVU0UoQ0FJUk8pCi0K
LSNpbmNsdWRlICJDYWlyb1V0aWxpdGllcy5oIgotI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIK
LSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRDYWlyby5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0j
aW5jbHVkZSA8Y2Fpcm8uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgTmF0
aXZlSW1hZ2UgewotCi1JbnRTaXplIHNpemUoY29uc3QgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4m
IGltYWdlKQotewotICAgIHJldHVybiBjYWlyb1N1cmZhY2VTaXplKGltYWdlLmdldCgpKTsKLX0K
LQotYm9vbCBoYXNBbHBoYShjb25zdCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYgaW1hZ2UpCi17
Ci0gICAgcmV0dXJuIGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRlbnQoaW1hZ2UuZ2V0KCkpICE9IENB
SVJPX0NPTlRFTlRfQ09MT1I7Ci19Ci0KLUNvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcihjb25z
dCBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiYgaW1hZ2UpCi17Ci0gICAgQVNTRVJUKGltYWdlKTsK
LSAgICAKLSAgICBpZiAoTmF0aXZlSW1hZ2U6OnNpemUoaW1hZ2UpICE9IEludFNpemUoMSwgMSkp
Ci0gICAgICAgIHJldHVybiBDb2xvcigpOwotCi0gICAgaWYgKGNhaXJvX3N1cmZhY2VfZ2V0X3R5
cGUoaW1hZ2UuZ2V0KCkpICE9IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkKLSAgICAgICAgcmV0
dXJuIENvbG9yKCk7Ci0KLSAgICBSR0JBMzIqIHBpeGVsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8
UkdCQTMyKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShpbWFnZS5nZXQoKSkpOwotICAg
IHJldHVybiBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQigqcGl4ZWwpOwotfQotCi19Ci0KLXZv
aWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGRzdCwgY29uc3QgRmxvYXRSZWN0JiBzcmMsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLAot
ICAgIEJsZW5kTW9kZSBibGVuZE1vZGUsIEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNj
cmlwdGlvbikKLXsKLSAgICBpZiAoIWRzdC53aWR0aCgpIHx8ICFkc3QuaGVpZ2h0KCkgfHwgIXNy
Yy53aWR0aCgpIHx8ICFzcmMuaGVpZ2h0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN0YXJ0
QW5pbWF0aW9uKCk7Ci0KLSAgICBhdXRvIHN1cmZhY2UgPSBmcmFtZUltYWdlQXRJbmRleChtX2N1
cnJlbnRGcmFtZSk7Ci0gICAgaWYgKCFzdXJmYWNlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3
b24ndCBoYXZlIGFuIGltYWdlIHlldC4KLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ29sb3IgY29s
b3IgPSBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKTsKLSAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7
Ci0gICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihjb250ZXh0LCBkc3QsIGNvbG9yLCBvcCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjb250ZXh0LnNhdmUoKTsKLQotICAgIC8vIFNl
dCB0aGUgY29tcG9zaXRpbmcgb3BlcmF0aW9uLgotICAgIGlmIChvcCA9PSBDb21wb3NpdGVTb3Vy
Y2VPdmVyICYmIGJsZW5kTW9kZSA9PSBCbGVuZE1vZGVOb3JtYWwgJiYgIWZyYW1lSGFzQWxwaGFB
dEluZGV4KG1fY3VycmVudEZyYW1lKSkKLSAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVy
YXRpb24oQ29tcG9zaXRlQ29weSk7Ci0gICAgZWxzZQotICAgICAgICBjb250ZXh0LnNldENvbXBv
c2l0ZU9wZXJhdGlvbihvcCwgYmxlbmRNb2RlKTsKLQotI2lmIEVOQUJMRShJTUFHRV9ERUNPREVS
X0RPV05fU0FNUExJTkcpCi0gICAgSW50U2l6ZSBzY2FsZWRTaXplID0gY2Fpcm9TdXJmYWNlU2l6
ZShzdXJmYWNlLmdldCgpKTsKLSAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gYWRqdXN0
U291cmNlUmVjdEZvckRvd25TYW1wbGluZyhzcmMsIHNjYWxlZFNpemUpOwotI2Vsc2UKLSAgICBG
bG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0KHNyYyk7Ci0jZW5kaWYKLQotICAgIEltYWdlT3JpZW50
YXRpb24gZnJhbWVPcmllbnRhdGlvbihkZXNjcmlwdGlvbi5pbWFnZU9yaWVudGF0aW9uKCkpOwot
ICAgIGlmIChkZXNjcmlwdGlvbi5yZXNwZWN0SW1hZ2VPcmllbnRhdGlvbigpID09IFJlc3BlY3RJ
bWFnZU9yaWVudGF0aW9uKQotICAgICAgICBmcmFtZU9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRh
dGlvbkF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwotCi0gICAgRmxvYXRSZWN0IGRzdFJlY3QgPSBk
c3Q7Ci0KLSAgICBpZiAoZnJhbWVPcmllbnRhdGlvbiAhPSBEZWZhdWx0SW1hZ2VPcmllbnRhdGlv
bikgewotICAgICAgICAvLyBJbWFnZU9yaWVudGF0aW9uIGV4cGVjdHMgdGhlIG9yaWdpbiB0byBi
ZSBhdCAoMCwgMCkuCi0gICAgICAgIGNvbnRleHQudHJhbnNsYXRlKGRzdFJlY3QueCgpLCBkc3RS
ZWN0LnkoKSk7Ci0gICAgICAgIGRzdFJlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludCgpKTsKLSAg
ICAgICAgY29udGV4dC5jb25jYXRDVE0oZnJhbWVPcmllbnRhdGlvbi50cmFuc2Zvcm1Gcm9tRGVm
YXVsdChkc3RSZWN0LnNpemUoKSkpOwotICAgICAgICBpZiAoZnJhbWVPcmllbnRhdGlvbi51c2Vz
V2lkdGhBc0hlaWdodCgpKSB7Ci0gICAgICAgICAgICAvLyBUaGUgZGVzdGluYXRpb24gcmVjdGFu
Z2xlIHdpbGwgaGF2ZSBpdCdzIHdpZHRoIGFuZCBoZWlnaHQgYWxyZWFkeSByZXZlcnNlZCBmb3Ig
dGhlIG9yaWVudGF0aW9uIG9mCi0gICAgICAgICAgICAvLyB0aGUgaW1hZ2UsIGFzIGl0IHdhcyBu
ZWVkZWQgZm9yIHBhZ2UgbGF5b3V0LCBzbyB3ZSBuZWVkIHRvIHJldmVyc2UgaXQgYmFjayBoZXJl
LgotICAgICAgICAgICAgZHN0UmVjdCA9IEZsb2F0UmVjdChkc3RSZWN0LngoKSwgZHN0UmVjdC55
KCksIGRzdFJlY3QuaGVpZ2h0KCksIGRzdFJlY3Qud2lkdGgoKSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3U3VyZmFjZVRvQ29udGV4dChz
dXJmYWNlLmdldCgpLCBkc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIGNvbnRleHQpOwotCi0gICAg
Y29udGV4dC5yZXN0b3JlKCk7Ci0KLSAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQotICAgICAgICBp
bWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7Ci19Ci0KLWJvb2wgRnJhbWVEYXRhOjpjbGVh
cihib29sIGNsZWFyTWV0YWRhdGEpCi17Ci0gICAgaWYgKGNsZWFyTWV0YWRhdGEpCi0gICAgICAg
IG1faGF2ZU1ldGFkYXRhID0gZmFsc2U7Ci0KLSAgICBpZiAobV9pbWFnZSkgewotICAgICAgICBt
X2ltYWdlID0gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gVVNFKENB
SVJPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
UGxhdGZvcm1JbWFnZUNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzBhZGFlYzI3MGUzMWIw
NTRhZmM1ZjY2ZDQ4Mjg4YWViZjA2MWUzYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAKQEAgLTAs
MCArMSwxMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2UuaCIKKworI2lm
IFVTRShDQUlSTykKKworI2luY2x1ZGUgIkNhaXJvVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1Db250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlIDxjYWlyby5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3ZvaWQgUGxhdGZvcm1JbWFnZTo6Y2xlYXJTdWJJbWFnZXMoKQoreworfQorCitJ
bnRTaXplIFBsYXRmb3JtSW1hZ2U6OnNpemUoKSBjb25zdAoreworICAgIHJldHVybiBpc05pbCgp
ID8gSW50U2l6ZSgpIDogY2Fpcm9TdXJmYWNlU2l6ZShtX2ltYWdlLmdldCgpKTsKK30KKworYm9v
bCBQbGF0Zm9ybUltYWdlOjpoYXNBbHBoYSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzTmlsKCkg
fHwgY2Fpcm9fc3VyZmFjZV9nZXRfY29udGVudChtX2ltYWdlLmdldCgpKSAhPSBDQUlST19DT05U
RU5UX0NPTE9SOworfQorCitDb2xvciBQbGF0Zm9ybUltYWdlOjpzaW5nbGVQaXhlbFNvbGlkQ29s
b3IoKSBjb25zdAoreworICAgIGlmIChpc05pbCgpIHx8IHNpemUoKSAhPSBJbnRTaXplKDEsIDEp
KQorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKworICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90
eXBlKG1faW1hZ2UuZ2V0KCkpICE9IENBSVJPX1NVUkZBQ0VfVFlQRV9JTUFHRSkKKyAgICAgICAg
cmV0dXJuIENvbG9yKCk7CisKKyAgICBSR0JBMzIqIHBpeGVsID0gcmVpbnRlcnByZXRfY2FzdF9w
dHI8UkdCQTMyKj4oY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShtX2ltYWdlLmdldCgpKSk7
CisgICAgcmV0dXJuIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKCpwaXhlbCk7Cit9CisKK2Jv
b2wgUGxhdGZvcm1JbWFnZTo6aXNBbG1vc3RTb2xpZENvbG9yKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2Zsb2F0IFBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUoR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRSZWN0JikKK3sKKyAg
ICByZXR1cm4gMTsKK30KKwordm9pZCBQbGF0Zm9ybUltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBJbnRTaXplJiwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBt
b2RlLCBjb25zdCBJbWFnZU9yaWVudGF0aW9uJiBvcmllbnRhdGlvbikgY29uc3QKK3sKKyAgICBj
b250ZXh0LnNhdmUoKTsKKyAgICAKKyAgICAvLyBTZXQgdGhlIGNvbXBvc2l0aW5nIG9wZXJhdGlv
bi4KKyAgICBpZiAob3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciAmJiBtb2RlID09IEJsZW5kTW9k
ZU5vcm1hbCAmJiAhaGFzQWxwaGEoKSkKKyAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVy
YXRpb24oQ29tcG9zaXRlQ29weSk7CisgICAgZWxzZQorICAgICAgICBjb250ZXh0LnNldENvbXBv
c2l0ZU9wZXJhdGlvbihvcCwgbW9kZSk7CisgICAgICAgIAorI2lmIEVOQUJMRShJTUFHRV9ERUNP
REVSX0RPV05fU0FNUExJTkcpCisgICAgSW50U2l6ZSBzY2FsZWRTaXplID0gY2Fpcm9TdXJmYWNl
U2l6ZShtX2ltYWdlLmdldCgpKTsKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gYWRq
dXN0U291cmNlUmVjdEZvckRvd25TYW1wbGluZyhzcmNSZWN0LCBzY2FsZWRTaXplKTsKKyNlbHNl
CisgICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdChzcmNSZWN0KTsKKyNlbmRpZgorICAgICAg
ICAKKyAgICBGbG9hdFJlY3QgYWRqdXN0ZWREZXN0UmVjdCA9IGRlc3RSZWN0OworICAgICAgICAK
KyAgICBpZiAob3JpZW50YXRpb24gIT0gRGVmYXVsdEltYWdlT3JpZW50YXRpb24pIHsKKyAgICAg
ICAgLy8gSW1hZ2VPcmllbnRhdGlvbiBleHBlY3RzIHRoZSBvcmlnaW4gdG8gYmUgYXQgKDAsIDAp
LgorICAgICAgICBjb250ZXh0LnRyYW5zbGF0ZShkZXN0UmVjdC54KCksIGRlc3RSZWN0LnkoKSk7
CisgICAgICAgIGFkanVzdGVkRGVzdFJlY3Quc2V0TG9jYXRpb24oRmxvYXRQb2ludCgpKTsKKyAg
ICAgICAgY29udGV4dC5jb25jYXRDVE0ob3JpZW50YXRpb24udHJhbnNmb3JtRnJvbURlZmF1bHQo
YWRqdXN0ZWREZXN0UmVjdC5zaXplKCkpKTsKKyAgICAgICAgaWYgKG9yaWVudGF0aW9uLnVzZXNX
aWR0aEFzSGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIC8vIFRoZSBkZXN0aW5hdGlvbiByZWN0YW5n
bGUgd2lsbCBoYXZlIGl0J3Mgd2lkdGggYW5kIGhlaWdodCBhbHJlYWR5IHJldmVyc2VkIGZvciB0
aGUgb3JpZW50YXRpb24gb2YKKyAgICAgICAgICAgIC8vIHRoZSBpbWFnZSwgYXMgaXQgd2FzIG5l
ZWRlZCBmb3IgcGFnZSBsYXlvdXQsIHNvIHdlIG5lZWQgdG8gcmV2ZXJzZSBpdCBiYWNrIGhlcmUu
CisgICAgICAgICAgICBhZGp1c3RlZERlc3RSZWN0LnNldFNpemUoYWRqdXN0ZWREZXN0UmVjdC5z
aXplKCkudHJhbnNwb3NlZFNpemUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb250ZXh0
LnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3U3VyZmFjZVRvQ29udGV4dChtX2ltYWdlLmdldCgpLCBh
ZGp1c3RlZERlc3RSZWN0LCBhZGp1c3RlZFNyY1JlY3QsIGNvbnRleHQpOworCisgICAgY29udGV4
dC5yZXN0b3JlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L0JpdG1hcEltYWdlQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
Qml0bWFwSW1hZ2VDRy5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzYzgxYTE3
MGJlNzlhZTZiZTZjYWNkYzk5ZjRjMzk4Y2FhZjQyNmQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvQml0bWFwSW1hZ2VDRy5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyMDYgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLQotI2lmIFVTRShD
RykKLQotI2luY2x1ZGUgIkNvcmVHcmFwaGljc1NQSS5oIgotI2luY2x1ZGUgIkZsb2F0Q29udmVy
c2lvbi5oIgotI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0Q0cuaCIKLSNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCi0jaW5jbHVkZSAiU3Vi
aW1hZ2VDYWNoZVdpdGhUaW1lci5oIgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotI2lm
IFVTRShBUFBLSVQpCi0jaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNl
cnZpY2VzLmg+Ci0jZW5kaWYKLQotI2lmIFBMQVRGT1JNKENPQ09BKQotI2luY2x1ZGUgIldlYkNv
cmVTeXN0ZW1JbnRlcmZhY2UuaCIKLSNlbmRpZgotCi0jaWYgUExBVEZPUk0oV0lOKQotI2luY2x1
ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZhY2UuaD4KLSNlbmRp
ZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLW5hbWVzcGFjZSBOYXRpdmVJbWFnZSB7Ci0KLUlu
dFNpemUgc2l6ZShjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4mIGltYWdlKQotewotICAgIEFT
U0VSVChpbWFnZSk7Ci0gICAgcmV0dXJuIEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGltYWdlLmdl
dCgpKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSkpOwotfQotCi1ib29sIGhhc0FscGhh
KGNvbnN0IFJldGFpblB0cjxDR0ltYWdlUmVmPiYpCi17Ci0gICAgLy8gRklYTUU6IEFuc3dlciBj
b3JyZWN0bHkgdGhlIHF1ZXN0aW9uOiBkb2VzIHRoZSBDR0ltYWdlUmVmIGhhdmUgYWxwaGEgY2hh
bm5uZWw/Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0gICAgCi1Db2xvciBzaW5nbGVQaXhlbFNvbGlk
Q29sb3IoY29uc3QgUmV0YWluUHRyPENHSW1hZ2VSZWY+JiBpbWFnZSkKLXsKLSAgICBBU1NFUlQo
aW1hZ2UpOwotICAgIAotICAgIGlmIChOYXRpdmVJbWFnZTo6c2l6ZShpbWFnZSkgIT0gSW50U2l6
ZSgxLCAxKSkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0gICAgCi0gICAgdW5zaWduZWQgY2hh
ciBwaXhlbFs0XTsgLy8gUkdCQQotICAgIGF1dG8gYml0bWFwQ29udGV4dCA9IGFkb3B0Q0YoQ0dC
aXRtYXBDb250ZXh0Q3JlYXRlKHBpeGVsLCAxLCAxLCA4LCBzaXplb2YocGl4ZWwpLCBzUkdCQ29s
b3JTcGFjZVJlZigpLAotICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QgfCBr
Q0dCaXRtYXBCeXRlT3JkZXIzMkJpZykpOwotCi0gICAgaWYgKCFiaXRtYXBDb250ZXh0KQotICAg
ICAgICByZXR1cm4gQ29sb3IoKTsKLSAgICAKLSAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoYml0
bWFwQ29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7Ci0gICAgQ0dDb250ZXh0RHJhd0lt
YWdlKGJpdG1hcENvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgMSwgMSksIGltYWdlLmdl
dCgpKTsKLSAgICAKLSAgICBpZiAoIXBpeGVsWzNdKQotICAgICAgICByZXR1cm4gQ29sb3IoMCwg
MCwgMCwgMCk7Ci0KLSAgICByZXR1cm4gQ29sb3IocGl4ZWxbMF0gKiAyNTUgLyBwaXhlbFszXSwg
cGl4ZWxbMV0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMl0gKiAyNTUgLyBwaXhlbFszXSwgcGl4
ZWxbM10pOwotfQotCi19Ci0KLWJvb2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0YWRh
dGEpCi17Ci0gICAgaWYgKGNsZWFyTWV0YWRhdGEpCi0gICAgICAgIG1faGF2ZU1ldGFkYXRhID0g
ZmFsc2U7Ci0KLSAgICBtX3N1YnNhbXBsaW5nTGV2ZWwgPSAwOwotCi0gICAgaWYgKG1faW1hZ2Up
IHsKLSNpZiBDQUNIRV9TVUJJTUFHRVMKLSAgICAgICAgc3ViaW1hZ2VDYWNoZSgpLmNsZWFySW1h
Z2UobV9pbWFnZS5nZXQoKSk7Ci0jZW5kaWYKLSAgICAgICAgbV9pbWFnZSA9IG51bGxwdHI7Ci0g
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUNHSW1h
Z2VSZWYgQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VSZWYoKQotewotICAgIHJldHVybiBmcmFtZUlt
YWdlQXRJbmRleCgwKS5nZXQoKTsKLX0KLQotQ0dJbWFnZVJlZiBCaXRtYXBJbWFnZTo6Z2V0Rmly
c3RDR0ltYWdlUmVmT2ZTaXplKGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgc2l6ZV90IGNv
dW50ID0gZnJhbWVDb3VudCgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkgewotICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBmcmFtZUltYWdlQXRJbmRleChpKS5n
ZXQoKTsKLSAgICAgICAgaWYgKGNnSW1hZ2UgJiYgSW50U2l6ZShDR0ltYWdlR2V0V2lkdGgoY2dJ
bWFnZSksIENHSW1hZ2VHZXRIZWlnaHQoY2dJbWFnZSkpID09IHNpemUpCi0gICAgICAgICAgICBy
ZXR1cm4gY2dJbWFnZTsKLSAgICB9Ci0KLSAgICAvLyBGYWxsYmFjayB0byB0aGUgZGVmYXVsdCBD
R0ltYWdlUmVmIGlmIHdlIGNhbid0IGZpbmQgdGhlIHJpZ2h0IHNpemUKLSAgICByZXR1cm4gZ2V0
Q0dJbWFnZVJlZigpOwotfQotCi1SZXRhaW5QdHI8Q0ZBcnJheVJlZj4gQml0bWFwSW1hZ2U6Omdl
dENHSW1hZ2VBcnJheSgpCi17Ci0gICAgc2l6ZV90IGNvdW50ID0gZnJhbWVDb3VudCgpOwotICAg
IGlmICghY291bnQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAotICAgIENGTXV0YWJs
ZUFycmF5UmVmIGFycmF5ID0gQ0ZBcnJheUNyZWF0ZU11dGFibGUoTlVMTCwgY291bnQsICZrQ0ZU
eXBlQXJyYXlDYWxsQmFja3MpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsr
aSkgewotICAgICAgICBpZiAoQ0dJbWFnZVJlZiBjdXJyRnJhbWUgPSBmcmFtZUltYWdlQXRJbmRl
eChpKS5nZXQoKSkKLSAgICAgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheSwgY3VyckZy
YW1lKTsKLSAgICB9Ci0gICAgcmV0dXJuIGFkb3B0Q0YoYXJyYXkpOwotfQotCi12b2lkIEJpdG1h
cEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCYgY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3Np
dGVPcCwgQmxlbmRNb2RlIGJsZW5kTW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2NyaXB0aW9uIGRl
c2NyaXB0aW9uKQotewotI2lmIFBMQVRGT1JNKElPUykKLSAgICBzdGFydEFuaW1hdGlvbihEb05v
dENhdGNoVXApOwotI2Vsc2UKLSAgICBzdGFydEFuaW1hdGlvbigpOwotI2VuZGlmCi0KLSAgICBS
ZXRhaW5QdHI8Q0dJbWFnZVJlZj4gaW1hZ2U7Ci0gICAgLy8gTmV2ZXIgdXNlIHN1YnNhbXBsZWQg
aW1hZ2VzIGZvciBkcmF3aW5nIGludG8gUERGIGNvbnRleHRzLgotICAgIGlmICh3a0NHQ29udGV4
dElzUERGQ29udGV4dChjdHh0LnBsYXRmb3JtQ29udGV4dCgpKSkKLSAgICAgICAgaW1hZ2UgPSBj
b3B5VW5zY2FsZWRGcmFtZUltYWdlQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIENHUmVjdCB0cmFuc2Zvcm1lZERlc3RpbmF0aW9uUmVjdCA9IENHUmVjdEFwcGx5
QWZmaW5lVHJhbnNmb3JtKGRlc3RSZWN0LCBDR0NvbnRleHRHZXRDVE0oY3R4dC5wbGF0Zm9ybUNv
bnRleHQoKSkpOwotICAgICAgICBmbG9hdCBzdWJzYW1wbGluZ1NjYWxlID0gc3RkOjptaW48Zmxv
YXQ+KDEsIHN0ZDo6bWF4KHRyYW5zZm9ybWVkRGVzdGluYXRpb25SZWN0LnNpemUud2lkdGggLyBz
cmNSZWN0LndpZHRoKCksIHRyYW5zZm9ybWVkRGVzdGluYXRpb25SZWN0LnNpemUuaGVpZ2h0IC8g
c3JjUmVjdC5oZWlnaHQoKSkpOwotCi0gICAgICAgIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgo
bV9jdXJyZW50RnJhbWUsIHN1YnNhbXBsaW5nU2NhbGUpOwotICAgIH0KLQotICAgIGlmICghaW1h
Z2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgQ29sb3IgY29sb3IgPSBzaW5nbGVQaXhlbFNvbGlkQ29s
b3IoKTsKLSAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7Ci0gICAgICAgIGZpbGxXaXRoU29saWRD
b2xvcihjdHh0LCBkZXN0UmVjdCwgY29sb3IsIGNvbXBvc2l0ZU9wKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIC8vIFN1YnNhbXBsaW5nIG1heSBoYXZlIGdpdmVuIHVzIGFuIGltYWdl
IHRoYXQgaXMgc21hbGxlciB0aGFuIHNpemUoKS4KLSAgICBJbnRTaXplIGltYWdlU2l6ZShDR0lt
YWdlR2V0V2lkdGgoaW1hZ2UuZ2V0KCkpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSk7
Ci0gICAgCi0gICAgLy8gc3JjUmVjdCBpcyBpbiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHVuc3Vi
c2FtcGxlZCBpbWFnZSwgc28gd2UgaGF2ZSB0byBtYXAgaXQgdG8gdGhlIHN1YnNhbXBsZWQgaW1h
Z2UuCi0gICAgRmxvYXRSZWN0IHNjYWxlZFNyY1JlY3QgPSBzcmNSZWN0OwotICAgIGlmIChpbWFn
ZVNpemUgIT0gbV9zaXplKSB7Ci0gICAgICAgIEZsb2F0UmVjdCBvcmlnaW5hbEltYWdlQm91bmRz
KEZsb2F0UG9pbnQoKSwgbV9zaXplKTsKLSAgICAgICAgRmxvYXRSZWN0IHN1YnNhbXBsZWRJbWFn
ZUJvdW5kcyhGbG9hdFBvaW50KCksIGltYWdlU2l6ZSk7Ci0gICAgICAgIHNjYWxlZFNyY1JlY3Qg
PSBtYXBSZWN0KHNyY1JlY3QsIG9yaWdpbmFsSW1hZ2VCb3VuZHMsIHN1YnNhbXBsZWRJbWFnZUJv
dW5kcyk7Ci0gICAgfQotICAgIAotICAgIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb247Ci0g
ICAgaWYgKGRlc2NyaXB0aW9uLnJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKCkgPT0gUmVzcGVjdElt
YWdlT3JpZW50YXRpb24pCi0gICAgICAgIG9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0
SW5kZXgobV9jdXJyZW50RnJhbWUpOwotCi0gICAgY3R4dC5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2Us
IGltYWdlU2l6ZSwgZGVzdFJlY3QsIHNjYWxlZFNyY1JlY3QsIGNvbXBvc2l0ZU9wLCBibGVuZE1v
ZGUsIG9yaWVudGF0aW9uKTsKLQotICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCi0gICAgICAgIGlt
YWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKLX0KLQotUmV0YWluUHRyPENHSW1hZ2VSZWY+
IEJpdG1hcEltYWdlOjpjb3B5VW5zY2FsZWRGcmFtZUltYWdlQXRJbmRleChzaXplX3QgaW5kZXgp
Ci17Ci0gICAgaWYgKGluZGV4ID49IGZyYW1lQ291bnQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpIHx8ICFtX2ZyYW1lc1tpbmRl
eF0ubV9pbWFnZSkKLSAgICAgICAgY2FjaGVGcmFtZShpbmRleCwgMCk7Ci0KLSAgICBpZiAoIW1f
ZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBsaW5nTGV2ZWwpCi0gICAgICAgIHJldHVybiBtX2ZyYW1l
c1tpbmRleF0ubV9pbWFnZTsKLQotICAgIHJldHVybiBtX3NvdXJjZS5jcmVhdGVGcmFtZUltYWdl
QXRJbmRleChpbmRleCk7Ci19Ci0KLX0KLQotI2VuZGlmIC8vIFVTRShDRykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwCmluZGV4IGI0Mjhk
NTBkOTRiZjkyNDI4MDMyODdkMmVlYzE2YmQ2OWM1MjhkOTIuLjNkYWExMzlhYjdlYTViNDIxNTc3
ODgzNWQzNTNkOGFkYjVmMGM3NWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcApAQCAtNzIsNyArNzIsNyBAQCBDR1BhdHRlcm5SZWYg
UGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdXNl
clNwYWNlVHJhbgogICAgIC8vIElmIHdlJ3JlIHJlcGVhdGluZyBpbiBib3RoIGRpcmVjdGlvbnMs
IHdlIGNhbiB1c2UgaW1hZ2UtYmFja2VkIHBhdHRlcm5zCiAgICAgLy8gaW5zdGVhZCBvZiBjdXN0
b20gcGF0dGVybnMsIGFuZCBhdm9pZCB0aWxpbmctZWRnZSBwaXhlbCBjcmFja3MuCiAgICAgaWYg
KG1fcmVwZWF0WCAmJiBtX3JlcGVhdFkpCi0gICAgICAgIHJldHVybiB3a0NHUGF0dGVybkNyZWF0
ZVdpdGhJbWFnZUFuZFRyYW5zZm9ybSh0aWxlSW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpLCBwYXR0
ZXJuVHJhbnNmb3JtLCB3a1BhdHRlcm5UaWxpbmdDb25zdGFudFNwYWNpbmcpOworICAgICAgICBy
ZXR1cm4gd2tDR1BhdHRlcm5DcmVhdGVXaXRoSW1hZ2VBbmRUcmFuc2Zvcm0odGlsZUltYWdlKCkt
Pm5hdGl2ZUltYWdlKCkuZ2V0KCksIHBhdHRlcm5UcmFuc2Zvcm0sIHdrUGF0dGVyblRpbGluZ0Nv
bnN0YW50U3BhY2luZyk7CiAKICAgICAvLyBJZiBGTFRfTUFYIHNob3VsZCBhbHNvIGJlIHVzZWQg
Zm9yIHhTdGVwIG9yIHlTdGVwLCBub3RoaW5nIGlzIHJlbmRlcmVkLiBVc2luZyBmcmFjdGlvbnMg
b2YgRkxUX01BWCBhbHNvCiAgICAgLy8gcmVzdWx0IGluIG5vdGhpbmcgYmVpbmcgcmVuZGVyZWQu
CkBAIC04Myw3ICs4Myw3IEBAIENHUGF0dGVyblJlZiBQYXR0ZXJuOjpjcmVhdGVQbGF0Zm9ybVBh
dHRlcm4oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB1c2VyU3BhY2VUcmFuCiAgICAgQ0dGbG9hdCB5
U3RlcCA9IG1fcmVwZWF0WSA/IHRpbGVSZWN0LmhlaWdodCgpIDogKDEgPDwgMjIpOwogCiAgICAg
Ly8gVGhlIHBhdHRlcm4gd2lsbCByZWxlYXNlIHRoZSBDR0ltYWdlUmVmIHdoZW4gaXQncyBkb25l
IHJlbmRlcmluZyBpbiBwYXR0ZXJuUmVsZWFzZUNhbGxiYWNrCi0gICAgQ0dJbWFnZVJlZiBwbGF0
Zm9ybUltYWdlID0gQ0dJbWFnZVJldGFpbih0aWxlSW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpKTsK
KyAgICBDR0ltYWdlUmVmIHBsYXRmb3JtSW1hZ2UgPSB0aWxlSW1hZ2UoKS0+bmF0aXZlSW1hZ2Uo
KS5sZWFrUmVmKCk7CiAKICAgICBjb25zdCBDR1BhdHRlcm5DYWxsYmFja3MgcGF0dGVybkNhbGxi
YWNrcyA9IHsgMCwgcGF0dGVybkNhbGxiYWNrLCBwYXR0ZXJuUmVsZWFzZUNhbGxiYWNrIH07CiAg
ICAgcmV0dXJuIENHUGF0dGVybkNyZWF0ZShwbGF0Zm9ybUltYWdlLCB0aWxlUmVjdCwgcGF0dGVy
blRyYW5zZm9ybSwgeFN0ZXAsIHlTdGVwLCBrQ0dQYXR0ZXJuVGlsaW5nQ29uc3RhbnRTcGFjaW5n
LCBUUlVFLCAmcGF0dGVybkNhbGxiYWNrcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFnZUNHLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZmIy
ZGUwZWExMmRhMjE0ZjEwNDZjMzk2MmU4ZWFiNTNjNjQ0MTI1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZvcm1JbWFnZUNHLmNwcApA
QCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCisK
KyNpZiBVU0UoQ0cpCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkNvcmVHcmFwaGlj
c1NQSS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0
aWVzLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbnRTaXpl
LmgiCisjaW5jbHVkZSAiU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5oIgorCisjaWYgUExBVEZPUk0o
V0lOKQorI2luY2x1ZGUgPFdlYktpdFN5c3RlbUludGVyZmFjZS9XZWJLaXRTeXN0ZW1JbnRlcmZh
Y2UuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgCit2b2lkIFBsYXRmb3Jt
SW1hZ2U6OmNsZWFyU3ViSW1hZ2VzKCkKK3sKKyNpZiBDQUNIRV9TVUJJTUFHRVMKKyAgICBpZiAo
IWlzTmlsKCkpCisgICAgICAgIHN1YmltYWdlQ2FjaGUoKS5jbGVhckltYWdlKGNnSW1hZ2VSZWYo
KSk7CisjZW5kaWYKK30KKworSW50U2l6ZSBQbGF0Zm9ybUltYWdlOjpzaXplKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gaXNOaWwoKSA/IEludFNpemUoKSA6IEludFNpemUoQ0dJbWFnZUdldFdpZHRo
KGNnSW1hZ2VSZWYoKSksIENHSW1hZ2VHZXRIZWlnaHQoY2dJbWFnZVJlZigpKSk7Cit9CisKK2Jv
b2wgUGxhdGZvcm1JbWFnZTo6aGFzQWxwaGEoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBBbnN3
ZXIgY29ycmVjdGx5IHRoZSBxdWVzdGlvbjogZG9lcyB0aGUgQ0dJbWFnZVJlZiBoYXZlIGFscGhh
IGNoYW5ubmVsPworICAgIHJldHVybiB0cnVlOworfQorCitDb2xvciBQbGF0Zm9ybUltYWdlOjpz
aW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdAoreworICAgIGlmIChpc05pbCgpIHx8IHNpemUo
KSAhPSBJbnRTaXplKDEsIDEpKQorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICAKKyAgICB1
bnNpZ25lZCBjaGFyIHBpeGVsWzRdOyAvLyBSR0JBCisgICAgYXV0byBiaXRtYXBDb250ZXh0ID0g
YWRvcHRDRihDR0JpdG1hcENvbnRleHRDcmVhdGUocGl4ZWwsIDEsIDEsIDgsIHNpemVvZihwaXhl
bCksIHNSR0JDb2xvclNwYWNlUmVmKCksCisgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBs
aWVkTGFzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMyQmlnKSk7CisgICAgCisgICAgaWYgKCFiaXRt
YXBDb250ZXh0KQorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKyAgICAKKyAgICBDR0NvbnRleHRT
ZXRCbGVuZE1vZGUoYml0bWFwQ29udGV4dC5nZXQoKSwga0NHQmxlbmRNb2RlQ29weSk7CisgICAg
Q0dDb250ZXh0RHJhd0ltYWdlKGJpdG1hcENvbnRleHQuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwg
MSwgMSksIGNnSW1hZ2VSZWYoKSk7CisgICAgCisgICAgaWYgKCFwaXhlbFszXSkKKyAgICAgICAg
cmV0dXJuIENvbG9yKDAsIDAsIDAsIDApOworICAgIAorICAgIHJldHVybiBDb2xvcihwaXhlbFsw
XSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsxXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsyXSAq
IDI1NSAvIHBpeGVsWzNdLCBwaXhlbFszXSk7Cit9CisgICAgCitib29sIFBsYXRmb3JtSW1hZ2U6
OmlzQWxtb3N0U29saWRDb2xvcigpIGNvbnN0Cit7CisgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IGNn
SW1hZ2VSZWYoKTsKKyAgICBBU1NFUlQoQ0dJbWFnZUdldEJpdHNQZXJDb21wb25lbnQoaW1hZ2Up
ID09IDgpOworICAgIAorICAgIENHQml0bWFwSW5mbyBpbWFnZUluZm8gPSBDR0ltYWdlR2V0Qml0
bWFwSW5mbyhpbWFnZSk7CisgICAgaWYgKCEoaW1hZ2VJbmZvICYga0NHQml0bWFwQnl0ZU9yZGVy
MzJMaXR0bGUpIHx8IChpbWFnZUluZm8gJiBrQ0dCaXRtYXBBbHBoYUluZm9NYXNrKSAhPSBrQ0dJ
bWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0KSB7CisgICAgICAgIC8vIEZJWE1FOiBDb25zaWRl
ciBiZWluZyBhYmxlIHRvIGhhbmRsZSBvdGhlciBwaXhlbCBmb3JtYXRzLgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAg
ICBzaXplX3Qgd2lkdGggPSBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpOworICAgIHNpemVfdCBoZWln
aHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKTsKKyAgICBzaXplX3QgYnl0ZXNQZXJSb3cgPSBD
R0ltYWdlR2V0Qnl0ZXNQZXJSb3coaW1hZ2UpOworICAgIAorICAgIFJldGFpblB0cjxDRkRhdGFS
ZWY+IHByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNvcHlEYXRhKENHSW1hZ2VHZXRE
YXRhUHJvdmlkZXIoaW1hZ2UpKSk7CisgICAgY29uc3QgVUludDgqIGRhdGEgPSBDRkRhdGFHZXRC
eXRlUHRyKHByb3ZpZGVyLmdldCgpKTsKKyAgICAKKyAgICAvLyBPdmVybGF5IGEgZ3JpZCBvZiBz
YW1wbGluZyBkb3RzIG9uIHRvcCBvZiBhIGdyYXlzY2FsZSB2ZXJzaW9uIG9mIHRoZSBpbWFnZS4K
KyAgICAvLyBGb3IgdGhlIGludGVyaW9yIHBvaW50cywgY2FsY3VsYXRlIHRoZSBkaWZmZXJlbmNl
IGluIGx1bWluYW5jZSBhbW9uZyB0aGUgc2FtcGxlIHBvaW50CisgICAgLy8gYW5kIGl0cyBzdXJy
b3VuZHMgcG9pbnRzLCBzY2FsZWQgYnkgdHJhbnNwYXJlbmN5LgorICAgIGNvbnN0IHVuc2lnbmVk
IHNhbXBsZVJvd3MgPSA3OworICAgIGNvbnN0IHVuc2lnbmVkIHNhbXBsZUNvbHMgPSA3OworICAg
IC8vIEZJWE1FOiBSZWZpbmUgdGhlIHByb3BlciBudW1iZXIgb2Ygc2FtcGxlcywgYW5kIGFjY29t
bW9kYXRlIGRpZmZlcmVudCBhc3BlY3QgcmF0aW9zLgorICAgIGlmICh3aWR0aCA8IHNhbXBsZUNv
bHMgfHwgaGVpZ2h0IDwgc2FtcGxlUm93cykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAor
ICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBsYXN0IHJvdy9jb2x1bW4gbGFuZCBvbiB0aGUgaW1hZ2Ug
cGVyaW1ldGVyLgorICAgIGNvbnN0IGZsb2F0IHN0cmlkZVdpZHRoID0gc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHdpZHRoIC0gMSkgLyAoc2FtcGxlQ29scyAtIDEpOworICAgIGNvbnN0IGZsb2F0IHN0cmlk
ZUhlaWdodCA9IHN0YXRpY19jYXN0PGZsb2F0PihoZWlnaHQgLSAxKSAvIChzYW1wbGVSb3dzIC0g
MSk7CisgICAgZmxvYXQgc2FtcGxlc1tzYW1wbGVSb3dzXVtzYW1wbGVDb2xzXTsKKyAgICAKKyAg
ICAvLyBGaW5kIHRoZSBsdW1pbmFuY2Ugb2YgdGhlIHNhbXBsZSBwb2ludHMuCisgICAgZmxvYXQg
eSA9IDA7CisgICAgY29uc3QgVUludDgqIHJvdyA9IGRhdGE7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNhbXBsZVJvd3M7ICsraSkgeworICAgICAgICBmbG9hdCB4ID0gMDsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHNhbXBsZUNvbHM7ICsraikgeworICAgICAgICAg
ICAgY29uc3QgVUludDgqIHAwID0gcm93ICsgKHN0YXRpY19jYXN0PGludD4oeCArIC41KSkgKiA0
OworICAgICAgICAgICAgLy8gUiBHIEIgQQorICAgICAgICAgICAgc2FtcGxlc1tpXVtqXSA9ICgw
LjIxMjUgKiAqcDAgKyAwLjcxNTQgKiAqKHAwKzEpICsgMC4wNzIxICogKihwMCsyKSkgKiAqKHAw
KzMpIC8gMjU1OworICAgICAgICAgICAgeCArPSBzdHJpZGVXaWR0aDsKKyAgICAgICAgfQorICAg
ICAgICB5ICs9IHN0cmlkZUhlaWdodDsKKyAgICAgICAgcm93ID0gZGF0YSArIChzdGF0aWNfY2Fz
dDxpbnQ+KHkgKyAuNSkpICogYnl0ZXNQZXJSb3c7CisgICAgfQorICAgIAorICAgIC8vIERldGVy
bWluZSB0aGUgaW1hZ2Ugc2NvcmUuCisgICAgZmxvYXQgYWNjdW1TY29yZSA9IDA7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMTsgaSA8IHNhbXBsZVJvd3MgLSAxOyArK2kpIHsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBqID0gMTsgaiA8IHNhbXBsZUNvbHMgLSAxOyArK2opIHsKKyAgICAgICAgICAg
IGZsb2F0IGRpZmYgPSBzYW1wbGVzW2kgLSAxXVtqXSArIHNhbXBsZXNbaSArIDFdW2pdICsgc2Ft
cGxlc1tpXVtqIC0gMV0gKyBzYW1wbGVzW2ldW2ogKyAxXSAtIDQgKiBzYW1wbGVzW2ldW2pdOwor
ICAgICAgICAgICAgYWNjdW1TY29yZSArPSBkaWZmICogZGlmZjsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICAvLyBUaGUgc2NvcmUgZm9yIGEgZ2l2ZW4gc2FtcGxlIGNhbiBiZSB3aXRoaW4g
dGhlIHJhbmdlIG9mIDAgYW5kIDI1NV4yLgorICAgIHJldHVybiBhY2N1bVNjb3JlIDwgMjUwMCAq
IChzYW1wbGVSb3dzIC0gMikgKiAoc2FtcGxlQ29scyAtIDIpOworfQorCitmbG9hdCBQbGF0Zm9y
bUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KQoreworICAgIC8v
IE5ldmVyIHVzZSBzdWJzYW1wbGVkIGltYWdlcyBmb3IgZHJhd2luZyBpbnRvIFBERiBjb250ZXh0
cy4KKyAgICBpZiAod2tDR0NvbnRleHRJc1BERkNvbnRleHQoY29udGV4dC5wbGF0Zm9ybUNvbnRl
eHQoKSkpCisgICAgICAgIHJldHVybiAxOworICAgIAorICAgIENHUmVjdCB0cmFuc2Zvcm1lZERl
c3RpbmF0aW9uUmVjdCA9IENHUmVjdEFwcGx5QWZmaW5lVHJhbnNmb3JtKGRlc3RSZWN0LCBDR0Nv
bnRleHRHZXRDVE0oY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSkpOworICAgIHJldHVybiBzdGQ6
Om1pbjxmbG9hdD4oMSwgc3RkOjptYXgodHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS53
aWR0aCAvIHNyY1JlY3Qud2lkdGgoKSwgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3Quc2l6ZS5o
ZWlnaHQgLyBzcmNSZWN0LmhlaWdodCgpKSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1JbWFnZTo6ZHJh
dyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50U2l6ZSYgc3JjU2l6ZSwgQ29tcG9zaXRl
T3BlcmF0b3Igb3AsIEJsZW5kTW9kZSBtb2RlLCBjb25zdCBJbWFnZU9yaWVudGF0aW9uJiBvcmll
bnRhdGlvbikgY29uc3QKK3sKKyAgICAvLyBTdWJzYW1wbGluZyBtYXkgaGF2ZSBnaXZlbiB1cyBh
biBpbWFnZSB0aGF0IGlzIHNtYWxsZXIgdGhhbiBzaXplKCkuCisgICAgSW50U2l6ZSBzdWJzYW1w
bGVkSW1hZ2VTaXplID0gc2l6ZSgpOworICAgIAorICAgIC8vIHNyY1JlY3QgaXMgaW4gdGhlIGNv
b3JkaW5hdGVzIG9mIHRoZSB1bnN1YnNhbXBsZWQgaW1hZ2UsIHNvIHdlIGhhdmUgdG8gbWFwIGl0
IHRvIHRoZSBzdWJzYW1wbGVkIGltYWdlLgorICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNyY1JlY3Qg
PSBzcmNSZWN0OworICAgIGlmIChzdWJzYW1wbGVkSW1hZ2VTaXplICE9IHNyY1NpemUpCisgICAg
ICAgIGFkanVzdGVkU3JjUmVjdCA9IG1hcFJlY3Qoc3JjUmVjdCwgRmxvYXRSZWN0KHsgfSwgc3Jj
U2l6ZSksIEZsb2F0UmVjdCh7IH0sIHN1YnNhbXBsZWRJbWFnZVNpemUpKTsKKyAgICAKKyAgICBj
b250ZXh0LmRyYXdOYXRpdmVJbWFnZShtX2ltYWdlLCBzdWJzYW1wbGVkSW1hZ2VTaXplLCBkZXN0
UmVjdCwgYWRqdXN0ZWRTcmNSZWN0LCBvcCwgbW9kZSwgb3JpZW50YXRpb24pOworfQorICAgIAor
fQorCisjZW5kaWYgLy8gVVNFKENHKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYS5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9u
Q29jb2EubW0KaW5kZXggODk3MjBkMTczNjVkYTdlOGJhODQ2OWQ1Mjk0NTQ4ZDUxODQ3YTdmZS4u
NDQ3NmZjNWY4N2MzNDk4OGY2ZDlhZDU1ZWViZDhkMWI5YmIwMjJlNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRp
b25Db2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9U
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tCkBAIC0xMjksNyArMTI5LDcgQEAgVGV4dFRy
YWNrUmVwcmVzZW50YXRpb25Db2NvYTo6flRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EoKQog
dm9pZCBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hOjp1cGRhdGUoKQogewogICAgIGlmIChh
dXRvIHJlcHJlc2VudGF0aW9uID0gbV9jbGllbnQuY3JlYXRlVGV4dFRyYWNrUmVwcmVzZW50YXRp
b25JbWFnZSgpKQotICAgICAgICBbbV9sYXllci5nZXQoKSBzZXRDb250ZW50czooaWQpcmVwcmVz
ZW50YXRpb24tPmdldENHSW1hZ2VSZWYoKV07CisgICAgICAgIFttX2xheWVyLmdldCgpIHNldENv
bnRlbnRzOihpZClyZXByZXNlbnRhdGlvbi0+bmF0aXZlSW1hZ2UoKS5nZXQoKV07CiB9CiAKIHZv
aWQgVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2NvYTo6c2V0Q29udGVudFNjYWxlKGZsb2F0IHNj
YWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0lt
YWdlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ltYWdlTWFj
Lm1tCmluZGV4IDAxZWI2ZGQzMDA0M2EyMjUyOTE3NmZkOTEyMTE3ZGM1Nzc2YzE3YmEuLmRjMWM3
YzcwOTVkOTQ0YzRjNjJmMWZlMDkzNTcwMmExM2M3YzdhNDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSW1hZ2VNYWMubW0KQEAgLTg1LDMxICs4NSwyMiBA
QCBDRkRhdGFSZWYgQml0bWFwSW1hZ2U6OmdldFRJRkZSZXByZXNlbnRhdGlvbigpCiAgICAgaWYg
KG1fdGlmZlJlcCkKICAgICAgICAgcmV0dXJuIG1fdGlmZlJlcC5nZXQoKTsKIAotICAgIHVuc2ln
bmVkIG51bUZyYW1lcyA9IGZyYW1lQ291bnQoKTsKKyAgICBhdXRvIG5hdGl2ZUltYWdlcyA9IHRo
aXMtPmZyYW1lc05hdGl2ZUltYWdlcygpOwogCi0gICAgLy8gSWYgbnVtRnJhbWVzIGlzIHplcm8s
IHdlIGtub3cgZm9yIGNlcnRhaW4gdGhpcyBpbWFnZSBkb2Vzbid0IGhhdmUgdmFsaWQgZGF0YQor
ICAgIC8vIElmIGZyYW1lc0ltYWdlcy5zaXplKCkgaXMgemVybywgd2Uga25vdyBmb3IgY2VydGFp
biB0aGlzIGltYWdlIGRvZXNuJ3QgaGF2ZSB2YWxpZCBkYXRhCiAgICAgLy8gRXZlbiB0aG91Z2gg
dGhlIGNhbGwgdG8gQ0dJbWFnZURlc3RpbmF0aW9uQ3JlYXRlV2l0aERhdGEgd2lsbCBmYWlsIGFu
ZCB3ZSdsbCBoYW5kbGUgaXQgZ3JhY2VmdWxseSwKICAgICAvLyBpbiBjZXJ0YWluIGNpcmN1bXN0
YW5jZXMgdGhhdCBjYWxsIHdpbGwgc3BhbSB0aGUgY29uc29sZSB3aXRoIGFuIGVycm9yIG1lc3Nh
Z2UKLSAgICBpZiAoIW51bUZyYW1lcykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBWZWN0b3I8
Q0dJbWFnZVJlZj4gaW1hZ2VzOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1GcmFt
ZXM7ICsraSApIHsKLSAgICAgICAgQ0dJbWFnZVJlZiBjZ0ltYWdlID0gZnJhbWVJbWFnZUF0SW5k
ZXgoaSkuZ2V0KCk7Ci0gICAgICAgIGlmIChjZ0ltYWdlKQotICAgICAgICAgICAgaW1hZ2VzLmFw
cGVuZChjZ0ltYWdlKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBudW1WYWxpZEZyYW1lcyA9IGlt
YWdlcy5zaXplKCk7CisgICAgaWYgKCFuYXRpdmVJbWFnZXMuc2l6ZSgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgIFJldGFpblB0cjxDRk11dGFibGVEYXRhUmVmPiBkYXRhID0gYWRv
cHRDRihDRkRhdGFDcmVhdGVNdXRhYmxlKDAsIDApKTsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZURl
c3RpbmF0aW9uUmVmPiBkZXN0aW5hdGlvbiA9IGFkb3B0Q0YoQ0dJbWFnZURlc3RpbmF0aW9uQ3Jl
YXRlV2l0aERhdGEoZGF0YS5nZXQoKSwga1VUVHlwZVRJRkYsIG51bVZhbGlkRnJhbWVzLCAwKSk7
CisgICAgUmV0YWluUHRyPENHSW1hZ2VEZXN0aW5hdGlvblJlZj4gZGVzdGluYXRpb24gPSBhZG9w
dENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEuZ2V0KCksIGtVVFR5cGVU
SUZGLCBuYXRpdmVJbWFnZXMuc2l6ZSgpLCAwKSk7CiAKICAgICBpZiAoIWRlc3RpbmF0aW9uKQot
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtVmFsaWRGcmFtZXM7ICsraSkKLSAgICAgICAgQ0dJbWFnZURl
c3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRpb24uZ2V0KCksIGltYWdlc1tpXSwgMCk7CisgICAg
Zm9yIChhdXRvIG5hdGl2ZUltYWdlIDogbmF0aXZlSW1hZ2VzKQorICAgICAgICBDR0ltYWdlRGVz
dGluYXRpb25BZGRJbWFnZShkZXN0aW5hdGlvbi5nZXQoKSwgbmF0aXZlSW1hZ2UuZ2V0KCksIDAp
OwogCiAgICAgQ0dJbWFnZURlc3RpbmF0aW9uRmluYWxpemUoZGVzdGluYXRpb24uZ2V0KCkpOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmNwcAppbmRleCAyMTc1M2JkMDc4YTFjNTVjMzI3MTljMTQ4NDZmMGY2Yjk5NzVm
OGZkLi43MWY5MGIzYTI0NDk1YmY1N2NiNTgyZTE2N2Y4MjY4MGIxNjIyY2FmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rl
ci5jcHAKQEAgLTE0Miw2ICsxNDIsNyBAQCBJbWFnZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRv
cj0oY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpCiAgICAgICAgIHJldHVybiAqdGhpczsKIAogICAg
IGNvcHlCaXRtYXBEYXRhKG90aGVyKTsKKyAgICBzZXRIYXNBbHBoYShvdGhlci5tX2hhc0FscGhh
KTsKICAgICBzZXRPcmlnaW5hbEZyYW1lUmVjdChvdGhlci5vcmlnaW5hbEZyYW1lUmVjdCgpKTsK
ICAgICBzZXRTdGF0dXMob3RoZXIuc3RhdHVzKCkpOwogICAgIHNldER1cmF0aW9uKG90aGVyLmR1
cmF0aW9uKCkpOwpAQCAtMTUyLDggKzE1Myw3IEBAIEltYWdlRnJhbWUmIEltYWdlRnJhbWU6Om9w
ZXJhdG9yPShjb25zdCBJbWFnZUZyYW1lJiBvdGhlcikKIAogdm9pZCBJbWFnZUZyYW1lOjpjbGVh
clBpeGVsRGF0YSgpCiB7Ci0gICAgbV9iYWNraW5nU3RvcmUuY2xlYXIoKTsKLSAgICBtX2J5dGVz
ID0gMDsKKyAgICBtX3BpeGVscyA9IG51bGxwdHI7CiAgICAgbV9zdGF0dXMgPSBGcmFtZUVtcHR5
OwogICAgIC8vIE5PVEU6IERvIG5vdCByZXNldCBvdGhlciBtZW1iZXJzIGhlcmU7IGNsZWFyRnJh
bWVCdWZmZXJDYWNoZSgpIGNhbGxzIHRoaXMKICAgICAvLyB0byBmcmVlIHRoZSBiaXRtYXAgZGF0
YSwgYnV0IG90aGVyIGZ1bmN0aW9ucyBsaWtlIGluaXRGcmFtZUJ1ZmZlcigpIGFuZApAQCAtMTYz
LDI0ICsxNjMsMTYgQEAgdm9pZCBJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSgpCiAKIHZvaWQg
SW1hZ2VGcmFtZTo6emVyb0ZpbGxQaXhlbERhdGEoKQogewotICAgIG1lbXNldChtX2J5dGVzLCAw
LCBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKSAqIHNpemVvZihQaXhlbERhdGEpKTsK
KyAgICBtX3BpeGVscy0+Y2xlYXIoKTsKICAgICBtX2hhc0FscGhhID0gdHJ1ZTsKIH0KIAogdm9p
ZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewot
ICAgIEFTU0VSVChJbnRSZWN0KEludFBvaW50KCksIG1fc2l6ZSkuY29udGFpbnMocmVjdCkpOwot
CiAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBzaXplX3Qg
cmVjdFdpZHRoSW5CeXRlcyA9IHJlY3Qud2lkdGgoKSAqIHNpemVvZihQaXhlbERhdGEpOwotICAg
IFBpeGVsRGF0YSogc3RhcnQgPSBtX2J5dGVzICsgKHJlY3QueSgpICogd2lkdGgoKSkgKyByZWN0
LngoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QuaGVpZ2h0KCk7ICsraSkgewotICAg
ICAgICBtZW1zZXQoc3RhcnQsIDAsIHJlY3RXaWR0aEluQnl0ZXMpOwotICAgICAgICBzdGFydCAr
PSB3aWR0aCgpOwotICAgIH0KLQorICAgIG1fcGl4ZWxzLT5jbGVhclJlY3QocmVjdCk7CiAgICAg
c2V0SGFzQWxwaGEodHJ1ZSk7CiB9CiAKQEAgLTE4OSwyNSArMTgxLDIzIEBAIGJvb2wgSW1hZ2VG
cmFtZTo6Y29weUJpdG1hcERhdGEoY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpCiAgICAgaWYgKHRo
aXMgPT0gJm90aGVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fYmFja2luZ1N0b3Jl
ID0gb3RoZXIubV9iYWNraW5nU3RvcmU7Ci0gICAgbV9ieXRlcyA9IG1fYmFja2luZ1N0b3JlLmRh
dGEoKTsKLSAgICBtX3NpemUgPSBvdGhlci5tX3NpemU7Ci0gICAgc2V0SGFzQWxwaGEob3RoZXIu
bV9oYXNBbHBoYSk7CisgICAgaWYgKG90aGVyLm1fcGl4ZWxzKQorICAgICAgICBtX3BpeGVscyA9
IEJpdG1hcFBpeGVsczo6Y3JlYXRlKCpvdGhlci5tX3BpeGVscy5nZXQoKSk7CisgICAgZWxzZQor
ICAgICAgICBtX3BpeGVscyA9IG51bGxwdHI7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wg
SW1hZ2VGcmFtZTo6c2V0U2l6ZShpbnQgbmV3V2lkdGgsIGludCBuZXdIZWlnaHQpCiB7Ci0gICAg
QVNTRVJUKCF3aWR0aCgpICYmICFoZWlnaHQoKSk7Ci0gICAgc2l6ZV90IGJhY2tpbmdTdG9yZVNp
emUgPSBuZXdXaWR0aCAqIG5ld0hlaWdodDsKLSAgICBpZiAoIW1fYmFja2luZ1N0b3JlLnRyeVJl
c2VydmVDYXBhY2l0eShiYWNraW5nU3RvcmVTaXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIG1fYmFja2luZ1N0b3JlLnJlc2l6ZShiYWNraW5nU3RvcmVTaXplKTsKLSAgICBtX2J5dGVz
ID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOwotICAgIG1fc2l6ZSA9IEludFNpemUobmV3V2lkdGgs
IG5ld0hlaWdodCk7CisgICAgQVNTRVJUKCFtX3BpeGVscyk7CisgICAgbV9waXhlbHMgPSBCaXRt
YXBQaXhlbHM6OmNyZWF0ZShJbnRTaXplKG5ld1dpZHRoLCBuZXdIZWlnaHQpLCBtX3ByZW11bHRp
cGx5QWxwaGEpOworICAgIHJldHVybiBtX3BpeGVscyAhPSBudWxscHRyOworfQogCi0gICAgemVy
b0ZpbGxQaXhlbERhdGEoKTsKLSAgICByZXR1cm4gdHJ1ZTsKK3ZvaWQgSW1hZ2VGcmFtZTo6Y29w
eVJvd05UaW1lcyhpbnQgc3RhcnRYLCBpbnQgZW5kWCwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCit7
CisgICAgbV9waXhlbHMtPnJlcGVhdEZpcnN0Um93KEludFJlY3Qoc3RhcnRYLCBzdGFydFksIGVu
ZFggLXN0YXJ0WCAsIGVuZFkgLSBzdGFydFkpKTsKIH0KIAogYm9vbCBJbWFnZUZyYW1lOjpoYXNB
bHBoYSgpIGNvbnN0CkBAIC0yOTEsNyArMjgxLDcgQEAgdW5zaWduZWQgSW1hZ2VEZWNvZGVyOjpm
cmFtZUJ5dGVzQXRJbmRleChzaXplX3QgaW5kZXgpIGNvbnN0CiAgICAgaWYgKG1fZnJhbWVCdWZm
ZXJDYWNoZS5zaXplKCkgPD0gaW5kZXgpCiAgICAgICAgIHJldHVybiAwOwogICAgIC8vIEZJWE1F
OiBVc2UgdGhlIGRpbWVuc2lvbiBvZiB0aGUgcmVxdWVzdGVkIGZyYW1lLgotICAgIHJldHVybiBt
X3NpemUuYXJlYSgpICogc2l6ZW9mKEltYWdlRnJhbWU6OlBpeGVsRGF0YSk7CisgICAgcmV0dXJu
IG1fc2l6ZS5hcmVhKCkgKiBzaXplb2YoUkdCQTMyKTsKIH0KIAogZmxvYXQgSW1hZ2VEZWNvZGVy
OjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCmluZGV4IDJmOGVl
ZTE3ODFkMTYyZDg2YzQ5ZmUxZGFjNzJhMmU3ZTQwYTVkNmQuLjY0NjQxZGZjMmYwZjNlODk2ZmE0
NzJiNDJmZTQyZDNkZmI3MjMxZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCkBAIC0yOCw2ICsyOCw3IEBACiAKICNw
cmFnbWEgb25jZQogCisjaW5jbHVkZSAiQml0bWFwUGl4ZWxzLmgiCiAjaW5jbHVkZSAiSW50UmVj
dC5oIgogI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4u
aCIKQEAgLTU3LDcgKzU4LDYgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+Owog
ICAgICAgICAgICAgRGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzICAvLyBDbGVhciBmcmFtZSB0byBw
cmV2aW91cyBmcmFtZWJ1ZmZlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBjb250ZW50cwogICAgICAgICB9OwotICAgICAgICB0eXBlZGVmIHVuc2lnbmVkIFBpeGVs
RGF0YTsKIAogICAgICAgICBJbWFnZUZyYW1lKCk7CiAKQEAgLTgwLDE3ICs4MCw3IEBAIHVzaW5n
IENvbG9yUHJvZmlsZSA9IFZlY3RvcjxjaGFyPjsKICAgICAgICAgLy8gQ29waWVzIHRoZSBwaXhl
bCBkYXRhIGF0IFsoc3RhcnRYLCBzdGFydFkpLCAoZW5kWCwgc3RhcnRZKSkgdG8gdGhlCiAgICAg
ICAgIC8vIHNhbWUgWC1jb29yZGluYXRlcyBvbiBlYWNoIHN1YnNlcXVlbnQgcm93IHVwIHRvIGJ1
dCBub3QgaW5jbHVkaW5nCiAgICAgICAgIC8vIGVuZFkuCi0gICAgICAgIHZvaWQgY29weVJvd05U
aW1lcyhpbnQgc3RhcnRYLCBpbnQgZW5kWCwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEFTU0VSVChzdGFydFggPCB3aWR0aCgpKTsKLSAgICAgICAgICAgIEFT
U0VSVChlbmRYIDw9IHdpZHRoKCkpOwotICAgICAgICAgICAgQVNTRVJUKHN0YXJ0WSA8IGhlaWdo
dCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChlbmRZIDw9IGhlaWdodCgpKTsKLSAgICAgICAgICAg
IGNvbnN0IGludCByb3dCeXRlcyA9IChlbmRYIC0gc3RhcnRYKSAqIHNpemVvZihQaXhlbERhdGEp
OwotICAgICAgICAgICAgY29uc3QgUGl4ZWxEYXRhKiBjb25zdCBzdGFydEFkZHIgPSBnZXRBZGRy
KHN0YXJ0WCwgc3RhcnRZKTsKLSAgICAgICAgICAgIGZvciAoaW50IGRlc3RZID0gc3RhcnRZICsg
MTsgZGVzdFkgPCBlbmRZOyArK2Rlc3RZKQotICAgICAgICAgICAgICAgIG1lbWNweShnZXRBZGRy
KHN0YXJ0WCwgZGVzdFkpLCBzdGFydEFkZHIsIHJvd0J5dGVzKTsKLSAgICAgICAgfQorICAgICAg
ICB2b2lkIGNvcHlSb3dOVGltZXMoaW50IHN0YXJ0WCwgaW50IGVuZFgsIGludCBzdGFydFksIGlu
dCBlbmRZKTsKIAogICAgICAgICAvLyBBbGxvY2F0ZXMgc3BhY2UgZm9yIHRoZSBwaXhlbCBkYXRh
LiAgTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBwaXhlbHMKICAgICAgICAgLy8gYXJlIHdyaXR0
ZW4uICBNdXN0IG9ubHkgYmUgY2FsbGVkIG9uY2UuICBSZXR1cm5zIHdoZXRoZXIgYWxsb2NhdGlv
bgpAQCAtMTAwLDcgKzkwLDcgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+Owog
ICAgICAgICAvLyBSZXR1cm5zIGEgY2FsbGVyLW93bmVkIHBvaW50ZXIgdG8gdGhlIHVuZGVybHlp
bmcgbmF0aXZlIGltYWdlIGRhdGEuCiAgICAgICAgIC8vIChBY3R1YWwgdXNlOiBUaGlzIHBvaW50
ZXIgd2lsbCBiZSBvd25lZCBieSBCaXRtYXBJbWFnZSBhbmQgZnJlZWQgaW4KICAgICAgICAgLy8g
RnJhbWVEYXRhOjpjbGVhcigpKS4KLSAgICAgICAgTmF0aXZlSW1hZ2VQdHIgYXNOZXdOYXRpdmVJ
bWFnZSgpIGNvbnN0OworICAgICAgICBOYXRpdmVJbWFnZVB0ciBhc05ld05hdGl2ZUltYWdlKCkg
Y29uc3QgeyByZXR1cm4gbV9waXhlbHMtPmltYWdlKCk7IH0KIAogICAgICAgICBib29sIGhhc0Fs
cGhhKCkgY29uc3Q7CiAgICAgICAgIGNvbnN0IEludFJlY3QmIG9yaWdpbmFsRnJhbWVSZWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9vcmlnaW5hbEZyYW1lUmVjdDsgfQpAQCAtMTE5LDEwMSArMTA5LDQ0
IEBAIHVzaW5nIENvbG9yUHJvZmlsZSA9IFZlY3RvcjxjaGFyPjsKIAogICAgICAgICBpbmxpbmUg
dm9pZCBzZXRSR0JBKGludCB4LCBpbnQgeSwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWdu
ZWQgYiwgdW5zaWduZWQgYSkKICAgICAgICAgewotICAgICAgICAgICAgc2V0UkdCQShnZXRBZGRy
KHgsIHkpLCByLCBnLCBiLCBhKTsKKyAgICAgICAgICAgIG1fcGl4ZWxzLT5zZXRSR0JBKHgsIHks
IHIsIGcsIGIsIGEpOwogICAgICAgICB9CiAKLSAgICAgICAgaW5saW5lIFBpeGVsRGF0YSogZ2V0
QWRkcihpbnQgeCwgaW50IHkpCisgICAgICAgIGlubGluZSBSR0JBMzIqIGdldEFkZHIoaW50IHgs
IGludCB5KQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9ieXRlcyArICh5ICogd2lk
dGgoKSkgKyB4OworICAgICAgICAgICAgcmV0dXJuIG1fcGl4ZWxzLT5hdCh4LCB5KTsKICAgICAg
ICAgfQogCiAgICAgICAgIGlubGluZSBib29sIGhhc1BpeGVsRGF0YSgpIGNvbnN0CiAgICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBtX2J5dGVzOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8g
VXNlIGZpeCBwb2ludCBtdWx0aXBsaWVyIGluc3RlYWQgb2YgaW50ZWdlciBkaXZpc2lvbiBvciBm
bG9hdGluZyBwb2ludCBtYXRoLgotICAgICAgICAvLyBUaGlzIG11bHRpcGxlciBwcm9kdWNlcyBl
eGFjdGx5IHRoZSBzYW1lIHJlc3VsdCBmb3IgYWxsIHZhbHVlcyBpbiByYW5nZSAwIC0gMjU1Lgot
ICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZml4UG9pbnRTaGlmdCA9IDI0OwotICAgICAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZml4UG9pbnRNdWx0ID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KDEuMCAvIDI1NS4wICogKDEgPDwgZml4UG9pbnRTaGlmdCkpICsgMTsKLSAgICAgICAgLy8g
TXVsdGlwbGllcyB1bnNpZ25lZCB2YWx1ZSBieSBmaXhwb2ludCB2YWx1ZSBhbmQgY29udmVydHMg
YmFjayB0byB1bnNpZ25lZC4KLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZpeFBvaW50VW5zaWdu
ZWRNdWx0aXBseSh1bnNpZ25lZCBmaXhlZCwgdW5zaWduZWQgdikKLSAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuICAoZml4ZWQgKiB2KSA+PiBmaXhQb2ludFNoaWZ0OworICAgICAgICAgICAg
cmV0dXJuIG1fcGl4ZWxzICE9IG51bGxwdHI7CiAgICAgICAgIH0KIAotICAgICAgICBpbmxpbmUg
dm9pZCBzZXRSR0JBKFBpeGVsRGF0YSogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5z
aWduZWQgYiwgdW5zaWduZWQgYSkKKyAgICAgICAgaW5saW5lIHZvaWQgc2V0UkdCQShSR0JBMzIq
IGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX3ByZW11bHRpcGx5QWxwaGEgJiYgYSA8IDI1NSkg
ewotICAgICAgICAgICAgICAgIGlmICghYSkgewotICAgICAgICAgICAgICAgICAgICAqZGVzdCA9
IDA7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBhbHBoYU11bHQgPSBhICogZml4UG9pbnRNdWx0OwotICAg
ICAgICAgICAgICAgIHIgPSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkociwgYWxwaGFNdWx0KTsK
LSAgICAgICAgICAgICAgICBnID0gZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KGcsIGFscGhhTXVs
dCk7Ci0gICAgICAgICAgICAgICAgYiA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShiLCBhbHBo
YU11bHQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3QgPSAoYSA8PCAyNCB8IHIg
PDwgMTYgfCBnIDw8IDggfCBiKTsKKyAgICAgICAgICAgIG1fcGl4ZWxzLT5zZXRSR0JBKGRlc3Qs
IHIsIGcsIGIsIGEpOwogICAgICAgICB9CiAKICNpZiBFTkFCTEUoQVBORykKLSAgICAgICAgc3Rh
dGljIGlubGluZSB1bnNpZ25lZCBkaXZpZGUyNTUodW5zaWduZWQgYSkKLSAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIChhICsgKGEgPj4gOCkgKyAxKSA+PiA4OwotICAgICAgICB9Ci0KLSAg
ICAgICAgaW5saW5lIHZvaWQgb3ZlclJHQkEoUGl4ZWxEYXRhKiBkZXN0LCB1bnNpZ25lZCByLCB1
bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgICAgICBpbmxpbmUgdm9pZCBv
dmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIs
IHVuc2lnbmVkIGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghYSkKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmIChhIDwgMjU1KSB7Ci0gICAgICAgICAgICAg
ICAgdW5zaWduZWQgYURlc3QgPSAoKCpkZXN0KSA+PiAyNCkgJiAyNTU7Ci0gICAgICAgICAgICAg
ICAgaWYgKGFEZXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJEZXN0ID0gKCgq
ZGVzdCkgPj4gMTYpICYgMjU1OwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBnRGVzdCA9
ICgoKmRlc3QpID4+IDgpICYgMjU1OwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBiRGVz
dCA9ICgqZGVzdCkgJiAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFBdXggPSAy
NTUgLSBhOwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgckRlc3QgPSBkaXZpZGUyNTUockRlc3QgKiBhRGVzdCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBnRGVzdCA9IGRpdmlkZTI1NShnRGVzdCAqIGFEZXN0
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJEZXN0ID0gZGl2aWRlMjU1KGJEZXN0ICogYURl
c3QpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBkaXZp
ZGUyNTUociAqIGEgKyByRGVzdCAqIGFBdXgpOwotICAgICAgICAgICAgICAgICAgICBnID0gZGl2
aWRlMjU1KGcgKiBhICsgZ0Rlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IGRp
dmlkZTI1NShiICogYSArIGJEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAgIGEgKz0g
ZGl2aWRlMjU1KGFEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9wcmVt
dWx0aXBseUFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByID0gKHIgKiAyNTUgKyBh
IC0gMSkgLyBhOwotICAgICAgICAgICAgICAgICAgICAgICAgZyA9IChnICogMjU1ICsgYSAtIDEp
IC8gYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGIgPSAoYiAqIDI1NSArIGEgLSAxKSAvIGE7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fcHJl
bXVsdGlwbHlBbHBoYSkgewotICAgICAgICAgICAgICAgICAgICByID0gZGl2aWRlMjU1KHIgKiBh
KTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IGRpdmlkZTI1NShnICogYSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGIgPSBkaXZpZGUyNTUoYiAqIGEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICpkZXN0ID0gKGEgPDwgMjQgfCByIDw8IDE2IHwgZyA8PCA4
IHwgYik7CisgICAgICAgICAgICBtX3BpeGVscy0+b3ZlclJHQkEoZGVzdCwgciwgZywgYiwgYSk7
CiAgICAgICAgIH0KICNlbmRpZgogCiAgICAgcHJpdmF0ZToKICAgICAgICAgaW50IHdpZHRoKCkg
Y29uc3QKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOworICAg
ICAgICAgICAgcmV0dXJuIG1fcGl4ZWxzLT53aWR0aCgpOwogICAgICAgICB9CiAKICAgICAgICAg
aW50IGhlaWdodCgpIGNvbnN0CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3NpemUu
aGVpZ2h0KCk7CisgICAgICAgICAgICByZXR1cm4gbV9waXhlbHMtPmhlaWdodCgpOwogICAgICAg
ICB9CiAKLSAgICAgICAgVmVjdG9yPFBpeGVsRGF0YT4gbV9iYWNraW5nU3RvcmU7Ci0gICAgICAg
IFBpeGVsRGF0YSogbV9ieXRlczsgLy8gVGhlIG1lbW9yeSBpcyBiYWNrZWQgYnkgbV9iYWNraW5n
U3RvcmUuCi0gICAgICAgIEludFNpemUgbV9zaXplOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
Qml0bWFwUGl4ZWxzPiBtX3BpeGVsczsKKwogICAgICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCBt
X2NvbG9yUHJvZmlsZSBhbnltb3JlPwogICAgICAgICBDb2xvclByb2ZpbGUgbV9jb2xvclByb2Zp
bGU7CiAgICAgICAgIGJvb2wgbV9oYXNBbHBoYTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0Nh
aXJvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4wNDhmZTcwOTYzMTIzNDk5NjEwOTg5MzRlOWRlNmU1YTgzMmJl
Y2ZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvY2Fpcm8vQml0bWFwUGl4ZWxzQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCaXRtYXBQaXhlbHMuaCIKKworI2luY2x1ZGUgPGNhaXJvLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworTmF0aXZlSW1hZ2VQdHIgQml0bWFwUGl4ZWxzOjppbWFn
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3Jl
YXRlX2Zvcl9kYXRhKAorICAgICAgICByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihj
b25zdF9jYXN0PFJHQkEzMio+KG1fcGl4ZWxzKSksCisgICAgICAgIENBSVJPX0ZPUk1BVF9BUkdC
MzIsIHdpZHRoKCksIGhlaWdodCgpLCB3aWR0aCgpICogc2l6ZW9mKFJHQkEzMikpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjQxMjk1Zjg1NzM1OGZiYmYzNWMxYjA1
MjVlOGQ2Y2MzNTIwZjU4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdl
RGVjb2RlckNhaXJvLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKLQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotTmF0aXZlSW1hZ2VQdHIgSW1hZ2VGcmFtZTo6YXNOZXdOYXRp
dmVJbWFnZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZh
Y2VfY3JlYXRlX2Zvcl9kYXRhKAotICAgICAgICByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNo
YXIqPihjb25zdF9jYXN0PFBpeGVsRGF0YSo+KG1fYnl0ZXMpKSwKLSAgICAgICAgQ0FJUk9fRk9S
TUFUX0FSR0IzMiwgd2lkdGgoKSwgaGVpZ2h0KCksIHdpZHRoKCkgKiBzaXplb2YoUGl4ZWxEYXRh
KSkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIu
Y3BwCmluZGV4IDlmOTkyYTdiZTFkNjY3MjI2NzVjMmU4NTRhZDE4OTFlNjBmODU3N2MuLjQ5N2Vh
ODdiZWY1M2E2YWQ3MDdhOWY2M2YxN2NlOGM3MTdkZDYyYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURl
Y29kZXIuY3BwCkBAIC0yMTYsNyArMjE2LDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmhhdmVE
ZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgsIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZAogICAg
IGlmICgoKGJ1ZmZlci5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSAmJiAhaW5p
dEZyYW1lQnVmZmVyKGZyYW1lSW5kZXgpKSB8fCAhYnVmZmVyLmhhc1BpeGVsRGF0YSgpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGN1cnJlbnRB
ZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoeEJlZ2luLCB5QmVnaW4pOworICAgIFJHQkEzMiogY3Vy
cmVudEFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcih4QmVnaW4sIHlCZWdpbik7CiAgICAgLy8gV3Jp
dGUgb25lIHJvdydzIHdvcnRoIG9mIGRhdGEgaW50byB0aGUgZnJhbWUuICAKICAgICBmb3IgKGlu
dCB4ID0geEJlZ2luOyB4IDwgeEVuZDsgKyt4KSB7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNo
YXIgc291cmNlVmFsdWUgPSByb3dCdWZmZXJbKG1fc2NhbGVkID8gbV9zY2FsZWRDb2x1bW5zW3hd
IDogeCkgLSBmcmFtZUNvbnRleHQtPnhPZmZzZXRdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rl
ci5jcHAKaW5kZXggZWU2NmFjMTRkNGJlMDdjYTlhZmZiMmEzYWZmODllYmZhNjJmYjEyZS4uZjU1
OTFjNzg0MzgzYTViZGRiZDA2MTI1OTYzYzkwOTBjYTQ2NjdkNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJ
bWFnZURlY29kZXIuY3BwCkBAIC01ODgsNyArNTg4LDcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVy
OjpzZXRGYWlsZWQoKQogfQogCiB0ZW1wbGF0ZSA8Sl9DT0xPUl9TUEFDRSBjb2xvclNwYWNlPgot
dm9pZCBzZXRQaXhlbChJbWFnZUZyYW1lJiBidWZmZXIsIEltYWdlRnJhbWU6OlBpeGVsRGF0YSog
Y3VycmVudEFkZHJlc3MsIEpTQU1QQVJSQVkgc2FtcGxlcywgaW50IGNvbHVtbikKK3ZvaWQgc2V0
UGl4ZWwoSW1hZ2VGcmFtZSYgYnVmZmVyLCBSR0JBMzIqIGN1cnJlbnRBZGRyZXNzLCBKU0FNUEFS
UkFZIHNhbXBsZXMsIGludCBjb2x1bW4pCiB7CiAgICAgSlNBTVBMRSoganNhbXBsZSA9ICpzYW1w
bGVzICsgY29sdW1uICogKGNvbG9yU3BhY2UgPT0gSkNTX1JHQiA/IDMgOiA0KTsKIApAQCAtNjMx
LDcgKzYzMSw3IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKEltYWdl
RnJhbWUmIGJ1ZmZlcikKICAgICAgICAgaWYgKGRlc3RZIDwgMCkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogY3VycmVudEFkZHJlc3MgPSBi
dWZmZXIuZ2V0QWRkcigwLCBkZXN0WSk7CisgICAgICAgIFJHQkEzMiogY3VycmVudEFkZHJlc3Mg
PSBidWZmZXIuZ2V0QWRkcigwLCBkZXN0WSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
d2lkdGg7ICsreCkgewogICAgICAgICAgICAgc2V0UGl4ZWw8Y29sb3JTcGFjZT4oYnVmZmVyLCBj
dXJyZW50QWRkcmVzcywgc2FtcGxlcywgaXNTY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4
KTsKICAgICAgICAgICAgICsrY3VycmVudEFkZHJlc3M7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIu
Y3BwCmluZGV4IGU2NDRhNzExMGVmY2I1NDBkODljZTFiYTgxMTAwYmM0ODIzYjE4ZjIuLjliZjE0
MjFlMmMxN2JiY2NhM2RhYTlhNDA2NmZjNTk5ZTYxYjY2MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURl
Y29kZXIuY3BwCkBAIC00NTIsMTkgKzQ1MiwxOSBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVh
ZGVyQXZhaWxhYmxlKCkKICAgICB9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJH
QihJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCkKK3N0YXRpYyBp
bmxpbmUgdm9pZCBzZXRQaXhlbFJHQihSR0JBMzIqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCkKIHsK
ICAgICAqZGVzdCA9IDB4RkYwMDAwMDBVIHwgcGl4ZWxbMF0gPDwgMTYgfCBwaXhlbFsxXSA8PCA4
IHwgcGl4ZWxbMl07CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJHQkEoSW1hZ2VG
cmFtZTo6UGl4ZWxEYXRhKiBkZXN0LCBwbmdfYnl0ZXAgcGl4ZWwsIHVuc2lnbmVkIGNoYXImIG5v
blRyaXZpYWxBbHBoYU1hc2spCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxSR0JBKFJHQkEz
MiogZGVzdCwgcG5nX2J5dGVwIHBpeGVsLCB1bnNpZ25lZCBjaGFyJiBub25Ucml2aWFsQWxwaGFN
YXNrKQogewogICAgIHVuc2lnbmVkIGNoYXIgYSA9IHBpeGVsWzNdOwogICAgICpkZXN0ID0gYSA8
PCAyNCB8IHBpeGVsWzBdIDw8IDE2IHwgcGl4ZWxbMV0gPDwgOCB8IHBpeGVsWzJdOwogICAgIG5v
blRyaXZpYWxBbHBoYU1hc2sgfD0gKDI1NSAtIGEpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQg
c2V0UGl4ZWxQcmVtdWx0aXBsaWVkUkdCQShJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGRlc3QsIHBu
Z19ieXRlcCBwaXhlbCwgdW5zaWduZWQgY2hhciYgbm9uVHJpdmlhbEFscGhhTWFzaykKK3N0YXRp
YyBpbmxpbmUgdm9pZCBzZXRQaXhlbFByZW11bHRpcGxpZWRSR0JBKFJHQkEzMiogZGVzdCwgcG5n
X2J5dGVwIHBpeGVsLCB1bnNpZ25lZCBjaGFyJiBub25Ucml2aWFsQWxwaGFNYXNrKQogewogICAg
IHVuc2lnbmVkIGNoYXIgYSA9IHBpeGVsWzNdOwogICAgIHVuc2lnbmVkIGNoYXIgciA9IGZhc3RE
aXZpZGVCeTI1NShwaXhlbFswXSAqIGEpOwpAQCAtNTczLDcgKzU3Myw3IEBAIHZvaWQgUE5HSW1h
Z2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25l
ZCByb3dJbmRleCwKICAgICB9CiAKICAgICAvLyBXcml0ZSB0aGUgZGVjb2RlZCByb3cgcGl4ZWxz
IHRvIHRoZSBmcmFtZSBidWZmZXIuCi0gICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBhZGRyZXNz
ID0gYnVmZmVyLmdldEFkZHIoMCwgeSk7CisgICAgUkdCQTMyKiBhZGRyZXNzID0gYnVmZmVyLmdl
dEFkZHIoMCwgeSk7CiAgICAgaW50IHdpZHRoID0gc2NhbGVkU2l6ZSgpLndpZHRoKCk7CiAgICAg
dW5zaWduZWQgY2hhciBub25Ucml2aWFsQWxwaGFNYXNrID0gMDsKIApAQCAtODk2LDcgKzg5Niw3
IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKCkKICNpZiBFTkFCTEUoSU1B
R0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQogICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHJl
Y3QubWF4WSgpIC0gcmVjdC55KCk7ICsreSkgewogICAgICAgICAgICAgcG5nX2J5dGVwIHJvdyA9
IGludGVybGFjZUJ1ZmZlciArIChtX3NjYWxlZCA/IG1fc2NhbGVkUm93c1t5XSA6IHkpICogY29s
b3JDaGFubmVscyAqIHNpemUoKS53aWR0aCgpOwotICAgICAgICAgICAgSW1hZ2VGcmFtZTo6UGl4
ZWxEYXRhKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIocmVjdC54KCksIHkgKyByZWN0LnkoKSk7
CisgICAgICAgICAgICBSR0JBMzIqIGFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcihyZWN0LngoKSwg
eSArIHJlY3QueSgpKTsKICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgcmVjdC5tYXhY
KCkgLSByZWN0LngoKTsgKyt4KSB7CiAgICAgICAgICAgICAgICAgcG5nX2J5dGVwIHBpeGVsID0g
cm93ICsgKG1fc2NhbGVkID8gbV9zY2FsZWRDb2x1bW5zW3hdIDogeCkgKiBjb2xvckNoYW5uZWxz
OwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gaGFzQWxwaGEgPyBwaXhlbFszXSA6
IDI1NTsKQEAgLTkxMiw3ICs5MTIsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21w
bGV0ZSgpCiAgICAgICAgIHBuZ19ieXRlcCByb3cgPSBpbnRlcmxhY2VCdWZmZXI7CiAgICAgICAg
IGZvciAoaW50IHkgPSByZWN0LnkoKTsgeSA8IHJlY3QubWF4WSgpOyArK3ksIHJvdyArPSBjb2xv
ckNoYW5uZWxzICogc2l6ZSgpLndpZHRoKCkpIHsKICAgICAgICAgICAgIHBuZ19ieXRlcCBwaXhl
bCA9IHJvdzsKLSAgICAgICAgICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogYWRkcmVzcyA9IGJ1
ZmZlci5nZXRBZGRyKHJlY3QueCgpLCB5KTsKKyAgICAgICAgICAgIFJHQkEzMiogYWRkcmVzcyA9
IGJ1ZmZlci5nZXRBZGRyKHJlY3QueCgpLCB5KTsKICAgICAgICAgICAgIGZvciAoaW50IHggPSBy
ZWN0LngoKTsgeCA8IHJlY3QubWF4WCgpOyArK3gsIHBpeGVsICs9IGNvbG9yQ2hhbm5lbHMpIHsK
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IGhhc0FscGhhID8gcGl4ZWxbM10gOiAy
NTU7CiAgICAgICAgICAgICAgICAgbm9uVHJpdmlhbEFscGhhIHw9IGFscGhhIDwgMjU1OwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQ
SW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHAKaW5kZXggMTI0YTFiMmYxOTk3ZmU2NzhjNjFiNTJm
MzA1OGRiNGQ2Yjg4Njc5YS4uN2M1YTc3NzgyNTU4YWYxN2Y0MGJlN2EyOTkzZTExN2E0YmMxMGYy
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2Vi
cC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwCkBAIC0xMzksNyArMTM5LDcgQEAg
Ym9vbCBXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBvbmx5U2l6ZSkKICAgICAgICAgV0VC
UF9DU1BfTU9ERSBtb2RlID0gb3V0cHV0TW9kZShtX2hhc0FscGhhKTsKICAgICAgICAgaWYgKCFt
X3ByZW11bHRpcGx5QWxwaGEpCiAgICAgICAgICAgICBtb2RlID0gb3V0cHV0TW9kZShmYWxzZSk7
Ci0gICAgICAgIGludCByb3dTdHJpZGUgPSBzaXplKCkud2lkdGgoKSAqIHNpemVvZihJbWFnZUZy
YW1lOjpQaXhlbERhdGEpOworICAgICAgICBpbnQgcm93U3RyaWRlID0gc2l6ZSgpLndpZHRoKCkg
KiBzaXplb2YoUkdCQTMyKTsKICAgICAgICAgdWludDhfdCogb3V0cHV0ID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oYnVmZmVyLmdldEFkZHIoMCwgMCkpOwogICAgICAgICBpbnQgb3V0cHV0
U2l6ZSA9IHNpemUoKS5oZWlnaHQoKSAqIHJvd1N0cmlkZTsKICAgICAgICAgbV9kZWNvZGVyID0g
V2ViUElOZXdSR0IobW9kZSwgb3V0cHV0LCBvdXRwdXRTaXplLCByb3dTdHJpZGUpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGlt
ZVZpZGVvU291cmNlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tCmluZGV4IDIxNmNkMDkzZjI2NDY3Y2Jh
ODhhNDNmNjkzYWJmNGNmNTFkZDFhNGQuLmQxMTQ1NGIwNWVmODg5OTNhNjI4OTM4OTZiYzBjMTE3
MjhjNWVkNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0KQEAg
LTg3LDcgKzg3LDcgQEAgdm9pZCBNb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYzo6dXBkYXRlUGxh
dGZvcm1MYXllcigpIGNvbnN0CiAgICAgICAgIGlmICghaW1hZ2UpCiAgICAgICAgICAgICBicmVh
azsKIAotICAgICAgICBtX3ByZXZpZXdJbWFnZSA9IGltYWdlLT5nZXRDR0ltYWdlUmVmKCk7Cisg
ICAgICAgIG1fcHJldmlld0ltYWdlID0gaW1hZ2UtPm5hdGl2ZUltYWdlKCk7CiAgICAgICAgIGlm
ICghbV9wcmV2aWV3SW1hZ2UpCiAgICAgICAgICAgICBicmVhazsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAKaW5kZXggMzZjZDY1MTZlODBmMTc0
OGJmZWFiNzdhOTMwMjcxYzEyMWRlODAxOS4uNGI0ZTM3NzllOTZmNzhjNjU0MGE1M2M0NDc4YzNi
ZmQ5MzVmNTNlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJ
bWFnZUNHV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdl
Q0dXaW4uY3BwCkBAIC0xMzYsOSArMTM2LDkgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFn
ZUZyb21JbWFnZShJbWFnZSogaW1nLCBJbWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24pCiAgICAg
Q0dDb250ZXh0U2NhbGVDVE0oZHJhd0NvbnRleHQsIDEsIC0xKTsKICAgICBDR0NvbnRleHRTZXRG
aWxsQ29sb3IoZHJhd0NvbnRleHQsIHdoaXRlKTsKICAgICBDR0NvbnRleHRGaWxsUmVjdChkcmF3
Q29udGV4dCwgcmVjdCk7Ci0gICAgaWYgKGF1dG8gc3JjSW1hZ2UgPSBpbWctPmdldENHSW1hZ2VS
ZWYoKSkgeworICAgIGlmIChhdXRvIHNyY0ltYWdlID0gaW1nLT5uYXRpdmVJbWFnZSgpKSB7CiAg
ICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShkcmF3Q29udGV4dCwga0NHQmxlbmRNb2RlTm9y
bWFsKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGRyYXdDb250ZXh0LCByZWN0LCBzcmNJ
bWFnZSk7CisgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShkcmF3Q29udGV4dCwgcmVjdCwgc3Jj
SW1hZ2UuZ2V0KCkpOwogICAgIH0KICAgICBDR0NvbnRleHRSZWxlYXNlKGRyYXdDb250ZXh0KTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDYWNoZS5tbSBiL1NvdXJj
ZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0KaW5kZXggYjY1OWQ2ZGJmOWFkNjk5OWMzYWM5
NjJkZTk1MTU3ODA5N2UxZjNiMS4uN2M1ZWQyMTBkZGIyYTMyYTc2NjY3NGMxMjBkOTk0YzJmYTQ3
ZTdmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDYWNoZS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNhY2hlLm1tCkBAIC0yMDQsNyArMjA0LDcgQEAg
KyAoQ0dJbWFnZVJlZilpbWFnZUZvclVSTDooTlNVUkwgKil1cmwKICAgICBXZWJDb3JlOjpDYWNo
ZWRJbWFnZSYgY2FjaGVkSW1hZ2UgPSBkb3duY2FzdDxXZWJDb3JlOjpDYWNoZWRJbWFnZT4oKmNh
Y2hlZFJlc291cmNlKTsKICAgICBpZiAoIWNhY2hlZEltYWdlLmhhc0ltYWdlKCkpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBjYWNoZWRJbWFnZS5pbWFnZSgpLT5nZXRDR0lt
YWdlUmVmKCk7CisgICAgcmV0dXJuIGNhY2hlZEltYWdlLmltYWdlKCktPm5hdGl2ZUltYWdlKCku
Z2V0KCk7CiB9CiAKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0YWJhc2VDRy5jcHAgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0YWJhc2VDRy5jcHAKaW5kZXggMGY2
ZGU3YTE0NmE2MTFhNTJhYTFlNTM5MDE5ZmE2YzFjNDY3MjVhZS4uMzA1NjMzNmNiNjZmZTRhZjE4
YmRjNTI5YWNhMmY4ZmM4ODFkZmU1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvQy9jZy9XS0ljb25EYXRhYmFzZUNHLmNwcApAQCAtMzcsMTIgKzM3LDIzIEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogQ0dJbWFnZVJlZiBXS0ljb25EYXRhYmFzZVRyeUdl
dENHSW1hZ2VGb3JVUkwoV0tJY29uRGF0YWJhc2VSZWYgaWNvbkRhdGFiYXNlUmVmLCBXS1VSTFJl
ZiB1cmxSZWYsIFdLU2l6ZSBzaXplKQogewogICAgIEltYWdlKiBpbWFnZSA9IHRvSW1wbChpY29u
RGF0YWJhc2VSZWYpLT5pbWFnZUZvclBhZ2VVUkwodG9XVEZTdHJpbmcodXJsUmVmKSk7Ci0gICAg
cmV0dXJuIGltYWdlID8gaW1hZ2UtPmdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6ZShJbnRTaXplKHN0
YXRpY19jYXN0PGludD4oc2l6ZS53aWR0aCksIHN0YXRpY19jYXN0PGludD4oc2l6ZS5oZWlnaHQp
KSkgOiAwOworICAgIHJldHVybiBpbWFnZSA/IGltYWdlLT5uYXRpdmVJbWFnZU9mU2l6ZShJbnRT
aXplKHN0YXRpY19jYXN0PGludD4oc2l6ZS53aWR0aCksIHN0YXRpY19jYXN0PGludD4oc2l6ZS5o
ZWlnaHQpKSkuZ2V0KCkgOiBudWxscHRyOwogfQogCiBDRkFycmF5UmVmIFdLSWNvbkRhdGFiYXNl
VHJ5Q29weUNHSW1hZ2VBcnJheUZvclVSTChXS0ljb25EYXRhYmFzZVJlZiBpY29uRGF0YWJhc2VS
ZWYsIFdLVVJMUmVmIHVybFJlZikKIHsKICAgICBJbWFnZSogaW1hZ2UgPSB0b0ltcGwoaWNvbkRh
dGFiYXNlUmVmKS0+aW1hZ2VGb3JQYWdlVVJMKHRvV1RGU3RyaW5nKHVybFJlZikpOwotICAgIHJl
dHVybiBpbWFnZSA/IGltYWdlLT5nZXRDR0ltYWdlQXJyYXkoKS5sZWFrUmVmKCkgOiAwOworICAg
IGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBuYXRpdmVJ
bWFnZXMgPSBpbWFnZS0+ZnJhbWVzTmF0aXZlSW1hZ2VzKCk7CisgICAgaWYgKCFuYXRpdmVJbWFn
ZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBDRk11dGFibGVB
cnJheVJlZiBhcnJheSA9IENGQXJyYXlDcmVhdGVNdXRhYmxlKG51bGxwdHIsIG5hdGl2ZUltYWdl
cy5zaXplKCksICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpOworICAgIGZvciAoYXV0byBuYXRpdmVJ
bWFnZSA6IG5hdGl2ZUltYWdlcykKKyAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5LCBu
YXRpdmVJbWFnZS5nZXQoKSk7CisgICAgCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PENGQXJyYXlS
ZWY+KENGUmV0YWluKGFycmF5KSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KaW5kZXggZGM3OTgzYWI5
ODhjMmQwNGExNzMwZWUxMzczMDNjMjQ0MTYxNTE5Ny4uZmJjM2U1ZDRjNTQzMDFjZTkyMTdhNDBm
OGQwOGJkNTgzNTI3ODdjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lv
cy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KQEAgLTQwNzEsNyArNDA3MSw3IEBA
IC0gKFVJSW1hZ2UgKilfcHJlc2VudGF0aW9uU25hcHNob3RGb3JQcmV2aWV3SXRlbUNvbnRyb2xs
ZXI6KFVJUHJldmlld0l0ZW1Db250cm9sCiB7CiAgICAgaWYgKCFfcG9zaXRpb25JbmZvcm1hdGlv
bi5saW5rSW5kaWNhdG9yLmNvbnRlbnRJbWFnZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgcmV0dXJuIFtbW1VJSW1hZ2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTpfcG9zaXRpb25JbmZv
cm1hdGlvbi5saW5rSW5kaWNhdG9yLmNvbnRlbnRJbWFnZS0+Z2V0Q0dJbWFnZVJlZigpXSBhdXRv
cmVsZWFzZV07CisgICAgcmV0dXJuIFtbW1VJSW1hZ2UgYWxsb2NdIGluaXRXaXRoQ0dJbWFnZTpf
cG9zaXRpb25JbmZvcm1hdGlvbi5saW5rSW5kaWNhdG9yLmNvbnRlbnRJbWFnZS0+bmF0aXZlSW1h
Z2UoKS5nZXQoKV0gYXV0b3JlbGVhc2VdOwogfQogCiAtIChOU0FycmF5ICopX3ByZXNlbnRhdGlv
blJlY3RzRm9yUHJldmlld0l0ZW1Db250cm9sbGVyOihVSVByZXZpZXdJdGVtQ29udHJvbGxlciAq
KWNvbnRyb2xsZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5WaWV3LmNwcAppbmRleCA5YTMzZjdjYzdkYzdjN2Q3MmY5ZGE3NDMwOThiN2RiY2E4MjQwOWNm
Li5hNTMyNTEwNjc4YjlmNTM1MTQ1OGEzOGE5ZjQyMzM3NDdkMDM1ZjVjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCkBAIC0xNzI3LDY5
ICsxNzI3LDYgQEAgdm9pZCBQbHVnaW5WaWV3Ojp3aW5kb3dlZFBsdWdpblZpc2liaWxpdHlEaWRD
aGFuZ2UoYm9vbCBpc1Zpc2libGUsIHVpbnQ2NF90IHdpbmQKIH0KICNlbmRpZgogCi0jaWYgUExB
VEZPUk0oQ09DT0EpCi1zdGF0aWMgYm9vbCBpc0FsbW9zdFNvbGlkQ29sb3IoQml0bWFwSW1hZ2Uq
IGJpdG1hcCkKLXsKLSAgICBDR0ltYWdlUmVmIGltYWdlID0gYml0bWFwLT5nZXRDR0ltYWdlUmVm
KCk7Ci0gICAgQVNTRVJUKENHSW1hZ2VHZXRCaXRzUGVyQ29tcG9uZW50KGltYWdlKSA9PSA4KTsK
LQotICAgIENHQml0bWFwSW5mbyBpbWFnZUluZm8gPSBDR0ltYWdlR2V0Qml0bWFwSW5mbyhpbWFn
ZSk7Ci0gICAgaWYgKCEoaW1hZ2VJbmZvICYga0NHQml0bWFwQnl0ZU9yZGVyMzJMaXR0bGUpIHx8
IChpbWFnZUluZm8gJiBrQ0dCaXRtYXBBbHBoYUluZm9NYXNrKSAhPSBrQ0dJbWFnZUFscGhhUHJl
bXVsdGlwbGllZEZpcnN0KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBDb25zaWRlciBiZWluZyBhYmxl
IHRvIGhhbmRsZSBvdGhlciBwaXhlbCBmb3JtYXRzLgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHNpemVfdCB3aWR0aCA9
IENHSW1hZ2VHZXRXaWR0aChpbWFnZSk7Ci0gICAgc2l6ZV90IGhlaWdodCA9IENHSW1hZ2VHZXRI
ZWlnaHQoaW1hZ2UpOwotICAgIHNpemVfdCBieXRlc1BlclJvdyA9IENHSW1hZ2VHZXRCeXRlc1Bl
clJvdyhpbWFnZSk7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBwcm92aWRlciA9IGFkb3B0
Q0YoQ0dEYXRhUHJvdmlkZXJDb3B5RGF0YShDR0ltYWdlR2V0RGF0YVByb3ZpZGVyKGltYWdlKSkp
OwotICAgIGNvbnN0IFVJbnQ4KiBkYXRhID0gQ0ZEYXRhR2V0Qnl0ZVB0cihwcm92aWRlci5nZXQo
KSk7Ci0KLSAgICAvLyBPdmVybGF5IGEgZ3JpZCBvZiBzYW1wbGluZyBkb3RzIG9uIHRvcCBvZiBh
IGdyYXlzY2FsZSB2ZXJzaW9uIG9mIHRoZSBpbWFnZS4KLSAgICAvLyBGb3IgdGhlIGludGVyaW9y
IHBvaW50cywgY2FsY3VsYXRlIHRoZSBkaWZmZXJlbmNlIGluIGx1bWluYW5jZSBhbW9uZyB0aGUg
c2FtcGxlIHBvaW50Ci0gICAgLy8gYW5kIGl0cyBzdXJyb3VuZHMgcG9pbnRzLCBzY2FsZWQgYnkg
dHJhbnNwYXJlbmN5LgotICAgIGNvbnN0IHVuc2lnbmVkIHNhbXBsZVJvd3MgPSA3OwotICAgIGNv
bnN0IHVuc2lnbmVkIHNhbXBsZUNvbHMgPSA3OwotICAgIC8vIEZJWE1FOiBSZWZpbmUgdGhlIHBy
b3BlciBudW1iZXIgb2Ygc2FtcGxlcywgYW5kIGFjY29tbW9kYXRlIGRpZmZlcmVudCBhc3BlY3Qg
cmF0aW9zLgotICAgIGlmICh3aWR0aCA8IHNhbXBsZUNvbHMgfHwgaGVpZ2h0IDwgc2FtcGxlUm93
cykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRW5zdXJlIHRoYXQgdGhlIGxhc3Qg
cm93L2NvbHVtbiBsYW5kIG9uIHRoZSBpbWFnZSBwZXJpbWV0ZXIuCi0gICAgY29uc3QgZmxvYXQg
c3RyaWRlV2lkdGggPSBzdGF0aWNfY2FzdDxmbG9hdD4od2lkdGggLSAxKSAvIChzYW1wbGVDb2xz
IC0gMSk7Ci0gICAgY29uc3QgZmxvYXQgc3RyaWRlSGVpZ2h0ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGhlaWdodCAtIDEpIC8gKHNhbXBsZVJvd3MgLSAxKTsKLSAgICBmbG9hdCBzYW1wbGVzW3NhbXBs
ZVJvd3NdW3NhbXBsZUNvbHNdOwotCi0gICAgLy8gRmluZCB0aGUgbHVtaW5hbmNlIG9mIHRoZSBz
YW1wbGUgcG9pbnRzLgotICAgIGZsb2F0IHkgPSAwOwotICAgIGNvbnN0IFVJbnQ4KiByb3cgPSBk
YXRhOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzYW1wbGVSb3dzOyArK2kpIHsKLSAg
ICAgICAgZmxvYXQgeCA9IDA7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBzYW1w
bGVDb2xzOyArK2opIHsKLSAgICAgICAgICAgIGNvbnN0IFVJbnQ4KiBwMCA9IHJvdyArIChzdGF0
aWNfY2FzdDxpbnQ+KHggKyAuNSkpICogNDsKLSAgICAgICAgICAgIC8vIFIgRyBCIEEKLSAgICAg
ICAgICAgIHNhbXBsZXNbaV1bal0gPSAoMC4yMTI1ICogKnAwICsgMC43MTU0ICogKihwMCsxKSAr
IDAuMDcyMSAqICoocDArMikpICogKihwMCszKSAvIDI1NTsKLSAgICAgICAgICAgIHggKz0gc3Ry
aWRlV2lkdGg7Ci0gICAgICAgIH0KLSAgICAgICAgeSArPSBzdHJpZGVIZWlnaHQ7Ci0gICAgICAg
IHJvdyA9IGRhdGEgKyAoc3RhdGljX2Nhc3Q8aW50Pih5ICsgLjUpKSAqIGJ5dGVzUGVyUm93Owot
ICAgIH0KLQotICAgIC8vIERldGVybWluZSB0aGUgaW1hZ2Ugc2NvcmUuCi0gICAgZmxvYXQgYWNj
dW1TY29yZSA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHNhbXBsZVJvd3MgLSAx
OyArK2kpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMTsgaiA8IHNhbXBsZUNvbHMgLSAx
OyArK2opIHsKLSAgICAgICAgICAgIGZsb2F0IGRpZmYgPSBzYW1wbGVzW2kgLSAxXVtqXSArIHNh
bXBsZXNbaSArIDFdW2pdICsgc2FtcGxlc1tpXVtqIC0gMV0gKyBzYW1wbGVzW2ldW2ogKyAxXSAt
IDQgKiBzYW1wbGVzW2ldW2pdOwotICAgICAgICAgICAgYWNjdW1TY29yZSArPSBkaWZmICogZGlm
ZjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZSBzY29yZSBmb3IgYSBnaXZlbiBzYW1w
bGUgY2FuIGJlIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgMCBhbmQgMjU1XjIuCi0gICAgcmV0dXJuIGFj
Y3VtU2NvcmUgPCAyNTAwICogKHNhbXBsZVJvd3MgLSAyKSAqIChzYW1wbGVDb2xzIC0gMik7Ci19
Ci0jZW5kaWYKLQogdm9pZCBQbHVnaW5WaWV3OjpwbHVnaW5TbmFwc2hvdFRpbWVyRmlyZWQoKQog
ewogI2lmIEVOQUJMRShQUklNQVJZX1NOQVBTSE9UVEVEX1BMVUdJTl9IRVVSSVNUSUMpCkBAIC0x
ODA5LDcgKzE3NDYsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnBsdWdpblNuYXBzaG90VGltZXJGaXJl
ZCgpCiAKICAgICAgICAgaWYgKHNuYXBzaG90SW1hZ2UpIHsKICNpZiBFTkFCTEUoUFJJTUFSWV9T
TkFQU0hPVFRFRF9QTFVHSU5fSEVVUklTVElDKQotICAgICAgICAgICAgYm9vbCBzbmFwc2hvdElz
QWxtb3N0U29saWRDb2xvciA9IGlzQWxtb3N0U29saWRDb2xvcihkb3duY2FzdDxCaXRtYXBJbWFn
ZT4oc25hcHNob3RJbWFnZS5nZXQoKSkpOworICAgICAgICAgICAgYm9vbCBzbmFwc2hvdElzQWxt
b3N0U29saWRDb2xvciA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8Qml0bWFwSW1hZ2U+KHNuYXBzaG90
SW1hZ2UpLT5pc0FsbW9zdFNvbGlkQ29sb3IoKTsKICAgICAgICAgICAgIHNuYXBzaG90Rm91bmQg
PSAhc25hcHNob3RJc0FsbW9zdFNvbGlkQ29sb3I7CiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283449</attachid>
            <date>2016-07-12 14:48:45 -0700</date>
            <delta_ts>2016-07-12 14:55:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159679-20160712144802.patch</filename>
            <type>text/plain</type>
            <size>145636</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzMTAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWM1YmQ5YmQwNmExOWJl
NWNhMDJjNTE3MmQ2ZWYyZWJiZmVjMWMxOS4uZmU4ZDJmNTExZmM2N2M2MzliMzQwY2RiOWM3MTZj
MDllOWU4ODFlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzMSBAQAorMjAxNi0wNy0xMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0
IHRoZSBwaXhlbCBkYXRhIG9mIEltYWdlRnJhbWUgdG8gYSBzZXBhcmF0ZSBjbGFzcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5Njc5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgcGl4ZWwg
ZGF0YSBtYW5pcHVsYXRpb24gcGFydCBpbiBJbWFnZUZyYW1lIGludG8gYSBzZXBhcmF0ZSBjbGFz
cworICAgICAgICBhbmQgdGhlbiBtYWtlIGl0IG9wdGlvbmFsIChhbGxvY2F0ZWQgb24gZGVtYW5k
KS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2lu
Q2Fpcm8uY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFBpeGVsczo6Qml0bWFwUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBp
eGVsczo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpoZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFBpeGVsczo6YXQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmNsZWFyUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OnJlcGVhdEZpcnN0Um93KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcFBpeGVsczo6c2V0UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQ
aXhlbHM6Om92ZXJSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6aW5Cb3Vu
ZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Om11bHRpcGx5MjU1KToKKyAgICAgICAgKFdlYkNvcmU6OmRpdmlkZTI1NSk6CisgICAg
ICAgIChXZWJDb3JlOjpkaXZpZGVDZWlsKToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxp
ZWRDaGFubmVsKToKKyAgICAgICAgKFdlYkNvcmU6OnVucHJlbXVsdGlwbGllZENoYW5uZWwpOgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZVByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VVblByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6cGl4ZWxzKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWVEYXRhOjpoYXNQaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y2xlYXJQaXhl
bERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGxQaXhlbERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGxGcmFtZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weUJpdG1hcERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojpjb3B5Um93TlRpbWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0UkdCQSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpnZXRBZGRyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6Omhhc1BpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpvdmVyUkdC
QSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjp3aWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
Y29weVJvd05UaW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpm
aXhQb2ludFVuc2lnbmVkTXVsdGlwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6ZGl2aWRlMjU1KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1h
Z2VSZWFkZXI6OmRlY29kZUJNUCk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Y2Fpcm8vQml0bWFwUGl4ZWxzQ2Fpcm8uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwLgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjppbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KToKKyAgICAgICAgKFdlYkNvcmU6OkdJ
RkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFn
ZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFBp
eGVsKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5l
cyk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhlbFJHQik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRQaXhlbFJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxQcmVtdWx0aXBsaWVk
UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorCisyMDE2LTA3LTEx
ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAg
UmVuYW1lIEZyYW1lRGF0YSB0byBJbWFnZUZyYW1lRGF0YSBhbmQgbW92ZSBpdCB0byBhIHNlcGFy
YXRlIGZpbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1NTQ0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1vdmUgSW1hZ2VGcmFtZURhdGEgdG8gYSBzZXBhcmF0ZSBmaWxlIHNvIGl0IGNhbiBiZSBjYWNo
ZWQgYnkgSW1hZ2VTb3VyY2UKKyAgICAgICAgYW5kIHdpbGwgc3RpbGwgYmUgY29uc3VtZWQgYnkg
Qml0bWFwSW1hZ2UuIE1ha2UgdGhlIGRhdGEgbWVtYmVycyBvZiBJbWFnZUZyYW1lRGF0YQorICAg
ICAgICBiZSBwcml2YXRlIGFuZCBhZGQgZ2V0dGVycyB0byByZXR1cm4gdGhlaXIgdmFsdWVzLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cyAtLSBDb2RlIHJlZmFjdG9yaW5nLCBubyBiZWhhdmlvciBj
aGFuZ2UuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpoYXZlRnJhbWVJbWFnZUF0SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3Nh
cnkpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjplbnN1cmVGcmFtZUlzQ2FjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJ
bWFnZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJ
bWFnZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpmcmFtZU9yaWVudGF0aW9uQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
Ojppc0FsbW9zdFNvbGlkQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1h
cEltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OkZyYW1lRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6On5GcmFtZURhdGEpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp1c2VkRnJhbWVCeXRlcyk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lRGF0YUF0SW5kZXgpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvaW1hZ2VGcmFtZURhdGEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWVEYXRhOjpJbWFnZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0
YTo6fkltYWdlRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpj
bGVhclN1YkltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6Y2xlYXIp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OnNpbmdsZVBpeGVsU29saWRDb2xv
cik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6aXNBbG1vc3RTb2xpZENvbG9y
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9pbWFnZUZyYW1lRGF0YS5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpzdGF0dXMpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZURhdGE6OmlzQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZURhdGE6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmZy
YW1lQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpvcmllbnRhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6c3Vic2FtcGxpbmdMZXZlbCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lRGF0YTo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZURhdGE6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpo
YXNJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6aGFzTWV0YWRhdGEp
OgorCisyMDE2LTA2LTI0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxj
b20+CisKKyAgICAgICAgSW50cm9kdWNlIFBsYXRmb3JtSW1hZ2UgYW5kIG1ha2UgaXQgaXMgYSB3
cmFwcGVyIGZvciBOYXRpdmVJbWFnZVB0cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhlIG1haW4gcHVycG9zZSBvZiB0aGlzIHJlZmFjdG9yaW5nIGlz
IHRvIG1vdmUgdGhlIHBsYXRmb3JtIGltYWdlIGRlcGVuZGVudAorICAgICAgICBjb2RlIGZyb20g
Qml0bWFwSW1hZ2UgdG8gUGxhdGZvcm1JbWFnZS4gUGxhdGZvcm1JbWFnZSBpcyByZXNwb25zaWJs
ZSBvZiAKKyAgICAgICAgZHJhd2luZyB0aGUgaW1hZ2UgYW5kIGFuc3dlcmluZyBOYXRpdmVJbWFn
ZVB0ciBxdWVzdGlvbnMgd2hlbiBhbiBJbWFnZURlY29kZXIKKyAgICAgICAgaXMgbm90IGF2YWls
YWJsZS4gQXBhcnQgZnJvbSBkcmF3aW5nIHRoZSBpbWFnZSwgdGhlIHF1ZXJ5IGZ1bmN0aW9ucyB3
aWxsIGJlCisgICAgICAgIGNhbGxlZCBvbmx5IHdoZW4gY29uc3RydWN0aW5nIGEgRnJhbWVEYXRh
IHNvIHdlIHdpbGwga2VlcCBldmVyeXRoaW5nIGFzIGEKKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIu
IEJ1dCB3ZSB3aWxsIGNhc3QgdGhlIE5hdGl2ZUltYWdlUHRyIHRvIFBsYXRmb3JtSW1hZ2Ugd2hl
bgorICAgICAgICBhIHBsYXRmb3JtIGRlcGVuZGVudCBmdW5jdGlvbiBpcyBuZWVkZWQuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzIC0tIENvZGUgcmVmYWN0b3JpbmcsIG5vIGJlaGF2aW9yIGNoYW5n
ZS4KKworICAgICAgICAqIFBsYXRmb3JtQXBwbGVXaW4uY21ha2U6CisgICAgICAgICogUGxhdGZv
cm1FZmwuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogUGxh
dGZvcm1NYWMuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1XaW5DYWlyby5jbWFrZToKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGlu
Z3Mvb2JqYy9ET00ubW06CisgICAgICAgICgtW0RPTU5vZGUgZ2V0UHJldmlld1NuYXBzaG90SW1h
Z2U6YW5kUmVjdHM6XSk6CisgICAgICAgICogcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5t
bToKKyAgICAgICAgKC1bV2ViVGV4dEluZGljYXRvclZpZXcgaW5pdFdpdGhGcmFtZTp0ZXh0SW5k
aWNhdG9yOm1hcmdpbjpvZmZzZXQ6XSk6CisgICAgICAgIChjcmVhdGVDb250ZW50Q3Jvc3NmYWRl
QW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3NhcnkpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBJbWFnZTo6bmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5h
dGl2ZUltYWdlT2ZTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJh
bWVzTmF0aXZlSW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpzaW5nbGVQ
aXhlbFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmlzQWxtb3N0
U29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lRGF0YTo6RnJhbWVEYXRhKToKKyAgICAgICAgbV9oYXNBbHBoYSBjYW4gYmUgaW5pdGlh
bGl6ZWQgd2l0aCBmYWxzZSBiZWNhdXNlIGl0IGlzIGFjY2Vzc2VkIG9ubHkgaW4KKyAgICAgICAg
Qml0bWFwSW1hZ2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KCkgYW5kIGl0IGlzIGd1YXJkZWQgYnkg
bV9oYXZlTWV0YWRhdGEuCisgICAgICAgIEJvdGggbV9oYXZlTWV0YWRhdGEgYW5kIG1faGFzQWxw
aGEgYXJlIHNldCBpbiBCaXRtYXBJbWFnZSBjb25zdHJ1Y3RvcgorICAgICAgICBhbmQgaW4gQml0
bWFwSW1hZ2U6OmNhY2hlRnJhbWUoKS4KKworICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp+
RnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6Y2xlYXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6
bmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2U6OmdldENHSW1hZ2VSZWYpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2U6OmdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZTo6Z2V0Q0dJbWFnZUFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1JbWFnZTo6UGxhdGZvcm1JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUltYWdlOjppc05pbCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpjZ0lt
YWdlUmVmKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9N
ZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW06CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnVwZGF0ZURpc3BsYXlNb2Rl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8u
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Qml0bWFwSW1hZ2VDYWlyby5jcHAuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpj
bGVhclN1YkltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1JbWFnZTo6c3Vic2FtcGxpbmdTY2FsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUltYWdlOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9C
aXRtYXBJbWFnZUNHLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QYXR0ZXJuQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0dGVybjo6Y3JlYXRlUGxhdGZv
cm1QYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdl
Q0cuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OmNsZWFyU3Vi
SW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6aGFzQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1JbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtSW1hZ2U6OmlzQWxtb3N0U29saWRDb2xvcik6IE1vdmVkIGZyb20gUGx1Z2luVmll
dy5jcHAgc2luY2UgUGxhdGZvcm1JbWFnZSBpcyB3aGF0IHRoaXMgZnVuY3Rpb24gYmVsb25ncyB0
by4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUpOiBS
ZXR1cm5zIHRoZSBzdWItc2FtcGxpbmcgc2NhbGUgYmFzZWQgb24gdGhlIGNvbnRleHQgc2NhbGlu
Zy4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW06Cisg
ICAgICAgIChUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hOjp1cGRhdGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjpnZXRUSUZGUmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjp1cGRhdGVQbGF0Zm9ybUxheWVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKToKKwogMjAxNi0wNy0xMSAgU2FtIFdlaW5p
ZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFNwZWVjaCBTeW50aGVzaXM6IGdldHRpbmcg
bGlzdCBvZiB2b2ljZXMgbm8gbG9uZ2VyIHdvcmtzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggYzFiYzBi
YmRlMzYxMjVjNDYyYmY0ODFkZGFkNWRkMmY4MjdkNTIzOS4uMThkMWViZWJlZTkyMGIyZjI5ZWYz
Mjg3N2RlZDJlMWVjZmY5N2Q0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisy
MDE2LTA3LTExICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisK
KyAgICAgICAgSW50cm9kdWNlIFBsYXRmb3JtSW1hZ2UgYW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVy
IGZvciBOYXRpdmVJbWFnZVB0cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBNaXNjL1dlYkNhY2hlLm1tOgorICAgICAgICAoK1tXZWJDYWNoZSBpbWFn
ZUZvclVSTDpdKToKKwogMjAxNi0wNy0xMSAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUu
Y29tPgogCiAgICAgICAgIEFkZCBzeW50aGV0aWMgY2xpY2sgb3JpZ2luIHRvIFdLTmF2aWdhdGlv
bkFjdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwppbmRleCBiNDdlMmNlYTc5YThkZDdjNTMzNWQyY2Q1OGU3OTYxNTMz
NWM1MDJjLi5mMWYxNjcyNTg0YzBlZTgxODU4YTdlOTY1NTNhY2Q5Y2QwYWM2ZmVkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTYtMDctMTEgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fi
b3VoYWxsYXdhQGFwcGxlLGNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgUGxhdGZvcm1JbWFnZSBh
bmQgbWFrZSBpdCBpcyBhIHdyYXBwZXIgZm9yIE5hdGl2ZUltYWdlUHRyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTg2ODQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9jZy9X
S0ljb25EYXRhYmFzZUNHLmNwcDoKKyAgICAgICAgKFdLSWNvbkRhdGFiYXNlVHJ5R2V0Q0dJbWFn
ZUZvclVSTCk6CisgICAgICAgIChXS0ljb25EYXRhYmFzZVRyeUNvcHlDR0ltYWdlQXJyYXlGb3JV
UkwpOgorICAgICAgICBJdCB3YXMgdGhlIG9ubHkgcGxhY2UgaW4gdGhlIGNvZGUgd2hpY2ggdXNl
cyBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZUFycmF5KCkuCisgICAgICAgIENhbGwgQml0bWFwSW1h
Z2U6OmZyYW1lc05hdGl2ZUltYWdlcygpIGluc3RlYWQgYW5kIGZvcm0gdGhlIHJldHVybmVkCisg
ICAgICAgIFZlY3RvcjxOYXRpdmVJbWFnZVB0cj4gYnVpbGQgdGhlIENGQXJyYXlSZWYuCisgICAg
ICAgIAorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1t
OgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9wcmVzZW50YXRpb25TbmFwc2hvdEZvclByZXZp
ZXdJdGVtQ29udHJvbGxlcjpdKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
Vmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OnBsdWdpblNuYXBzaG90VGlt
ZXJGaXJlZCk6CisgICAgICAgIAorICAgICAgICAoV2ViS2l0Ojppc0FsbW9zdFNvbGlkQ29sb3Ip
OiBEZWxldGVkLgorICAgICAgICBNb3ZlIHRoZSBzdGF0aWMgZnVuY3Rpb24gaXNBbG1vc3RTb2xp
ZENvbG9yIHRvIFBsYXRmb3JtSW1hZ2U6OmlzQWxtb3N0U29saWRDb2xvcigpLgorCiAyMDE2LTA3
LTExICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgW1dLMl1baU9T
XSBJbnRlcm1pdHRlbnQgY3Jhc2ggaW4gW1VJQXBwbGljYXRpb24gYmVnaW5CYWNrZ3JvdW5kVGFz
a1dpdGhOYW1lXSBleHBpcmF0aW9uIGhhbmRsZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZTc4
YjA0MmIxMDQwMWUxZjRlZTNhMmFiMWEwNTJjMjE4YzNhMTFlMy4uMjI2ZWM5Yjg0ZTcyMmZmZjNl
MmYwNGRjZTdkYjcwZTNkZDRiODNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIyMjYsNiAr
MjIyNiw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JU09W
VFRDdWUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFt
ZURhdGEuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPcmllbnRhdGlvbi5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9JbnRQb2ludC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVX
aW4uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCmluZGV4IDVm
Zjk5MWZmN2RhMzA4YmI5MTgyZWNlM2JmMTIxNzMwYTU0OGQyODcuLmJhZTMxZWFmODZlN2ZjYTkw
NTgyNTA5MmFhMzhhNzhjMTFlNDIyMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtQXBwbGVXaW4uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5j
bWFrZQpAQCAtNTUsNyArNTUsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dLQ0FDRlZpZXdMYXllclRyZWVIb3N0LmNwcAogCi0g
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9Db2xvckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9p
bnRDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAKQEAgLTc1
LDYgKzc0LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Q
YXRoQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UK
aW5kZXggNTE0NTA0ZTZlYzI1YWE1ZTQzYjk5Mzk4ZDVlMzVjZWVlYTc2NmFhNC4uNjRhZTE3MTA4
OWRjYmYwY2Q0NWI3MGE5YjhmNzBlZmE5ZmZkZWRiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21h
a2UKQEAgLTEyMiw3ICsxMjIsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9JbXBsLmNwcAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Rm9udENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZi
dXp6TkcuY3BwCkBAIC0xMzQsNiArMTMzLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxh
dGZvcm1QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fp
cm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3JtYXRpb25NYXRyaXhD
YWlyby5jcHAKQEAgLTE3OSw5ICsxNzksOSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3gxMS9YVW5pcXVlUmVzb3VyY2UuY3BwCiAKLSAgICBwbGF0Zm9ybS9p
bWFnZS1lbmNvZGVycy9KUEVHSW1hZ2VFbmNvZGVyLmNwcAorICAgIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcAogCi0gICAgcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vaW1hZ2Ut
ZW5jb2RlcnMvSlBFR0ltYWdlRW5jb2Rlci5jcHAKIAogICAgIHBsYXRmb3JtL25ldHdvcmsvZWZs
L05ldHdvcmtTdGF0ZU5vdGlmaWVyRWZsLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmlu
ZGV4IDY0NWFkZDFjZTM4ODg4YjA0ZDRhMmQ4OWFkYTBhN2M2ZGUxOTk4NmIuLmQzMWY1NzA2YTY5
NTliMjMxYjViZmIyMmYwN2QxODQzYWU4NjFhMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtl
CkBAIC0xMDEsNyArMTAxLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9JbXBsLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JhY2tpbmdTdG9yZUJhY2tlbmRDYWlyb1gxMS5j
cHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0Zsb2F0UmVjdENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ZvbnRDYWlyby5jcHAKQEAgLTExNSw2ICsxMTQsNyBAQCBsaXN0KEFQUEVORCBXZWJD
b3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9QbGF0Zm9ybVBhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9SZWZQdHJDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1h
dGlvbk1hdHJpeENhaXJvLmNwcApAQCAtMTQ5LDcgKzE0OSw3IEBAIGxpc3QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCiAgICAg
cGxhdGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5jcHAKIAotICAgIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcAogCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3RrL1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlR3RrLmNwcAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
TWFjLmNtYWtlCmluZGV4IDlmNmY0OTZiNmNjNGVmNmU0Yjc0ZDg0YWMwYWE5ZGVhNTVhMDIzN2Iu
LjRkZGVkMzA4OGY0ZjM5NmZlZjQ0NGU3ZWU2NWM2NDEwNjU4ZjU4NDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtTWFjLmNtYWtlCkBAIC0zOTcsNyArMzk3LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvV2ViU3lzdGVtQmFja2Ryb3BMYXll
ci5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1dlYlRpbGVkQmFja2luZ0xheWVy
Lm1tCiAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
RmxvYXRQb2ludENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UmVjdENHLmNw
cApAQCAtNDE3LDYgKzQxNiw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvUGF0aENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1XaW5DYWlyby5jbWFrZQppbmRleCAyYzU1M2IwNTUxZGFkNjlhYTE5OWQ5NjBmNTUyMzQz
ZDkyMGYwN2IzLi4zNDJhYTkyNzMyZmQ4ZjkyZTg1Y2ZhNjI2ZDU1NTcwZWY2NmI2YTY4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKQEAgLTIxLDcgKzIxLDYgQEAgbGlzdChB
UFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAKIAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vRmxvYXRSZWN0Q2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENh
aXJvLmNwcApAQCAtMzQsNiArMzMsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L1BsYXRmb3JtQ29udGV4dENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Bs
YXRmb3JtSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9y
bVBhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQdHJDYWlyby5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1hdHJpeENhaXJv
LmNwcApAQCAtNDYsNyArNDYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAog
Ci0gICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3Bw
CisgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vQml0bWFwUGl4ZWxzQ2Fpcm8uY3Bw
CiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvblN0dWIuY3BwCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBjMTFiYzQ3ZTVjYWQ2MzBhMzY1N2NkZTFhZDlmN2I3NmEwYTU1YzY2Li5mZjJhNDk4YmE5
NmI4MWRhMDNmODFhMzAxYTg1YmUzNzRkMGVjNjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDg0LDcgKzE0ODQsNyBAQAog
CQkzNzVDRDIzMjExOUQ0M0M4MDBBMkE4NTkgLyogSHlwaGVuYXRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NUNEMjMxMTE5RDQzQzgwMEEyQTg1
OSAvKiBIeXBoZW5hdGlvbi5oICovOyB9OwogCQkzNzZEQ0NFMTEzQjRGOTY2MDAyRUJFRkMgLyog
VGV4dFJ1bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzNzZEQ0NFMDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5jcHAgKi87IH07CiAJCTM3NzRB
QkE1MEZBMjFFQjQwMEFEN0RFOSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NzRBQkEzMEZBMjFFQjQw
MEFEN0RFOSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkzNzdBM0E5MDE1RUZDRTlCMDA1OUY1Qzcg
LyogQml0bWFwSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogQml0bWFwSW1hZ2VDRy5jcHAg
Ki87IH07CisJCTM3N0EzQTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc3QTNBOEYx
NUVGQ0U5QTAwNTlGNUM3IC8qIFBsYXRmb3JtSW1hZ2VDRy5jcHAgKi87IH07CiAJCTM3OTE5QzIz
MEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3OTE5QzIxMEI3RDE4ODYwMEE1Njk5OCAv
KiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCAqLzsgfTsKIAkJMzc5MTlDMjQwQjdEMTg4NjAwQTU2OTk4
IC8qIFBvc2l0aW9uSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDM3OTE5QzIyMEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9y
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMzc5MjkxN0ExOTg1
RUYzOTAwRjRCNjYxIC8qIENyZWRlbnRpYWxCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzkyOTE3ODE5ODVFRjM5MDBGNEI2NjEgLyogQ3JlZGVu
dGlhbEJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMjMyNSwxMCArMjMyNSwxNCBAQAogCQk1M0VEM0ZERjE2N0E4OEU3MDA2NzYyRTYgLyog
SlNJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0VEM0ZERDE2N0E4OEU3MDA2NzYyRTYgLyogSlNJbnRlcm5h
bFNldHRpbmdzR2VuZXJhdGVkLmggKi87IH07CiAJCTUzRUY3NjZCMTY1MzBBNjEwMDRDQkU0OSAv
KiBTZXR0aW5nc01hY3Jvcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTNFRjc2NkExNjUzMEE2MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi87
IH07CiAJCTUzRUY3NjZDMTY1MzE5OTQwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oIGluIENv
cHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTNFRjc2NkExNjUzMEE2MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi87IH07CisJCTU1
MDRFNENCMUQzNTU3QjIwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MDRFNENBMUQzNTUzMkQwMEZFNTA4OCAv
KiBCaXRtYXBQaXhlbHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk1NTBBMEJDOTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDNzA4
NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgKi87IH07CiAJCTU1MEEwQkNBMDg1
RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlm
aWVkTmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTU1NUI4N0VDMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTVCODdFQTFDQUFGMEFC
MDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovOyB9OwogCQk1NTVCODdFRDFDQUFGMEFC
MDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU1NUI4N0VCMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29k
ZXJDRy5oICovOyB9OworCQk1NTc0RjA4NzFEMDI3OTA5MDBCOUYxNEMgLyogUGxhdGZvcm1JbWFn
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU3NEYw
ODUxRDAyNzQ0NDAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1NUNCQTZBMTFEMURGMkUxMDA0NTE4NjAg
LyogSW1hZ2VGcmFtZURhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTVDQkE2OUYxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmNw
cCAqLzsgfTsKKwkJNTVDQkE2QTIxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUNCQTZBMDFE
MURGMkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NzJBN0YyMTFDNkU1NzE5MDA5QzYxNDkgLyog
U2ltdWxhdGVkQ2xpY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU3MkE3RjIwMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5oICovOyB9
OwogCQk1NzJBN0YyMzFDNkU1QTY2MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcyQTdGMjIxQzZFNUE2
NjAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCAqLzsgfTsKIAkJNTdFRjVFNjAxRDIwQzgz
OTAwMTcxRTYwIC8qIFRleHRDb2RlY1JlcGxhY2VtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0VGNUU1RjFEMjBDODM5MDAxNzFFNjAgLyogVGV4
dENvZGVjUmVwbGFjZW1lbnQuaCAqLzsgfTsKQEAgLTkwNjEsNyArOTA2NSw3IEBACiAJCTM3NkRD
Q0UwMTNCNEY5NjYwMDJFQkVGQyAvKiBUZXh0UnVuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFRleHRSdW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzNzcyQjA5NTE2NTM1ODU2MDAwQTQ5Q0EgLyogUG9wdXBPcGVuaW5nT2JzZXJ2ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9wdXBPcGVuaW5nT2JzZXJ2ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc3NEFCQTMwRkEyMUVCNDAwQUQ3REU5IC8qIE92
ZXJsYXBUZXN0UmVxdWVzdENsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQml0bWFwSW1hZ2VDRy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBQbGF0Zm9y
bUltYWdlQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGxhdGZv
cm1JbWFnZUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc5MTlDMjEwQjdE
MTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFBvc2l0aW9uSXRlcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkzNzkxOUMyMjBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9zaXRpb25JdGVyYXRvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzkyOTE3ODE5ODVFRjM5MDBGNEI2NjEg
LyogQ3JlZGVudGlhbEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3Jl
ZGVudGlhbEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk5ODksMTAgKzk5
OTMsMTQgQEAKIAkJNTNFRDNGREMxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJuYWxTZXR0aW5n
c0dlbmVyYXRlZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0lu
dGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1M0VEM0ZERDE2N0E4OEU3MDA2NzYyRTYgLyogSlNJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVk
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50ZXJuYWxTZXR0aW5nc0dl
bmVyYXRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0VGNzY2QTE2NTMwQTYx
MDA0Q0JFNDkgLyogU2V0dGluZ3NNYWNyb3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2V0dGluZ3NNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTUw
NEU0Q0ExRDM1NTMyRDAwRkU1MDg4IC8qIEJpdG1hcFBpeGVscy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBC
aXRtYXBQaXhlbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTUwQTBCQzcwODVG
NjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1NTBB
MEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZWROYW1lLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1NTVC
ODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VEZWNvZGVyQ0cuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVy
Q0cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VEZWNvZGVyQ0cuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTU3NEYwODUxRDAyNzQ0NDAwQjlGMTRDIC8q
IFBsYXRmb3JtSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1NUNCQTY5RjFEMURGMkUxMDA0NTE4NjAgLyogSW1hZ2VG
cmFtZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VG
cmFtZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NUNCQTZBMDFEMURG
MkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW1hZ2VGcmFtZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTVENDA4RjcxQTdDNjMxODAwQzc4NDUwIC8qIFNWR0ltYWdlQ2xpZW50cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdJbWFnZUNsaWVudHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTcyQTdGMjAxQzZFNTcxOTAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNr
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXVsYXRlZENsaWNrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MkE3RjIyMUM2RTVBNjYwMDlDNjE0OSAvKiBT
aW11bGF0ZWRDbGljay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
aW11bGF0ZWRDbGljay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjAyNCw3
ICsyMjAzMiw2IEBACiAJCUIyNzUzNTI5MEIwNTM4MTQwMDJDRTY0RiAvKiBjZyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMzc3QTNBOEYxNUVGQ0U5QTAw
NTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovLAogCQkJCTBGQ0YzMzIzMEYyQjk3MTUwMDRC
Njc5NSAvKiBDb2xvckNHLmNwcCAqLywKIAkJCQlCMjc1MzUyQjBCMDUzODE0MDAyQ0U2NEYgLyog
RmxvYXRQb2ludENHLmNwcCAqLywKIAkJCQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxv
YXRSZWN0Q0cuY3BwICovLApAQCAtMjIwNTEsNiArMjIwNTgsNyBAQAogCQkJCUE4MEEzOEZEMEU1
MENDODIwMEEyNUVCQyAvKiBQYXR0ZXJuQ0cuY3BwICovLAogCQkJCUIyNzUzNTM2MEIwNTM4MTQw
MDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmNwcCAqLywKIAkJCQlCMjc1MzUzNzBCMDUzODE0
MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5oICovLAorCQkJCTM3N0EzQThGMTVFRkNFOUEw
MDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwICovLAogCQkJCTFGQzQwRkI4MTY1NUM1OTEw
MDQwRjI5RSAvKiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcCAqLywKIAkJCQkxRkM0MEZCNzE2
NTVDNTkxMDA0MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5oICovLAogCQkJCUIyNzUz
NTJBMEIwNTM4MTQwMDJDRTY0RiAvKiBUcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcCAqLywKQEAg
LTIyMTE4LDYgKzIyMTI2LDcgQEAKIAkJCQlCRUYyOUVFOTE3MTVERDA5MDBDNEI0QzkgLyogQXVk
aW9UcmFja1ByaXZhdGUuaCAqLywKIAkJCQlBODk5NDMyNzBCNDIzMzg3MDBEN0M4MDIgLyogQml0
bWFwSW1hZ2UuY3BwICovLAogCQkJCUE4OTk0MzI2MEI0MjMzODcwMEQ3QzgwMiAvKiBCaXRtYXBJ
bWFnZS5oICovLAorCQkJCTU1MDRFNENBMUQzNTUzMkQwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMu
aCAqLywKIAkJCQlDRERFMDJFOTE4QjNERkM3MDBDRjdGRjEgLyogQ0RNU2Vzc2lvbi5oICovLAog
CQkJCUIyNzUzNTM4MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5jcHAgKi8sCiAJCQkJQjI3NTM1
MzkwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmggKi8sCkBAIC0yMjIwMiw2ICsyMjIxMSw4IEBA
CiAJCQkJNDNEMjU5NzYxM0M4MTZGNDAwNjA4NTU5IC8qIEltYWdlQnVmZmVyLmNwcCAqLywKIAkJ
CQlCMkExMEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLywKIAkJCQkyMkJE
OUY3RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi8sCisJCQkJNTVDQkE2
OUYxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmNwcCAqLywKKwkJCQk1NUNCQTZB
MDFEMURGMkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCAqLywKIAkJCQlCQzdGNDRBNzBC
OUUzMjRFMDBBOUQwODEgLyogSW1hZ2VPYnNlcnZlci5oICovLAogCQkJCUE4NzQ4RDc0MTJDQzNG
ODkwMDFGQkE0MSAvKiBJbWFnZU9yaWVudGF0aW9uLmNwcCAqLywKIAkJCQlBODc0OEQ2NjEyQ0Mz
NzYzMDAxRkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5oICovLApAQCAtMjIyNTEsNiArMjIyNjIs
NyBAQAogCQkJCTJENTAwMkZBMUI1NkQ3OTkwMDIwQUFGNyAvKiBQYXRoVXRpbGl0aWVzLmggKi8s
CiAJCQkJQThGQTZFNUMwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwICovLAogCQkJCUE4
RkE2RTVCMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggKi8sCisJCQkJNTU3NEYwODUxRDAy
NzQ0NDAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCAqLywKIAkJCQkwNTYyRjk2MDE1NzNGODhG
MDAzMUNBMTYgLyogUGxhdGZvcm1MYXllci5oICovLAogCQkJCUNFRUZDRDdCMTlEQjMzREMwMDM4
NzZENyAvKiBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQkwNzI4NDdFMjE2
RUJDNUIwMDA0M0NGQTQgLyogUGxhdGZvcm1UZXh0VHJhY2suaCAqLywKQEAgLTI2MDE4LDYgKzI2
MDMwLDcgQEAKIAkJCQk4NUU3MTFCOTBBQzVENTM1MDA1MzI3MEYgLyogRE9NSFRNTE1hcEVsZW1l
bnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1MTU3OUYwQzAzQkJEMzAwOEJCMEVF
IC8qIERPTUhUTUxNYXJxdWVlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1MTU2RUEw
QzAzQjc0MTAwOEJCMEVFIC8qIERPTUhUTUxNYXJxdWVlRWxlbWVudEludGVybmFsLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1NTc0RjA4NzFEMDI3OTA5MDBCOUYxNEMgLyogUGxhdGZvcm1JbWFnZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkRFQzY2NTUxQzgyRDA0MTAwOTk4NDZBIC8qIERPTUhUTUxN
ZWRpYUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERUM2NjUxMUM4MkQwMTYwMDk5ODQ2
QSAvKiBET01IVE1MTWVkaWFFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1
QkE0RDEzMEFBNjg4NjgwMDg4MDUyRCAvKiBET01IVE1MTWVudUVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjY0NTksNiArMjY0NzIsNyBAQAogCQkJCUQzNTlENzhBMTI5Q0EyNzEwMDA2RTVE
MiAvKiBIVE1MRGV0YWlsc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE3OUZBMEEx
OTE2REYwMEE4RUY1RiAvKiBIVE1MRGlyZWN0b3J5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThFQTdDQjcwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxEaXZFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk1NUNCQTZBMjFEMURGMkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4RUE3OUY3MEExOTE2REYwMEE4RUY1RiAvKiBIVE1MRExpc3RF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOThFNTA4MjQ1RTU5MDAxRTlBQkMgLyog
SFRNTERvY3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdCMzg2NzEyMjg4M0U5MDBCODFG
RjggLyogSFRNTERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTI4MzU5LDYgKzI4
MzczLDcgQEAKIAkJCQlCMjIyNzk5MzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OTk1MEQwMEJGMjIwMDcxQjc4MiAv
KiBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5
OTgwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0FuaW1hdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTU1MDRFNENCMUQzNTU3QjIwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQzOUQzMzQ1MTNBNjkxMUMwMEMyMEY0RiAvKiBTVkdBbmltYXRvckZhY3Rv
cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4RkIzRjg0MTNCQzc1NEMwMDk5RkMxOCAvKiBTVkdB
dHRyaWJ1dGVUb1Byb3BlcnR5TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk5QzBEMDBC
RjIyMDA3MUI3ODIgLyogU1ZHQ2lyY2xlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTQx
MSw3ICsyOTQyNiw3IEBACiAJCQkJRkRDNTRGMDQxMzk5QjBEQTAwOEQ5MTE3IC8qIEJpcXVhZEZp
bHRlck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTYwMjYxMkIwMjY3NjAwQzFBMzU5
IC8qIEJpcXVhZFByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODk5NDMyOTBCNDIz
Mzg4MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzc3QTNB
OTAxNUVGQ0U5QjAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3IC8qIFBsYXRmb3JtSW1hZ2VDRy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5NzZENkM3ODEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkyRURFRjFGMzEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYkRhdGEuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRTFEMzFDREMxOTE5NjAyMDAwMTAwNUEzIC8qIEJsb2JEYXRhRmls
ZVJlZmVyZW5jZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5Nzc0LDYgKzI5Nzg5LDcgQEAKIAkJ
CQkyRTJEOTlFODEwRTJCQzFDMDA0OTYzMzcgLyogRE9NQmxvYi5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTg1MDg5Q0Q4MEE5OEM0MjgwMEEyNzVBQSAvKiBET01DREFUQVNlY3Rpb24ubW0gaW4gU291
cmNlcyAqLywKIAkJCQk4NUFDQTk4NzBBOUI1MjAzMDA2NzFFOTAgLyogRE9NQ2hhcmFjdGVyRGF0
YS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTU1Q0JBNkExMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFn
ZUZyYW1lRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTA4OUNEQTBBOThDNDI4MDBBMjc1
QUEgLyogRE9NQ29tbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTk3OEQwN0JFMTQ1QTBGNkMw
MDk2OTA4RCAvKiBET01Db3JlRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1OEMz
OEE2MEFBOEYyMDQwMEIxODdBNCAvKiBET01Db3VudGVyLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbSBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCmluZGV4IDQwMTFlYTNmZDhjMDQ2OTc0YzU1ZDQ4ZTM5
NmYxYjgzYjgxZjMzNWQuLmE1YWM0ZjA1YWUzMzlhOGQ2NDcwNmMxMGZjMGY3YWY0MDQyNTYyM2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCkBAIC02MDYsNyArNjA2LDcgQEAgLSAo
dm9pZClnZXRQcmV2aWV3U25hcHNob3RJbWFnZTooQ0dJbWFnZVJlZiopY2dJbWFnZSBhbmRSZWN0
czooTlNBcnJheSAqKilyZWN0cwogCiAgICAgaWYgKHRleHRJbmRpY2F0b3IpIHsKICAgICAgICAg
aWYgKEltYWdlKiBpbWFnZSA9IHRleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpKQotICAgICAg
ICAgICAgKmNnSW1hZ2UgPSAoQ0dJbWFnZVJlZilDRkF1dG9yZWxlYXNlKENHSW1hZ2VSZXRhaW4o
aW1hZ2UtPmdldENHSW1hZ2VSZWYoKSkpOworICAgICAgICAgICAgKmNnSW1hZ2UgPSBpbWFnZS0+
bmF0aXZlSW1hZ2UoKS5hdXRvcmVsZWFzZSgpOwogICAgIH0KIAogICAgIFJldGFpblB0cjxOU011
dGFibGVBcnJheT4gcmVjdEFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0XSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9y
V2luZG93Lm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5t
bQppbmRleCAzNjRhOWE4N2NlNmYwNjYzOTQ4Yjg4NDZlOGUyY2U2ZDE5MGYyNDg5Li5hNzRkYTg1
YWNlY2EzYzY2OThkZDE1NmFiMzFhNmM5NzFhMzU0ZTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cubW0KQEAgLTE2Miw5ICsxNjIsOSBAQCAtIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIHRleHRJbmRpY2F0b3I6KFBh
c3NSZWZQdHI8VGV4dEluZGljYQogICAgIGNvbnRlbnRzSW1hZ2VMb2dpY2FsU2l6ZS5zY2FsZSgx
IC8gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yKCkpOwogICAgIFJldGFp
blB0cjxDR0ltYWdlUmVmPiBjb250ZW50c0ltYWdlOwogICAgIGlmIChpbmRpY2F0b3JXYW50c0Nv
bnRlbnRDcm9zc2ZhZGUoKl90ZXh0SW5kaWNhdG9yKSkKLSAgICAgICAgY29udGVudHNJbWFnZSA9
IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0KCktPmdldENHSW1hZ2VS
ZWYoKTsKKyAgICAgICAgY29udGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1h
Z2VXaXRoSGlnaGxpZ2h0KCktPm5hdGl2ZUltYWdlKCk7CiAgICAgZWxzZQotICAgICAgICBjb250
ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpLT5nZXRDR0ltYWdlUmVm
KCk7CisgICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdl
KCktPm5hdGl2ZUltYWdlKCk7CiAKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGJvdW5j
ZUxheWVycyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwogCkBAIC0y
NjUsNyArMjY1LDcgQEAgc3RhdGljIFJldGFpblB0cjxDQUtleWZyYW1lQW5pbWF0aW9uPiBjcmVh
dGVCb3VuY2VBbmltYXRpb24oQ0ZUaW1lSW50ZXJ2YWwgZHVyYXQKIHN0YXRpYyBSZXRhaW5QdHI8
Q0FCYXNpY0FuaW1hdGlvbj4gY3JlYXRlQ29udGVudENyb3NzZmFkZUFuaW1hdGlvbihDRlRpbWVJ
bnRlcnZhbCBkdXJhdGlvbiwgVGV4dEluZGljYXRvciYgdGV4dEluZGljYXRvcikKIHsKICAgICBS
ZXRhaW5QdHI8Q0FCYXNpY0FuaW1hdGlvbj4gY3Jvc3NmYWRlQW5pbWF0aW9uID0gW0NBQmFzaWNB
bmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6QCJjb250ZW50cyJdOwotICAgIFJldGFpblB0
cjxDR0ltYWdlUmVmPiBjb250ZW50c0ltYWdlID0gdGV4dEluZGljYXRvci5jb250ZW50SW1hZ2Uo
KS0+Z2V0Q0dJbWFnZVJlZigpOworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb250ZW50c0lt
YWdlID0gdGV4dEluZGljYXRvci5jb250ZW50SW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKTsKICAgICBb
Y3Jvc3NmYWRlQW5pbWF0aW9uIHNldFRvVmFsdWU6KGlkKWNvbnRlbnRzSW1hZ2UuZ2V0KCldOwog
ICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0RmlsbE1vZGU6a0NBRmlsbE1vZGVGb3J3YXJkc107
CiAgICAgW2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRSZW1vdmVkT25Db21wbGV0aW9uOk5PXTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAppbmRl
eCA0NjBkMWI4NTZiNzdiN2NmNGVjNjg5NjU4MWI4MzNkM2U3Zjk3MDE0Li5mYzY0OWQxMGFhYjlj
MTNmZmYyOTMwNTVhNzA3Y2I3NDUzNzQ2OTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCkBAIC02OCwxNSArNjgsMTMgQEAgQml0bWFw
SW1hZ2U6OkJpdG1hcEltYWdlKE5hdGl2ZUltYWdlUHRyJiYgaW1hZ2UsIEltYWdlT2JzZXJ2ZXIq
IG9ic2VydmVyKQogICAgICwgbV9oYXZlRnJhbWVDb3VudCh0cnVlKQogICAgICwgbV9hbmltYXRp
b25GaW5pc2hlZFdoZW5DYXRjaGluZ1VwKGZhbHNlKQogeworICAgIG1fZnJhbWVzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoMSk7CisgICAgbV9mcmFtZXMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUo
aW1hZ2UpKTsKKyAgICAKICAgICAvLyBTaW5jZSB3ZSBkb24ndCBoYXZlIGEgZGVjb2Rlciwgd2Ug
Y2FuJ3QgZmlndXJlIG91dCB0aGUgaW1hZ2Ugb3JpZW50YXRpb24uCiAgICAgLy8gU2V0IG1fc2l6
ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiB0byBiZSB0aGUgc2FtZSBhcyBtX3NpemUgc28gaXQncyBu
b3QgMHgwLgotICAgIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiA9IG1fc2l6ZSA9IE5hdGl2
ZUltYWdlOjpzaXplKGltYWdlKTsKKyAgICBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBt
X3NpemUgPSBtX2ZyYW1lc1swXS5zaXplKCk7CiAgICAgbV9kZWNvZGVkU2l6ZSA9IG1fc2l6ZS5h
cmVhKCkgKiA0OwotICAgIAotICAgIG1fZnJhbWVzLmdyb3coMSk7Ci0gICAgbV9mcmFtZXNbMF0u
bV9oYXNBbHBoYSA9IE5hdGl2ZUltYWdlOjpoYXNBbHBoYShpbWFnZSk7Ci0gICAgbV9mcmFtZXNb
MF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOwotICAgIG1fZnJhbWVzWzBdLm1faW1hZ2UgPSBXVEZN
b3ZlKGltYWdlKTsKIH0KIAogQml0bWFwSW1hZ2U6On5CaXRtYXBJbWFnZSgpCkBAIC0xMDUsNyAr
MTAzLDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6aGF2ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBp
bmRleCkKICAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2U7CisgICAgcmV0dXJu
IG1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpOwogfQogCiBib29sIEJpdG1hcEltYWdlOjpoYXNT
aW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0CkBAIC0xMjUsOSArMTIzLDcgQEAgdm9pZCBCaXRt
YXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKGJvb2wgZGVzdHJveUFsbCkKICAgICAgICAgLy8g
VGhlIHVuZGVybHlpbmcgZnJhbWUgaXNuJ3QgYWN0dWFsbHkgY2hhbmdpbmcgKHdlJ3JlIGp1c3Qg
dHJ5aW5nIHRvCiAgICAgICAgIC8vIHNhdmUgdGhlIG1lbW9yeSBmb3IgdGhlIGZyYW1lYnVmZmVy
IGRhdGEpLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNsZWFyCiAgICAgICAgIC8vIHRoZSBtZXRhZGF0
YS4KLSAgICAgICAgdW5zaWduZWQgZnJhbWVCeXRlcyA9IG1fZnJhbWVzW2ldLm1fZnJhbWVCeXRl
czsKLSAgICAgICAgaWYgKG1fZnJhbWVzW2ldLmNsZWFyKGZhbHNlKSkKLSAgICAgICAgICAgIGZy
YW1lQnl0ZXNDbGVhcmVkICs9IGZyYW1lQnl0ZXM7CisgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVk
ICs9IG1fZnJhbWVzW2ldLmNsZWFyKEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRhZGF0YSk7
CiAgICAgfQogCiAgICAgbV9zb3VyY2UuY2xlYXIoZGVzdHJveUFsbCwgY2xlYXJCZWZvcmVGcmFt
ZSwgZGF0YSgpLCBtX2FsbERhdGFSZWNlaXZlZCk7CkBAIC0xNTAsOCArMTQ2LDggQEAgdm9pZCBC
aXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3NhcnkoYm9vbCBkZXN0cm95QWxs
KQogICAgICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBhbGxGcmFtZUJ5dGVzID0gMDsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVzLnNpemUoKTsgKytpKQotICAgICAgICBh
bGxGcmFtZUJ5dGVzICs9IG1fZnJhbWVzW2ldLnVzZWRGcmFtZUJ5dGVzKCk7CisgICAgZm9yIChh
dXRvJiBmcmFtZSA6IG1fZnJhbWVzKQorICAgICAgICBhbGxGcmFtZUJ5dGVzICs9IGZyYW1lLmZy
YW1lQnl0ZXMoKTsKIAogICAgIGlmIChhbGxGcmFtZUJ5dGVzID4gbGFyZ2VBbmltYXRpb25DdXRv
ZmYpIHsKICAgICAgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdlICVwIGRlc3Ryb3lEZWNvZGVk
RGF0YUlmTmVjZXNzYXJ5IGRlc3Ryb3lpbmdEYXRhOiBhbGxGcmFtZUJ5dGVzPSV1IGN1dG9mZj0l
dSIsIHRoaXMsIGFsbEZyYW1lQnl0ZXMsIGxhcmdlQW5pbWF0aW9uQ3V0b2ZmKTsKQEAgLTE3Nyw3
ICsxNzMsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkZXN0cm95TWV0YWRhdGFBbmROb3RpZnkodW5z
aWduZWQgZnJhbWVCeXRlc0NsZWFyZWQsIENsZWFyZWRTbwogICAgICAgICBpbWFnZU9ic2VydmVy
KCktPmRlY29kZWRTaXplQ2hhbmdlZCh0aGlzLCAtc2FmZUNhc3Q8aW50PihmcmFtZUJ5dGVzQ2xl
YXJlZCkpOwogfQogCi12b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwg
U3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lQ2FjaGluZyBmcmFt
ZUNhY2hpbmcpCit2b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vi
c2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyBj
YWNoaW5nKQogewogICAgIHNpemVfdCBudW1GcmFtZXMgPSBmcmFtZUNvdW50KCk7CiAgICAgQVNT
RVJUKG1fZGVjb2RlZFNpemUgPT0gMCB8fCBudW1GcmFtZXMgPiAxKTsKQEAgLTE4NSwyNSArMTgx
LDEyIEBAIHZvaWQgQml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUoc2l6ZV90IGluZGV4LCBTdWJzYW1w
bGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIEltCiAgICAgaWYgKG1fZnJhbWVzLnNpemUoKSA8
IG51bUZyYW1lcykKICAgICAgICAgbV9mcmFtZXMuZ3JvdyhudW1GcmFtZXMpOwogCi0gICAgaWYg
KGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhQW5kRnJhbWUpIHsKLSAgICAgICAgbV9mcmFt
ZXNbaW5kZXhdLm1faW1hZ2UgPSBtX3NvdXJjZS5jcmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRl
eCwgc3Vic2FtcGxpbmdMZXZlbCk7Ci0gICAgICAgIG1fZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBs
aW5nTGV2ZWwgPSBzdWJzYW1wbGluZ0xldmVsOwotICAgIH0KLQotICAgIG1fZnJhbWVzW2luZGV4
XS5tX29yaWVudGF0aW9uID0gbV9zb3VyY2Uub3JpZW50YXRpb25BdEluZGV4KGluZGV4KTsKLSAg
ICBtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOwotICAgIG1fZnJhbWVzW2lu
ZGV4XS5tX2lzQ29tcGxldGUgPSBtX3NvdXJjZS5mcmFtZUlzQ29tcGxldGVBdEluZGV4KGluZGV4
KTsKKyAgICBtX2ZyYW1lc1tpbmRleF0gPSBtX3NvdXJjZS5jcmVhdGVGcmFtZURhdGFBdEluZGV4
KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsLCBjYWNoaW5nKTsKIAotICAgIGlmIChyZXBldGl0aW9u
Q291bnQoZmFsc2UpICE9IGNBbmltYXRpb25Ob25lKQotICAgICAgICBtX2ZyYW1lc1tpbmRleF0u
bV9kdXJhdGlvbiA9IG1fc291cmNlLmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KTsKKyAgICBM
T0coSW1hZ2VzLCAiQml0bWFwSW1hZ2UgJXAgY2FjaGVGcmFtZSAlbHUgKCVzJXUgYnl0ZXMsIGNv
bXBsZXRlICVkKSIsIHRoaXMsIGluZGV4LCBjYWNoaW5nID09IEltYWdlRnJhbWVEYXRhOjpDYWNo
aW5nOjpNZXRhZGF0YSA/ICJtZXRhZGF0YSBvbmx5LCAiIDogIiIsIG1fZnJhbWVzW2luZGV4XS5m
cmFtZUJ5dGVzKCksIG1fZnJhbWVzW2luZGV4XS5pc0NvbXBsZXRlKCkpOwogCi0gICAgbV9mcmFt
ZXNbaW5kZXhdLm1faGFzQWxwaGEgPSBtX3NvdXJjZS5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRl
eCk7Ci0gICAgbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWVCeXRlcyA9IG1fc291cmNlLmZyYW1lQnl0
ZXNBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsKLQotICAgIExPRyhJbWFnZXMsICJC
aXRtYXBJbWFnZSAlcCBjYWNoZUZyYW1lICVsdSAoJXMldSBieXRlcywgY29tcGxldGUgJWQpIiwg
dGhpcywgaW5kZXgsIGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhT25seSA/ICJtZXRhZGF0
YSBvbmx5LCAiIDogIiIsIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXMsIG1fZnJhbWVzW2lu
ZGV4XS5tX2lzQ29tcGxldGUpOwotCi0gICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKSB7
Ci0gICAgICAgIGludCBkZWx0YUJ5dGVzID0gc2FmZUNhc3Q8aW50PihtX2ZyYW1lc1tpbmRleF0u
bV9mcmFtZUJ5dGVzKTsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhdLmhhc0ltYWdlKCkpIHsKKyAg
ICAgICAgaW50IGRlbHRhQnl0ZXMgPSBzYWZlQ2FzdDxpbnQ+KG1fZnJhbWVzW2luZGV4XS5mcmFt
ZUJ5dGVzKCkpOwogICAgICAgICBtX2RlY29kZWRTaXplICs9IGRlbHRhQnl0ZXM7CiAgICAgICAg
IC8vIFRoZSBmdWxseS1kZWNvZGVkIGZyYW1lIHdpbGwgc3Vic3VtZSB0aGUgcGFydGlhbGx5IGRl
Y29kZWQgZGF0YSB1c2VkCiAgICAgICAgIC8vIHRvIGRldGVybWluZSBpbWFnZSBwcm9wZXJ0aWVz
LgpAQCAtMjg4LDIxICsyNzEsMTkgQEAgYm9vbCBCaXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQoYm9v
bCBhbGxEYXRhUmVjZWl2ZWQpCiAgICAgLy8gZnJhbWUgYWZmZWN0ZWQgYnkgYXBwZW5kaW5nIG5l
dyBkYXRhIGhlcmUuIFRodXMgd2UgaGF2ZSB0byBjbGVhciBhbGwgdGhlCiAgICAgLy8gaW5jb21w
bGV0ZSBmcmFtZXMgdG8gYmUgc2FmZS4KICAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQ2xlYXJlZCA9
IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lcy5zaXplKCk7ICsraSkgewor
ICAgIGZvciAoYXV0byYgZnJhbWUgOiBtX2ZyYW1lcykgewogICAgICAgICAvLyBOT1RFOiBEb24n
dCBjYWxsIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoKSBoZXJlLCB0aGF0IHdpbGwgdHJ5IHRvCiAg
ICAgICAgIC8vIGRlY29kZSBhbnkgdW5jYWNoZWQgKGkuZS4gbmV2ZXItZGVjb2RlZCBvcgogICAg
ICAgICAvLyBjbGVhcmVkLW9uLWEtcHJldmlvdXMtcGFzcykgZnJhbWVzIQotICAgICAgICB1bnNp
Z25lZCBmcmFtZUJ5dGVzID0gbV9mcmFtZXNbaV0ubV9mcmFtZUJ5dGVzOwotICAgICAgICBpZiAo
bV9mcmFtZXNbaV0ubV9oYXZlTWV0YWRhdGEgJiYgIW1fZnJhbWVzW2ldLm1faXNDb21wbGV0ZSkK
LSAgICAgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IChtX2ZyYW1lc1tpXS5jbGVhcih0cnVl
KSA/IGZyYW1lQnl0ZXMgOiAwKTsKKyAgICAgICAgaWYgKGZyYW1lLmhhc01ldGFkYXRhKCkgJiYg
IWZyYW1lLmlzQ29tcGxldGUoKSkKKyAgICAgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IGZy
YW1lLmNsZWFyKEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpFbXB0eSk7CiAgICAgfQogICAgIGRl
c3Ryb3lNZXRhZGF0YUFuZE5vdGlmeShmcmFtZUJ5dGVzQ2xlYXJlZCwgQ2xlYXJlZFNvdXJjZTo6
Tm8pOwogI2Vsc2UKICAgICAvLyBGSVhNRTogd2h5IGlzIHRoaXMgZGlmZmVyZW50IGZvciBpT1M/
CiAgICAgaW50IGRlbHRhQnl0ZXMgPSAwOwogICAgIGlmICghbV9mcmFtZXMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGludCBieXRlcyA9IG1fZnJhbWVzW21fZnJhbWVzLnNpemUoKSAtIDFdLm1fZnJh
bWVCeXRlczsKLSAgICAgICAgaWYgKG1fZnJhbWVzW21fZnJhbWVzLnNpemUoKSAtIDFdLmNsZWFy
KHRydWUpKSB7CisgICAgICAgIGlmIChpbnQgYnl0ZXMgPSBtX2ZyYW1lc1ttX2ZyYW1lcy5zaXpl
KCkgLSAxXS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6RW1wdHkpKSB7CiAgICAgICAg
ICAgICBkZWx0YUJ5dGVzICs9IGJ5dGVzOwogICAgICAgICAgICAgZGVsdGFCeXRlcyArPSBtX2Rl
Y29kZWRQcm9wZXJ0aWVzU2l6ZTsKICAgICAgICAgICAgIG1fZGVjb2RlZFByb3BlcnRpZXNTaXpl
ID0gMDsKQEAgLTM2NiwxNSArMzQ3LDE1IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmlzU2l6ZUF2YWls
YWJsZSgpCiAgICAgcmV0dXJuIG1fc2l6ZUF2YWlsYWJsZTsKIH0KIAotYm9vbCBCaXRtYXBJbWFn
ZTo6ZW5zdXJlRnJhbWVJc0NhY2hlZChzaXplX3QgaW5kZXgsIEltYWdlRnJhbWVDYWNoaW5nIGZy
YW1lQ2FjaGluZykKK2Jvb2wgQml0bWFwSW1hZ2U6OmVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90
IGluZGV4LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyBjYWNoaW5nKQogewogICAgIGlmIChpbmRl
eCA+PSBmcmFtZUNvdW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChpbmRl
eCA+PSBtX2ZyYW1lcy5zaXplKCkKLSAgICAgICAgfHwgKGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1l
dGFkYXRhQW5kRnJhbWUgJiYgIW1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKQotICAgICAgICB8fCAo
ZnJhbWVDYWNoaW5nID09IENhY2hlTWV0YWRhdGFPbmx5ICYmICFtX2ZyYW1lc1tpbmRleF0ubV9o
YXZlTWV0YWRhdGEpKQotICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwLCBmcmFtZUNhY2hpbmcp
OworICAgICAgICB8fCAoY2FjaGluZyA9PSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRh
dGFBbmRJbWFnZSAmJiAhbV9mcmFtZXNbaW5kZXhdLmhhc0ltYWdlKCkpCisgICAgICAgIHx8IChj
YWNoaW5nID09IEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRhZGF0YSAmJiAhbV9mcmFtZXNb
aW5kZXhdLmhhc01ldGFkYXRhKCkpKQorICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwLCBjYWNo
aW5nKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMzg4LDEwICszNjksOSBAQCBOYXRpdmVJ
bWFnZVB0ciBCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBmbG9h
dCBwcmVzZW50YXRpb25TYwogCiAgICAgLy8gV2UgbWF5IGhhdmUgY2FjaGVkIGEgZnJhbWUgd2l0
aCBhIGhpZ2hlciBzdWJzYW1wbGluZyBsZXZlbCwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkIHRvCiAg
ICAgLy8gcmUtZGVjb2RlIHdpdGggYSBsb3dlciBsZXZlbC4KLSAgICBpZiAoaW5kZXggPCBtX2Zy
YW1lcy5zaXplKCkgJiYgbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2UgJiYgc3Vic2FtcGxpbmdMZXZl
bCA8IG1fZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBsaW5nTGV2ZWwpIHsKKyAgICBpZiAoaW5kZXgg
PCBtX2ZyYW1lcy5zaXplKCkgJiYgbV9mcmFtZXNbaW5kZXhdLmhhc0ltYWdlKCkgJiYgc3Vic2Ft
cGxpbmdMZXZlbCA8IG1fZnJhbWVzW2luZGV4XS5zdWJzYW1wbGluZ0xldmVsKCkpIHsKICAgICAg
ICAgLy8gSWYgdGhlIGltYWdlIGlzIGFscmVhZHkgY2FjaGVkLCBidXQgYXQgdG9vIHNtYWxsIGEg
c2l6ZSwgcmUtZGVjb2RlIGEgbGFyZ2VyIHZlcnNpb24uCi0gICAgICAgIGludCBzaXplQ2hhbmdl
ID0gLW1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIG1fZnJhbWVzW2luZGV4
XS5jbGVhcih0cnVlKTsKKyAgICAgICAgaW50IHNpemVDaGFuZ2UgPSAtbV9mcmFtZXNbaW5kZXhd
LmNsZWFyKEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpFbXB0eSk7CiAgICAgICAgIGludmFsaWRh
dGVQbGF0Zm9ybURhdGEoKTsKICAgICAgICAgbV9kZWNvZGVkU2l6ZSArPSBzaXplQ2hhbmdlOwog
ICAgICAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQpAQCAtMzk5LDQwICszNzksNzIgQEAgTmF0aXZl
SW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgZmxv
YXQgcHJlc2VudGF0aW9uU2MKICAgICB9CiAKICAgICAvLyBJZiB3ZSBoYXZlbid0IGZldGNoZWQg
YSBmcmFtZSB5ZXQsIGRvIHNvLgotICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkgfHwg
IW1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKQotICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCBzdWJz
YW1wbGluZ0xldmVsLCBDYWNoZU1ldGFkYXRhQW5kRnJhbWUpOworICAgIGlmIChpbmRleCA+PSBt
X2ZyYW1lcy5zaXplKCkgfHwgIW1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpKQorICAgICAgICBj
YWNoZUZyYW1lKGluZGV4LCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGlu
Zzo6TWV0YWRhdGFBbmRJbWFnZSk7CisKKyAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLmltYWdl
KCk7Cit9CisgICAgCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2UoKQor
eworICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKTsKK30KKyAgICAKK05hdGl2ZUltYWdl
UHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQor
eworICAgIHNpemVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKKyAgICAKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1h
Z2VBdEluZGV4KGkpOworICAgICAgICBpZiAoaW1hZ2UgJiYgUGxhdGZvcm1JbWFnZShpbWFnZSku
c2l6ZSgpID09IHNpemUpCisgICAgICAgICAgICByZXR1cm4gaW1hZ2U7CisgICAgfQorICAgIAor
ICAgIC8vIEZhbGxiYWNrIHRvIHRoZSBmaXJzdCBmcmFtZSBpbWFnZSBpZiB3ZSBjYW4ndCBmaW5k
IHRoZSByaWdodCBzaXplCisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KDApOworfQorICAg
IAorTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCkKK3sKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOworfQog
Ci0gICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOworVmVjdG9yPE5hdGl2ZUltYWdl
UHRyPiBCaXRtYXBJbWFnZTo6ZnJhbWVzTmF0aXZlSW1hZ2VzKCkKK3sKKyAgICBWZWN0b3I8TmF0
aXZlSW1hZ2VQdHI+IGltYWdlczsKKyAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7Cisg
ICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGlm
IChhdXRvIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkpCisgICAgICAgICAgICBpbWFnZXMu
YXBwZW5kKGltYWdlKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGltYWdlczsKIH0KIAogYm9v
bCBCaXRtYXBJbWFnZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCiB7Ci0g
ICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBDYWNoZU1ldGFkYXRhT25seSkpCisg
ICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGlu
Zzo6TWV0YWRhdGEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbV9mcmFt
ZXNbaW5kZXhdLm1faXNDb21wbGV0ZTsKKyAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLmlzQ29t
cGxldGUoKTsKIH0KIAogZmxvYXQgQml0bWFwSW1hZ2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNp
emVfdCBpbmRleCkKIHsKLSAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQoaW5kZXgsIENhY2hl
TWV0YWRhdGFPbmx5KSkKKyAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQoaW5kZXgsIEltYWdl
RnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRhZGF0YSkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAg
cmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2R1cmF0aW9uOwotfQotCi1OYXRpdmVJbWFnZVB0ciBC
aXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKQotewotICAgIHJldHVybiBm
cmFtZUltYWdlQXRJbmRleChjdXJyZW50RnJhbWUoKSk7CisgICAgcmV0dXJuIG1fZnJhbWVzW2lu
ZGV4XS5kdXJhdGlvbigpOwogfQogCiBib29sIEJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJ
bmRleChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4
LCBDYWNoZU1ldGFkYXRhT25seSkpCisgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4
LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEpCi0gICAgICAgIHJl
dHVybiBtX2ZyYW1lc1tpbmRleF0ubV9oYXNBbHBoYTsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhd
Lmhhc01ldGFkYXRhKCkpCisgICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0uaGFzQWxwaGEo
KTsKIAogICAgIHJldHVybiBtX3NvdXJjZS5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRleCk7CiB9
CkBAIC00NDQsMTEgKzQ1NiwxMSBAQCBib29sIEJpdG1hcEltYWdlOjpjdXJyZW50RnJhbWVLbm93
blRvQmVPcGFxdWUoKQogCiBJbWFnZU9yaWVudGF0aW9uIEJpdG1hcEltYWdlOjpmcmFtZU9yaWVu
dGF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2Fj
aGVkKGluZGV4LCBDYWNoZU1ldGFkYXRhT25seSkpCisgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2Fj
aGVkKGluZGV4LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEpKQogICAgICAgICBy
ZXR1cm4gSW1hZ2VPcmllbnRhdGlvbigpOwogCi0gICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX2hh
dmVNZXRhZGF0YSkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX29yaWVudGF0aW9u
OworICAgIGlmIChtX2ZyYW1lc1tpbmRleF0uaGFzTWV0YWRhdGEoKSkKKyAgICAgICAgcmV0dXJu
IG1fZnJhbWVzW2luZGV4XS5vcmllbnRhdGlvbigpOwogCiAgICAgcmV0dXJuIG1fc291cmNlLm9y
aWVudGF0aW9uQXRJbmRleChpbmRleCk7CiB9CkBAIC03MDAsMTcgKzcxMiw1NiBAQCBDb2xvciBC
aXRtYXBJbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkKICAgICAgICAgcmV0dXJuIENvbG9y
KCk7CiAgICAgCiAgICAgQVNTRVJUKG1fZnJhbWVzLnNpemUoKSk7Ci0gICAgbV9zb2xpZENvbG9y
ID0gTmF0aXZlSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcihtX2ZyYW1lc1swXS5tX2ltYWdl
LmdldCgpKTsKKyAgICBtX3NvbGlkQ29sb3IgPSBtX2ZyYW1lc1swXS5zaW5nbGVQaXhlbFNvbGlk
Q29sb3IoKTsKICAgICAKICAgICBBU1NFUlQobV9zb2xpZENvbG9yKTsKICAgICByZXR1cm4gbV9z
b2xpZENvbG9yLnZhbHVlKCk7CiB9CiAgICAgCitib29sIEJpdG1hcEltYWdlOjppc0FsbW9zdFNv
bGlkQ29sb3IoKQoreworICAgIGlmIChmcmFtZUNvdW50KCkgIT0gMSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcmV0dXJuIGVuc3VyZUZyYW1lSXNDYWNoZWQoMCkgJiYgbV9mcmFtZXNb
MF0uaXNBbG1vc3RTb2xpZENvbG9yKCk7Cit9CisgICAgCiBib29sIEJpdG1hcEltYWdlOjpjYW5B
bmltYXRlKCkKIHsKICAgICByZXR1cm4gc2hvdWxkQW5pbWF0ZSgpICYmIGZyYW1lQ291bnQoKSA+
IDE7CiB9CiAKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2Ny
aXB0aW9uIGRlc2NyaXB0aW9uKQoreworICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5KCkgfHwgc3Jj
UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworI2lmIFBMQVRGT1JNKElPUykKKyAg
ICBzdGFydEFuaW1hdGlvbihEb05vdENhdGNoVXApOworI2Vsc2UKKyAgICBzdGFydEFuaW1hdGlv
bigpOworI2VuZGlmCisgICAgCisgICAgQ29sb3IgY29sb3IgPSBzaW5nbGVQaXhlbFNvbGlkQ29s
b3IoKTsKKyAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7CisgICAgICAgIGZpbGxXaXRoU29saWRD
b2xvcihjb250ZXh0LCBkZXN0UmVjdCwgY29sb3IsIG9wKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBhdXRvIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJh
bWUsIFBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUoY29udGV4dCwgZGVzdFJlY3QsIHNy
Y1JlY3QpKTsKKyAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBo
YXZlIGFuIGltYWdlIHlldC4KKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEltYWdlT3JpZW50
YXRpb24gb3JpZW50YXRpb24oZGVzY3JpcHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKTsKKyAgICBp
ZiAoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VP
cmllbnRhdGlvbikKKyAgICAgICAgb3JpZW50YXRpb24gPSBmcmFtZU9yaWVudGF0aW9uQXRJbmRl
eChtX2N1cnJlbnRGcmFtZSk7CisgICAgCisgICAgUGxhdGZvcm1JbWFnZShpbWFnZSkuZHJhdyhj
b250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgbV9zaXplLCBvcCwgbW9kZSwgb3JpZW50YXRpb24p
OworICAgIAorICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCisgICAgICAgIGltYWdlT2JzZXJ2ZXIo
KS0+ZGlkRHJhdyh0aGlzKTsKK30KKyAgICAKIHZvaWQgQml0bWFwSW1hZ2U6OmR1bXAoVGV4dFN0
cmVhbSYgdHMpIGNvbnN0CiB7CiAgICAgSW1hZ2U6OmR1bXAodHMpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKaW5kZXggMDc1ODkyOWNkODdmYWRh
Y2YwMmI2ZWQ4ZWVhZmU3ZGVmZDY2ZjBjNS4uMjIxOGM4MjRiNTI4ZmQ2MzliYWIxMzhkZWNjOThi
OTgxNmExNjgxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Qml0bWFwSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRt
YXBJbWFnZS5oCkBAIC0yOCwxMSArMjgsMTMgQEAKICNpZm5kZWYgQml0bWFwSW1hZ2VfaAogI2Rl
ZmluZSBCaXRtYXBJbWFnZV9oCiAKLSNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkNvbG9y
LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lRGF0YS5oIgogI2lu
Y2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgogI2lu
Y2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCiAKICNpZiBVU0Uo
Q0cpIHx8IFVTRShBUFBLSVQpCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtNDcsNjMg
KzQ5LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgSEJJVE1BUF9fICpIQklUTUFQOwogI2VuZGlmCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKLSAgICBzdHJ1Y3QgRnJhbWVEYXRhOwotfQotCi1uYW1lc3BhY2Ug
V1RGIHsKLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBWZWN0b3JUcmFpdHM8V2ViQ29yZTo6RnJhbWVE
YXRhPiA6IHB1YmxpYyBTaW1wbGVDbGFzc1ZlY3RvclRyYWl0cyB7Ci0gICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGNhbkluaXRpYWxpemVXaXRoTWVtc2V0ID0gZmFsc2U7IC8vIE5vdCBhbGwgRnJh
bWVEYXRhIG1lbWJlcnMgaW5pdGlhbGl6ZSB0byAwLgotICAgIH07Ci19Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgVGltZXI7CiAKLW5hbWVzcGFjZSBOYXRpdmVJbWFnZSB7Ci0gICAg
SW50U2l6ZSBzaXplKGNvbnN0IE5hdGl2ZUltYWdlUHRyJik7Ci0gICAgYm9vbCBoYXNBbHBoYShj
b25zdCBOYXRpdmVJbWFnZVB0ciYpOwotICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcihj
b25zdCBOYXRpdmVJbWFnZVB0ciYpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIEZyYW1lRGF0YSBDbGFzcwotLy8gPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXN0cnVjdCBGcmFtZURh
dGEgewotcHVibGljOgotICAgIEZyYW1lRGF0YSgpCi0gICAgICAgIDogbV9oYXZlTWV0YWRhdGEo
ZmFsc2UpCi0gICAgICAgICwgbV9pc0NvbXBsZXRlKGZhbHNlKQotICAgICAgICAsIG1faGFzQWxw
aGEodHJ1ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgfkZyYW1lRGF0YSgpCi0gICAgeyAKLSAgICAg
ICAgY2xlYXIodHJ1ZSk7Ci0gICAgfQotCi0gICAgLy8gQ2xlYXIgdGhlIGNhY2hlZCBpbWFnZSBk
YXRhIG9uIHRoZSBmcmFtZSwgYW5kIChvcHRpb25hbGx5KSB0aGUgbWV0YWRhdGEuCi0gICAgLy8g
UmV0dXJucyB3aGV0aGVyIHRoZXJlIHdhcyBjYWNoZWQgaW1hZ2UgZGF0YSB0byBjbGVhci4KLSAg
ICBib29sIGNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSk7Ci0gICAgCi0gICAgdW5zaWduZWQgdXNl
ZEZyYW1lQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlID8gbV9mcmFtZUJ5dGVzIDogMDsg
fQotCi0gICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsKLSAgICBJbWFnZU9yaWVudGF0aW9uIG1f
b3JpZW50YXRpb24geyBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbiB9OwotICAgIFN1YnNhbXBsaW5n
TGV2ZWwgbV9zdWJzYW1wbGluZ0xldmVsIHsgMCB9OwotICAgIGZsb2F0IG1fZHVyYXRpb24geyAw
IH07Ci0gICAgYm9vbCBtX2hhdmVNZXRhZGF0YSA6IDE7Ci0gICAgYm9vbCBtX2lzQ29tcGxldGUg
OiAxOwotICAgIGJvb2wgbV9oYXNBbHBoYSA6IDE7Ci0gICAgdW5zaWduZWQgbV9mcmFtZUJ5dGVz
IHsgMCB9OwotfTsKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLy8gQml0bWFwSW1hZ2UgQ2xhc3MKLS8vID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQogY2xhc3MgQml0bWFwSW1hZ2UgZmluYWwg
OiBwdWJsaWMgSW1hZ2UgewogICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFnZTsKICAgICBm
cmllbmQgY2xhc3MgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U7CkBAIC0xNTUsMTIgKzEwMyw2IEBA
IHB1YmxpYzoKICAgICBDRkRhdGFSZWYgZ2V0VElGRlJlcHJlc2VudGF0aW9uKCkgb3ZlcnJpZGU7
CiAjZW5kaWYKIAotI2lmIFVTRShDRykKLSAgICBXRUJDT1JFX0VYUE9SVCBDR0ltYWdlUmVmIGdl
dENHSW1hZ2VSZWYoKSBvdmVycmlkZTsKLSAgICBDR0ltYWdlUmVmIGdldEZpcnN0Q0dJbWFnZVJl
Zk9mU2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7Ci0gICAgUmV0YWluUHRyPENGQXJyYXlS
ZWY+IGdldENHSW1hZ2VBcnJheSgpIG92ZXJyaWRlOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShX
SU4pCiAgICAgYm9vbCBnZXRIQklUTUFQKEhCSVRNQVApIG92ZXJyaWRlOwogICAgIGJvb2wgZ2V0
SEJJVE1BUE9mU2l6ZShIQklUTUFQLCBjb25zdCBJbnRTaXplKikgb3ZlcnJpZGU7CkBAIC0xNzQs
OCArMTE2LDEzIEBAIHB1YmxpYzoKICAgICBFdmFzX09iamVjdCogZ2V0RXZhc09iamVjdChFdmFz
Kikgb3ZlcnJpZGU7CiAjZW5kaWYKIAorICAgIFdFQkNPUkVfRVhQT1JUIE5hdGl2ZUltYWdlUHRy
IG5hdGl2ZUltYWdlKCkgb3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VP
ZlNpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwogICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgb3ZlcnJpZGU7CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBv
cmllbnRhdGlvbkZvckN1cnJlbnRGcmFtZSgpIG92ZXJyaWRlIHsgcmV0dXJuIGZyYW1lT3JpZW50
YXRpb25BdEluZGV4KGN1cnJlbnRGcmFtZSgpKTsgfQorICAgIFZlY3RvcjxOYXRpdmVJbWFnZVB0
cj4gZnJhbWVzTmF0aXZlSW1hZ2VzKCkgb3ZlcnJpZGU7CisgICAgCisgICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBpc0FsbW9zdFNvbGlkQ29sb3IoKTsKIAogICAgIGJvb2wgY3VycmVudEZyYW1lS25v
d25Ub0JlT3BhcXVlKCkgb3ZlcnJpZGU7CiAKQEAgLTIxNSw3ICsxNjIsNiBAQCBwcm90ZWN0ZWQ6
CiAgICAgc2l6ZV90IGZyYW1lQ291bnQoKTsKIAogICAgIE5hdGl2ZUltYWdlUHRyIGZyYW1lSW1h
Z2VBdEluZGV4KHNpemVfdCwgZmxvYXQgcHJlc2VudGF0aW9uU2NhbGVIaW50ID0gMSk7Ci0gICAg
TmF0aXZlSW1hZ2VQdHIgY29weVVuc2NhbGVkRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90KTsKIAog
ICAgIGJvb2wgaGF2ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCk7CiAKQEAgLTIyNSwxMSArMTcx
LDEwIEBAIHByb3RlY3RlZDoKICAgICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3JpZW50YXRpb25B
dEluZGV4KHNpemVfdCk7CiAKICAgICAvLyBEZWNvZGVzIGFuZCBjYWNoZXMgYSBmcmFtZS4gTmV2
ZXIgYWNjZXNzZWQgZXhjZXB0IGludGVybmFsbHkuCi0gICAgZW51bSBJbWFnZUZyYW1lQ2FjaGlu
ZyB7IENhY2hlTWV0YWRhdGFPbmx5LCBDYWNoZU1ldGFkYXRhQW5kRnJhbWUgfTsKLSAgICB2b2lk
IGNhY2hlRnJhbWUoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lQ2Fj
aGluZyA9IENhY2hlTWV0YWRhdGFBbmRGcmFtZSk7CisgICAgdm9pZCBjYWNoZUZyYW1lKHNpemVf
dCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgPSBJbWFn
ZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSk7CiAKICAgICAvLyBDYWxsZWQg
YmVmb3JlIGFjY2Vzc2luZyBtX2ZyYW1lc1tpbmRleF0gZm9yIGluZm8gd2l0aG91dCBkZWNvZGlu
Zy4gUmV0dXJucyBmYWxzZSBvbiBpbmRleCBvdXQgb2YgYm91bmRzLgotICAgIGJvb2wgZW5zdXJl
RnJhbWVJc0NhY2hlZChzaXplX3QgaW5kZXgsIEltYWdlRnJhbWVDYWNoaW5nID0gQ2FjaGVNZXRh
ZGF0YUFuZEZyYW1lKTsKKyAgICBib29sIGVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4
LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyA9IEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRh
ZGF0YUFuZEltYWdlKTsKIAogICAgIC8vIENhbGxlZCB0byBpbnZhbGlkYXRlIGNhY2hlZCBkYXRh
LiBXaGVuIHxkZXN0cm95QWxsfCBpcyB0cnVlLCB3ZSB3aXBlIG91dAogICAgIC8vIHRoZSBlbnRp
cmUgZnJhbWUgYnVmZmVyIGNhY2hlIGFuZCB0ZWxsIHRoZSBpbWFnZSBzb3VyY2UgdG8gZGVzdHJv
eQpAQCAtMjkyLDcgKzIzNyw3IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBJbnRTaXplIG1fc2l6
ZVJlc3BlY3RpbmdPcmllbnRhdGlvbjsKIAogICAgIHNpemVfdCBtX2N1cnJlbnRGcmFtZSB7IDAg
fTsgLy8gVGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGZyYW1lIG9mIGFuaW1hdGlvbi4KLSAgICBW
ZWN0b3I8RnJhbWVEYXRhLCAxPiBtX2ZyYW1lczsgLy8gQW4gYXJyYXkgb2YgdGhlIGNhY2hlZCBm
cmFtZXMgb2YgdGhlIGFuaW1hdGlvbi4gV2UgaGF2ZSB0byByZWYgZnJhbWVzIHRvIHBpbiB0aGVt
IGluIHRoZSBjYWNoZS4KKyAgICBWZWN0b3I8SW1hZ2VGcmFtZURhdGEsIDE+IG1fZnJhbWVzOyAv
LyBBbiBhcnJheSBvZiB0aGUgY2FjaGVkIGZyYW1lcyBvZiB0aGUgYW5pbWF0aW9uLiBXZSBoYXZl
IHRvIHJlZiBmcmFtZXMgdG8gcGluIHRoZW0gaW4gdGhlIGNhY2hlLgogCiAgICAgc3RkOjp1bmlx
dWVfcHRyPFRpbWVyPiBtX2ZyYW1lVGltZXI7CiAgICAgaW50IG1fcmVwZXRpdGlvbkNvdW50IHsg
Y0FuaW1hdGlvbk5vbmUgfTsgLy8gSG93IG1hbnkgdG90YWwgYW5pbWF0aW9uIGxvb3BzIHdlIHNo
b3VsZCBkby4gVGhpcyB3aWxsIGJlIGNBbmltYXRpb25Ob25lIGlmIHRoaXMgaW1hZ2UgdHlwZSBp
cyBpbmNhcGFibGUgb2YgYW5pbWF0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwUGl4ZWxzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBQaXhlbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZmFlM2QyZTQwY2NmMWQ4MWY2YmE1
N2RiNjgyZDkyZDQ2OWJiYWMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwUGl4ZWxzLmgKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXpl
LmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCaXRtYXBQaXhlbHMgeworcHVibGlj
OgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Qml0bWFwUGl4ZWxzPiBjcmVhdGUoY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bWFrZV91bmlxdWU8Qml0bWFwUGl4ZWxzPihzaXplLCBwcmVtdWx0aXBseUFscGhh
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gY3Jl
YXRlKGNvbnN0IEJpdG1hcFBpeGVscyYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX3VuaXF1ZTxCaXRtYXBQaXhlbHM+KG90aGVyKTsKKyAgICB9CisKKyAgICBCaXRtYXBQ
aXhlbHMoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhID0gdHJ1ZSkK
KyAgICAgICAgOiBtX3ByZW11bHRpcGx5QWxwaGEocHJlbXVsdGlwbHlBbHBoYSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCghc2l6ZS5pc0VtcHR5KCkpOworICAgICAgICBzZXRTaXplKHNpemUpOwor
ICAgIH0KKworICAgIEJpdG1hcFBpeGVscyhjb25zdCBCaXRtYXBQaXhlbHMmIG90aGVyKQorICAg
IHsKKyAgICAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBvdGhlci5tX2JhY2tpbmdTdG9yZTsKKyAg
ICAgICAgbV9waXhlbHMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7CisgICAgICAgIG1fc2l6ZSA9
IG90aGVyLm1fc2l6ZTsKKyAgICAgICAgbV9yZWN0ID0gb3RoZXIubV9yZWN0OworICAgICAgICBt
X3ByZW11bHRpcGx5QWxwaGEgPSBvdGhlci5tX3ByZW11bHRpcGx5QWxwaGE7CisgICAgfQorCisg
ICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2UoKSBjb25zdDsKKworICAgIGJvb2wgc2V0U2l6ZShjb25z
dCBJbnRTaXplJiBzaXplKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS50cnlS
ZXNlcnZlQ2FwYWNpdHkoc2l6ZS5hcmVhKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgbV9iYWNraW5nU3RvcmUucmVzaXplKHNpemUuYXJlYSgpKTsKKyAg
ICAgICAgbV9waXhlbHMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7CisgICAgICAgIG1fc2l6ZSA9
IHNpemU7CisgICAgICAgIG1fcmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXplKTsKKyAg
ICAgICAgY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZv
aWQgc2V0UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFt
X3NpemUuaXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKGluQm91bmRzKHJlY3QpKTsKKyAgICAg
ICAgbV9yZWN0ID0gcmVjdDsKKyAgICB9CisgICAgCisgICAgSW50U2l6ZSBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplOyB9CisgICAgSW50UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9y
ZWN0OyB9CisKKyAgICBSR0JBMzIqIGF0KGludCB4LCBpbnQgeSkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3BpeGVscyArIHkgKiBtX3NpemUud2lkdGgoKSArIHg7CisgICAgfQorCisg
ICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtZW1zZXQobV9waXhlbHMsIDAsIG1fc2l6
ZS5hcmVhKCkgKiBzaXplb2YoUkdCQTMyKSk7CisgICAgfQorCisgICAgdm9pZCBjbGVhclJlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSB8
fCBpbkJvdW5kcyhyZWN0KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAg
IHNpemVfdCByZWN0V2lkdGhJbkJ5dGVzID0gcmVjdC53aWR0aCgpICogc2l6ZW9mKFJHQkEzMik7
CisgICAgICAgIFJHQkEzMiogc3RhcnQgPSBhdChyZWN0LngoKSwgcmVjdC55KCkpOworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QuaGVpZ2h0KCk7ICsraSkgeworICAgICAgICAgICAg
bWVtc2V0KHN0YXJ0LCAwLCByZWN0V2lkdGhJbkJ5dGVzKTsKKyAgICAgICAgICAgIHN0YXJ0ICs9
IG1fc2l6ZS53aWR0aCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCByZXBlYXRGaXJz
dFJvdyhjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHJlY3QuaXNFbXB0
eSgpIHx8IGluQm91bmRzKHJlY3QpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICAgICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkgKiBzaXplb2YoUkdC
QTMyKTsKKyAgICAgICAgUkdCQTMyKiBzcmMgPSBhdChyZWN0LngoKSwgcmVjdC55KCkpOworICAg
ICAgICBSR0JBMzIqIGRlc3QgPSBzcmMgKyBtX3NpemUud2lkdGgoKTsKKyAgICAgICAgZm9yIChp
bnQgaSA9IDE7IGkgPCByZWN0LmhlaWdodCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1lbWNweShk
ZXN0LCBzcmMsIHJlY3RXaWR0aEluQnl0ZXMpOworICAgICAgICAgICAgZGVzdCArPSBtX3NpemUu
d2lkdGgoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgc2V0UkdCQShpbnQgeCwgaW50
IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAg
eworICAgICAgICBzZXRSR0JBKGF0KHgsIHkpLCByLCBnLCBiLCBhKTsKKyAgICB9CisKKyAgICB2
b2lkIHNldFJHQkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25l
ZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEg
fHwgYSA+PSAyNTUpCisgICAgICAgICAgICAqZGVzdCA9IG1ha2VSR0JBKHIsIGcsIGIsIGEpOwor
ICAgICAgICBlbHNlIGlmICghYSkKKyAgICAgICAgICAgICpkZXN0ID0gMDsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgKmRlc3QgPSBtYWtlUHJlbXVsdGlwbGllZFJHQkEociwgZywgYiwgYSk7
CisgICAgfQorCisgICAgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIsIHVu
c2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAgeworICAgICAgICBpZiAoIWEp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoYSA+PSAyNTUgfHwg
IWFscGhhQ2hhbm5lbCgqZGVzdCkpIHsKKyAgICAgICAgICAgIHNldFJHQkEoZGVzdCwgciwgZywg
YiwgYSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmICghbV9wcmVtdWx0aXBseUFscGhhKQorICAgICAgICAgICAgKmRlc3QgPSBtYWtlUHJlbXVs
dGlwbGllZFJHQkEocmVkQ2hhbm5lbCgqZGVzdCksIGdyZWVuQ2hhbm5lbCgqZGVzdCksIGJsdWVD
aGFubmVsKCpkZXN0KSwgYWxwaGFDaGFubmVsKCpkZXN0KSk7CisgICAgICAgIAorICAgICAgICBS
R0JBMzIgc3JjID0gbWFrZVJHQkEociwgZywgYiwgYSk7CisgICAgICAgICpkZXN0ID0gQ29sb3Io
KmRlc3QpLmJsZW5kKHNyYykucmdiKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIW1fcHJlbXVs
dGlwbHlBbHBoYSkKKyAgICAgICAgICAgICpkZXN0ID0gbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEo
cmVkQ2hhbm5lbCgqZGVzdCksIGdyZWVuQ2hhbm5lbCgqZGVzdCksIGJsdWVDaGFubmVsKCpkZXN0
KSwgYWxwaGFDaGFubmVsKCpkZXN0KSk7CisgICAgfQorCisgICAgYm9vbCBpbkJvdW5kcyhjb25z
dCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSW50UmVjdChJ
bnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHBvaW50KTsKKyAgICB9CisKKyAgICBib29sIGlu
Qm91bmRzKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
SW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHJlY3QpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBWZWN0b3I8UkdCQTMyPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBSR0JBMzIqIG1f
cGl4ZWxzIHsgbnVsbHB0ciB9OworICAgIEludFNpemUgbV9zaXplOworICAgIEludFJlY3QgbV9y
ZWN0OyAvLyBUaGlzIHdpbGwgYWx3YXlzIGp1c3QgYmUgdGhlIGVudGlyZSBidWZmZXIgZXhjZXB0
IGZvciBHSUYgYW5kIFBORyBmcmFtZXMKKyAgICBib29sIG1fcHJlbXVsdGlwbHlBbHBoYSB7IHRy
dWUgfTsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cAppbmRleCA0ZTI1YWE2ZmQ3NGQxZTQ2YzU0MTYxNDk4YmMxNzJiZjYwMDg3NWQxLi40MzlmNWE2
M2M3YmViZTU2MDQyYjI0ZTdkNzJlY2NlY2YzNmM0MGM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCkBAIC00OSw2ICs0OSw0MCBAQCBjb25zdCBSR0JBMzIg
Q29sb3I6OnRyYW5zcGFyZW50Owogc3RhdGljIGNvbnN0IFJHQkEzMiBsaWdodGVuZWRCbGFjayA9
IDB4RkY1NDU0NTQ7CiBzdGF0aWMgY29uc3QgUkdCQTMyIGRhcmtlbmVkV2hpdGUgPSAweEZGQUJB
QkFCOwogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG11bHRpcGx5MjU1KHVuc2lnbmVkIGMpCit7
CisgICAgLy8gYyAqIDI1NQorICAgIC8vICAgPSBjICogKDI1NiAtIDEpCisgICAgLy8gICA9IGMg
KiAyNTYgLSBjCisgICAgcmV0dXJuIChjIDw8IDgpIC0gYzsKK30KKworc3RhdGljIGlubGluZSB1
bnNpZ25lZCBkaXZpZGUyNTUodW5zaWduZWQgYykKK3sKKyAgICAvLyBjIC8gMjU1CisgICAgLy8g
ICA9IGMgLyAyNTYgKiAoMSArIDEgLyAyNTUpCisgICAgLy8gICA9IChjICsgYyAvIDI1NSkgLyAy
NTYKKyAgICAvLyAgID0gKGMgKyAoYyArIGMgLyAyNTUpIC8gMjU2KSAvIDI1NgorICAgIC8vICAg
PSAoYyArIGMgLyAyNTYgKyBjIC8gKDI1NSB4IDI1NikpIC8gMjU2CisgICAgLy8gIH49IChjICsg
YyAvIDI1NiArIDEpIC8gMjU2CisgICAgcmV0dXJuIChjICsgKGMgPj4gOCkgKyAxKSA+PiA4Owor
fQorICAgIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBkaXZpZGVDZWlsKHVuc2lnbmVkIGMsIHVu
c2lnbmVkIGQpCit7CisgICAgcmV0dXJuIChjICsgZCAtIDEpIC8gZDsKK30KKyAgICAKK3N0YXRp
YyBpbmxpbmUgdW5zaWduZWQgcHJlbXVsdGlwbGllZENoYW5uZWwodW5zaWduZWQgYywgdW5zaWdu
ZWQgYSkKK3sKKyAgICByZXR1cm4gZGl2aWRlMjU1KGMgKiBhKTsKK30KKworc3RhdGljIGlubGlu
ZSB1bnNpZ25lZCB1bnByZW11bHRpcGxpZWRDaGFubmVsKHVuc2lnbmVkIGMsIHVuc2lnbmVkIGEp
Cit7CisgICAgcmV0dXJuIGRpdmlkZUNlaWwobXVsdGlwbHkyNTUoYyksIGEpOworfQorICAgIAog
UkdCQTMyIG1ha2VSR0IoaW50IHIsIGludCBnLCBpbnQgYikKIHsKICAgICByZXR1cm4gMHhGRjAw
MDAwMCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKHIsIDI1NSkpIDw8IDE2IHwgc3RkOjptYXgoMCwg
c3RkOjptaW4oZywgMjU1KSkgPDwgOCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGIsIDI1NSkpOwpA
QCAtNTksNiArOTMsMTYgQEAgUkdCQTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGlu
dCBhKQogICAgIHJldHVybiBzdGQ6Om1heCgwLCBzdGQ6Om1pbihhLCAyNTUpKSA8PCAyNCB8IHN0
ZDo6bWF4KDAsIHN0ZDo6bWluKHIsIDI1NSkpIDw8IDE2IHwgc3RkOjptYXgoMCwgc3RkOjptaW4o
ZywgMjU1KSkgPDwgOCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGIsIDI1NSkpOwogfQogCitSR0JB
MzIgbWFrZVByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQorewor
ICAgIHJldHVybiBtYWtlUkdCQShwcmVtdWx0aXBsaWVkQ2hhbm5lbChyLCBhKSwgcHJlbXVsdGlw
bGllZENoYW5uZWwoZywgYSksIHByZW11bHRpcGxpZWRDaGFubmVsKGIsIGEpLCBhKTsKK30KKyAg
ICAKK1JHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBp
bnQgYSkKK3sKKyAgICByZXR1cm4gbWFrZVJHQkEodW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChyLCBh
KSwgdW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBhKSwgdW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChi
LCBhKSwgYSk7Cit9CisgICAgCiBzdGF0aWMgaW50IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGZsb2F0
IGYpCiB7CiAgICAgLy8gV2UgdXNlIGxyb3VuZGYgYW5kIDI1NSBpbnN0ZWFkIG9mIG5leHRhZnRl
cmYoMjU2LCAwKSB0byBtYXRjaCBDRydzIHJvdW5kaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuaAppbmRleCBkZDI2MjcwYmI0NjYwYjMzYWUwNzBlOGM5NDQ1MjBkNzI4
NDU0YjhhLi5hNTQ1MzJjNzc1NWE3Yzg3NjkzNjI0MGNhZTRlYzM3YTRkYTBkMDQzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKQEAgLTU0LDYgKzU0LDggQEAgdHlw
ZWRlZiB1bnNpZ25lZCBSR0JBMzI7IC8vIERlcHJlY2F0ZWQ6IFR5cGUgZm9yIGFuIFJHQkEgcXVh
ZHJ1cGxldC4gVXNlIFJHQkEgY2wKIAogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VSR0IoaW50
IHIsIGludCBnLCBpbnQgYik7CiBXRUJDT1JFX0VYUE9SVCBSR0JBMzIgbWFrZVJHQkEoaW50IHIs
IGludCBnLCBpbnQgYiwgaW50IGEpOworV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VQcmVtdWx0
aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7CitXRUJDT1JFX0VYUE9SVCBS
R0JBMzIgbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEp
OwogCiBXRUJDT1JFX0VYUE9SVCBSR0JBMzIgY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShSR0JBMzIg
Y29sb3IsIGZsb2F0IG92ZXJyaWRlQWxwaGEpOwogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIGNvbG9y
V2l0aE92ZXJyaWRlQWxwaGEoUkdCQTMyIGNvbG9yLCBPcHRpb25hbDxmbG9hdD4gb3ZlcnJpZGVB
bHBoYSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAppbmRleCA3YTI5
OTkyZjc3MTg4ZTAzODI4ZDgwYTY1YjhiZTJjZDhkYzJkZTc2Li44ZTdiNTJiMWY0ZjMxYzc0YTNj
YjJhMTMyMTVkYTc3YTJiMThjMDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlLmgKQEAgLTEzNyw4ICsxMzcsMTEgQEAgcHVibGljOgogCiAgICAgZW51bSBUaWxlUnVs
ZSB7IFN0cmV0Y2hUaWxlLCBSb3VuZFRpbGUsIFNwYWNlVGlsZSwgUmVwZWF0VGlsZSB9OwogCisg
ICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSgpIHsgcmV0dXJuIG51bGxwdHI7
IH0KKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlT2ZTaXplKGNvbnN0IElu
dFNpemUmKSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBu
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICB2aXJ0
dWFsIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb25Gb3JDdXJyZW50RnJhbWUoKSB7IHJldHVy
biBJbWFnZU9yaWVudGF0aW9uKCk7IH0KKyAgICB2aXJ0dWFsIFZlY3RvcjxOYXRpdmVJbWFnZVB0
cj4gZnJhbWVzTmF0aXZlSW1hZ2VzKCkgeyByZXR1cm4geyB9OyB9CiAKICAgICAvLyBBY2Nlc3Nv
cnMgZm9yIG5hdGl2ZSBpbWFnZSBmb3JtYXRzLgogCkBAIC0xNTAsMTIgKzE1Myw2IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIENGRGF0YVJlZiBnZXRUSUZGUmVwcmVzZW50YXRpb24oKSB7IHJldHVy
biBudWxscHRyOyB9CiAjZW5kaWYKIAotI2lmIFVTRShDRykKLSAgICB2aXJ0dWFsIENHSW1hZ2VS
ZWYgZ2V0Q0dJbWFnZVJlZigpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIENHSW1h
Z2VSZWYgZ2V0Rmlyc3RDR0ltYWdlUmVmT2ZTaXplKGNvbnN0IEludFNpemUmKSB7IHJldHVybiBu
dWxscHRyOyB9Ci0gICAgdmlydHVhbCBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gZ2V0Q0dJbWFnZUFy
cmF5KCkgeyByZXR1cm4gbnVsbHB0cjsgfQotI2VuZGlmCi0KICNpZiBQTEFURk9STShXSU4pCiAg
ICAgdmlydHVhbCBib29sIGdldEhCSVRNQVAoSEJJVE1BUCkgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0SEJJVE1BUE9mU2l6ZShIQklUTUFQLCBjb25zdCBJbnRTaXplKikg
eyByZXR1cm4gZmFsc2U7IH0KQEAgLTE3OSw2ICsxNzYsOCBAQCBwdWJsaWM6CiAjaWYgIUFTU0VS
VF9ESVNBQkxFRAogICAgIHZpcnR1YWwgYm9vbCBub3RTb2xpZENvbG9yKCkgeyByZXR1cm4gdHJ1
ZTsgfQogI2VuZGlmCisgICAgCisgICAgdmlydHVhbCB2b2lkIGxheW91dElmTmVlZGVkKCkgeyB9
CiAKICAgICB2aXJ0dWFsIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3Q7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iZmQyMGNmOGU2MWY0YjFhMWZlMDhlYjMzMmI3MTY1N2YwMTQ4YzE1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURh
dGEuY3BwCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1l
RGF0YS5oIgorCisjaW5jbHVkZSAiQ29sb3IuaCIKKworI2lmIFVTRShDRykKKyNpbmNsdWRlICJJ
bWFnZURlY29kZXJDRy5oIgorI2Vsc2UKKyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKKyNlbmRp
ZgorCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0ltYWdlRnJhbWVEYXRhOjpJbWFnZUZyYW1lRGF0YSgpCit7Cit9CisKK0ltYWdlRnJhbWVEYXRh
OjpJbWFnZUZyYW1lRGF0YShOYXRpdmVJbWFnZVB0ciYmIGltYWdlKQorICAgIDogbV9zdGF0dXMo
RGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlKQorICAgICwgbV9pbWFnZShXVEZNb3ZlKGltYWdlKSkK
K3sKKyAgICBtX3NpemUgPSBQbGF0Zm9ybUltYWdlKG1faW1hZ2UpLnNpemUoKTsKKyAgICBtX2hh
c0FscGhhID0gUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5oYXNBbHBoYSgpOworfQorCitJbWFnZUZy
YW1lRGF0YTo6SW1hZ2VGcmFtZURhdGEoSW1hZ2VEZWNvZGVyJiBkZWNvZGVyLCBzaXplX3QgaW5k
ZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgQ2FjaGluZyBmcmFtZUNhY2hp
bmcpCit7CisgICAgQVNTRVJUKGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YSB8fCBm
cmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSk7CisgICAgCisgICAgaWYg
KGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpJbWFnZSB8fCBmcmFtZUNhY2hpbmcgPT0gQ2FjaGlu
Zzo6TWV0YWRhdGFBbmRJbWFnZSkgeworICAgICAgICBtX2ltYWdlID0gZGVjb2Rlci5jcmVhdGVG
cmFtZUltYWdlQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7CisgICAgICAgIG1fc3Vi
c2FtcGxpbmdMZXZlbCA9IHN1YnNhbXBsaW5nTGV2ZWw7CisgICAgfQorICAgIAorICAgIGlmIChm
cmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGEgfHwgZnJhbWVDYWNoaW5nID09IENhY2hp
bmc6Ok1ldGFkYXRhQW5kSW1hZ2UpIHsKKyAgICAgICAgbV9vcmllbnRhdGlvbiA9IGRlY29kZXIu
b3JpZW50YXRpb25BdEluZGV4KGluZGV4KTsKKyAgICAgICAgbV9zdGF0dXMgPSBkZWNvZGVyLmZy
YW1lSXNDb21wbGV0ZUF0SW5kZXgoaW5kZXgpID8gRGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlIDog
RGVjb2RpbmdTdGF0dXM6OlBhcnRpYWw7CisgICAgICAgIAorICAgICAgICBpZiAoZGVjb2Rlci5y
ZXBldGl0aW9uQ291bnQoKSAhPSBjQW5pbWF0aW9uTm9uZSkKKyAgICAgICAgICAgIG1fZHVyYXRp
b24gPSBkZWNvZGVyLmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KTsKKyAgICAgICAgCisgICAg
ICAgIG1faGFzQWxwaGEgPSBkZWNvZGVyLmZyYW1lSGFzQWxwaGFBdEluZGV4KGluZGV4KTsKKyAg
ICAgICAgbV9zaXplID0gZGVjb2Rlci5mcmFtZVNpemVBdEluZGV4KGluZGV4LCBzdWJzYW1wbGlu
Z0xldmVsKTsKKyAgICB9Cit9CisKK0ltYWdlRnJhbWVEYXRhOjp+SW1hZ2VGcmFtZURhdGEoKQor
eworICAgIGNsZWFyU3ViSW1hZ2VzKCk7Cit9CisgICAgCitJbWFnZUZyYW1lRGF0YSYgSW1hZ2VG
cmFtZURhdGE6Om9wZXJhdG9yPShjb25zdCBJbWFnZUZyYW1lRGF0YSYgb3RoZXIpCit7CisgICAg
aWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBtX3N0YXR1
cyA9IG90aGVyLm1fc3RhdHVzOworICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKKyAgICBtX2lt
YWdlID0gb3RoZXIubV9pbWFnZTsKKyAgICAKKyAgICBtX3BpeGVscyA9IG90aGVyLnBpeGVscygp
ID8gQml0bWFwUGl4ZWxzOjpjcmVhdGUoKm90aGVyLnBpeGVscygpKSA6IG51bGxwdHI7CisgICAg
CisgICAgbV9vcmllbnRhdGlvbiA9IG90aGVyLm1fb3JpZW50YXRpb247CisgICAgbV9zdWJzYW1w
bGluZ0xldmVsID0gb3RoZXIubV9zdWJzYW1wbGluZ0xldmVsOworICAgIG1fZHVyYXRpb24gPSBv
dGhlci5tX2R1cmF0aW9uOworICAgIG1faGFzQWxwaGEgPSBvdGhlci5tX2hhc0FscGhhOworICAg
IHJldHVybiAqdGhpczsKK30KKwordm9pZCBJbWFnZUZyYW1lRGF0YTo6Y2xlYXJTdWJJbWFnZXMo
KQoreworICAgIGlmICghbV9pbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFBsYXRm
b3JtSW1hZ2UobV9pbWFnZSkuY2xlYXJTdWJJbWFnZXMoKTsKK30KKwordW5zaWduZWQgSW1hZ2VG
cmFtZURhdGE6OmNsZWFyKENhY2hpbmcgZnJhbWVDYWNoaW5nKQoreworICAgIEFTU0VSVChmcmFt
ZUNhY2hpbmcgPT0gQ2FjaGluZzo6RW1wdHkgfHwgZnJhbWVDYWNoaW5nID09IENhY2hpbmc6Ok1l
dGFkYXRhKTsKKyAgICAKKyAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzID0gdGhpcy0+ZnJhbWVCeXRl
cygpOworICAgIAorICAgIGNsZWFyU3ViSW1hZ2VzKCk7CisgICAgCisgICAgaWYgKGZyYW1lQ2Fj
aGluZyA9PSBDYWNoaW5nOjpFbXB0eSkKKyAgICAgICAgKnRoaXMgPSBJbWFnZUZyYW1lRGF0YSgp
OworICAgIGVsc2UKKyAgICAgICAgbV9pbWFnZSA9IG51bGxwdHI7CisgICAgCisgICAgcmV0dXJu
IGZyYW1lQnl0ZXM7Cit9CisKK0NvbG9yIEltYWdlRnJhbWVEYXRhOjpzaW5nbGVQaXhlbFNvbGlk
Q29sb3IoKSBjb25zdAoreworICAgIGlmICghaGFzSW1hZ2UoKSB8fCBtX3NpemUgIT0gSW50U2l6
ZSgxLCAxKSkKKyAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgCisgICAgcmV0dXJuIFBsYXRm
b3JtSW1hZ2UobV9pbWFnZSkuc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCk7Cit9CisKK2Jvb2wgSW1h
Z2VGcmFtZURhdGE6OmlzQWxtb3N0U29saWRDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKCFoYXNJ
bWFnZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIFBsYXRmb3Jt
SW1hZ2UobV9pbWFnZSkuaXNBbG1vc3RTb2xpZENvbG9yKCk7Cit9CisgICAgCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mNmZiNzU4ZWYzYTQyNThjYmRiM2FlMmY0NmU4NDQwZjczMGVmNDdjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEu
aApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkJpdG1hcFBpeGVscy5oIgorI2lu
Y2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVk
ZSAiTmF0aXZlSW1hZ2VQdHIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb2xv
cjsKK2NsYXNzIEltYWdlRGVjb2RlcjsKKworLy8gU3Vic2FtcGxpbmdMZXZlbC4gMCBpcyBubyBz
dWJzYW1wbGluZywgMSBpcyBoYWxmIGRpbWVuc2lvbnMgb24gZWFjaCBheGlzIGV0Yy4KK3VzaW5n
IFN1YnNhbXBsaW5nTGV2ZWwgPSB1aW50OF90OworCitlbnVtIDogU3Vic2FtcGxpbmdMZXZlbCB7
CisgICAgTWluU3Vic2FtcGxpbmdMZXZlbCA9IDAsCisgICAgTWF4U3Vic2FtcGxpbmdMZXZlbCA9
IDMsCisgICAgRGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwgPSBNaW5TdWJzYW1wbGluZ0xldmVsCit9
OworCitjbGFzcyBJbWFnZUZyYW1lRGF0YSB7CisgICAgZnJpZW5kIGNsYXNzIEltYWdlRGVjb2Rl
cjsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIENhY2hpbmcgeyBFbXB0eSwgTWV0YWRhdGEsIElt
YWdlLCBNZXRhZGF0YUFuZEltYWdlIH07CisgICAgZW51bSBjbGFzcyBEZWNvZGluZ1N0YXR1cyB7
IEVtcHR5LCBQYXJ0aWFsLCBDb21wbGV0ZSB9OworICAgIAorICAgIEltYWdlRnJhbWVEYXRhKCk7
CisgICAgSW1hZ2VGcmFtZURhdGEoTmF0aXZlSW1hZ2VQdHImJik7CisgICAgSW1hZ2VGcmFtZURh
dGEoSW1hZ2VEZWNvZGVyJiwgc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsID0gRGVmYXVs
dFN1YnNhbXBsaW5nTGV2ZWwsIENhY2hpbmcgPSBDYWNoaW5nOjpNZXRhZGF0YUFuZEltYWdlKTsK
KyAgICBJbWFnZUZyYW1lRGF0YShjb25zdCBJbWFnZUZyYW1lRGF0YSYgb3RoZXIpIHsgb3BlcmF0
b3I9KG90aGVyKTsgfQorCisgICAgfkltYWdlRnJhbWVEYXRhKCk7CisKKyAgICBJbWFnZUZyYW1l
RGF0YSYgb3BlcmF0b3I9KGNvbnN0IEltYWdlRnJhbWVEYXRhJiBvdGhlcik7CisgICAgCisgICAg
dW5zaWduZWQgY2xlYXIoQ2FjaGluZyk7CisgICAgQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9y
KCkgY29uc3Q7CisgICAgYm9vbCBpc0FsbW9zdFNvbGlkQ29sb3IoKSBjb25zdDsKKyAgICAKKyAg
ICBEZWNvZGluZ1N0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQorICAg
IGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzID09IERlY29kaW5nU3Rh
dHVzOjpDb21wbGV0ZTsgfQorICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGhhc1Bp
eGVscygpID8gcGl4ZWxzKCktPnNpemUoKSA6IG1fc2l6ZTsgfQorICAgIHVuc2lnbmVkIGZyYW1l
Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBoYXNJbWFnZSgpID8gbV9zaXplLmFyZWEoKSAqIHNpemVv
ZihSR0JBMzIpIDogMDsgfQorICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlKCkgY29uc3QgeyByZXR1
cm4gbV9pbWFnZTsgfQorICAgIEJpdG1hcFBpeGVscyogcGl4ZWxzKCkgY29uc3QgeyByZXR1cm4g
bV9waXhlbHMgPyBtX3BpeGVscy5nZXQoKSA6IG51bGxwdHI7IH0KKyAgICAKKyAgICBJbWFnZU9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9vcmllbnRhdGlvbjsgfQor
ICAgIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3Vic2FtcGxpbmdMZXZlbDsgfQorICAgIGZsb2F0IGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9kdXJhdGlvbjsgfQorICAgIAorICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiBt
X2hhc0FscGhhOyB9CisgICAgYm9vbCBoYXNJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7
IH0KKyAgICBib29sIGhhc01ldGFkYXRhKCkgY29uc3QgeyByZXR1cm4gIW1fc2l6ZS5pc0VtcHR5
KCk7IH0KKyAgICBib29sIGhhc1BpeGVscygpIGNvbnN0IHsgcmV0dXJuIHBpeGVscygpOyB9Cisg
ICAgCitwcml2YXRlOgorICAgIHZvaWQgY2xlYXJTdWJJbWFnZXMoKTsKKworICAgIHZvaWQgc2V0
U3RhdHVzKERlY29kaW5nU3RhdHVzIHN0YXR1cykgeyBtX3N0YXR1cyA9IHN0YXR1czsgfQorICAg
IHZvaWQgc2V0T3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgeyBtX29y
aWVudGF0aW9uID0gb3JpZW50YXRpb247IH07CisgICAgdm9pZCBzZXREdXJhdGlvbih1bnNpZ25l
ZCBkdXJhdGlvbikgeyBtX2R1cmF0aW9uID0gZHVyYXRpb247IH0KKyAgICB2b2lkIHNldEhhc0Fs
cGhhKGJvb2wgaGFzQWxwaGEpIHsgbV9oYXNBbHBoYSA9IGhhc0FscGhhOyB9CisgICAgCisgICAg
RGVjb2RpbmdTdGF0dXMgbV9zdGF0dXMgeyBEZWNvZGluZ1N0YXR1czo6RW1wdHkgfTsKKyAgICBJ
bnRTaXplIG1fc2l6ZTsKKyAgICBOYXRpdmVJbWFnZVB0ciBtX2ltYWdlOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxCaXRtYXBQaXhlbHM+IG1fcGl4ZWxzOworICAgIAorICAgIEltYWdlT3JpZW50YXRp
b24gbV9vcmllbnRhdGlvbiB7IERlZmF1bHRJbWFnZU9yaWVudGF0aW9uIH07CisgICAgU3Vic2Ft
cGxpbmdMZXZlbCBtX3N1YnNhbXBsaW5nTGV2ZWwgeyAwIH07CisgICAgZmxvYXQgbV9kdXJhdGlv
biB7IDAgfTsKKyAgICBib29sIG1faGFzQWxwaGEgeyB0cnVlIH07Cit9OworICAgIAorfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCmluZGV4
IGRkZDhhNTViYTA5MDZjNTg2NmExOTJjZjhlNDE0ZWE3MDdiNzI4YWMuLjgyZjZlMmQ2ZTQ1NDMz
ZGExYTdkNTZiMzcwZGZhNjFhNGM0MTkxMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKQEAgLTIyNCw2ICsyMjQsMTEgQEAgTmF0aXZl
SW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRl
eCwgU3Vic2FtcGxpbmdMZXYKICAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSA/IG1fZGVjb2Rlci0+
Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpIDogbnVsbHB0
cjsKIH0KIAorSW1hZ2VGcmFtZURhdGEgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lRGF0YUF0SW5k
ZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIEltYWdl
RnJhbWVEYXRhOjpDYWNoaW5nIGNhY2hpbmcpCit7CisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkg
PyBJbWFnZUZyYW1lRGF0YSgqbV9kZWNvZGVyLCBpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgY2Fj
aGluZykgOiBJbWFnZUZyYW1lRGF0YSgpOworfQorICAgIAogdm9pZCBJbWFnZVNvdXJjZTo6ZHVt
cChUZXh0U3RyZWFtJiB0cykgY29uc3QKIHsKICAgICBpZiAobV9hbGxvd1N1YnNhbXBsaW5nKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKaW5kZXgg
NjAzNTczOWI3ZThiMDk2ZGM4ZGZlOWM1MzBhNDJjNmYyOTFiZGEwMC4uYTQwYzdjZTkzMDdjZGFk
ZjA3OWFiNzAxYTgyNzk5YjY5MDUyOWQ0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaWZuZGVmIEltYWdl
U291cmNlX2gKICNkZWZpbmUgSW1hZ2VTb3VyY2VfaAogCisjaW5jbHVkZSAiSW1hZ2VGcmFtZURh
dGEuaCIKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW50UG9pbnQu
aCIKICNpbmNsdWRlICJOYXRpdmVJbWFnZVB0ci5oIgpAQCAtNjMsOSArNjQsNiBAQCBjb25zdCBp
bnQgY0FuaW1hdGlvbkxvb3BPbmNlID0gMDsKIGNvbnN0IGludCBjQW5pbWF0aW9uTG9vcEluZmlu
aXRlID0gLTE7CiBjb25zdCBpbnQgY0FuaW1hdGlvbk5vbmUgPSAtMjsKIAotLy8gU3Vic2FtcGxp
bmdMZXZlbC4gMCBpcyBubyBzdWJzYW1wbGluZywgMSBpcyBoYWxmIGRpbWVuc2lvbnMgb24gZWFj
aCBheGlzIGV0Yy4KLXR5cGVkZWYgc2hvcnQgU3Vic2FtcGxpbmdMZXZlbDsKLQogY2xhc3MgSW1h
Z2VTb3VyY2UgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlU291cmNlKTsKICAgICBm
cmllbmQgY2xhc3MgQml0bWFwSW1hZ2U7CkBAIC0xMzIsMTggKzEzMCwxOSBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBhbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoc2l6ZV90KSBjb25zdDsKICAg
ICAKICAgICAvLyBTaXplIG9mIG9wdGlvbmFsbHkgc3Vic2FtcGxlZCBmcmFtZS4KLSAgICBJbnRT
aXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gMCwgUmVzcGVj
dEltYWdlT3JpZW50YXRpb25FbnVtID0gRG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikgY29u
c3Q7CisgICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZl
bCA9IERlZmF1bHRTdWJzYW1wbGluZ0xldmVsLCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0g
PSBEb05vdFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKSBjb25zdDsKICAgICAKICAgICAvLyBSZXR1
cm4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgZGVjb2RlZCBmcmFtZS4gSWYgdGhlIGZyYW1l
IGlzIG5vdCB5ZXQKICAgICAvLyBkZWNvZGVkIHRoZW4gcmV0dXJuIDAuCi0gICAgdW5zaWduZWQg
ZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gMCkgY29uc3Q7Cisg
ICAgdW5zaWduZWQgZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0g
RGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0OwogICAgIAogICAgIGZsb2F0IGZyYW1lRHVy
YXRpb25BdEluZGV4KHNpemVfdCk7CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkF0
SW5kZXgoc2l6ZV90KSBjb25zdDsgLy8gRVhJRiBpbWFnZSBvcmllbnRhdGlvbgogICAgIAogICAg
IC8vIENhbGxlcnMgc2hvdWxkIG5vdCBjYWxsIHRoaXMgYWZ0ZXIgY2FsbGluZyBjbGVhcigpIHdp
dGggYSBoaWdoZXIgaW5kZXg7CiAgICAgLy8gc2VlIGNvbW1lbnRzIG9uIGNsZWFyKCkgYWJvdmUu
Ci0gICAgTmF0aXZlSW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90LCBTdWJz
YW1wbGluZ0xldmVsID0gMCk7CisgICAgTmF0aXZlSW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0
SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gRGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwp
OworICAgIEltYWdlRnJhbWVEYXRhIGNyZWF0ZUZyYW1lRGF0YUF0SW5kZXgoc2l6ZV90LCBTdWJz
YW1wbGluZ0xldmVsID0gRGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlRnJhbWVEYXRhOjpD
YWNoaW5nID0gSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOwogICAg
IAogcHJpdmF0ZToKICAgICB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmFiN2FlYTQ4OWYzZWIyYTgyODc3MWMyMTAzZThkNGQwYmUxN2JlNWQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdl
LmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKyNp
bmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb2xvcjsKK2NsYXNzIEZsb2F0UmVjdDsK
K2NsYXNzIEludFNpemU7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CisKK2NsYXNzIFBsYXRmb3Jt
SW1hZ2UgeworcHVibGljOgorICAgIFBsYXRmb3JtSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHIm
IGltYWdlKQorICAgICAgICA6IG1faW1hZ2UoaW1hZ2UpCisgICAgeworICAgIH0KKworICAgIGJv
b2wgaXNOaWwoKSBjb25zdCB7IHJldHVybiAhbV9pbWFnZTsgfQorICAgIHZvaWQgY2xlYXJTdWJJ
bWFnZXMoKTsKKworICAgIEludFNpemUgc2l6ZSgpIGNvbnN0OworICAgIGJvb2wgaGFzQWxwaGEo
KSBjb25zdDsKKyAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdDsKKyAgICBi
b29sIGlzQWxtb3N0U29saWRDb2xvcigpIGNvbnN0OworICAgIHZvaWQgZHJhdyhHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUs
IGNvbnN0IEltYWdlT3JpZW50YXRpb24mKSBjb25zdDsKKworICAgIHN0YXRpYyBmbG9hdCBzdWJz
YW1wbGluZ1NjYWxlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCk7CisKK3ByaXZhdGU6CisjaWYgVVNFKENHKQorICAg
IENHSW1hZ2VSZWYgY2dJbWFnZVJlZigpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UgPyBtX2ltYWdl
LmdldCgpIDogbnVsbHB0cjsgfQorI2VuZGlmCisgICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsK
K307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbQppbmRleCBmNGMxNDU3YmJiMjU1NzU0
ZjAwYTA2MjVlZTgzZTA0ZGE3YzZlZmNmLi5kNTIwZjVkNTg1YWM2MGRiYWVlMjU1ZTFiODNjMjRk
YzY4NzIxMGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCkBAIC0yMTIsNyArMjEyLDcg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnVwZGF0ZURpc3Bs
YXlNb2RlKCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgbV9wYXVzZWRJbWFnZSA9IGltYWdlLT5nZXRDR0ltYWdlUmVm
KCk7CisgICAgICAgICAgICAgICAgbV9wYXVzZWRJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgpOwogICAgICAgICAgICAgICAgIGlmICghbV9wYXVzZWRJbWFnZSkgewog
ICAgICAgICAgICAgICAgICAgICBtX2Rpc3BsYXlNb2RlID0gUGFpbnRJdEJsYWNrOwogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDE3NzIyYmVjNTNhYjhhMDhhOGRhODUyOGI5ZTBkN2M0ZDBjZDQx
MzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCaXRt
YXBJbWFnZS5oIgotCi0jaWYgVVNFKENBSVJPKQotCi0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMu
aCIKLSNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0
Q2Fpcm8uaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIE5hdGl2ZUltYWdlIHsKLQotSW50U2l6ZSBzaXpl
KGNvbnN0IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiBpbWFnZSkKLXsKLSAgICByZXR1cm4gY2Fp
cm9TdXJmYWNlU2l6ZShpbWFnZS5nZXQoKSk7Ci19Ci0KLWJvb2wgaGFzQWxwaGEoY29uc3QgUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4mIGltYWdlKQotewotICAgIHJldHVybiBjYWlyb19zdXJmYWNl
X2dldF9jb250ZW50KGltYWdlLmdldCgpKSAhPSBDQUlST19DT05URU5UX0NPTE9SOwotfQotCi1D
b2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoY29uc3QgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4m
IGltYWdlKQotewotICAgIEFTU0VSVChpbWFnZSk7Ci0gICAgCi0gICAgaWYgKE5hdGl2ZUltYWdl
OjpzaXplKGltYWdlKSAhPSBJbnRTaXplKDEsIDEpKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsK
LQotICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKGltYWdlLmdldCgpKSAhPSBDQUlST19T
VVJGQUNFX1RZUEVfSU1BR0UpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotCi0gICAgUkdCQTMy
KiBwaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFJHQkEzMio+KGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X2RhdGEoaW1hZ2UuZ2V0KCkpKTsKLSAgICByZXR1cm4gY29sb3JGcm9tUHJlbXVsdGlw
bGllZEFSR0IoKnBpeGVsKTsKLX0KLQotfQotCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCwKLSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJ
bWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pCi17Ci0gICAgaWYgKCFkc3Qu
d2lkdGgoKSB8fCAhZHN0LmhlaWdodCgpIHx8ICFzcmMud2lkdGgoKSB8fCAhc3JjLmhlaWdodCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGFydEFuaW1hdGlvbigpOwotCi0gICAgYXV0byBz
dXJmYWNlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwotICAgIGlmICghc3Vy
ZmFjZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCi0g
ICAgICAgIHJldHVybjsKLQotICAgIENvbG9yIGNvbG9yID0gc2luZ2xlUGl4ZWxTb2xpZENvbG9y
KCk7Ci0gICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBmaWxsV2l0aFNvbGlkQ29s
b3IoY29udGV4dCwgZHN0LCBjb2xvciwgb3ApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgY29udGV4dC5zYXZlKCk7Ci0KLSAgICAvLyBTZXQgdGhlIGNvbXBvc2l0aW5nIG9wZXJhdGlv
bi4KLSAgICBpZiAob3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciAmJiBibGVuZE1vZGUgPT0gQmxl
bmRNb2RlTm9ybWFsICYmICFmcmFtZUhhc0FscGhhQXRJbmRleChtX2N1cnJlbnRGcmFtZSkpCi0g
ICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOwotICAg
IGVsc2UKLSAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3AsIGJsZW5kTW9k
ZSk7Ci0KLSNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQotICAgIEludFNp
emUgc2NhbGVkU2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUoc3VyZmFjZS5nZXQoKSk7Ci0gICAgRmxv
YXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGxpbmco
c3JjLCBzY2FsZWRTaXplKTsKLSNlbHNlCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdChz
cmMpOwotI2VuZGlmCi0KLSAgICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3JpZW50YXRpb24oZGVz
Y3JpcHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKTsKLSAgICBpZiAoZGVzY3JpcHRpb24ucmVzcGVj
dEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikKLSAgICAgICAg
ZnJhbWVPcmllbnRhdGlvbiA9IGZyYW1lT3JpZW50YXRpb25BdEluZGV4KG1fY3VycmVudEZyYW1l
KTsKLQotICAgIEZsb2F0UmVjdCBkc3RSZWN0ID0gZHN0OwotCi0gICAgaWYgKGZyYW1lT3JpZW50
YXRpb24gIT0gRGVmYXVsdEltYWdlT3JpZW50YXRpb24pIHsKLSAgICAgICAgLy8gSW1hZ2VPcmll
bnRhdGlvbiBleHBlY3RzIHRoZSBvcmlnaW4gdG8gYmUgYXQgKDAsIDApLgotICAgICAgICBjb250
ZXh0LnRyYW5zbGF0ZShkc3RSZWN0LngoKSwgZHN0UmVjdC55KCkpOwotICAgICAgICBkc3RSZWN0
LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoKSk7Ci0gICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKGZy
YW1lT3JpZW50YXRpb24udHJhbnNmb3JtRnJvbURlZmF1bHQoZHN0UmVjdC5zaXplKCkpKTsKLSAg
ICAgICAgaWYgKGZyYW1lT3JpZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSkgewotICAgICAg
ICAgICAgLy8gVGhlIGRlc3RpbmF0aW9uIHJlY3RhbmdsZSB3aWxsIGhhdmUgaXQncyB3aWR0aCBh
bmQgaGVpZ2h0IGFscmVhZHkgcmV2ZXJzZWQgZm9yIHRoZSBvcmllbnRhdGlvbiBvZgotICAgICAg
ICAgICAgLy8gdGhlIGltYWdlLCBhcyBpdCB3YXMgbmVlZGVkIGZvciBwYWdlIGxheW91dCwgc28g
d2UgbmVlZCB0byByZXZlcnNlIGl0IGJhY2sgaGVyZS4KLSAgICAgICAgICAgIGRzdFJlY3QgPSBG
bG9hdFJlY3QoZHN0UmVjdC54KCksIGRzdFJlY3QueSgpLCBkc3RSZWN0LmhlaWdodCgpLCBkc3RS
ZWN0LndpZHRoKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29udGV4dC5wbGF0Zm9ybUNv
bnRleHQoKS0+ZHJhd1N1cmZhY2VUb0NvbnRleHQoc3VyZmFjZS5nZXQoKSwgZHN0UmVjdCwgYWRq
dXN0ZWRTcmNSZWN0LCBjb250ZXh0KTsKLQotICAgIGNvbnRleHQucmVzdG9yZSgpOwotCi0gICAg
aWYgKGltYWdlT2JzZXJ2ZXIoKSkKLSAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRo
aXMpOwotfQotCi1ib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQotewot
ICAgIGlmIChjbGVhck1ldGFkYXRhKQotICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOwot
Ci0gICAgaWYgKG1faW1hZ2UpIHsKLSAgICAgICAgbV9pbWFnZSA9IG51bGxwdHI7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjcwYWRhZWMyNzBlMzFiMDU0YWZjNWY2NmQ0ODI4OGFlYmYwNjFlM2EK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJD
YWlyb1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCisjaW5j
bHVkZSA8Y2Fpcm8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFBsYXRmb3JtSW1h
Z2U6OmNsZWFyU3ViSW1hZ2VzKCkKK3sKK30KKworSW50U2l6ZSBQbGF0Zm9ybUltYWdlOjpzaXpl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNOaWwoKSA/IEludFNpemUoKSA6IGNhaXJvU3VyZmFj
ZVNpemUobV9pbWFnZS5nZXQoKSk7Cit9CisKK2Jvb2wgUGxhdGZvcm1JbWFnZTo6aGFzQWxwaGEo
KSBjb25zdAoreworICAgIHJldHVybiBpc05pbCgpIHx8IGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRl
bnQobV9pbWFnZS5nZXQoKSkgIT0gQ0FJUk9fQ09OVEVOVF9DT0xPUjsKK30KKworQ29sb3IgUGxh
dGZvcm1JbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3QKK3sKKyAgICBpZiAoaXNO
aWwoKSB8fCBzaXplKCkgIT0gSW50U2l6ZSgxLCAxKSkKKyAgICAgICAgcmV0dXJuIENvbG9yKCk7
CisKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShtX2ltYWdlLmdldCgpKSAhPSBDQUlS
T19TVVJGQUNFX1RZUEVfSU1BR0UpCisgICAgICAgIHJldHVybiBDb2xvcigpOworCisgICAgUkdC
QTMyKiBwaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFJHQkEzMio+KGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2RhdGEobV9pbWFnZS5nZXQoKSkpOworICAgIHJldHVybiBjb2xvckZyb21QcmVt
dWx0aXBsaWVkQVJHQigqcGl4ZWwpOworfQorCitib29sIFBsYXRmb3JtSW1hZ2U6OmlzQWxtb3N0
U29saWRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitmbG9hdCBQbGF0
Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYpCit7CisgICAgcmV0dXJuIDE7Cit9CisKK3ZvaWQgUGxh
dGZvcm1JbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50U2l6ZSYsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSwgY29uc3QgSW1hZ2VPcmllbnRhdGlv
biYgb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgY29udGV4dC5zYXZlKCk7CisgICAgCisgICAg
Ly8gU2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCisgICAgaWYgKG9wID09IENvbXBvc2l0
ZVNvdXJjZU92ZXIgJiYgbW9kZSA9PSBCbGVuZE1vZGVOb3JtYWwgJiYgIWhhc0FscGhhKCkpCisg
ICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOworICAg
IGVsc2UKKyAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3AsIG1vZGUpOwor
ICAgICAgICAKKyNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQorICAgIElu
dFNpemUgc2NhbGVkU2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUobV9pbWFnZS5nZXQoKSk7CisgICAg
RmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGxp
bmcoc3JjUmVjdCwgc2NhbGVkU2l6ZSk7CisjZWxzZQorICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNy
Y1JlY3Qoc3JjUmVjdCk7CisjZW5kaWYKKyAgICAgICAgCisgICAgRmxvYXRSZWN0IGFkanVzdGVk
RGVzdFJlY3QgPSBkZXN0UmVjdDsKKyAgICAgICAgCisgICAgaWYgKG9yaWVudGF0aW9uICE9IERl
ZmF1bHRJbWFnZU9yaWVudGF0aW9uKSB7CisgICAgICAgIC8vIEltYWdlT3JpZW50YXRpb24gZXhw
ZWN0cyB0aGUgb3JpZ2luIHRvIGJlIGF0ICgwLCAwKS4KKyAgICAgICAgY29udGV4dC50cmFuc2xh
dGUoZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCkpOworICAgICAgICBhZGp1c3RlZERlc3RSZWN0
LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoKSk7CisgICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKG9y
aWVudGF0aW9uLnRyYW5zZm9ybUZyb21EZWZhdWx0KGFkanVzdGVkRGVzdFJlY3Quc2l6ZSgpKSk7
CisgICAgICAgIGlmIChvcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpKSB7CisgICAgICAg
ICAgICAvLyBUaGUgZGVzdGluYXRpb24gcmVjdGFuZ2xlIHdpbGwgaGF2ZSBpdCdzIHdpZHRoIGFu
ZCBoZWlnaHQgYWxyZWFkeSByZXZlcnNlZCBmb3IgdGhlIG9yaWVudGF0aW9uIG9mCisgICAgICAg
ICAgICAvLyB0aGUgaW1hZ2UsIGFzIGl0IHdhcyBuZWVkZWQgZm9yIHBhZ2UgbGF5b3V0LCBzbyB3
ZSBuZWVkIHRvIHJldmVyc2UgaXQgYmFjayBoZXJlLgorICAgICAgICAgICAgYWRqdXN0ZWREZXN0
UmVjdC5zZXRTaXplKGFkanVzdGVkRGVzdFJlY3Quc2l6ZSgpLnRyYW5zcG9zZWRTaXplKCkpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1N1
cmZhY2VUb0NvbnRleHQobV9pbWFnZS5nZXQoKSwgYWRqdXN0ZWREZXN0UmVjdCwgYWRqdXN0ZWRT
cmNSZWN0LCBjb250ZXh0KTsKKworICAgIGNvbnRleHQucmVzdG9yZSgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2M4MWExNzBiZTc5YWU2YmU2Y2FjZGM5OWY0YzM5OGNh
YWY0MjZkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMjA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkJpdG1hcEltYWdlLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJDb3JlR3JhcGhp
Y3NTUEkuaCIKLSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJHZW9tZXRy
eVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVkZSAi
SW1hZ2VPYnNlcnZlci5oIgotI2luY2x1ZGUgIlN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCIKLSNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLSNpZiBVU0UoQVBQS0lUKQotI2luY2x1ZGUgPEFw
cGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgotI2VuZGlmCi0KLSNpZiBQ
TEFURk9STShDT0NPQSkKLSNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0jZW5k
aWYKLQotI2lmIFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2Uv
V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1uYW1lc3BhY2UgTmF0aXZlSW1hZ2UgewotCi1JbnRTaXplIHNpemUoY29uc3QgUmV0YWluUHRy
PENHSW1hZ2VSZWY+JiBpbWFnZSkKLXsKLSAgICBBU1NFUlQoaW1hZ2UpOwotICAgIHJldHVybiBJ
bnRTaXplKENHSW1hZ2VHZXRXaWR0aChpbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQoaW1h
Z2UuZ2V0KCkpKTsKLX0KLQotYm9vbCBoYXNBbHBoYShjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4mKQotewotICAgIC8vIEZJWE1FOiBBbnN3ZXIgY29ycmVjdGx5IHRoZSBxdWVzdGlvbjogZG9l
cyB0aGUgQ0dJbWFnZVJlZiBoYXZlIGFscGhhIGNoYW5ubmVsPwotICAgIHJldHVybiB0cnVlOwot
fQotICAgIAotQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKGNvbnN0IFJldGFpblB0cjxDR0lt
YWdlUmVmPiYgaW1hZ2UpCi17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICAKLSAgICBpZiAoTmF0
aXZlSW1hZ2U6OnNpemUoaW1hZ2UpICE9IEludFNpemUoMSwgMSkpCi0gICAgICAgIHJldHVybiBD
b2xvcigpOwotICAgIAotICAgIHVuc2lnbmVkIGNoYXIgcGl4ZWxbNF07IC8vIFJHQkEKLSAgICBh
dXRvIGJpdG1hcENvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShwaXhlbCwg
MSwgMSwgOCwgc2l6ZW9mKHBpeGVsKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwKLSAgICAgICAga0NH
SW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcpKTsK
LQotICAgIGlmICghYml0bWFwQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0gICAg
Ci0gICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGJpdG1hcENvbnRleHQuZ2V0KCksIGtDR0JsZW5k
TW9kZUNvcHkpOwotICAgIENHQ29udGV4dERyYXdJbWFnZShiaXRtYXBDb250ZXh0LmdldCgpLCBD
R1JlY3RNYWtlKDAsIDAsIDEsIDEpLCBpbWFnZS5nZXQoKSk7Ci0gICAgCi0gICAgaWYgKCFwaXhl
bFszXSkKLSAgICAgICAgcmV0dXJuIENvbG9yKDAsIDAsIDAsIDApOwotCi0gICAgcmV0dXJuIENv
bG9yKHBpeGVsWzBdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICogMjU1IC8gcGl4ZWxbM10s
IHBpeGVsWzJdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKLX0KLQotfQotCi1ib29sIEZy
YW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQotewotICAgIGlmIChjbGVhck1ldGFk
YXRhKQotICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOwotCi0gICAgbV9zdWJzYW1wbGlu
Z0xldmVsID0gMDsKLQotICAgIGlmIChtX2ltYWdlKSB7Ci0jaWYgQ0FDSEVfU1VCSU1BR0VTCi0g
ICAgICAgIHN1YmltYWdlQ2FjaGUoKS5jbGVhckltYWdlKG1faW1hZ2UuZ2V0KCkpOwotI2VuZGlm
Ci0gICAgICAgIG1faW1hZ2UgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1DR0ltYWdlUmVmIEJpdG1hcEltYWdlOjpnZXRDR0lt
YWdlUmVmKCkKLXsKLSAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCkuZ2V0KCk7Ci19Ci0K
LUNHSW1hZ2VSZWYgQml0bWFwSW1hZ2U6OmdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6ZShjb25zdCBJ
bnRTaXplJiBzaXplKQotewotICAgIHNpemVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgQ0dJbWFnZVJlZiBj
Z0ltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkuZ2V0KCk7Ci0gICAgICAgIGlmIChjZ0ltYWdl
ICYmIEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGNnSW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGNn
SW1hZ2UpKSA9PSBzaXplKQotICAgICAgICAgICAgcmV0dXJuIGNnSW1hZ2U7Ci0gICAgfQotCi0g
ICAgLy8gRmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgQ0dJbWFnZVJlZiBpZiB3ZSBjYW4ndCBmaW5k
IHRoZSByaWdodCBzaXplCi0gICAgcmV0dXJuIGdldENHSW1hZ2VSZWYoKTsKLX0KLQotUmV0YWlu
UHRyPENGQXJyYXlSZWY+IEJpdG1hcEltYWdlOjpnZXRDR0ltYWdlQXJyYXkoKQotewotICAgIHNp
emVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKLSAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICAKLSAgICBDRk11dGFibGVBcnJheVJlZiBhcnJheSA9IENGQXJyYXlD
cmVhdGVNdXRhYmxlKE5VTEwsIGNvdW50LCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKENHSW1hZ2VS
ZWYgY3VyckZyYW1lID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkuZ2V0KCkpCi0gICAgICAgICAgICBD
RkFycmF5QXBwZW5kVmFsdWUoYXJyYXksIGN1cnJGcmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBh
ZG9wdENGKGFycmF5KTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQmIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3AsIEJsZW5kTW9kZSBibGVuZE1vZGUs
IEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikKLXsKLSNpZiBQTEFURk9S
TShJT1MpCi0gICAgc3RhcnRBbmltYXRpb24oRG9Ob3RDYXRjaFVwKTsKLSNlbHNlCi0gICAgc3Rh
cnRBbmltYXRpb24oKTsKLSNlbmRpZgotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdl
OwotICAgIC8vIE5ldmVyIHVzZSBzdWJzYW1wbGVkIGltYWdlcyBmb3IgZHJhd2luZyBpbnRvIFBE
RiBjb250ZXh0cy4KLSAgICBpZiAod2tDR0NvbnRleHRJc1BERkNvbnRleHQoY3R4dC5wbGF0Zm9y
bUNvbnRleHQoKSkpCi0gICAgICAgIGltYWdlID0gY29weVVuc2NhbGVkRnJhbWVJbWFnZUF0SW5k
ZXgobV9jdXJyZW50RnJhbWUpOwotICAgIGVsc2UgewotICAgICAgICBDR1JlY3QgdHJhbnNmb3Jt
ZWREZXN0aW5hdGlvblJlY3QgPSBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShkZXN0UmVjdCwg
Q0dDb250ZXh0R2V0Q1RNKGN0eHQucGxhdGZvcm1Db250ZXh0KCkpKTsKLSAgICAgICAgZmxvYXQg
c3Vic2FtcGxpbmdTY2FsZSA9IHN0ZDo6bWluPGZsb2F0PigxLCBzdGQ6Om1heCh0cmFuc2Zvcm1l
ZERlc3RpbmF0aW9uUmVjdC5zaXplLndpZHRoIC8gc3JjUmVjdC53aWR0aCgpLCB0cmFuc2Zvcm1l
ZERlc3RpbmF0aW9uUmVjdC5zaXplLmhlaWdodCAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsKLQotICAg
ICAgICBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lLCBzdWJzYW1wbGlu
Z1NjYWxlKTsKLSAgICB9Ci0KLSAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3
ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIENv
bG9yIGNvbG9yID0gc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCk7Ci0gICAgaWYgKGNvbG9yLmlzVmFs
aWQoKSkgewotICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwgZGVzdFJlY3QsIGNvbG9y
LCBjb21wb3NpdGVPcCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBTdWJzYW1w
bGluZyBtYXkgaGF2ZSBnaXZlbiB1cyBhbiBpbWFnZSB0aGF0IGlzIHNtYWxsZXIgdGhhbiBzaXpl
KCkuCi0gICAgSW50U2l6ZSBpbWFnZVNpemUoQ0dJbWFnZUdldFdpZHRoKGltYWdlLmdldCgpKSwg
Q0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSkpOwotICAgIAotICAgIC8vIHNyY1JlY3QgaXMg
aW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB1bnN1YnNhbXBsZWQgaW1hZ2UsIHNvIHdlIGhhdmUg
dG8gbWFwIGl0IHRvIHRoZSBzdWJzYW1wbGVkIGltYWdlLgotICAgIEZsb2F0UmVjdCBzY2FsZWRT
cmNSZWN0ID0gc3JjUmVjdDsKLSAgICBpZiAoaW1hZ2VTaXplICE9IG1fc2l6ZSkgewotICAgICAg
ICBGbG9hdFJlY3Qgb3JpZ2luYWxJbWFnZUJvdW5kcyhGbG9hdFBvaW50KCksIG1fc2l6ZSk7Ci0g
ICAgICAgIEZsb2F0UmVjdCBzdWJzYW1wbGVkSW1hZ2VCb3VuZHMoRmxvYXRQb2ludCgpLCBpbWFn
ZVNpemUpOwotICAgICAgICBzY2FsZWRTcmNSZWN0ID0gbWFwUmVjdChzcmNSZWN0LCBvcmlnaW5h
bEltYWdlQm91bmRzLCBzdWJzYW1wbGVkSW1hZ2VCb3VuZHMpOwotICAgIH0KLSAgICAKLSAgICBJ
bWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uOwotICAgIGlmIChkZXNjcmlwdGlvbi5yZXNwZWN0
SW1hZ2VPcmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQotICAgICAgICBv
cmllbnRhdGlvbiA9IGZyYW1lT3JpZW50YXRpb25BdEluZGV4KG1fY3VycmVudEZyYW1lKTsKLQot
ICAgIGN0eHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzY2Fs
ZWRTcmNSZWN0LCBjb21wb3NpdGVPcCwgYmxlbmRNb2RlLCBvcmllbnRhdGlvbik7Ci0KLSAgICBp
ZiAoaW1hZ2VPYnNlcnZlcigpKQotICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhp
cyk7Ci19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBCaXRtYXBJbWFnZTo6Y29weVVuc2NhbGVk
RnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4KQotewotICAgIGlmIChpbmRleCA+PSBmcmFt
ZUNvdW50KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGluZGV4ID49IG1f
ZnJhbWVzLnNpemUoKSB8fCAhbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2UpCi0gICAgICAgIGNhY2hl
RnJhbWUoaW5kZXgsIDApOwotCi0gICAgaWYgKCFtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1wbGlu
Z0xldmVsKQotICAgICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2U7Ci0KLSAgICBy
ZXR1cm4gbV9zb3VyY2UuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgpOwotfQotCi19Ci0K
LSNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUGF0dGVybkNHLmNwcAppbmRleCBiNDI4ZDUwZDk0YmY5MjQyODAzMjg3ZDJlZWMxNmJk
NjljNTI4ZDkyLi4zZGFhMTM5YWI3ZWE1YjQyMTU3Nzg4MzVkMzUzZDhhZGI1ZjBjNzVlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAK
QEAgLTcyLDcgKzcyLDcgQEAgQ0dQYXR0ZXJuUmVmIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0
dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRyYW4KICAgICAvLyBJZiB3ZSdy
ZSByZXBlYXRpbmcgaW4gYm90aCBkaXJlY3Rpb25zLCB3ZSBjYW4gdXNlIGltYWdlLWJhY2tlZCBw
YXR0ZXJucwogICAgIC8vIGluc3RlYWQgb2YgY3VzdG9tIHBhdHRlcm5zLCBhbmQgYXZvaWQgdGls
aW5nLWVkZ2UgcGl4ZWwgY3JhY2tzLgogICAgIGlmIChtX3JlcGVhdFggJiYgbV9yZXBlYXRZKQot
ICAgICAgICByZXR1cm4gd2tDR1BhdHRlcm5DcmVhdGVXaXRoSW1hZ2VBbmRUcmFuc2Zvcm0odGls
ZUltYWdlKCktPmdldENHSW1hZ2VSZWYoKSwgcGF0dGVyblRyYW5zZm9ybSwgd2tQYXR0ZXJuVGls
aW5nQ29uc3RhbnRTcGFjaW5nKTsKKyAgICAgICAgcmV0dXJuIHdrQ0dQYXR0ZXJuQ3JlYXRlV2l0
aEltYWdlQW5kVHJhbnNmb3JtKHRpbGVJbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmdldCgpLCBwYXR0
ZXJuVHJhbnNmb3JtLCB3a1BhdHRlcm5UaWxpbmdDb25zdGFudFNwYWNpbmcpOwogCiAgICAgLy8g
SWYgRkxUX01BWCBzaG91bGQgYWxzbyBiZSB1c2VkIGZvciB4U3RlcCBvciB5U3RlcCwgbm90aGlu
ZyBpcyByZW5kZXJlZC4gVXNpbmcgZnJhY3Rpb25zIG9mIEZMVF9NQVggYWxzbwogICAgIC8vIHJl
c3VsdCBpbiBub3RoaW5nIGJlaW5nIHJlbmRlcmVkLgpAQCAtODMsNyArODMsNyBAQCBDR1BhdHRl
cm5SZWYgUGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdXNlclNwYWNlVHJhbgogICAgIENHRmxvYXQgeVN0ZXAgPSBtX3JlcGVhdFkgPyB0aWxlUmVj
dC5oZWlnaHQoKSA6ICgxIDw8IDIyKTsKIAogICAgIC8vIFRoZSBwYXR0ZXJuIHdpbGwgcmVsZWFz
ZSB0aGUgQ0dJbWFnZVJlZiB3aGVuIGl0J3MgZG9uZSByZW5kZXJpbmcgaW4gcGF0dGVyblJlbGVh
c2VDYWxsYmFjawotICAgIENHSW1hZ2VSZWYgcGxhdGZvcm1JbWFnZSA9IENHSW1hZ2VSZXRhaW4o
dGlsZUltYWdlKCktPmdldENHSW1hZ2VSZWYoKSk7CisgICAgQ0dJbWFnZVJlZiBwbGF0Zm9ybUlt
YWdlID0gdGlsZUltYWdlKCktPm5hdGl2ZUltYWdlKCkubGVha1JlZigpOwogCiAgICAgY29uc3Qg
Q0dQYXR0ZXJuQ2FsbGJhY2tzIHBhdHRlcm5DYWxsYmFja3MgPSB7IDAsIHBhdHRlcm5DYWxsYmFj
aywgcGF0dGVyblJlbGVhc2VDYWxsYmFjayB9OwogICAgIHJldHVybiBDR1BhdHRlcm5DcmVhdGUo
cGxhdGZvcm1JbWFnZSwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHhTdGVwLCB5U3RlcCwg
a0NHUGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2luZywgVFJVRSwgJnBhdHRlcm5DYWxsYmFja3Mp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZv
cm1JbWFnZUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BsYXRm
b3JtSW1hZ2VDRy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWZiMmRlMGVhMTJkYTIxNGYxMDQ2YzM5NjJlOGVh
YjUzYzY0NDEyNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAi
Q29sb3IuaCIKKyNpbmNsdWRlICJDb3JlR3JhcGhpY3NTUEkuaCIKKyNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dENHLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlN1YmltYWdlQ2Fj
aGVXaXRoVGltZXIuaCIKKworI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDxXZWJLaXRTeXN0
ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworICAgIAordm9pZCBQbGF0Zm9ybUltYWdlOjpjbGVhclN1YkltYWdlcygpCit7
CisjaWYgQ0FDSEVfU1VCSU1BR0VTCisgICAgaWYgKCFpc05pbCgpKQorICAgICAgICBzdWJpbWFn
ZUNhY2hlKCkuY2xlYXJJbWFnZShjZ0ltYWdlUmVmKCkpOworI2VuZGlmCit9CisKK0ludFNpemUg
UGxhdGZvcm1JbWFnZTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzTmlsKCkgPyBJbnRT
aXplKCkgOiBJbnRTaXplKENHSW1hZ2VHZXRXaWR0aChjZ0ltYWdlUmVmKCkpLCBDR0ltYWdlR2V0
SGVpZ2h0KGNnSW1hZ2VSZWYoKSkpOworfQorCitib29sIFBsYXRmb3JtSW1hZ2U6Omhhc0FscGhh
KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogQW5zd2VyIGNvcnJlY3RseSB0aGUgcXVlc3Rpb246
IGRvZXMgdGhlIENHSW1hZ2VSZWYgaGF2ZSBhbHBoYSBjaGFubm5lbD8KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworQ29sb3IgUGxhdGZvcm1JbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29u
c3QKK3sKKyAgICBpZiAoaXNOaWwoKSB8fCBzaXplKCkgIT0gSW50U2l6ZSgxLCAxKSkKKyAgICAg
ICAgcmV0dXJuIENvbG9yKCk7CisgICAgCisgICAgdW5zaWduZWQgY2hhciBwaXhlbFs0XTsgLy8g
UkdCQQorICAgIGF1dG8gYml0bWFwQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3Jl
YXRlKHBpeGVsLCAxLCAxLCA4LCBzaXplb2YocGl4ZWwpLCBzUkdCQ29sb3JTcGFjZVJlZigpLAor
ICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QgfCBrQ0dCaXRtYXBCeXRlT3Jk
ZXIzMkJpZykpOworICAgIAorICAgIGlmICghYml0bWFwQ29udGV4dCkKKyAgICAgICAgcmV0dXJu
IENvbG9yKCk7CisgICAgCisgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGJpdG1hcENvbnRleHQu
Z2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOworICAgIENHQ29udGV4dERyYXdJbWFnZShiaXRtYXBD
b250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIDEsIDEpLCBjZ0ltYWdlUmVmKCkpOworICAg
IAorICAgIGlmICghcGl4ZWxbM10pCisgICAgICAgIHJldHVybiBDb2xvcigwLCAwLCAwLCAwKTsK
KyAgICAKKyAgICByZXR1cm4gQ29sb3IocGl4ZWxbMF0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxb
MV0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMl0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbM10p
OworfQorICAgIAorYm9vbCBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKSBjb25z
dAoreworICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBjZ0ltYWdlUmVmKCk7CisgICAgQVNTRVJUKENH
SW1hZ2VHZXRCaXRzUGVyQ29tcG9uZW50KGltYWdlKSA9PSA4KTsKKyAgICAKKyAgICBDR0JpdG1h
cEluZm8gaW1hZ2VJbmZvID0gQ0dJbWFnZUdldEJpdG1hcEluZm8oaW1hZ2UpOworICAgIGlmICgh
KGltYWdlSW5mbyAmIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlKSB8fCAoaW1hZ2VJbmZvICYg
a0NHQml0bWFwQWxwaGFJbmZvTWFzaykgIT0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJz
dCkgeworICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYmVpbmcgYWJsZSB0byBoYW5kbGUgb3Ro
ZXIgcGl4ZWwgZm9ybWF0cy4KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHdpZHRoID0gQ0dJbWFnZUdl
dFdpZHRoKGltYWdlKTsKKyAgICBzaXplX3QgaGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChpbWFn
ZSk7CisgICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0gQ0dJbWFnZUdldEJ5dGVzUGVyUm93KGltYWdl
KTsKKyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBwcm92aWRlciA9IGFkb3B0Q0YoQ0dE
YXRhUHJvdmlkZXJDb3B5RGF0YShDR0ltYWdlR2V0RGF0YVByb3ZpZGVyKGltYWdlKSkpOworICAg
IGNvbnN0IFVJbnQ4KiBkYXRhID0gQ0ZEYXRhR2V0Qnl0ZVB0cihwcm92aWRlci5nZXQoKSk7Cisg
ICAgCisgICAgLy8gT3ZlcmxheSBhIGdyaWQgb2Ygc2FtcGxpbmcgZG90cyBvbiB0b3Agb2YgYSBn
cmF5c2NhbGUgdmVyc2lvbiBvZiB0aGUgaW1hZ2UuCisgICAgLy8gRm9yIHRoZSBpbnRlcmlvciBw
b2ludHMsIGNhbGN1bGF0ZSB0aGUgZGlmZmVyZW5jZSBpbiBsdW1pbmFuY2UgYW1vbmcgdGhlIHNh
bXBsZSBwb2ludAorICAgIC8vIGFuZCBpdHMgc3Vycm91bmRzIHBvaW50cywgc2NhbGVkIGJ5IHRy
YW5zcGFyZW5jeS4KKyAgICBjb25zdCB1bnNpZ25lZCBzYW1wbGVSb3dzID0gNzsKKyAgICBjb25z
dCB1bnNpZ25lZCBzYW1wbGVDb2xzID0gNzsKKyAgICAvLyBGSVhNRTogUmVmaW5lIHRoZSBwcm9w
ZXIgbnVtYmVyIG9mIHNhbXBsZXMsIGFuZCBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgYXNwZWN0IHJh
dGlvcy4KKyAgICBpZiAod2lkdGggPCBzYW1wbGVDb2xzIHx8IGhlaWdodCA8IHNhbXBsZVJvd3Mp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBFbnN1cmUgdGhhdCB0aGUgbGFz
dCByb3cvY29sdW1uIGxhbmQgb24gdGhlIGltYWdlIHBlcmltZXRlci4KKyAgICBjb25zdCBmbG9h
dCBzdHJpZGVXaWR0aCA9IHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCAtIDEpIC8gKHNhbXBsZUNv
bHMgLSAxKTsKKyAgICBjb25zdCBmbG9hdCBzdHJpZGVIZWlnaHQgPSBzdGF0aWNfY2FzdDxmbG9h
dD4oaGVpZ2h0IC0gMSkgLyAoc2FtcGxlUm93cyAtIDEpOworICAgIGZsb2F0IHNhbXBsZXNbc2Ft
cGxlUm93c11bc2FtcGxlQ29sc107CisgICAgCisgICAgLy8gRmluZCB0aGUgbHVtaW5hbmNlIG9m
IHRoZSBzYW1wbGUgcG9pbnRzLgorICAgIGZsb2F0IHkgPSAwOworICAgIGNvbnN0IFVJbnQ4KiBy
b3cgPSBkYXRhOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzYW1wbGVSb3dzOyArK2kp
IHsKKyAgICAgICAgZmxvYXQgeCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGog
PCBzYW1wbGVDb2xzOyArK2opIHsKKyAgICAgICAgICAgIGNvbnN0IFVJbnQ4KiBwMCA9IHJvdyAr
IChzdGF0aWNfY2FzdDxpbnQ+KHggKyAuNSkpICogNDsKKyAgICAgICAgICAgIC8vIFIgRyBCIEEK
KyAgICAgICAgICAgIHNhbXBsZXNbaV1bal0gPSAoMC4yMTI1ICogKnAwICsgMC43MTU0ICogKihw
MCsxKSArIDAuMDcyMSAqICoocDArMikpICogKihwMCszKSAvIDI1NTsKKyAgICAgICAgICAgIHgg
Kz0gc3RyaWRlV2lkdGg7CisgICAgICAgIH0KKyAgICAgICAgeSArPSBzdHJpZGVIZWlnaHQ7Cisg
ICAgICAgIHJvdyA9IGRhdGEgKyAoc3RhdGljX2Nhc3Q8aW50Pih5ICsgLjUpKSAqIGJ5dGVzUGVy
Um93OworICAgIH0KKyAgICAKKyAgICAvLyBEZXRlcm1pbmUgdGhlIGltYWdlIHNjb3JlLgorICAg
IGZsb2F0IGFjY3VtU2NvcmUgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzYW1w
bGVSb3dzIC0gMTsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDE7IGogPCBzYW1w
bGVDb2xzIC0gMTsgKytqKSB7CisgICAgICAgICAgICBmbG9hdCBkaWZmID0gc2FtcGxlc1tpIC0g
MV1bal0gKyBzYW1wbGVzW2kgKyAxXVtqXSArIHNhbXBsZXNbaV1baiAtIDFdICsgc2FtcGxlc1tp
XVtqICsgMV0gLSA0ICogc2FtcGxlc1tpXVtqXTsKKyAgICAgICAgICAgIGFjY3VtU2NvcmUgKz0g
ZGlmZiAqIGRpZmY7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gVGhlIHNjb3JlIGZv
ciBhIGdpdmVuIHNhbXBsZSBjYW4gYmUgd2l0aGluIHRoZSByYW5nZSBvZiAwIGFuZCAyNTVeMi4K
KyAgICByZXR1cm4gYWNjdW1TY29yZSA8IDI1MDAgKiAoc2FtcGxlUm93cyAtIDIpICogKHNhbXBs
ZUNvbHMgLSAyKTsKK30KKworZmxvYXQgUGxhdGZvcm1JbWFnZTo6c3Vic2FtcGxpbmdTY2FsZShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCkKK3sKKyAgICAvLyBOZXZlciB1c2Ugc3Vic2FtcGxlZCBpbWFn
ZXMgZm9yIGRyYXdpbmcgaW50byBQREYgY29udGV4dHMuCisgICAgaWYgKHdrQ0dDb250ZXh0SXNQ
REZDb250ZXh0KGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpKQorICAgICAgICByZXR1cm4gMTsK
KyAgICAKKyAgICBDR1JlY3QgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3QgPSBDR1JlY3RBcHBs
eUFmZmluZVRyYW5zZm9ybShkZXN0UmVjdCwgQ0dDb250ZXh0R2V0Q1RNKGNvbnRleHQucGxhdGZv
cm1Db250ZXh0KCkpKTsKKyAgICByZXR1cm4gc3RkOjptaW48ZmxvYXQ+KDEsIHN0ZDo6bWF4KHRy
YW5zZm9ybWVkRGVzdGluYXRpb25SZWN0LnNpemUud2lkdGggLyBzcmNSZWN0LndpZHRoKCksIHRy
YW5zZm9ybWVkRGVzdGluYXRpb25SZWN0LnNpemUuaGVpZ2h0IC8gc3JjUmVjdC5oZWlnaHQoKSkp
OworfQorCit2b2lkIFBsYXRmb3JtSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEludFNpemUmIHNyY1NpemUsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9k
ZSwgY29uc3QgSW1hZ2VPcmllbnRhdGlvbiYgb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgLy8g
U3Vic2FtcGxpbmcgbWF5IGhhdmUgZ2l2ZW4gdXMgYW4gaW1hZ2UgdGhhdCBpcyBzbWFsbGVyIHRo
YW4gc2l6ZSgpLgorICAgIEludFNpemUgc3Vic2FtcGxlZEltYWdlU2l6ZSA9IHNpemUoKTsKKyAg
ICAKKyAgICAvLyBzcmNSZWN0IGlzIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgdW5zdWJzYW1w
bGVkIGltYWdlLCBzbyB3ZSBoYXZlIHRvIG1hcCBpdCB0byB0aGUgc3Vic2FtcGxlZCBpbWFnZS4K
KyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBpZiAoc3Vic2Ft
cGxlZEltYWdlU2l6ZSAhPSBzcmNTaXplKQorICAgICAgICBhZGp1c3RlZFNyY1JlY3QgPSBtYXBS
ZWN0KHNyY1JlY3QsIEZsb2F0UmVjdCh7IH0sIHNyY1NpemUpLCBGbG9hdFJlY3QoeyB9LCBzdWJz
YW1wbGVkSW1hZ2VTaXplKSk7CisgICAgCisgICAgY29udGV4dC5kcmF3TmF0aXZlSW1hZ2UobV9p
bWFnZSwgc3Vic2FtcGxlZEltYWdlU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3As
IG1vZGUsIG9yaWVudGF0aW9uKTsKK30KKyAgICAKK30KKworI2VuZGlmIC8vIFVTRShDRykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1RleHRUcmFj
a1JlcHJlc2VudGF0aW9uQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tCmluZGV4IDg5NzIwZDE3MzY1
ZGE3ZThiYTg0NjlkNTI5NDU0OGQ1MTg0N2E3ZmUuLjQ0NzZmYzVmODdjMzQ5ODhmNmQ5YWQ1NWVl
YmQ4ZDFiOWJiMDIyZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2Nv
YS5tbQpAQCAtMTI5LDcgKzEyOSw3IEBAIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2E6On5U
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hKCkKIHZvaWQgVGV4dFRyYWNrUmVwcmVzZW50YXRp
b25Db2NvYTo6dXBkYXRlKCkKIHsKICAgICBpZiAoYXV0byByZXByZXNlbnRhdGlvbiA9IG1fY2xp
ZW50LmNyZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2UoKSkKLSAgICAgICAgW21fbGF5
ZXIuZ2V0KCkgc2V0Q29udGVudHM6KGlkKXJlcHJlc2VudGF0aW9uLT5nZXRDR0ltYWdlUmVmKCld
OworICAgICAgICBbbV9sYXllci5nZXQoKSBzZXRDb250ZW50czooaWQpcmVwcmVzZW50YXRpb24t
Pm5hdGl2ZUltYWdlKCkuZ2V0KCldOwogfQogCiB2b2lkIFRleHRUcmFja1JlcHJlc2VudGF0aW9u
Q29jb2E6OnNldENvbnRlbnRTY2FsZShmbG9hdCBzY2FsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQppbmRleCAwMWViNmRkMzAwNDNhMjI1
MjkxNzZmZDkxMjExN2RjNTc3NmMxN2JhLi5kYzFjN2M3MDk1ZDk0NGM0YzYyZjFmZTA5MzU3MDJh
MTNjN2M3YTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvSW1hZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0ltYWdlTWFjLm1tCkBAIC04NSwzMSArODUsMjIgQEAgQ0ZEYXRhUmVmIEJpdG1hcEltYWdlOjpn
ZXRUSUZGUmVwcmVzZW50YXRpb24oKQogICAgIGlmIChtX3RpZmZSZXApCiAgICAgICAgIHJldHVy
biBtX3RpZmZSZXAuZ2V0KCk7CiAKLSAgICB1bnNpZ25lZCBudW1GcmFtZXMgPSBmcmFtZUNvdW50
KCk7CisgICAgYXV0byBuYXRpdmVJbWFnZXMgPSB0aGlzLT5mcmFtZXNOYXRpdmVJbWFnZXMoKTsK
IAotICAgIC8vIElmIG51bUZyYW1lcyBpcyB6ZXJvLCB3ZSBrbm93IGZvciBjZXJ0YWluIHRoaXMg
aW1hZ2UgZG9lc24ndCBoYXZlIHZhbGlkIGRhdGEKKyAgICAvLyBJZiBmcmFtZXNJbWFnZXMuc2l6
ZSgpIGlzIHplcm8sIHdlIGtub3cgZm9yIGNlcnRhaW4gdGhpcyBpbWFnZSBkb2Vzbid0IGhhdmUg
dmFsaWQgZGF0YQogICAgIC8vIEV2ZW4gdGhvdWdoIHRoZSBjYWxsIHRvIENHSW1hZ2VEZXN0aW5h
dGlvbkNyZWF0ZVdpdGhEYXRhIHdpbGwgZmFpbCBhbmQgd2UnbGwgaGFuZGxlIGl0IGdyYWNlZnVs
bHksCiAgICAgLy8gaW4gY2VydGFpbiBjaXJjdW1zdGFuY2VzIHRoYXQgY2FsbCB3aWxsIHNwYW0g
dGhlIGNvbnNvbGUgd2l0aCBhbiBlcnJvciBtZXNzYWdlCi0gICAgaWYgKCFudW1GcmFtZXMpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgVmVjdG9yPENHSW1hZ2VSZWY+IGltYWdlczsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRnJhbWVzOyArK2kgKSB7Ci0gICAgICAgIENHSW1h
Z2VSZWYgY2dJbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpOwotICAgICAgICBpZiAo
Y2dJbWFnZSkKLSAgICAgICAgICAgIGltYWdlcy5hcHBlbmQoY2dJbWFnZSk7Ci0gICAgfQotCi0g
ICAgdW5zaWduZWQgbnVtVmFsaWRGcmFtZXMgPSBpbWFnZXMuc2l6ZSgpOworICAgIGlmICghbmF0
aXZlSW1hZ2VzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZXRhaW5Q
dHI8Q0ZNdXRhYmxlRGF0YVJlZj4gZGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgw
LCAwKSk7Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VEZXN0aW5hdGlvblJlZj4gZGVzdGluYXRpb24g
PSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEuZ2V0KCksIGtV
VFR5cGVUSUZGLCBudW1WYWxpZEZyYW1lcywgMCkpOworICAgIFJldGFpblB0cjxDR0ltYWdlRGVz
dGluYXRpb25SZWY+IGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVh
dGVXaXRoRGF0YShkYXRhLmdldCgpLCBrVVRUeXBlVElGRiwgbmF0aXZlSW1hZ2VzLnNpemUoKSwg
MCkpOwogCiAgICAgaWYgKCFkZXN0aW5hdGlvbikKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVZhbGlk
RnJhbWVzOyArK2kpCi0gICAgICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0
aW9uLmdldCgpLCBpbWFnZXNbaV0sIDApOworICAgIGZvciAoYXV0byBuYXRpdmVJbWFnZSA6IG5h
dGl2ZUltYWdlcykKKyAgICAgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRp
b24uZ2V0KCksIG5hdGl2ZUltYWdlLmdldCgpLCAwKTsKIAogICAgIENHSW1hZ2VEZXN0aW5hdGlv
bkZpbmFsaXplKGRlc3RpbmF0aW9uLmdldCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAKaW5kZXggMjE3NTNi
ZDA3OGExYzU1YzMyNzE5YzE0ODQ2ZjBmNmI5OTc1ZjhmZC4uODYxMDI1MDhiZWQ3MjlmZmFmNDYw
NzdlYWI4MjA5NmU5ZWIxYWMzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCkBAIC0xNDIsNyArMTQyLDcgQEAg
SW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0IEltYWdlRnJhbWUmIG90aGVy
KQogICAgICAgICByZXR1cm4gKnRoaXM7CiAKICAgICBjb3B5Qml0bWFwRGF0YShvdGhlcik7Ci0g
ICAgc2V0T3JpZ2luYWxGcmFtZVJlY3Qob3RoZXIub3JpZ2luYWxGcmFtZVJlY3QoKSk7CisgICAg
c2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7CiAgICAgc2V0U3RhdHVzKG90aGVyLnN0YXR1
cygpKTsKICAgICBzZXREdXJhdGlvbihvdGhlci5kdXJhdGlvbigpKTsKICAgICBzZXREaXNwb3Nh
bE1ldGhvZChvdGhlci5kaXNwb3NhbE1ldGhvZCgpKTsKQEAgLTE1Miw4ICsxNTIsNyBAQCBJbWFn
ZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpCiAK
IHZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXJQaXhlbERhdGEoKQogewotICAgIG1fYmFja2luZ1N0b3Jl
LmNsZWFyKCk7Ci0gICAgbV9ieXRlcyA9IDA7CisgICAgbV9waXhlbHMgPSBudWxscHRyOwogICAg
IG1fc3RhdHVzID0gRnJhbWVFbXB0eTsKICAgICAvLyBOT1RFOiBEbyBub3QgcmVzZXQgb3RoZXIg
bWVtYmVycyBoZXJlOyBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoKSBjYWxscyB0aGlzCiAgICAgLy8g
dG8gZnJlZSB0aGUgYml0bWFwIGRhdGEsIGJ1dCBvdGhlciBmdW5jdGlvbnMgbGlrZSBpbml0RnJh
bWVCdWZmZXIoKSBhbmQKQEAgLTE2MywyNCArMTYyLDE2IEBAIHZvaWQgSW1hZ2VGcmFtZTo6Y2xl
YXJQaXhlbERhdGEoKQogCiB2b2lkIEltYWdlRnJhbWU6Onplcm9GaWxsUGl4ZWxEYXRhKCkKIHsK
LSAgICBtZW1zZXQobV9ieXRlcywgMCwgbV9zaXplLndpZHRoKCkgKiBtX3NpemUuaGVpZ2h0KCkg
KiBzaXplb2YoUGl4ZWxEYXRhKSk7CisgICAgbV9waXhlbHMtPmNsZWFyKCk7CiAgICAgbV9oYXNB
bHBoYSA9IHRydWU7CiB9CiAKIHZvaWQgSW1hZ2VGcmFtZTo6emVyb0ZpbGxGcmFtZVJlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBBU1NFUlQoSW50UmVjdChJbnRQb2ludCgpLCBtX3Np
emUpLmNvbnRhaW5zKHJlY3QpKTsKLQogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkgKiBz
aXplb2YoUGl4ZWxEYXRhKTsKLSAgICBQaXhlbERhdGEqIHN0YXJ0ID0gbV9ieXRlcyArIChyZWN0
LnkoKSAqIHdpZHRoKCkpICsgcmVjdC54KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0
LmhlaWdodCgpOyArK2kpIHsKLSAgICAgICAgbWVtc2V0KHN0YXJ0LCAwLCByZWN0V2lkdGhJbkJ5
dGVzKTsKLSAgICAgICAgc3RhcnQgKz0gd2lkdGgoKTsKLSAgICB9Ci0KKyAgICBtX3BpeGVscy0+
Y2xlYXJSZWN0KHJlY3QpOwogICAgIHNldEhhc0FscGhhKHRydWUpOwogfQogCkBAIC0xODksMjUg
KzE4MCwyMyBAQCBib29sIEltYWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKGNvbnN0IEltYWdlRnJh
bWUmIG90aGVyKQogICAgIGlmICh0aGlzID09ICZvdGhlcikKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICBtX2JhY2tpbmdTdG9yZSA9IG90aGVyLm1fYmFja2luZ1N0b3JlOwotICAgIG1fYnl0
ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7Ci0gICAgbV9zaXplID0gb3RoZXIubV9zaXplOwot
ICAgIHNldEhhc0FscGhhKG90aGVyLm1faGFzQWxwaGEpOworICAgIGlmIChvdGhlci5tX3BpeGVs
cykKKyAgICAgICAgbV9waXhlbHMgPSBCaXRtYXBQaXhlbHM6OmNyZWF0ZSgqb3RoZXIubV9waXhl
bHMuZ2V0KCkpOworICAgIGVsc2UKKyAgICAgICAgbV9waXhlbHMgPSBudWxscHRyOwogICAgIHJl
dHVybiB0cnVlOwogfQogCiBib29sIEltYWdlRnJhbWU6OnNldFNpemUoaW50IG5ld1dpZHRoLCBp
bnQgbmV3SGVpZ2h0KQogewotICAgIEFTU0VSVCghd2lkdGgoKSAmJiAhaGVpZ2h0KCkpOwotICAg
IHNpemVfdCBiYWNraW5nU3RvcmVTaXplID0gbmV3V2lkdGggKiBuZXdIZWlnaHQ7Ci0gICAgaWYg
KCFtX2JhY2tpbmdTdG9yZS50cnlSZXNlcnZlQ2FwYWNpdHkoYmFja2luZ1N0b3JlU2l6ZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2JhY2tpbmdTdG9yZS5yZXNpemUoYmFja2luZ1N0
b3JlU2l6ZSk7Ci0gICAgbV9ieXRlcyA9IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsKLSAgICBtX3Np
emUgPSBJbnRTaXplKG5ld1dpZHRoLCBuZXdIZWlnaHQpOworICAgIEFTU0VSVCghbV9waXhlbHMp
OworICAgIG1fcGl4ZWxzID0gQml0bWFwUGl4ZWxzOjpjcmVhdGUoSW50U2l6ZShuZXdXaWR0aCwg
bmV3SGVpZ2h0KSwgbV9wcmVtdWx0aXBseUFscGhhKTsKKyAgICByZXR1cm4gbV9waXhlbHMgIT0g
bnVsbHB0cjsKK30KIAotICAgIHplcm9GaWxsUGl4ZWxEYXRhKCk7Ci0gICAgcmV0dXJuIHRydWU7
Cit2b2lkIEltYWdlRnJhbWU6OmNvcHlSb3dOVGltZXMoaW50IHN0YXJ0WCwgaW50IGVuZFgsIGlu
dCBzdGFydFksIGludCBlbmRZKQoreworICAgIG1fcGl4ZWxzLT5yZXBlYXRGaXJzdFJvdyhJbnRS
ZWN0KHN0YXJ0WCwgc3RhcnRZLCBlbmRYIC1zdGFydFggLCBlbmRZIC0gc3RhcnRZKSk7CiB9CiAK
IGJvb2wgSW1hZ2VGcmFtZTo6aGFzQWxwaGEoKSBjb25zdApAQCAtMjkxLDcgKzI4MCw3IEBAIHVu
c2lnbmVkIEltYWdlRGVjb2Rlcjo6ZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25z
dAogICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpIDw9IGluZGV4KQogICAgICAgICBy
ZXR1cm4gMDsKICAgICAvLyBGSVhNRTogVXNlIHRoZSBkaW1lbnNpb24gb2YgdGhlIHJlcXVlc3Rl
ZCBmcmFtZS4KLSAgICByZXR1cm4gbV9zaXplLmFyZWEoKSAqIHNpemVvZihJbWFnZUZyYW1lOjpQ
aXhlbERhdGEpOworICAgIHJldHVybiBtX3NpemUuYXJlYSgpICogc2l6ZW9mKFJHQkEzMik7CiB9
CiAKIGZsb2F0IEltYWdlRGVjb2Rlcjo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaAppbmRleCAyZjhlZWUxNzgxZDE2MmQ4NmM0OWZlMWRhYzcyYTJlN2U0MGE1ZDZk
Li4zMzY2ODZiOGJjNjE4MjcxYWU2MGI0ZGY2MmE5ZGYyMWMwN2Y1NGQ0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaApA
QCAtMjgsNiArMjgsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkJpdG1hcFBpeGVs
cy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCkBAIC01Nyw3ICs1OCw2IEBAIHVzaW5nIENvbG9yUHJv
ZmlsZSA9IFZlY3RvcjxjaGFyPjsKICAgICAgICAgICAgIERpc3Bvc2VPdmVyd3JpdGVQcmV2aW91
cyAgLy8gQ2xlYXIgZnJhbWUgdG8gcHJldmlvdXMgZnJhbWVidWZmZXIKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udGVudHMKICAgICAgICAgfTsKLSAgICAgICAg
dHlwZWRlZiB1bnNpZ25lZCBQaXhlbERhdGE7CiAKICAgICAgICAgSW1hZ2VGcmFtZSgpOwogCkBA
IC04MCwzMCArODAsMjQgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAg
ICAgICAvLyBDb3BpZXMgdGhlIHBpeGVsIGRhdGEgYXQgWyhzdGFydFgsIHN0YXJ0WSksIChlbmRY
LCBzdGFydFkpKSB0byB0aGUKICAgICAgICAgLy8gc2FtZSBYLWNvb3JkaW5hdGVzIG9uIGVhY2gg
c3Vic2VxdWVudCByb3cgdXAgdG8gYnV0IG5vdCBpbmNsdWRpbmcKICAgICAgICAgLy8gZW5kWS4K
LSAgICAgICAgdm9pZCBjb3B5Um93TlRpbWVzKGludCBzdGFydFgsIGludCBlbmRYLCBpbnQgc3Rh
cnRZLCBpbnQgZW5kWSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHN0YXJ0WCA8IHdp
ZHRoKCkpOwotICAgICAgICAgICAgQVNTRVJUKGVuZFggPD0gd2lkdGgoKSk7Ci0gICAgICAgICAg
ICBBU1NFUlQoc3RhcnRZIDwgaGVpZ2h0KCkpOwotICAgICAgICAgICAgQVNTRVJUKGVuZFkgPD0g
aGVpZ2h0KCkpOwotICAgICAgICAgICAgY29uc3QgaW50IHJvd0J5dGVzID0gKGVuZFggLSBzdGFy
dFgpICogc2l6ZW9mKFBpeGVsRGF0YSk7Ci0gICAgICAgICAgICBjb25zdCBQaXhlbERhdGEqIGNv
bnN0IHN0YXJ0QWRkciA9IGdldEFkZHIoc3RhcnRYLCBzdGFydFkpOwotICAgICAgICAgICAgZm9y
IChpbnQgZGVzdFkgPSBzdGFydFkgKyAxOyBkZXN0WSA8IGVuZFk7ICsrZGVzdFkpCi0gICAgICAg
ICAgICAgICAgbWVtY3B5KGdldEFkZHIoc3RhcnRYLCBkZXN0WSksIHN0YXJ0QWRkciwgcm93Qnl0
ZXMpOwotICAgICAgICB9CisgICAgICAgIHZvaWQgY29weVJvd05UaW1lcyhpbnQgc3RhcnRYLCBp
bnQgZW5kWCwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOwogCiAgICAgICAgIC8vIEFsbG9jYXRlcyBz
cGFjZSBmb3IgdGhlIHBpeGVsIGRhdGEuICBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IHBpeGVs
cwogICAgICAgICAvLyBhcmUgd3JpdHRlbi4gIE11c3Qgb25seSBiZSBjYWxsZWQgb25jZS4gIFJl
dHVybnMgd2hldGhlciBhbGxvY2F0aW9uCiAgICAgICAgIC8vIHN1Y2NlZWRlZC4KICAgICAgICAg
Ym9vbCBzZXRTaXplKGludCBuZXdXaWR0aCwgaW50IG5ld0hlaWdodCk7CisgICAgICAgIAorICAg
ICAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3BpeGVscy5zaXplKCk7IH0KIAog
ICAgICAgICAvLyBSZXR1cm5zIGEgY2FsbGVyLW93bmVkIHBvaW50ZXIgdG8gdGhlIHVuZGVybHlp
bmcgbmF0aXZlIGltYWdlIGRhdGEuCiAgICAgICAgIC8vIChBY3R1YWwgdXNlOiBUaGlzIHBvaW50
ZXIgd2lsbCBiZSBvd25lZCBieSBCaXRtYXBJbWFnZSBhbmQgZnJlZWQgaW4KICAgICAgICAgLy8g
RnJhbWVEYXRhOjpjbGVhcigpKS4KLSAgICAgICAgTmF0aXZlSW1hZ2VQdHIgYXNOZXdOYXRpdmVJ
bWFnZSgpIGNvbnN0OworICAgICAgICBOYXRpdmVJbWFnZVB0ciBhc05ld05hdGl2ZUltYWdlKCkg
Y29uc3QgeyByZXR1cm4gbV9waXhlbHMtPmltYWdlKCk7IH0KKworICAgICAgICBpbmxpbmUgQml0
bWFwUGl4ZWxzKiBwaXhlbHMoKSBjb25zdCB7IHJldHVybiBtX3BpeGVscyA/IG1fcGl4ZWxzLmdl
dCgpIDogbnVsbHB0cjsgfQorICAgICAgICBpbmxpbmUgYm9vbCBoYXNQaXhlbHMoKSBjb25zdCB7
IHJldHVybiBwaXhlbHMoKTsgfQogCiAgICAgICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdDsKLSAg
ICAgICAgY29uc3QgSW50UmVjdCYgb3JpZ2luYWxGcmFtZVJlY3QoKSBjb25zdCB7IHJldHVybiBt
X29yaWdpbmFsRnJhbWVSZWN0OyB9CiAgICAgICAgIEZyYW1lU3RhdHVzIHN0YXR1cygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdHVzOyB9CiAgICAgICAgIHVuc2lnbmVkIGR1cmF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9kdXJhdGlvbjsgfQogICAgICAgICBGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bv
c2FsTWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwb3NhbE1ldGhvZDsgfQpAQCAtMTExLDcg
KzEwNSw2IEBAIHVzaW5nIENvbG9yUHJvZmlsZSA9IFZlY3RvcjxjaGFyPjsKIAogICAgICAgICB2
b2lkIHNldEhhc0FscGhhKGJvb2wgYWxwaGEpOwogICAgICAgICB2b2lkIHNldENvbG9yUHJvZmls
ZShjb25zdCBDb2xvclByb2ZpbGUmKTsKLSAgICAgICAgdm9pZCBzZXRPcmlnaW5hbEZyYW1lUmVj
dChjb25zdCBJbnRSZWN0JiByKSB7IG1fb3JpZ2luYWxGcmFtZVJlY3QgPSByOyB9CiAgICAgICAg
IHZvaWQgc2V0U3RhdHVzKEZyYW1lU3RhdHVzIHN0YXR1cyk7CiAgICAgICAgIHZvaWQgc2V0RHVy
YXRpb24odW5zaWduZWQgZHVyYXRpb24pIHsgbV9kdXJhdGlvbiA9IGR1cmF0aW9uOyB9CiAgICAg
ICAgIHZvaWQgc2V0RGlzcG9zYWxNZXRob2QoRnJhbWVEaXNwb3NhbE1ldGhvZCBtZXRob2QpIHsg
bV9kaXNwb3NhbE1ldGhvZCA9IG1ldGhvZDsgfQpAQCAtMTE5LDEwOCArMTEyLDMyIEBAIHVzaW5n
IENvbG9yUHJvZmlsZSA9IFZlY3RvcjxjaGFyPjsKIAogICAgICAgICBpbmxpbmUgdm9pZCBzZXRS
R0JBKGludCB4LCBpbnQgeSwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5z
aWduZWQgYSkKICAgICAgICAgewotICAgICAgICAgICAgc2V0UkdCQShnZXRBZGRyKHgsIHkpLCBy
LCBnLCBiLCBhKTsKKyAgICAgICAgICAgIG1fcGl4ZWxzLT5zZXRSR0JBKHgsIHksIHIsIGcsIGIs
IGEpOwogICAgICAgICB9CiAKLSAgICAgICAgaW5saW5lIFBpeGVsRGF0YSogZ2V0QWRkcihpbnQg
eCwgaW50IHkpCisgICAgICAgIGlubGluZSBSR0JBMzIqIGdldEFkZHIoaW50IHgsIGludCB5KQog
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9ieXRlcyArICh5ICogd2lkdGgoKSkgKyB4
OworICAgICAgICAgICAgcmV0dXJuIG1fcGl4ZWxzLT5hdCh4LCB5KTsKICAgICAgICAgfQogCi0g
ICAgICAgIGlubGluZSBib29sIGhhc1BpeGVsRGF0YSgpIGNvbnN0CisgICAgICAgIGlubGluZSB2
b2lkIHNldFJHQkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25l
ZCBiLCB1bnNpZ25lZCBhKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9ieXRlczsK
LSAgICAgICAgfQotCi0gICAgICAgIC8vIFVzZSBmaXggcG9pbnQgbXVsdGlwbGllciBpbnN0ZWFk
IG9mIGludGVnZXIgZGl2aXNpb24gb3IgZmxvYXRpbmcgcG9pbnQgbWF0aC4KLSAgICAgICAgLy8g
VGhpcyBtdWx0aXBsZXIgcHJvZHVjZXMgZXhhY3RseSB0aGUgc2FtZSByZXN1bHQgZm9yIGFsbCB2
YWx1ZXMgaW4gcmFuZ2UgMCAtIDI1NS4KLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZp
eFBvaW50U2hpZnQgPSAyNDsKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZpeFBvaW50
TXVsdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPigxLjAgLyAyNTUuMCAqICgxIDw8IGZpeFBvaW50
U2hpZnQpKSArIDE7Ci0gICAgICAgIC8vIE11bHRpcGxpZXMgdW5zaWduZWQgdmFsdWUgYnkgZml4
cG9pbnQgdmFsdWUgYW5kIGNvbnZlcnRzIGJhY2sgdG8gdW5zaWduZWQuCi0gICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkodW5zaWduZWQgZml4ZWQsIHVuc2ln
bmVkIHYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAgKGZpeGVkICogdikgPj4gZml4
UG9pbnRTaGlmdDsKLSAgICAgICAgfQotCi0gICAgICAgIGlubGluZSB2b2lkIHNldFJHQkEoUGl4
ZWxEYXRhKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25l
ZCBhKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9wcmVtdWx0aXBseUFscGhhICYmIGEg
PCAyNTUpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWEpIHsKLSAgICAgICAgICAgICAgICAgICAg
KmRlc3QgPSAwOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgYWxwaGFNdWx0ID0gYSAqIGZpeFBvaW50TXVs
dDsKLSAgICAgICAgICAgICAgICByID0gZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KHIsIGFscGhh
TXVsdCk7Ci0gICAgICAgICAgICAgICAgZyA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShnLCBh
bHBoYU11bHQpOwotICAgICAgICAgICAgICAgIGIgPSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHko
YiwgYWxwaGFNdWx0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpkZXN0ID0gKGEgPDwg
MjQgfCByIDw8IDE2IHwgZyA8PCA4IHwgYik7CisgICAgICAgICAgICBtX3BpeGVscy0+c2V0UkdC
QShkZXN0LCByLCBnLCBiLCBhKTsKICAgICAgICAgfQogCiAjaWYgRU5BQkxFKEFQTkcpCi0gICAg
ICAgIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZGl2aWRlMjU1KHVuc2lnbmVkIGEpCisgICAgICAg
IGlubGluZSB2b2lkIG92ZXJSR0JBKFJHQkEzMiogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQg
ZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IChhICsgKGEgPj4gOCkgKyAxKSA+PiA4OwotICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5lIHZv
aWQgb3ZlclJHQkEoUGl4ZWxEYXRhKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNp
Z25lZCBiLCB1bnNpZ25lZCBhKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWEpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICBpZiAoYSA8IDI1NSkgewotICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGFEZXN0ID0gKCgqZGVzdCkgPj4gMjQpICYgMjU1OwotICAgICAg
ICAgICAgICAgIGlmIChhRGVzdCkgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCByRGVz
dCA9ICgoKmRlc3QpID4+IDE2KSAmIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
Z0Rlc3QgPSAoKCpkZXN0KSA+PiA4KSAmIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgYkRlc3QgPSAoKmRlc3QpICYgMjU1OwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBh
QXV4ID0gMjU1IC0gYTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxw
aGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJEZXN0ID0gZGl2aWRlMjU1KHJEZXN0ICog
YURlc3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgZ0Rlc3QgPSBkaXZpZGUyNTUoZ0Rlc3Qg
KiBhRGVzdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiRGVzdCA9IGRpdmlkZTI1NShiRGVz
dCAqIGFEZXN0KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBy
ID0gZGl2aWRlMjU1KHIgKiBhICsgckRlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAgICAgICAg
ZyA9IGRpdmlkZTI1NShnICogYSArIGdEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAg
IGIgPSBkaXZpZGUyNTUoYiAqIGEgKyBiRGVzdCAqIGFBdXgpOwotICAgICAgICAgICAgICAgICAg
ICBhICs9IGRpdmlkZTI1NShhRGVzdCAqIGFBdXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
IW1fcHJlbXVsdGlwbHlBbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgciA9IChyICog
MjU1ICsgYSAtIDEpIC8gYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGcgPSAoZyAqIDI1NSAr
IGEgLSAxKSAvIGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiID0gKGIgKiAyNTUgKyBhIC0g
MSkgLyBhOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChtX3ByZW11bHRpcGx5QWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgciA9IGRpdmlkZTI1
NShyICogYSk7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSBkaXZpZGUyNTUoZyAqIGEpOwotICAg
ICAgICAgICAgICAgICAgICBiID0gZGl2aWRlMjU1KGIgKiBhKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqZGVzdCA9IChhIDw8IDI0IHwgciA8PCAxNiB8
IGcgPDwgOCB8IGIpOworICAgICAgICAgICAgbV9waXhlbHMtPm92ZXJSR0JBKGRlc3QsIHIsIGcs
IGIsIGEpOwogICAgICAgICB9CiAjZW5kaWYKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIGludCB3
aWR0aCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3NpemUud2lkdGgo
KTsKLSAgICAgICAgfQorICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qml0bWFwUGl4ZWxzPiBtX3Bp
eGVsczsKIAotICAgICAgICBpbnQgaGVpZ2h0KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIFZlY3RvcjxQ
aXhlbERhdGE+IG1fYmFja2luZ1N0b3JlOwotICAgICAgICBQaXhlbERhdGEqIG1fYnl0ZXM7IC8v
IFRoZSBtZW1vcnkgaXMgYmFja2VkIGJ5IG1fYmFja2luZ1N0b3JlLgotICAgICAgICBJbnRTaXpl
IG1fc2l6ZTsKICAgICAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgbV9jb2xvclByb2ZpbGUgYW55
bW9yZT8KICAgICAgICAgQ29sb3JQcm9maWxlIG1fY29sb3JQcm9maWxlOwogICAgICAgICBib29s
IG1faGFzQWxwaGE7Ci0gICAgICAgIEludFJlY3QgbV9vcmlnaW5hbEZyYW1lUmVjdDsgLy8gVGhp
cyB3aWxsIGFsd2F5cyBqdXN0IGJlIHRoZSBlbnRpcmUKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBidWZmZXIgZXhjZXB0IGZvciBHSUYgZnJhbWVzIHdob3NlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3JpZ2luYWwgcmVjdCB3YXMgc21h
bGxlciB0aGFuIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG92
ZXJhbGwgaW1hZ2Ugc2l6ZS4KICAgICAgICAgRnJhbWVTdGF0dXMgbV9zdGF0dXM7CiAgICAgICAg
IHVuc2lnbmVkIG1fZHVyYXRpb247CiAgICAgICAgIEZyYW1lRGlzcG9zYWxNZXRob2QgbV9kaXNw
b3NhbE1ldGhvZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCmluZGV4IDVjMDA1NTM0ZWNkOTIx
MzRhMTNiMzI5NTg5Mjc3OTBmMDdhZDBmODEuLmY5MThjZjMyNDI5NjdmNzI3YTc1MzdhM2I0YTY1
ZjEyOTQ5Yzc2YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcApAQCAtODYsOSArODYsNiBA
QCBib29sIEJNUEltYWdlUmVhZGVyOjpkZWNvZGVCTVAoYm9vbCBvbmx5U2l6ZSkKICAgICAgICAg
Ly8gdGhlc2UgMHMgY291bGQgYWN0dWFsbHkgc2hvdyB0aHJvdWdoLgogICAgICAgICBtX2J1ZmZl
ci0+c2V0SGFzQWxwaGEoZmFsc2UpOwogCi0gICAgICAgIC8vIEZvciBCTVBzLCB0aGUgZnJhbWUg
YWx3YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2UuCi0gICAgICAgIG1fYnVmZmVyLT5zZXRPcmln
aW5hbEZyYW1lUmVjdChJbnRSZWN0KEludFBvaW50KCksIG1fcGFyZW50LT5zaXplKCkpKTsKLQog
ICAgICAgICBpZiAoIW1faXNUb3BEb3duKQogICAgICAgICAgICAgbV9jb29yZC5zZXRZKG1fcGFy
ZW50LT5zaXplKCkuaGVpZ2h0KCkgLSAxKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9CaXRtYXBQaXhl
bHNDYWlyby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWFhZjhhMGEzNmIxOGNiZjcyNzdkMmMyZTI2ZWI0MTcx
MjU2MDBkNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcApAQCAtMCwwICsxLDQwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQml0bWFwUGl4ZWxzLmgiCisKKyNpbmNsdWRlIDxjYWlyby5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK05hdGl2ZUltYWdlUHRyIEJpdG1hcFBpeGVsczo6
aW1hZ2UoKSBjb25zdAoreworICAgIHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNl
X2NyZWF0ZV9mb3JfZGF0YSgKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4oY29uc3RfY2FzdDxSR0JBMzIqPihtX3BpeGVscykpLAorICAgICAgICBDQUlST19GT1JNQVRf
QVJHQjMyLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpLCBzaXplKCkud2lkdGgoKSAq
IHNpemVvZihSR0JBMzIpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVj
b2RlckNhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2Nh
aXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
N2I0MTI5NWY4NTczNThmYmJmMzVjMWIwNTI1ZThkNmNjMzUyMGY1OC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSw0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCi0K
LSNpbmNsdWRlIDxjYWlyby5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLU5hdGl2ZUltYWdl
UHRyIEltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdAotewotICAgIHJldHVybiBh
ZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgKLSAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oY29uc3RfY2FzdDxQaXhlbERhdGEqPihtX2J5
dGVzKSksCi0gICAgICAgIENBSVJPX0ZPUk1BVF9BUkdCMzIsIHdpZHRoKCksIGhlaWdodCgpLCB3
aWR0aCgpICogc2l6ZW9mKFBpeGVsRGF0YSkpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lm
L0dJRkltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAppbmRleCA5Zjk5MmE3YmUxZDY2NzIyNjc1YzJl
ODU0YWQxODkxZTYwZjg1NzdjLi4xOGNlNzM4ZTg2MzI5OWU5NjYzZGUzYTJlMzk1M2UyMGRlYWUy
Zjc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9n
aWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcApAQCAtMjEzLDEwICsyMTMsMTAgQEAg
Ym9vbCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgs
IGNvbnN0IFZlY3Rvcjx1bnNpZ25lZAogCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgaWYg
bmVjZXNzYXJ5LgogICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtm
cmFtZUluZGV4XTsKLSAgICBpZiAoKChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJh
bWVFbXB0eSkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkgfHwgIWJ1ZmZlci5oYXNQ
aXhlbERhdGEoKSkKKyAgICBpZiAoKChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJh
bWVFbXB0eSkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkgfHwgIWJ1ZmZlci5oYXNQ
aXhlbHMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW1hZ2VGcmFtZTo6UGl4ZWxE
YXRhKiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHhCZWdpbiwgeUJlZ2luKTsKKyAg
ICBSR0JBMzIqIGN1cnJlbnRBZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoeEJlZ2luLCB5QmVnaW4p
OwogICAgIC8vIFdyaXRlIG9uZSByb3cncyB3b3J0aCBvZiBkYXRhIGludG8gdGhlIGZyYW1lLiAg
CiAgICAgZm9yIChpbnQgeCA9IHhCZWdpbjsgeCA8IHhFbmQ7ICsreCkgewogICAgICAgICBjb25z
dCB1bnNpZ25lZCBjaGFyIHNvdXJjZVZhbHVlID0gcm93QnVmZmVyWyhtX3NjYWxlZCA/IG1fc2Nh
bGVkQ29sdW1uc1t4XSA6IHgpIC0gZnJhbWVDb250ZXh0LT54T2Zmc2V0XTsKQEAgLTI0MCw3ICsy
NDAsNyBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3codW5zaWduZWQgZnJh
bWVJbmRleCwgY29uc3QgVmVjdG9yPHVuc2lnbmVkCiAKICAgICAvLyBUZWxsIHRoZSBmcmFtZSB0
byBjb3B5IHRoZSByb3cgZGF0YSBpZiBuZWVkIGJlLgogICAgIGlmIChyZXBlYXRDb3VudCA+IDEp
Ci0gICAgICAgIGJ1ZmZlci5jb3B5Um93TlRpbWVzKHhCZWdpbiwgeEVuZCwgeUJlZ2luLCB5RW5k
KTsKKyAgICAgICAgYnVmZmVyLnBpeGVscygpLT5jb3B5Um93TlRpbWVzKHhCZWdpbiwgeEVuZCwg
eUJlZ2luLCB5RW5kKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMjYwLDcgKzI2MCw3IEBA
IGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKHVuc2lnbmVkIGZyYW1lSW5kZXgs
IHVuc2lnbmVkIGZyYW1lRHVyYXRpb24sCiAgICAgaWYgKCFtX2N1cnJlbnRCdWZmZXJTYXdBbHBo
YSkgewogICAgICAgICAvLyBUaGUgd2hvbGUgZnJhbWUgd2FzIG5vbi10cmFuc3BhcmVudCwgc28g
aXQncyBwb3NzaWJsZSB0aGF0IHRoZSBlbnRpcmUKICAgICAgICAgLy8gcmVzdWx0aW5nIGJ1ZmZl
ciB3YXMgbm9uLXRyYW5zcGFyZW50LCBhbmQgd2UgY2FuIHNldEhhc0FscGhhKGZhbHNlKS4KLSAg
ICAgICAgaWYgKGJ1ZmZlci5vcmlnaW5hbEZyYW1lUmVjdCgpLmNvbnRhaW5zKEludFJlY3QoSW50
UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpCisgICAgICAgIGlmIChidWZmZXIucGl4ZWxzKCktPnJl
Y3QoKS5jb250YWlucyhJbnRSZWN0KEludFBvaW50KCksIHNjYWxlZFNpemUoKSkpKQogICAgICAg
ICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKICAgICAgICAgZWxzZSBpZiAoZnJhbWVJ
bmRleCkgewogICAgICAgICAgICAgLy8gVHJpY2t5IGNhc2UuICBUaGlzIGZyYW1lIGRvZXMgbm90
IGhhdmUgYWxwaGEgb25seSBpZiBldmVyeXdoZXJlCkBAIC0yODMsNyArMjgzLDcgQEAgYm9vbCBH
SUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUodW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWdu
ZWQgZnJhbWVEdXJhdGlvbiwKICAgICAgICAgICAgIC8vIFRoZSBvbmx5IHJlbWFpbmluZyBjYXNl
IGlzIGEgRGlzcG9zZU92ZXJ3cml0ZUJnY29sb3IgZnJhbWUuICBJZgogICAgICAgICAgICAgLy8g
aXQgaGFkIG5vIGFscGhhLCBhbmQgaXRzIHJlY3QgaXMgY29udGFpbmVkIGluIHRoZSBjdXJyZW50
IGZyYW1lJ3MKICAgICAgICAgICAgIC8vIHJlY3QsIHdlIGtub3cgdGhlIGN1cnJlbnQgZnJhbWUg
aGFzIG5vIGFscGhhLgotICAgICAgICAgICAgaWYgKChwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhv
ZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yKSAmJiAhcHJldkJ1ZmZl
ci0+aGFzQWxwaGEoKSAmJiBidWZmZXIub3JpZ2luYWxGcmFtZVJlY3QoKS5jb250YWlucyhwcmV2
QnVmZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgpKSkKKyAgICAgICAgICAgIGlmICgocHJldkJ1ZmZl
ci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRlQmdjb2xv
cikgJiYgIXByZXZCdWZmZXItPmhhc0FscGhhKCkgJiYgYnVmZmVyLnBpeGVscygpLT5yZWN0KCku
Y29udGFpbnMocHJldkJ1ZmZlci0+cGl4ZWxzKCktPnJlY3QoKSkpCiAgICAgICAgICAgICAgICAg
YnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM1MywxMSAr
MzUzLDYgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bnNpZ25lZCBm
cmFtZUluZGV4KQogICAgICAgICBmcmFtZVJlY3Quc2V0SGVpZ2h0KHNpemUoKS5oZWlnaHQoKSAt
IGZyYW1lQ29udGV4dC0+eU9mZnNldCk7CiAKICAgICBJbWFnZUZyYW1lKiBjb25zdCBidWZmZXIg
PSAmbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOwotICAgIGludCBsZWZ0ID0gdXBwZXJC
b3VuZFNjYWxlZFgoZnJhbWVSZWN0LngoKSk7Ci0gICAgaW50IHJpZ2h0ID0gbG93ZXJCb3VuZFNj
YWxlZFgoZnJhbWVSZWN0Lm1heFgoKSwgbGVmdCk7Ci0gICAgaW50IHRvcCA9IHVwcGVyQm91bmRT
Y2FsZWRZKGZyYW1lUmVjdC55KCkpOwotICAgIGludCBib3R0b20gPSBsb3dlckJvdW5kU2NhbGVk
WShmcmFtZVJlY3QubWF4WSgpLCB0b3ApOwotICAgIGJ1ZmZlci0+c2V0T3JpZ2luYWxGcmFtZVJl
Y3QoSW50UmVjdChsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKSk7CiAKICAg
ICBpZiAoIWZyYW1lSW5kZXgpIHsKICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgZnJhbWUs
IHNvIHdlJ3JlIG5vdCByZWx5aW5nIG9uIGFueSBwcmV2aW91cyBkYXRhLgpAQCAtMzg3LDcgKzM4
Miw3IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW5zaWduZWQgZnJh
bWVJbmRleCkKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gY2xl
YXIgdGhlIHByZXZpb3VzIGZyYW1lIHRvIHRyYW5zcGFyZW50LCB3aXRob3V0CiAgICAgICAgICAg
ICAvLyBhZmZlY3RpbmcgcGl4ZWxzIGluIHRoZSBpbWFnZSBvdXRzaWRlIG9mIHRoZSBmcmFtZS4K
LSAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHByZXZSZWN0ID0gcHJldkJ1ZmZlci0+b3JpZ2lu
YWxGcmFtZVJlY3QoKTsKKyAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHByZXZSZWN0ID0gcHJl
dkJ1ZmZlci0+cGl4ZWxzKCktPnJlY3QoKTsKICAgICAgICAgICAgIGNvbnN0IEludFNpemUmIGJ1
ZmZlclNpemUgPSBzY2FsZWRTaXplKCk7CiAgICAgICAgICAgICBpZiAoIWZyYW1lSW5kZXggfHwg
cHJldlJlY3QuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzY2FsZWRTaXplKCkpKSkgewog
ICAgICAgICAgICAgICAgIC8vIENsZWFyaW5nIHRoZSBmaXJzdCBmcmFtZSwgb3IgYSBmcmFtZSB0
aGUgc2l6ZSBvZiB0aGUgd2hvbGUKQEAgLTQwMiw2ICszOTcsMTIgQEAgYm9vbCBHSUZJbWFnZURl
Y29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bnNpZ25lZCBmcmFtZUluZGV4KQogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIGludCBsZWZ0ID0gdXBwZXJCb3VuZFNjYWxl
ZFgoZnJhbWVSZWN0LngoKSk7CisgICAgaW50IHJpZ2h0ID0gbG93ZXJCb3VuZFNjYWxlZFgoZnJh
bWVSZWN0Lm1heFgoKSwgbGVmdCk7CisgICAgaW50IHRvcCA9IHVwcGVyQm91bmRTY2FsZWRZKGZy
YW1lUmVjdC55KCkpOworICAgIGludCBib3R0b20gPSBsb3dlckJvdW5kU2NhbGVkWShmcmFtZVJl
Y3QubWF4WSgpLCB0b3ApOworICAgIGJ1ZmZlci0+cGl4ZWxzLT5zZXRSZWN0KEludFJlY3QobGVm
dCwgdG9wLCByaWdodCAtIGxlZnQsIGJvdHRvbSAtIHRvcCkpOwogCiAgICAgLy8gVXBkYXRlIG91
ciBzdGF0dXMgdG8gYmUgcGFydGlhbGx5IGNvbXBsZXRlLgogICAgIGJ1ZmZlci0+c2V0U3RhdHVz
KEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNw
cAppbmRleCBlZTY2YWMxNGQ0YmUwN2NhOWFmZmIyYTNhZmY4OWViZmE2MmZiMTJlLi45OGZmZTAy
MDIxNWNjOTM2NDcwZTMxM2M3MmYzYjRhNzU2YjVmYTM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdl
RGVjb2Rlci5jcHAKQEAgLTU4OCw3ICs1ODgsNyBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6OnNl
dEZhaWxlZCgpCiB9CiAKIHRlbXBsYXRlIDxKX0NPTE9SX1NQQUNFIGNvbG9yU3BhY2U+Ci12b2lk
IHNldFBpeGVsKEltYWdlRnJhbWUmIGJ1ZmZlciwgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBjdXJy
ZW50QWRkcmVzcywgSlNBTVBBUlJBWSBzYW1wbGVzLCBpbnQgY29sdW1uKQordm9pZCBzZXRQaXhl
bChJbWFnZUZyYW1lJiBidWZmZXIsIFJHQkEzMiogY3VycmVudEFkZHJlc3MsIEpTQU1QQVJSQVkg
c2FtcGxlcywgaW50IGNvbHVtbikKIHsKICAgICBKU0FNUExFKiBqc2FtcGxlID0gKnNhbXBsZXMg
KyBjb2x1bW4gKiAoY29sb3JTcGFjZSA9PSBKQ1NfUkdCID8gMyA6IDQpOwogCkBAIC02MzEsNyAr
NjMxLDcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoSW1hZ2VGcmFt
ZSYgYnVmZmVyKQogICAgICAgICBpZiAoZGVzdFkgPCAwKQogICAgICAgICAgICAgY29udGludWU7
CiAKLSAgICAgICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZl
ci5nZXRBZGRyKDAsIGRlc3RZKTsKKyAgICAgICAgUkdCQTMyKiBjdXJyZW50QWRkcmVzcyA9IGJ1
ZmZlci5nZXRBZGRyKDAsIGRlc3RZKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0
aDsgKyt4KSB7CiAgICAgICAgICAgICBzZXRQaXhlbDxjb2xvclNwYWNlPihidWZmZXIsIGN1cnJl
bnRBZGRyZXNzLCBzYW1wbGVzLCBpc1NjYWxlZCA/IG1fc2NhbGVkQ29sdW1uc1t4XSA6IHgpOwog
ICAgICAgICAgICAgKytjdXJyZW50QWRkcmVzczsKQEAgLTY2MSw5ICs2NjEsNiBAQCBib29sIEpQ
RUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcygpCiAgICAgICAgIC8vIGxvYWRpbmcuIFRo
ZSBjb21wbGV0ZWQgaW1hZ2Ugd2lsbCBiZSBtYXJrZWQgZnVsbHkgb3BhcXVlIGluIGpwZWdDb21w
bGV0ZSgpLgogICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEodHJ1ZSk7CiAgICAgICAgIGJ1ZmZl
ci5zZXRDb2xvclByb2ZpbGUobV9jb2xvclByb2ZpbGUpOwotCi0gICAgICAgIC8vIEZvciBKUEVH
cywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgotICAgICAgICBidWZm
ZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKTsKICAg
ICB9CiAKICAgICBqcGVnX2RlY29tcHJlc3Nfc3RydWN0KiBpbmZvID0gbV9yZWFkZXItPmluZm8o
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Bu
Zy9QTkdJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKaW5kZXggZTY0NGE3MTEwZWZjYjU0MGQ4OWNl
MWJhODExMDBiYzQ4MjNiMThmMi4uNThmMjkwYTBiNGMyYTliMzI0NGJkYjAxODUzNzM2MDNkZGQx
ZTlmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
cG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKQEAgLTQ1MiwxOSArNDUyLDE5IEBA
IHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJBdmFpbGFibGUoKQogICAgIH0KIH0KIAotc3Rh
dGljIGlubGluZSB2b2lkIHNldFBpeGVsUkdCKEltYWdlRnJhbWU6OlBpeGVsRGF0YSogZGVzdCwg
cG5nX2J5dGVwIHBpeGVsKQorc3RhdGljIGlubGluZSB2b2lkIHNldFBpeGVsUkdCKFJHQkEzMiog
ZGVzdCwgcG5nX2J5dGVwIHBpeGVsKQogewogICAgICpkZXN0ID0gMHhGRjAwMDAwMFUgfCBwaXhl
bFswXSA8PCAxNiB8IHBpeGVsWzFdIDw8IDggfCBwaXhlbFsyXTsKIH0KIAotc3RhdGljIGlubGlu
ZSB2b2lkIHNldFBpeGVsUkdCQShJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGRlc3QsIHBuZ19ieXRl
cCBwaXhlbCwgdW5zaWduZWQgY2hhciYgbm9uVHJpdmlhbEFscGhhTWFzaykKK3N0YXRpYyBpbmxp
bmUgdm9pZCBzZXRQaXhlbFJHQkEoUkdCQTMyKiBkZXN0LCBwbmdfYnl0ZXAgcGl4ZWwsIHVuc2ln
bmVkIGNoYXImIG5vblRyaXZpYWxBbHBoYU1hc2spCiB7CiAgICAgdW5zaWduZWQgY2hhciBhID0g
cGl4ZWxbM107CiAgICAgKmRlc3QgPSBhIDw8IDI0IHwgcGl4ZWxbMF0gPDwgMTYgfCBwaXhlbFsx
XSA8PCA4IHwgcGl4ZWxbMl07CiAgICAgbm9uVHJpdmlhbEFscGhhTWFzayB8PSAoMjU1IC0gYSk7
CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFByZW11bHRpcGxpZWRSR0JBKEltYWdl
RnJhbWU6OlBpeGVsRGF0YSogZGVzdCwgcG5nX2J5dGVwIHBpeGVsLCB1bnNpZ25lZCBjaGFyJiBu
b25Ucml2aWFsQWxwaGFNYXNrKQorc3RhdGljIGlubGluZSB2b2lkIHNldFBpeGVsUHJlbXVsdGlw
bGllZFJHQkEoUkdCQTMyKiBkZXN0LCBwbmdfYnl0ZXAgcGl4ZWwsIHVuc2lnbmVkIGNoYXImIG5v
blRyaXZpYWxBbHBoYU1hc2spCiB7CiAgICAgdW5zaWduZWQgY2hhciBhID0gcGl4ZWxbM107CiAg
ICAgdW5zaWduZWQgY2hhciByID0gZmFzdERpdmlkZUJ5MjU1KHBpeGVsWzBdICogYSk7CkBAIC01
MTMsOCArNTEzLDYgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZ25l
ZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVkIHJvd0luZGV4LAogICAgICAgICAgICAgaW5pdEZy
YW1lQnVmZmVyKG1fY3VycmVudEZyYW1lKTsKICAgICAgICAgZWxzZQogI2VuZGlmCi0gICAgICAg
IC8vIEZvciBQTkdzLCB0aGUgZnJhbWUgYWx3YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2UuCi0g
ICAgICAgIGJ1ZmZlci5zZXRPcmlnaW5hbEZyYW1lUmVjdChJbnRSZWN0KEludFBvaW50KCksIHNp
emUoKSkpOwogICAgIH0KIAogICAgIC8qIGxpYnBuZyBjb21tZW50cyAoaGVyZSB0byBleHBsYWlu
IHdoYXQgZm9sbG93cykuCkBAIC01NzMsNyArNTcxLDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6
OnJvd0F2YWlsYWJsZSh1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVkIHJvd0luZGV4
LAogICAgIH0KIAogICAgIC8vIFdyaXRlIHRoZSBkZWNvZGVkIHJvdyBwaXhlbHMgdG8gdGhlIGZy
YW1lIGJ1ZmZlci4KLSAgICBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGFkZHJlc3MgPSBidWZmZXIu
Z2V0QWRkcigwLCB5KTsKKyAgICBSR0JBMzIqIGFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcigwLCB5
KTsKICAgICBpbnQgd2lkdGggPSBzY2FsZWRTaXplKCkud2lkdGgoKTsKICAgICB1bnNpZ25lZCBj
aGFyIG5vblRyaXZpYWxBbHBoYU1hc2sgPSAwOwogCkBAIC04MzQsMTEgKzgzMiw2IEBAIHZvaWQg
UE5HSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIoc2l6ZV90IGZyYW1lSW5kZXgpCiAgICAg
ICAgIGZyYW1lUmVjdC5zZXRIZWlnaHQoc2l6ZSgpLmhlaWdodCgpIC0gbV95T2Zmc2V0KTsKIAog
ICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsK
LSAgICBpbnQgbGVmdCA9IHVwcGVyQm91bmRTY2FsZWRYKGZyYW1lUmVjdC54KCkpOwotICAgIGlu
dCByaWdodCA9IGxvd2VyQm91bmRTY2FsZWRYKGZyYW1lUmVjdC5tYXhYKCksIGxlZnQpOwotICAg
IGludCB0b3AgPSB1cHBlckJvdW5kU2NhbGVkWShmcmFtZVJlY3QueSgpKTsKLSAgICBpbnQgYm90
dG9tID0gbG93ZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWN0Lm1heFkoKSwgdG9wKTsKLSAgICBidWZm
ZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCwg
Ym90dG9tIC0gdG9wKSk7CiAKICAgICAvLyBUaGUgc3RhcnRpbmcgc3RhdGUgZm9yIHRoaXMgZnJh
bWUgZGVwZW5kcyBvbiB0aGUgcHJldmlvdXMgZnJhbWUncwogICAgIC8vIGRpc3Bvc2FsIG1ldGhv
ZC4KQEAgLTg2Miw3ICs4NTUsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVm
ZmVyKHNpemVfdCBmcmFtZUluZGV4KQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFdlIHdhbnQg
dG8gY2xlYXIgdGhlIHByZXZpb3VzIGZyYW1lIHRvIHRyYW5zcGFyZW50LCB3aXRob3V0CiAgICAg
ICAgIC8vIGFmZmVjdGluZyBwaXhlbHMgaW4gdGhlIGltYWdlIG91dHNpZGUgb2YgdGhlIGZyYW1l
LgotICAgICAgICBjb25zdCBJbnRSZWN0JiBwcmV2UmVjdCA9IHByZXZCdWZmZXItPm9yaWdpbmFs
RnJhbWVSZWN0KCk7CisgICAgICAgIGNvbnN0IEludFJlY3QmIHByZXZSZWN0ID0gcHJldkJ1ZmZl
ci0+cGl4ZWxzKCktPnJlY3QoKTsKICAgICAgICAgaWYgKCFmcmFtZUluZGV4IHx8IHByZXZSZWN0
LmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpIHsKICAgICAgICAg
ICAgIC8vIENsZWFyaW5nIHRoZSBmaXJzdCBmcmFtZSwgb3IgYSBmcmFtZSB0aGUgc2l6ZSBvZiB0
aGUgd2hvbGUKICAgICAgICAgICAgIC8vIGltYWdlLCByZXN1bHRzIGluIGEgY29tcGxldGVseSBl
bXB0eSBpbWFnZS4KQEAgLTg3Myw2ICs4NjYsMTIgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6Omlu
aXRGcmFtZUJ1ZmZlcihzaXplX3QgZnJhbWVJbmRleCkKICAgICAgICAgICAgIGJ1ZmZlci56ZXJv
RmlsbEZyYW1lUmVjdChwcmV2UmVjdCk7CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgaW50
IGxlZnQgPSB1cHBlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QueCgpKTsKKyAgICBpbnQgcmlnaHQg
PSBsb3dlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QubWF4WCgpLCBsZWZ0KTsKKyAgICBpbnQgdG9w
ID0gdXBwZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWN0LnkoKSk7CisgICAgaW50IGJvdHRvbSA9IGxv
d2VyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC5tYXhZKCksIHRvcCk7CisgICAgYnVmZmVyLnBpeGVs
cy0+c2V0UmVjdChJbnRSZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3Ap
KTsKIH0KIAogdm9pZCBQTkdJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUoKQpAQCAtODg2LDcg
Kzg4NSw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKCkKICAgICBwbmdf
Ynl0ZXAgaW50ZXJsYWNlQnVmZmVyID0gbV9yZWFkZXItPmludGVybGFjZUJ1ZmZlcigpOwogCiAg
ICAgaWYgKG1fY3VycmVudEZyYW1lICYmIGludGVybGFjZUJ1ZmZlcikgewotICAgICAgICBjb25z
dCBJbnRSZWN0JiByZWN0ID0gYnVmZmVyLm9yaWdpbmFsRnJhbWVSZWN0KCk7CisgICAgICAgIGNv
bnN0IEludFJlY3QmIHJlY3QgPSBidWZmZXIucGl4ZWxzKCktPnJlY3QoKTsKICAgICAgICAgYm9v
bCBoYXNBbHBoYSA9IG1fcmVhZGVyLT5oYXNBbHBoYSgpOwogICAgICAgICB1bnNpZ25lZCBjb2xv
ckNoYW5uZWxzID0gaGFzQWxwaGEgPyA0IDogMzsKICAgICAgICAgYm9vbCBub25Ucml2aWFsQWxw
aGEgPSBmYWxzZTsKQEAgLTg5Niw3ICs4OTUsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJh
bWVDb21wbGV0ZSgpCiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKICAg
ICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCByZWN0Lm1heFkoKSAtIHJlY3QueSgpOyArK3kpIHsK
ICAgICAgICAgICAgIHBuZ19ieXRlcCByb3cgPSBpbnRlcmxhY2VCdWZmZXIgKyAobV9zY2FsZWQg
PyBtX3NjYWxlZFJvd3NbeV0gOiB5KSAqIGNvbG9yQ2hhbm5lbHMgKiBzaXplKCkud2lkdGgoKTsK
LSAgICAgICAgICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogYWRkcmVzcyA9IGJ1ZmZlci5nZXRB
ZGRyKHJlY3QueCgpLCB5ICsgcmVjdC55KCkpOworICAgICAgICAgICAgUkdCQTMyKiBhZGRyZXNz
ID0gYnVmZmVyLmdldEFkZHIocmVjdC54KCksIHkgKyByZWN0LnkoKSk7CiAgICAgICAgICAgICBm
b3IgKGludCB4ID0gMDsgeCA8IHJlY3QubWF4WCgpIC0gcmVjdC54KCk7ICsreCkgewogICAgICAg
ICAgICAgICAgIHBuZ19ieXRlcCBwaXhlbCA9IHJvdyArIChtX3NjYWxlZCA/IG1fc2NhbGVkQ29s
dW1uc1t4XSA6IHgpICogY29sb3JDaGFubmVsczsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBh
bHBoYSA9IGhhc0FscGhhID8gcGl4ZWxbM10gOiAyNTU7CkBAIC05MTIsNyArOTExLDcgQEAgdm9p
ZCBQTkdJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUoKQogICAgICAgICBwbmdfYnl0ZXAgcm93
ID0gaW50ZXJsYWNlQnVmZmVyOwogICAgICAgICBmb3IgKGludCB5ID0gcmVjdC55KCk7IHkgPCBy
ZWN0Lm1heFkoKTsgKyt5LCByb3cgKz0gY29sb3JDaGFubmVscyAqIHNpemUoKS53aWR0aCgpKSB7
CiAgICAgICAgICAgICBwbmdfYnl0ZXAgcGl4ZWwgPSByb3c7Ci0gICAgICAgICAgICBJbWFnZUZy
YW1lOjpQaXhlbERhdGEqIGFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcihyZWN0LngoKSwgeSk7Cisg
ICAgICAgICAgICBSR0JBMzIqIGFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcihyZWN0LngoKSwgeSk7
CiAgICAgICAgICAgICBmb3IgKGludCB4ID0gcmVjdC54KCk7IHggPCByZWN0Lm1heFgoKTsgKyt4
LCBwaXhlbCArPSBjb2xvckNoYW5uZWxzKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgYWxw
aGEgPSBoYXNBbHBoYSA/IHBpeGVsWzNdIDogMjU1OwogICAgICAgICAgICAgICAgIG5vblRyaXZp
YWxBbHBoYSB8PSBhbHBoYSA8IDI1NTsKQEAgLTkyNSw3ICs5MjQsNyBAQCB2b2lkIFBOR0ltYWdl
RGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAjZW5kaWYKIAogICAgICAgICBpZiAoIW5vblRyaXZp
YWxBbHBoYSkgewotICAgICAgICAgICAgaWYgKGJ1ZmZlci5vcmlnaW5hbEZyYW1lUmVjdCgpLmNv
bnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpCisgICAgICAgICAgICBp
ZiAoYnVmZmVyLnBpeGVscygpLT5yZWN0KCkuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBz
Y2FsZWRTaXplKCkpKSkKICAgICAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2Up
OwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgc2l6ZV90IGZyYW1lSW5kZXgg
PSBtX2N1cnJlbnRGcmFtZTsKQEAgLTkzMyw3ICs5MzIsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rl
cjo6ZnJhbWVDb21wbGV0ZSgpCiAgICAgICAgICAgICAgICAgd2hpbGUgKGZyYW1lSW5kZXggJiYg
KHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zZU92ZXJ3
cml0ZVByZXZpb3VzKSkKICAgICAgICAgICAgICAgICAgICAgcHJldkJ1ZmZlciA9ICZtX2ZyYW1l
QnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKICAgICAgICAgICAgICAgICBpZiAoKHByZXZCdWZm
ZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zZU92ZXJ3cml0ZUJnY29s
b3IpCi0gICAgICAgICAgICAgICAgICAgICYmICFwcmV2QnVmZmVyLT5oYXNBbHBoYSgpICYmIGJ1
ZmZlci5vcmlnaW5hbEZyYW1lUmVjdCgpLmNvbnRhaW5zKHByZXZCdWZmZXItPm9yaWdpbmFsRnJh
bWVSZWN0KCkpKQorICAgICAgICAgICAgICAgICAgICAmJiAhcHJldkJ1ZmZlci0+aGFzQWxwaGEo
KSAmJiBidWZmZXIucGl4ZWxzKCktPnJlY3QoKS5jb250YWlucyhwcmV2QnVmZmVyLT5waXhlbHMo
KS0+cmVjdCgpKSkKICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNl
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmICghbV9ibGVuZCAmJiAhYnVmZmVy
Lmhhc0FscGhhKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAppbmRleCAxMjRhMWIy
ZjE5OTdmZTY3OGM2MWI1MmYzMDU4ZGI0ZDZiODg2NzlhLi4wMjJjNmYwYWIyNWU4MWMwYWNkZjZk
NTQzOTQyYTdjMTI1YzA2YjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHAKQEAg
LTEzMiwxNCArMTMyLDEzIEBAIGJvb2wgV0VCUEltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgb25s
eVNpemUpCiAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgICAgIGJ1ZmZlci5z
ZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKICAgICAgICAgYnVmZmVyLnNldEhh
c0FscGhhKG1faGFzQWxwaGEpOwotICAgICAgICBidWZmZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3Qo
SW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKTsKICAgICB9CiAKICAgICBpZiAoIW1fZGVjb2Rl
cikgewogICAgICAgICBXRUJQX0NTUF9NT0RFIG1vZGUgPSBvdXRwdXRNb2RlKG1faGFzQWxwaGEp
OwogICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkKICAgICAgICAgICAgIG1vZGUgPSBv
dXRwdXRNb2RlKGZhbHNlKTsKLSAgICAgICAgaW50IHJvd1N0cmlkZSA9IHNpemUoKS53aWR0aCgp
ICogc2l6ZW9mKEltYWdlRnJhbWU6OlBpeGVsRGF0YSk7CisgICAgICAgIGludCByb3dTdHJpZGUg
PSBzaXplKCkud2lkdGgoKSAqIHNpemVvZihSR0JBMzIpOwogICAgICAgICB1aW50OF90KiBvdXRw
dXQgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIuZ2V0QWRkcigwLCAwKSk7CiAg
ICAgICAgIGludCBvdXRwdXRTaXplID0gc2l6ZSgpLmhlaWdodCgpICogcm93U3RyaWRlOwogICAg
ICAgICBtX2RlY29kZXIgPSBXZWJQSU5ld1JHQihtb2RlLCBvdXRwdXQsIG91dHB1dFNpemUsIHJv
d1N0cmlkZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0KaW5kZXgg
MjE2Y2QwOTNmMjY0NjdjYmE4OGE0M2Y2OTNhYmY0Y2Y1MWRkMWE0ZC4uZDExNDU0YjA1ZWY4ODk5
M2E2Mjg5Mzg5NmJjMGMxMTcyOGM1ZWQ1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRl
b1NvdXJjZU1hYy5tbQpAQCAtODcsNyArODcsNyBAQCB2b2lkIE1vY2tSZWFsdGltZVZpZGVvU291
cmNlTWFjOjp1cGRhdGVQbGF0Zm9ybUxheWVyKCkgY29uc3QKICAgICAgICAgaWYgKCFpbWFnZSkK
ICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIG1fcHJldmlld0ltYWdlID0gaW1hZ2UtPmdl
dENHSW1hZ2VSZWYoKTsKKyAgICAgICAgbV9wcmV2aWV3SW1hZ2UgPSBpbWFnZS0+bmF0aXZlSW1h
Z2UoKTsKICAgICAgICAgaWYgKCFtX3ByZXZpZXdJbWFnZSkKICAgICAgICAgICAgIGJyZWFrOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcAppbmRl
eCAzNmNkNjUxNmU4MGYxNzQ4YmZlYWI3N2E5MzAyNzFjMTIxZGU4MDE5Li40YjRlMzc3OWU5NmY3
OGM2NTQwYTUzYzQ0NzhjM2JmZDkzNWY1M2U5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAKQEAgLTEzNiw5ICsxMzYsOSBAQCBEcmFnSW1hZ2VS
ZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiBpbWcsIEltYWdlT3JpZW50YXRpb25E
ZXNjcmlwdGlvbikKICAgICBDR0NvbnRleHRTY2FsZUNUTShkcmF3Q29udGV4dCwgMSwgLTEpOwog
ICAgIENHQ29udGV4dFNldEZpbGxDb2xvcihkcmF3Q29udGV4dCwgd2hpdGUpOwogICAgIENHQ29u
dGV4dEZpbGxSZWN0KGRyYXdDb250ZXh0LCByZWN0KTsKLSAgICBpZiAoYXV0byBzcmNJbWFnZSA9
IGltZy0+Z2V0Q0dJbWFnZVJlZigpKSB7CisgICAgaWYgKGF1dG8gc3JjSW1hZ2UgPSBpbWctPm5h
dGl2ZUltYWdlKCkpIHsKICAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGRyYXdDb250ZXh0
LCBrQ0dCbGVuZE1vZGVOb3JtYWwpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoZHJhd0Nv
bnRleHQsIHJlY3QsIHNyY0ltYWdlKTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGRyYXdD
b250ZXh0LCByZWN0LCBzcmNJbWFnZS5nZXQoKSk7CiAgICAgfQogICAgIENHQ29udGV4dFJlbGVh
c2UoZHJhd0NvbnRleHQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dl
YkNhY2hlLm1tIGIvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDYWNoZS5tbQppbmRleCBiNjU5
ZDZkYmY5YWQ2OTk5YzNhYzk2MmRlOTUxNTc4MDk3ZTFmM2IxLi43YzVlZDIxMGRkYjJhMzJhNzY2
Njc0YzEyMGQ5OTRjMmZhNDdlN2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNj
L1dlYkNhY2hlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0KQEAg
LTIwNCw3ICsyMDQsNyBAQCArIChDR0ltYWdlUmVmKWltYWdlRm9yVVJMOihOU1VSTCAqKXVybAog
ICAgIFdlYkNvcmU6OkNhY2hlZEltYWdlJiBjYWNoZWRJbWFnZSA9IGRvd25jYXN0PFdlYkNvcmU6
OkNhY2hlZEltYWdlPigqY2FjaGVkUmVzb3VyY2UpOwogICAgIGlmICghY2FjaGVkSW1hZ2UuaGFz
SW1hZ2UoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGNhY2hlZEltYWdl
LmltYWdlKCktPmdldENHSW1hZ2VSZWYoKTsKKyAgICByZXR1cm4gY2FjaGVkSW1hZ2UuaW1hZ2Uo
KS0+bmF0aXZlSW1hZ2UoKS5nZXQoKTsKIH0KIAogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9jZy9XS0ljb25EYXRhYmFz
ZUNHLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9jZy9XS0ljb25EYXRhYmFz
ZUNHLmNwcAppbmRleCAwZjZkZTdhMTQ2YTYxMWE1MmFhMWU1MzkwMTlmYTZjMWM0NjcyNWFlLi4z
MDU2MzM2Y2I2NmZlNGFmMThiZGM1MjlhY2EyZjhmYzg4MWRmZTU2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0YWJhc2VDRy5jcHAKKysrIGIv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3BwCkBA
IC0zNywxMiArMzcsMjMgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiBDR0ltYWdlUmVmIFdL
SWNvbkRhdGFiYXNlVHJ5R2V0Q0dJbWFnZUZvclVSTChXS0ljb25EYXRhYmFzZVJlZiBpY29uRGF0
YWJhc2VSZWYsIFdLVVJMUmVmIHVybFJlZiwgV0tTaXplIHNpemUpCiB7CiAgICAgSW1hZ2UqIGlt
YWdlID0gdG9JbXBsKGljb25EYXRhYmFzZVJlZiktPmltYWdlRm9yUGFnZVVSTCh0b1dURlN0cmlu
Zyh1cmxSZWYpKTsKLSAgICByZXR1cm4gaW1hZ2UgPyBpbWFnZS0+Z2V0Rmlyc3RDR0ltYWdlUmVm
T2ZTaXplKEludFNpemUoc3RhdGljX2Nhc3Q8aW50PihzaXplLndpZHRoKSwgc3RhdGljX2Nhc3Q8
aW50PihzaXplLmhlaWdodCkpKSA6IDA7CisgICAgcmV0dXJuIGltYWdlID8gaW1hZ2UtPm5hdGl2
ZUltYWdlT2ZTaXplKEludFNpemUoc3RhdGljX2Nhc3Q8aW50PihzaXplLndpZHRoKSwgc3RhdGlj
X2Nhc3Q8aW50PihzaXplLmhlaWdodCkpKS5nZXQoKSA6IG51bGxwdHI7CiB9CiAKIENGQXJyYXlS
ZWYgV0tJY29uRGF0YWJhc2VUcnlDb3B5Q0dJbWFnZUFycmF5Rm9yVVJMKFdLSWNvbkRhdGFiYXNl
UmVmIGljb25EYXRhYmFzZVJlZiwgV0tVUkxSZWYgdXJsUmVmKQogewogICAgIEltYWdlKiBpbWFn
ZSA9IHRvSW1wbChpY29uRGF0YWJhc2VSZWYpLT5pbWFnZUZvclBhZ2VVUkwodG9XVEZTdHJpbmco
dXJsUmVmKSk7Ci0gICAgcmV0dXJuIGltYWdlID8gaW1hZ2UtPmdldENHSW1hZ2VBcnJheSgpLmxl
YWtSZWYoKSA6IDA7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBhdXRvIG5hdGl2ZUltYWdlcyA9IGltYWdlLT5mcmFtZXNOYXRpdmVJbWFnZXMoKTsKKyAg
ICBpZiAoIW5hdGl2ZUltYWdlcy5zaXplKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IAorICAgIENGTXV0YWJsZUFycmF5UmVmIGFycmF5ID0gQ0ZBcnJheUNyZWF0ZU11dGFibGUobnVs
bHB0ciwgbmF0aXZlSW1hZ2VzLnNpemUoKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcyk7CisgICAg
Zm9yIChhdXRvIG5hdGl2ZUltYWdlIDogbmF0aXZlSW1hZ2VzKQorICAgICAgICBDRkFycmF5QXBw
ZW5kVmFsdWUoYXJyYXksIG5hdGl2ZUltYWdlLmdldCgpKTsKKyAgICAKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Q0ZBcnJheVJlZj4oQ0ZSZXRhaW4oYXJyYXkpKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0g
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bQppbmRleCBkYzc5ODNhYjk4OGMyZDA0YTE3MzBlZTEzNzMwM2MyNDQxNjE1MTk3Li5mYmMzZTVk
NGM1NDMwMWNlOTIxN2E0MGY4ZDA4YmQ1ODM1Mjc4N2M2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQpAQCAt
NDA3MSw3ICs0MDcxLDcgQEAgLSAoVUlJbWFnZSAqKV9wcmVzZW50YXRpb25TbmFwc2hvdEZvclBy
ZXZpZXdJdGVtQ29udHJvbGxlcjooVUlQcmV2aWV3SXRlbUNvbnRyb2wKIHsKICAgICBpZiAoIV9w
b3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRpY2F0b3IuY29udGVudEltYWdlKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gW1tbVUlJbWFnZSBhbGxvY10gaW5pdFdpdGhDR0lt
YWdlOl9wb3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRpY2F0b3IuY29udGVudEltYWdlLT5nZXRD
R0ltYWdlUmVmKCldIGF1dG9yZWxlYXNlXTsKKyAgICByZXR1cm4gW1tbVUlJbWFnZSBhbGxvY10g
aW5pdFdpdGhDR0ltYWdlOl9wb3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRpY2F0b3IuY29udGVu
dEltYWdlLT5uYXRpdmVJbWFnZSgpLmdldCgpXSBhdXRvcmVsZWFzZV07CiB9CiAKIC0gKE5TQXJy
YXkgKilfcHJlc2VudGF0aW9uUmVjdHNGb3JQcmV2aWV3SXRlbUNvbnRyb2xsZXI6KFVJUHJldmll
d0l0ZW1Db250cm9sbGVyICopY29udHJvbGxlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IDlhMzNmN2NjN2RjN2M3ZDcyZjlkYTc0
MzA5OGI3ZGJjYTgyNDA5Y2YuLmE1MzI1MTA2NzhiOWY1MzUxNDU4YTM4YTlmNDIzMzc0N2QwMzVm
NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5W
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmll
dy5jcHAKQEAgLTE3MjcsNjkgKzE3MjcsNiBAQCB2b2lkIFBsdWdpblZpZXc6OndpbmRvd2VkUGx1
Z2luVmlzaWJpbGl0eURpZENoYW5nZShib29sIGlzVmlzaWJsZSwgdWludDY0X3Qgd2luZAogfQog
I2VuZGlmCiAKLSNpZiBQTEFURk9STShDT0NPQSkKLXN0YXRpYyBib29sIGlzQWxtb3N0U29saWRD
b2xvcihCaXRtYXBJbWFnZSogYml0bWFwKQotewotICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBiaXRt
YXAtPmdldENHSW1hZ2VSZWYoKTsKLSAgICBBU1NFUlQoQ0dJbWFnZUdldEJpdHNQZXJDb21wb25l
bnQoaW1hZ2UpID09IDgpOwotCi0gICAgQ0dCaXRtYXBJbmZvIGltYWdlSW5mbyA9IENHSW1hZ2VH
ZXRCaXRtYXBJbmZvKGltYWdlKTsKLSAgICBpZiAoIShpbWFnZUluZm8gJiBrQ0dCaXRtYXBCeXRl
T3JkZXIzMkxpdHRsZSkgfHwgKGltYWdlSW5mbyAmIGtDR0JpdG1hcEFscGhhSW5mb01hc2spICE9
IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QpIHsKLSAgICAgICAgLy8gRklYTUU6IENv
bnNpZGVyIGJlaW5nIGFibGUgdG8gaGFuZGxlIG90aGVyIHBpeGVsIGZvcm1hdHMuCi0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgc2l6ZV90IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKGltYWdlKTsKLSAgICBzaXplX3QgaGVp
Z2h0ID0gQ0dJbWFnZUdldEhlaWdodChpbWFnZSk7Ci0gICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0g
Q0dJbWFnZUdldEJ5dGVzUGVyUm93KGltYWdlKTsKLQotICAgIFJldGFpblB0cjxDRkRhdGFSZWY+
IHByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNvcHlEYXRhKENHSW1hZ2VHZXREYXRh
UHJvdmlkZXIoaW1hZ2UpKSk7Ci0gICAgY29uc3QgVUludDgqIGRhdGEgPSBDRkRhdGFHZXRCeXRl
UHRyKHByb3ZpZGVyLmdldCgpKTsKLQotICAgIC8vIE92ZXJsYXkgYSBncmlkIG9mIHNhbXBsaW5n
IGRvdHMgb24gdG9wIG9mIGEgZ3JheXNjYWxlIHZlcnNpb24gb2YgdGhlIGltYWdlLgotICAgIC8v
IEZvciB0aGUgaW50ZXJpb3IgcG9pbnRzLCBjYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgaW4gbHVt
aW5hbmNlIGFtb25nIHRoZSBzYW1wbGUgcG9pbnQKLSAgICAvLyBhbmQgaXRzIHN1cnJvdW5kcyBw
b2ludHMsIHNjYWxlZCBieSB0cmFuc3BhcmVuY3kuCi0gICAgY29uc3QgdW5zaWduZWQgc2FtcGxl
Um93cyA9IDc7Ci0gICAgY29uc3QgdW5zaWduZWQgc2FtcGxlQ29scyA9IDc7Ci0gICAgLy8gRklY
TUU6IFJlZmluZSB0aGUgcHJvcGVyIG51bWJlciBvZiBzYW1wbGVzLCBhbmQgYWNjb21tb2RhdGUg
ZGlmZmVyZW50IGFzcGVjdCByYXRpb3MuCi0gICAgaWYgKHdpZHRoIDwgc2FtcGxlQ29scyB8fCBo
ZWlnaHQgPCBzYW1wbGVSb3dzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBFbnN1
cmUgdGhhdCB0aGUgbGFzdCByb3cvY29sdW1uIGxhbmQgb24gdGhlIGltYWdlIHBlcmltZXRlci4K
LSAgICBjb25zdCBmbG9hdCBzdHJpZGVXaWR0aCA9IHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCAt
IDEpIC8gKHNhbXBsZUNvbHMgLSAxKTsKLSAgICBjb25zdCBmbG9hdCBzdHJpZGVIZWlnaHQgPSBz
dGF0aWNfY2FzdDxmbG9hdD4oaGVpZ2h0IC0gMSkgLyAoc2FtcGxlUm93cyAtIDEpOwotICAgIGZs
b2F0IHNhbXBsZXNbc2FtcGxlUm93c11bc2FtcGxlQ29sc107Ci0KLSAgICAvLyBGaW5kIHRoZSBs
dW1pbmFuY2Ugb2YgdGhlIHNhbXBsZSBwb2ludHMuCi0gICAgZmxvYXQgeSA9IDA7Ci0gICAgY29u
c3QgVUludDgqIHJvdyA9IGRhdGE7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNhbXBs
ZVJvd3M7ICsraSkgewotICAgICAgICBmbG9hdCB4ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBqID0gMDsgaiA8IHNhbXBsZUNvbHM7ICsraikgewotICAgICAgICAgICAgY29uc3QgVUludDgq
IHAwID0gcm93ICsgKHN0YXRpY19jYXN0PGludD4oeCArIC41KSkgKiA0OwotICAgICAgICAgICAg
Ly8gUiBHIEIgQQotICAgICAgICAgICAgc2FtcGxlc1tpXVtqXSA9ICgwLjIxMjUgKiAqcDAgKyAw
LjcxNTQgKiAqKHAwKzEpICsgMC4wNzIxICogKihwMCsyKSkgKiAqKHAwKzMpIC8gMjU1OwotICAg
ICAgICAgICAgeCArPSBzdHJpZGVXaWR0aDsKLSAgICAgICAgfQotICAgICAgICB5ICs9IHN0cmlk
ZUhlaWdodDsKLSAgICAgICAgcm93ID0gZGF0YSArIChzdGF0aWNfY2FzdDxpbnQ+KHkgKyAuNSkp
ICogYnl0ZXNQZXJSb3c7Ci0gICAgfQotCi0gICAgLy8gRGV0ZXJtaW5lIHRoZSBpbWFnZSBzY29y
ZS4KLSAgICBmbG9hdCBhY2N1bVNjb3JlID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBp
IDwgc2FtcGxlUm93cyAtIDE7ICsraSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAxOyBq
IDwgc2FtcGxlQ29scyAtIDE7ICsraikgewotICAgICAgICAgICAgZmxvYXQgZGlmZiA9IHNhbXBs
ZXNbaSAtIDFdW2pdICsgc2FtcGxlc1tpICsgMV1bal0gKyBzYW1wbGVzW2ldW2ogLSAxXSArIHNh
bXBsZXNbaV1baiArIDFdIC0gNCAqIHNhbXBsZXNbaV1bal07Ci0gICAgICAgICAgICBhY2N1bVNj
b3JlICs9IGRpZmYgKiBkaWZmOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIHNjb3Jl
IGZvciBhIGdpdmVuIHNhbXBsZSBjYW4gYmUgd2l0aGluIHRoZSByYW5nZSBvZiAwIGFuZCAyNTVe
Mi4KLSAgICByZXR1cm4gYWNjdW1TY29yZSA8IDI1MDAgKiAoc2FtcGxlUm93cyAtIDIpICogKHNh
bXBsZUNvbHMgLSAyKTsKLX0KLSNlbmRpZgotCiB2b2lkIFBsdWdpblZpZXc6OnBsdWdpblNuYXBz
aG90VGltZXJGaXJlZCgpCiB7CiAjaWYgRU5BQkxFKFBSSU1BUllfU05BUFNIT1RURURfUExVR0lO
X0hFVVJJU1RJQykKQEAgLTE4MDksNyArMTc0Niw3IEBAIHZvaWQgUGx1Z2luVmlldzo6cGx1Z2lu
U25hcHNob3RUaW1lckZpcmVkKCkKIAogICAgICAgICBpZiAoc25hcHNob3RJbWFnZSkgewogI2lm
IEVOQUJMRShQUklNQVJZX1NOQVBTSE9UVEVEX1BMVUdJTl9IRVVSSVNUSUMpCi0gICAgICAgICAg
ICBib29sIHNuYXBzaG90SXNBbG1vc3RTb2xpZENvbG9yID0gaXNBbG1vc3RTb2xpZENvbG9yKGRv
d25jYXN0PEJpdG1hcEltYWdlPihzbmFwc2hvdEltYWdlLmdldCgpKSk7CisgICAgICAgICAgICBi
b29sIHNuYXBzaG90SXNBbG1vc3RTb2xpZENvbG9yID0gc3RhdGljX3BvaW50ZXJfY2FzdDxCaXRt
YXBJbWFnZT4oc25hcHNob3RJbWFnZSktPmlzQWxtb3N0U29saWRDb2xvcigpOwogICAgICAgICAg
ICAgc25hcHNob3RGb3VuZCA9ICFzbmFwc2hvdElzQWxtb3N0U29saWRDb2xvcjsKICNlbmRpZgog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283450</attachid>
            <date>2016-07-12 14:55:44 -0700</date>
            <delta_ts>2016-07-12 15:28:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159679-20160712145501.patch</filename>
            <type>text/plain</type>
            <size>145637</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzMTAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWM1YmQ5YmQwNmExOWJl
NWNhMDJjNTE3MmQ2ZWYyZWJiZmVjMWMxOS4uZmU4ZDJmNTExZmM2N2M2MzliMzQwY2RiOWM3MTZj
MDllOWU4ODFlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzMSBAQAorMjAxNi0wNy0xMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0
IHRoZSBwaXhlbCBkYXRhIG9mIEltYWdlRnJhbWUgdG8gYSBzZXBhcmF0ZSBjbGFzcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5Njc5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgcGl4ZWwg
ZGF0YSBtYW5pcHVsYXRpb24gcGFydCBpbiBJbWFnZUZyYW1lIGludG8gYSBzZXBhcmF0ZSBjbGFz
cworICAgICAgICBhbmQgdGhlbiBtYWtlIGl0IG9wdGlvbmFsIChhbGxvY2F0ZWQgb24gZGVtYW5k
KS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2lu
Q2Fpcm8uY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFBpeGVsczo6Qml0bWFwUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBp
eGVsczo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpoZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFBpeGVsczo6YXQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmNsZWFyUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OnJlcGVhdEZpcnN0Um93KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcFBpeGVsczo6c2V0UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQ
aXhlbHM6Om92ZXJSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6aW5Cb3Vu
ZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Om11bHRpcGx5MjU1KToKKyAgICAgICAgKFdlYkNvcmU6OmRpdmlkZTI1NSk6CisgICAg
ICAgIChXZWJDb3JlOjpkaXZpZGVDZWlsKToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxp
ZWRDaGFubmVsKToKKyAgICAgICAgKFdlYkNvcmU6OnVucHJlbXVsdGlwbGllZENoYW5uZWwpOgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZVByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VVblByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6cGl4ZWxzKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWVEYXRhOjpoYXNQaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y2xlYXJQaXhl
bERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGxQaXhlbERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGxGcmFtZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weUJpdG1hcERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojpjb3B5Um93TlRpbWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0UkdCQSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpnZXRBZGRyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6Omhhc1BpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpvdmVyUkdC
QSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjp3aWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
Y29weVJvd05UaW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpm
aXhQb2ludFVuc2lnbmVkTXVsdGlwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6ZGl2aWRlMjU1KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1h
Z2VSZWFkZXI6OmRlY29kZUJNUCk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Y2Fpcm8vQml0bWFwUGl4ZWxzQ2Fpcm8uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwLgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjppbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KToKKyAgICAgICAgKFdlYkNvcmU6OkdJ
RkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFn
ZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFBp
eGVsKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5l
cyk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhlbFJHQik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRQaXhlbFJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxQcmVtdWx0aXBsaWVk
UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorCisyMDE2LTA3LTEx
ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAg
UmVuYW1lIEZyYW1lRGF0YSB0byBJbWFnZUZyYW1lRGF0YSBhbmQgbW92ZSBpdCB0byBhIHNlcGFy
YXRlIGZpbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1NTQ0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1vdmUgSW1hZ2VGcmFtZURhdGEgdG8gYSBzZXBhcmF0ZSBmaWxlIHNvIGl0IGNhbiBiZSBjYWNo
ZWQgYnkgSW1hZ2VTb3VyY2UKKyAgICAgICAgYW5kIHdpbGwgc3RpbGwgYmUgY29uc3VtZWQgYnkg
Qml0bWFwSW1hZ2UuIE1ha2UgdGhlIGRhdGEgbWVtYmVycyBvZiBJbWFnZUZyYW1lRGF0YQorICAg
ICAgICBiZSBwcml2YXRlIGFuZCBhZGQgZ2V0dGVycyB0byByZXR1cm4gdGhlaXIgdmFsdWVzLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cyAtLSBDb2RlIHJlZmFjdG9yaW5nLCBubyBiZWhhdmlvciBj
aGFuZ2UuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpoYXZlRnJhbWVJbWFnZUF0SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3Nh
cnkpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjplbnN1cmVGcmFtZUlzQ2FjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJ
bWFnZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJ
bWFnZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpmcmFtZU9yaWVudGF0aW9uQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
Ojppc0FsbW9zdFNvbGlkQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1h
cEltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OkZyYW1lRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6On5GcmFtZURhdGEpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp1c2VkRnJhbWVCeXRlcyk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lRGF0YUF0SW5kZXgpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvaW1hZ2VGcmFtZURhdGEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWVEYXRhOjpJbWFnZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0
YTo6fkltYWdlRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpj
bGVhclN1YkltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6Y2xlYXIp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OnNpbmdsZVBpeGVsU29saWRDb2xv
cik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6aXNBbG1vc3RTb2xpZENvbG9y
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9pbWFnZUZyYW1lRGF0YS5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpzdGF0dXMpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZURhdGE6OmlzQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZURhdGE6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmZy
YW1lQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpvcmllbnRhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6c3Vic2FtcGxpbmdMZXZlbCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lRGF0YTo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZURhdGE6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpo
YXNJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6aGFzTWV0YWRhdGEp
OgorCisyMDE2LTA2LTI0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxj
b20+CisKKyAgICAgICAgSW50cm9kdWNlIFBsYXRmb3JtSW1hZ2UgYW5kIG1ha2UgaXQgaXMgYSB3
cmFwcGVyIGZvciBOYXRpdmVJbWFnZVB0cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhlIG1haW4gcHVycG9zZSBvZiB0aGlzIHJlZmFjdG9yaW5nIGlz
IHRvIG1vdmUgdGhlIHBsYXRmb3JtIGltYWdlIGRlcGVuZGVudAorICAgICAgICBjb2RlIGZyb20g
Qml0bWFwSW1hZ2UgdG8gUGxhdGZvcm1JbWFnZS4gUGxhdGZvcm1JbWFnZSBpcyByZXNwb25zaWJs
ZSBvZiAKKyAgICAgICAgZHJhd2luZyB0aGUgaW1hZ2UgYW5kIGFuc3dlcmluZyBOYXRpdmVJbWFn
ZVB0ciBxdWVzdGlvbnMgd2hlbiBhbiBJbWFnZURlY29kZXIKKyAgICAgICAgaXMgbm90IGF2YWls
YWJsZS4gQXBhcnQgZnJvbSBkcmF3aW5nIHRoZSBpbWFnZSwgdGhlIHF1ZXJ5IGZ1bmN0aW9ucyB3
aWxsIGJlCisgICAgICAgIGNhbGxlZCBvbmx5IHdoZW4gY29uc3RydWN0aW5nIGEgRnJhbWVEYXRh
IHNvIHdlIHdpbGwga2VlcCBldmVyeXRoaW5nIGFzIGEKKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIu
IEJ1dCB3ZSB3aWxsIGNhc3QgdGhlIE5hdGl2ZUltYWdlUHRyIHRvIFBsYXRmb3JtSW1hZ2Ugd2hl
bgorICAgICAgICBhIHBsYXRmb3JtIGRlcGVuZGVudCBmdW5jdGlvbiBpcyBuZWVkZWQuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzIC0tIENvZGUgcmVmYWN0b3JpbmcsIG5vIGJlaGF2aW9yIGNoYW5n
ZS4KKworICAgICAgICAqIFBsYXRmb3JtQXBwbGVXaW4uY21ha2U6CisgICAgICAgICogUGxhdGZv
cm1FZmwuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogUGxh
dGZvcm1NYWMuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1XaW5DYWlyby5jbWFrZToKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGlu
Z3Mvb2JqYy9ET00ubW06CisgICAgICAgICgtW0RPTU5vZGUgZ2V0UHJldmlld1NuYXBzaG90SW1h
Z2U6YW5kUmVjdHM6XSk6CisgICAgICAgICogcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5t
bToKKyAgICAgICAgKC1bV2ViVGV4dEluZGljYXRvclZpZXcgaW5pdFdpdGhGcmFtZTp0ZXh0SW5k
aWNhdG9yOm1hcmdpbjpvZmZzZXQ6XSk6CisgICAgICAgIChjcmVhdGVDb250ZW50Q3Jvc3NmYWRl
QW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3NhcnkpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBJbWFnZTo6bmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5h
dGl2ZUltYWdlT2ZTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJh
bWVzTmF0aXZlSW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpzaW5nbGVQ
aXhlbFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmlzQWxtb3N0
U29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lRGF0YTo6RnJhbWVEYXRhKToKKyAgICAgICAgbV9oYXNBbHBoYSBjYW4gYmUgaW5pdGlh
bGl6ZWQgd2l0aCBmYWxzZSBiZWNhdXNlIGl0IGlzIGFjY2Vzc2VkIG9ubHkgaW4KKyAgICAgICAg
Qml0bWFwSW1hZ2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KCkgYW5kIGl0IGlzIGd1YXJkZWQgYnkg
bV9oYXZlTWV0YWRhdGEuCisgICAgICAgIEJvdGggbV9oYXZlTWV0YWRhdGEgYW5kIG1faGFzQWxw
aGEgYXJlIHNldCBpbiBCaXRtYXBJbWFnZSBjb25zdHJ1Y3RvcgorICAgICAgICBhbmQgaW4gQml0
bWFwSW1hZ2U6OmNhY2hlRnJhbWUoKS4KKworICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp+
RnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6Y2xlYXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6
bmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2U6OmdldENHSW1hZ2VSZWYpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2U6OmdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZTo6Z2V0Q0dJbWFnZUFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1JbWFnZTo6UGxhdGZvcm1JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUltYWdlOjppc05pbCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpjZ0lt
YWdlUmVmKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9N
ZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW06CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnVwZGF0ZURpc3BsYXlNb2Rl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8u
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Qml0bWFwSW1hZ2VDYWlyby5jcHAuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpj
bGVhclN1YkltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1JbWFnZTo6c3Vic2FtcGxpbmdTY2FsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUltYWdlOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9C
aXRtYXBJbWFnZUNHLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QYXR0ZXJuQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0dGVybjo6Y3JlYXRlUGxhdGZv
cm1QYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdl
Q0cuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OmNsZWFyU3Vi
SW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6aGFzQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1JbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtSW1hZ2U6OmlzQWxtb3N0U29saWRDb2xvcik6IE1vdmVkIGZyb20gUGx1Z2luVmll
dy5jcHAgc2luY2UgUGxhdGZvcm1JbWFnZSBpcyB3aGF0IHRoaXMgZnVuY3Rpb24gYmVsb25ncyB0
by4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUpOiBS
ZXR1cm5zIHRoZSBzdWItc2FtcGxpbmcgc2NhbGUgYmFzZWQgb24gdGhlIGNvbnRleHQgc2NhbGlu
Zy4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW06Cisg
ICAgICAgIChUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hOjp1cGRhdGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjpnZXRUSUZGUmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjp1cGRhdGVQbGF0Zm9ybUxheWVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKToKKwogMjAxNi0wNy0xMSAgU2FtIFdlaW5p
ZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFNwZWVjaCBTeW50aGVzaXM6IGdldHRpbmcg
bGlzdCBvZiB2b2ljZXMgbm8gbG9uZ2VyIHdvcmtzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggYzFiYzBi
YmRlMzYxMjVjNDYyYmY0ODFkZGFkNWRkMmY4MjdkNTIzOS4uMThkMWViZWJlZTkyMGIyZjI5ZWYz
Mjg3N2RlZDJlMWVjZmY5N2Q0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisy
MDE2LTA3LTExICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisK
KyAgICAgICAgSW50cm9kdWNlIFBsYXRmb3JtSW1hZ2UgYW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVy
IGZvciBOYXRpdmVJbWFnZVB0cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBNaXNjL1dlYkNhY2hlLm1tOgorICAgICAgICAoK1tXZWJDYWNoZSBpbWFn
ZUZvclVSTDpdKToKKwogMjAxNi0wNy0xMSAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUu
Y29tPgogCiAgICAgICAgIEFkZCBzeW50aGV0aWMgY2xpY2sgb3JpZ2luIHRvIFdLTmF2aWdhdGlv
bkFjdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwppbmRleCBiNDdlMmNlYTc5YThkZDdjNTMzNWQyY2Q1OGU3OTYxNTMz
NWM1MDJjLi5mMWYxNjcyNTg0YzBlZTgxODU4YTdlOTY1NTNhY2Q5Y2QwYWM2ZmVkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTYtMDctMTEgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fi
b3VoYWxsYXdhQGFwcGxlLGNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgUGxhdGZvcm1JbWFnZSBh
bmQgbWFrZSBpdCBpcyBhIHdyYXBwZXIgZm9yIE5hdGl2ZUltYWdlUHRyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTg2ODQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9jZy9X
S0ljb25EYXRhYmFzZUNHLmNwcDoKKyAgICAgICAgKFdLSWNvbkRhdGFiYXNlVHJ5R2V0Q0dJbWFn
ZUZvclVSTCk6CisgICAgICAgIChXS0ljb25EYXRhYmFzZVRyeUNvcHlDR0ltYWdlQXJyYXlGb3JV
UkwpOgorICAgICAgICBJdCB3YXMgdGhlIG9ubHkgcGxhY2UgaW4gdGhlIGNvZGUgd2hpY2ggdXNl
cyBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZUFycmF5KCkuCisgICAgICAgIENhbGwgQml0bWFwSW1h
Z2U6OmZyYW1lc05hdGl2ZUltYWdlcygpIGluc3RlYWQgYW5kIGZvcm0gdGhlIHJldHVybmVkCisg
ICAgICAgIFZlY3RvcjxOYXRpdmVJbWFnZVB0cj4gYnVpbGQgdGhlIENGQXJyYXlSZWYuCisgICAg
ICAgIAorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1t
OgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9wcmVzZW50YXRpb25TbmFwc2hvdEZvclByZXZp
ZXdJdGVtQ29udHJvbGxlcjpdKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
Vmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OnBsdWdpblNuYXBzaG90VGlt
ZXJGaXJlZCk6CisgICAgICAgIAorICAgICAgICAoV2ViS2l0Ojppc0FsbW9zdFNvbGlkQ29sb3Ip
OiBEZWxldGVkLgorICAgICAgICBNb3ZlIHRoZSBzdGF0aWMgZnVuY3Rpb24gaXNBbG1vc3RTb2xp
ZENvbG9yIHRvIFBsYXRmb3JtSW1hZ2U6OmlzQWxtb3N0U29saWRDb2xvcigpLgorCiAyMDE2LTA3
LTExICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgW1dLMl1baU9T
XSBJbnRlcm1pdHRlbnQgY3Jhc2ggaW4gW1VJQXBwbGljYXRpb24gYmVnaW5CYWNrZ3JvdW5kVGFz
a1dpdGhOYW1lXSBleHBpcmF0aW9uIGhhbmRsZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZTc4
YjA0MmIxMDQwMWUxZjRlZTNhMmFiMWEwNTJjMjE4YzNhMTFlMy4uMjI2ZWM5Yjg0ZTcyMmZmZjNl
MmYwNGRjZTdkYjcwZTNkZDRiODNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIyMjYsNiAr
MjIyNiw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JU09W
VFRDdWUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFt
ZURhdGEuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPcmllbnRhdGlvbi5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9JbnRQb2ludC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVX
aW4uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCmluZGV4IDVm
Zjk5MWZmN2RhMzA4YmI5MTgyZWNlM2JmMTIxNzMwYTU0OGQyODcuLmJhZTMxZWFmODZlN2ZjYTkw
NTgyNTA5MmFhMzhhNzhjMTFlNDIyMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtQXBwbGVXaW4uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5j
bWFrZQpAQCAtNTUsNyArNTUsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dLQ0FDRlZpZXdMYXllclRyZWVIb3N0LmNwcAogCi0g
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9Db2xvckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9p
bnRDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAKQEAgLTc1
LDYgKzc0LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Q
YXRoQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UK
aW5kZXggNTE0NTA0ZTZlYzI1YWE1ZTQzYjk5Mzk4ZDVlMzVjZWVlYTc2NmFhNC4uNjRhZTE3MTA4
OWRjYmYwY2Q0NWI3MGE5YjhmNzBlZmE5ZmZkZWRiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21h
a2UKQEAgLTEyMiw3ICsxMjIsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9JbXBsLmNwcAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Rm9udENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZi
dXp6TkcuY3BwCkBAIC0xMzQsNiArMTMzLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxh
dGZvcm1QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fp
cm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3JtYXRpb25NYXRyaXhD
YWlyby5jcHAKQEAgLTE3OSw5ICsxNzksOSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3gxMS9YVW5pcXVlUmVzb3VyY2UuY3BwCiAKLSAgICBwbGF0Zm9ybS9p
bWFnZS1lbmNvZGVycy9KUEVHSW1hZ2VFbmNvZGVyLmNwcAorICAgIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcAogCi0gICAgcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vaW1hZ2Ut
ZW5jb2RlcnMvSlBFR0ltYWdlRW5jb2Rlci5jcHAKIAogICAgIHBsYXRmb3JtL25ldHdvcmsvZWZs
L05ldHdvcmtTdGF0ZU5vdGlmaWVyRWZsLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmlu
ZGV4IDY0NWFkZDFjZTM4ODg4YjA0ZDRhMmQ4OWFkYTBhN2M2ZGUxOTk4NmIuLmQzMWY1NzA2YTY5
NTliMjMxYjViZmIyMmYwN2QxODQzYWU4NjFhMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtl
CkBAIC0xMDEsNyArMTAxLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9JbXBsLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JhY2tpbmdTdG9yZUJhY2tlbmRDYWlyb1gxMS5j
cHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0Zsb2F0UmVjdENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ZvbnRDYWlyby5jcHAKQEAgLTExNSw2ICsxMTQsNyBAQCBsaXN0KEFQUEVORCBXZWJD
b3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9QbGF0Zm9ybVBhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9SZWZQdHJDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1h
dGlvbk1hdHJpeENhaXJvLmNwcApAQCAtMTQ5LDcgKzE0OSw3IEBAIGxpc3QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCiAgICAg
cGxhdGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5jcHAKIAotICAgIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcAogCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3RrL1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlR3RrLmNwcAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
TWFjLmNtYWtlCmluZGV4IDlmNmY0OTZiNmNjNGVmNmU0Yjc0ZDg0YWMwYWE5ZGVhNTVhMDIzN2Iu
LjRkZGVkMzA4OGY0ZjM5NmZlZjQ0NGU3ZWU2NWM2NDEwNjU4ZjU4NDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtTWFjLmNtYWtlCkBAIC0zOTcsNyArMzk3LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvV2ViU3lzdGVtQmFja2Ryb3BMYXll
ci5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1dlYlRpbGVkQmFja2luZ0xheWVy
Lm1tCiAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
RmxvYXRQb2ludENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UmVjdENHLmNw
cApAQCAtNDE3LDYgKzQxNiw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvUGF0aENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1XaW5DYWlyby5jbWFrZQppbmRleCAyYzU1M2IwNTUxZGFkNjlhYTE5OWQ5NjBmNTUyMzQz
ZDkyMGYwN2IzLi4zNDJhYTkyNzMyZmQ4ZjkyZTg1Y2ZhNjI2ZDU1NTcwZWY2NmI2YTY4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKQEAgLTIxLDcgKzIxLDYgQEAgbGlzdChB
UFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAKIAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vRmxvYXRSZWN0Q2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENh
aXJvLmNwcApAQCAtMzQsNiArMzMsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L1BsYXRmb3JtQ29udGV4dENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Bs
YXRmb3JtSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9y
bVBhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQdHJDYWlyby5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1hdHJpeENhaXJv
LmNwcApAQCAtNDYsNyArNDYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAog
Ci0gICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3Bw
CisgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vQml0bWFwUGl4ZWxzQ2Fpcm8uY3Bw
CiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvblN0dWIuY3BwCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBjMTFiYzQ3ZTVjYWQ2MzBhMzY1N2NkZTFhZDlmN2I3NmEwYTU1YzY2Li5mZjJhNDk4YmE5
NmI4MWRhMDNmODFhMzAxYTg1YmUzNzRkMGVjNjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDg0LDcgKzE0ODQsNyBAQAog
CQkzNzVDRDIzMjExOUQ0M0M4MDBBMkE4NTkgLyogSHlwaGVuYXRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NUNEMjMxMTE5RDQzQzgwMEEyQTg1
OSAvKiBIeXBoZW5hdGlvbi5oICovOyB9OwogCQkzNzZEQ0NFMTEzQjRGOTY2MDAyRUJFRkMgLyog
VGV4dFJ1bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzNzZEQ0NFMDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5jcHAgKi87IH07CiAJCTM3NzRB
QkE1MEZBMjFFQjQwMEFEN0RFOSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NzRBQkEzMEZBMjFFQjQw
MEFEN0RFOSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkzNzdBM0E5MDE1RUZDRTlCMDA1OUY1Qzcg
LyogQml0bWFwSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogQml0bWFwSW1hZ2VDRy5jcHAg
Ki87IH07CisJCTM3N0EzQTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc3QTNBOEYx
NUVGQ0U5QTAwNTlGNUM3IC8qIFBsYXRmb3JtSW1hZ2VDRy5jcHAgKi87IH07CiAJCTM3OTE5QzIz
MEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3OTE5QzIxMEI3RDE4ODYwMEE1Njk5OCAv
KiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCAqLzsgfTsKIAkJMzc5MTlDMjQwQjdEMTg4NjAwQTU2OTk4
IC8qIFBvc2l0aW9uSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDM3OTE5QzIyMEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9y
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMzc5MjkxN0ExOTg1
RUYzOTAwRjRCNjYxIC8qIENyZWRlbnRpYWxCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzkyOTE3ODE5ODVFRjM5MDBGNEI2NjEgLyogQ3JlZGVu
dGlhbEJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMjMyNSwxMCArMjMyNSwxNCBAQAogCQk1M0VEM0ZERjE2N0E4OEU3MDA2NzYyRTYgLyog
SlNJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0VEM0ZERDE2N0E4OEU3MDA2NzYyRTYgLyogSlNJbnRlcm5h
bFNldHRpbmdzR2VuZXJhdGVkLmggKi87IH07CiAJCTUzRUY3NjZCMTY1MzBBNjEwMDRDQkU0OSAv
KiBTZXR0aW5nc01hY3Jvcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTNFRjc2NkExNjUzMEE2MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi87
IH07CiAJCTUzRUY3NjZDMTY1MzE5OTQwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oIGluIENv
cHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTNFRjc2NkExNjUzMEE2MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi87IH07CisJCTU1
MDRFNENCMUQzNTU3QjIwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MDRFNENBMUQzNTUzMkQwMEZFNTA4OCAv
KiBCaXRtYXBQaXhlbHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk1NTBBMEJDOTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDNzA4
NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgKi87IH07CiAJCTU1MEEwQkNBMDg1
RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlm
aWVkTmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTU1NUI4N0VDMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTVCODdFQTFDQUFGMEFC
MDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovOyB9OwogCQk1NTVCODdFRDFDQUFGMEFC
MDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU1NUI4N0VCMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29k
ZXJDRy5oICovOyB9OworCQk1NTc0RjA4NzFEMDI3OTA5MDBCOUYxNEMgLyogUGxhdGZvcm1JbWFn
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU3NEYw
ODUxRDAyNzQ0NDAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1NUNCQTZBMTFEMURGMkUxMDA0NTE4NjAg
LyogSW1hZ2VGcmFtZURhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTVDQkE2OUYxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmNw
cCAqLzsgfTsKKwkJNTVDQkE2QTIxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUNCQTZBMDFE
MURGMkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NzJBN0YyMTFDNkU1NzE5MDA5QzYxNDkgLyog
U2ltdWxhdGVkQ2xpY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU3MkE3RjIwMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5oICovOyB9
OwogCQk1NzJBN0YyMzFDNkU1QTY2MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcyQTdGMjIxQzZFNUE2
NjAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCAqLzsgfTsKIAkJNTdFRjVFNjAxRDIwQzgz
OTAwMTcxRTYwIC8qIFRleHRDb2RlY1JlcGxhY2VtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0VGNUU1RjFEMjBDODM5MDAxNzFFNjAgLyogVGV4
dENvZGVjUmVwbGFjZW1lbnQuaCAqLzsgfTsKQEAgLTkwNjEsNyArOTA2NSw3IEBACiAJCTM3NkRD
Q0UwMTNCNEY5NjYwMDJFQkVGQyAvKiBUZXh0UnVuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFRleHRSdW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzNzcyQjA5NTE2NTM1ODU2MDAwQTQ5Q0EgLyogUG9wdXBPcGVuaW5nT2JzZXJ2ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9wdXBPcGVuaW5nT2JzZXJ2ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc3NEFCQTMwRkEyMUVCNDAwQUQ3REU5IC8qIE92
ZXJsYXBUZXN0UmVxdWVzdENsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQml0bWFwSW1hZ2VDRy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBQbGF0Zm9y
bUltYWdlQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGxhdGZv
cm1JbWFnZUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc5MTlDMjEwQjdE
MTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFBvc2l0aW9uSXRlcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkzNzkxOUMyMjBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9zaXRpb25JdGVyYXRvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzkyOTE3ODE5ODVFRjM5MDBGNEI2NjEg
LyogQ3JlZGVudGlhbEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3Jl
ZGVudGlhbEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk5ODksMTAgKzk5
OTMsMTQgQEAKIAkJNTNFRDNGREMxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJuYWxTZXR0aW5n
c0dlbmVyYXRlZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0lu
dGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1M0VEM0ZERDE2N0E4OEU3MDA2NzYyRTYgLyogSlNJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVk
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50ZXJuYWxTZXR0aW5nc0dl
bmVyYXRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0VGNzY2QTE2NTMwQTYx
MDA0Q0JFNDkgLyogU2V0dGluZ3NNYWNyb3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2V0dGluZ3NNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTUw
NEU0Q0ExRDM1NTMyRDAwRkU1MDg4IC8qIEJpdG1hcFBpeGVscy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBC
aXRtYXBQaXhlbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTUwQTBCQzcwODVG
NjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1NTBB
MEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZWROYW1lLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1NTVC
ODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VEZWNvZGVyQ0cuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVy
Q0cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VEZWNvZGVyQ0cuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTU3NEYwODUxRDAyNzQ0NDAwQjlGMTRDIC8q
IFBsYXRmb3JtSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1NUNCQTY5RjFEMURGMkUxMDA0NTE4NjAgLyogSW1hZ2VG
cmFtZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VG
cmFtZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NUNCQTZBMDFEMURG
MkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW1hZ2VGcmFtZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTVENDA4RjcxQTdDNjMxODAwQzc4NDUwIC8qIFNWR0ltYWdlQ2xpZW50cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdJbWFnZUNsaWVudHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTcyQTdGMjAxQzZFNTcxOTAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNr
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXVsYXRlZENsaWNrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MkE3RjIyMUM2RTVBNjYwMDlDNjE0OSAvKiBT
aW11bGF0ZWRDbGljay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
aW11bGF0ZWRDbGljay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjAyNCw3
ICsyMjAzMiw2IEBACiAJCUIyNzUzNTI5MEIwNTM4MTQwMDJDRTY0RiAvKiBjZyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMzc3QTNBOEYxNUVGQ0U5QTAw
NTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovLAogCQkJCTBGQ0YzMzIzMEYyQjk3MTUwMDRC
Njc5NSAvKiBDb2xvckNHLmNwcCAqLywKIAkJCQlCMjc1MzUyQjBCMDUzODE0MDAyQ0U2NEYgLyog
RmxvYXRQb2ludENHLmNwcCAqLywKIAkJCQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxv
YXRSZWN0Q0cuY3BwICovLApAQCAtMjIwNTEsNiArMjIwNTgsNyBAQAogCQkJCUE4MEEzOEZEMEU1
MENDODIwMEEyNUVCQyAvKiBQYXR0ZXJuQ0cuY3BwICovLAogCQkJCUIyNzUzNTM2MEIwNTM4MTQw
MDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmNwcCAqLywKIAkJCQlCMjc1MzUzNzBCMDUzODE0
MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5oICovLAorCQkJCTM3N0EzQThGMTVFRkNFOUEw
MDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwICovLAogCQkJCTFGQzQwRkI4MTY1NUM1OTEw
MDQwRjI5RSAvKiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcCAqLywKIAkJCQkxRkM0MEZCNzE2
NTVDNTkxMDA0MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5oICovLAogCQkJCUIyNzUz
NTJBMEIwNTM4MTQwMDJDRTY0RiAvKiBUcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcCAqLywKQEAg
LTIyMTE4LDYgKzIyMTI2LDcgQEAKIAkJCQlCRUYyOUVFOTE3MTVERDA5MDBDNEI0QzkgLyogQXVk
aW9UcmFja1ByaXZhdGUuaCAqLywKIAkJCQlBODk5NDMyNzBCNDIzMzg3MDBEN0M4MDIgLyogQml0
bWFwSW1hZ2UuY3BwICovLAogCQkJCUE4OTk0MzI2MEI0MjMzODcwMEQ3QzgwMiAvKiBCaXRtYXBJ
bWFnZS5oICovLAorCQkJCTU1MDRFNENBMUQzNTUzMkQwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMu
aCAqLywKIAkJCQlDRERFMDJFOTE4QjNERkM3MDBDRjdGRjEgLyogQ0RNU2Vzc2lvbi5oICovLAog
CQkJCUIyNzUzNTM4MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5jcHAgKi8sCiAJCQkJQjI3NTM1
MzkwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmggKi8sCkBAIC0yMjIwMiw2ICsyMjIxMSw4IEBA
CiAJCQkJNDNEMjU5NzYxM0M4MTZGNDAwNjA4NTU5IC8qIEltYWdlQnVmZmVyLmNwcCAqLywKIAkJ
CQlCMkExMEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLywKIAkJCQkyMkJE
OUY3RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi8sCisJCQkJNTVDQkE2
OUYxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmNwcCAqLywKKwkJCQk1NUNCQTZB
MDFEMURGMkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCAqLywKIAkJCQlCQzdGNDRBNzBC
OUUzMjRFMDBBOUQwODEgLyogSW1hZ2VPYnNlcnZlci5oICovLAogCQkJCUE4NzQ4RDc0MTJDQzNG
ODkwMDFGQkE0MSAvKiBJbWFnZU9yaWVudGF0aW9uLmNwcCAqLywKIAkJCQlBODc0OEQ2NjEyQ0Mz
NzYzMDAxRkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5oICovLApAQCAtMjIyNTEsNiArMjIyNjIs
NyBAQAogCQkJCTJENTAwMkZBMUI1NkQ3OTkwMDIwQUFGNyAvKiBQYXRoVXRpbGl0aWVzLmggKi8s
CiAJCQkJQThGQTZFNUMwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwICovLAogCQkJCUE4
RkE2RTVCMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggKi8sCisJCQkJNTU3NEYwODUxRDAy
NzQ0NDAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCAqLywKIAkJCQkwNTYyRjk2MDE1NzNGODhG
MDAzMUNBMTYgLyogUGxhdGZvcm1MYXllci5oICovLAogCQkJCUNFRUZDRDdCMTlEQjMzREMwMDM4
NzZENyAvKiBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQkwNzI4NDdFMjE2
RUJDNUIwMDA0M0NGQTQgLyogUGxhdGZvcm1UZXh0VHJhY2suaCAqLywKQEAgLTI2MDE4LDYgKzI2
MDMwLDcgQEAKIAkJCQk4NUU3MTFCOTBBQzVENTM1MDA1MzI3MEYgLyogRE9NSFRNTE1hcEVsZW1l
bnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1MTU3OUYwQzAzQkJEMzAwOEJCMEVF
IC8qIERPTUhUTUxNYXJxdWVlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1MTU2RUEw
QzAzQjc0MTAwOEJCMEVFIC8qIERPTUhUTUxNYXJxdWVlRWxlbWVudEludGVybmFsLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1NTc0RjA4NzFEMDI3OTA5MDBCOUYxNEMgLyogUGxhdGZvcm1JbWFnZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkRFQzY2NTUxQzgyRDA0MTAwOTk4NDZBIC8qIERPTUhUTUxN
ZWRpYUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERUM2NjUxMUM4MkQwMTYwMDk5ODQ2
QSAvKiBET01IVE1MTWVkaWFFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1
QkE0RDEzMEFBNjg4NjgwMDg4MDUyRCAvKiBET01IVE1MTWVudUVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjY0NTksNiArMjY0NzIsNyBAQAogCQkJCUQzNTlENzhBMTI5Q0EyNzEwMDA2RTVE
MiAvKiBIVE1MRGV0YWlsc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE3OUZBMEEx
OTE2REYwMEE4RUY1RiAvKiBIVE1MRGlyZWN0b3J5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThFQTdDQjcwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxEaXZFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk1NUNCQTZBMjFEMURGMkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4RUE3OUY3MEExOTE2REYwMEE4RUY1RiAvKiBIVE1MRExpc3RF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOThFNTA4MjQ1RTU5MDAxRTlBQkMgLyog
SFRNTERvY3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdCMzg2NzEyMjg4M0U5MDBCODFG
RjggLyogSFRNTERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTI4MzU5LDYgKzI4
MzczLDcgQEAKIAkJCQlCMjIyNzk5MzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OTk1MEQwMEJGMjIwMDcxQjc4MiAv
KiBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5
OTgwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0FuaW1hdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTU1MDRFNENCMUQzNTU3QjIwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQzOUQzMzQ1MTNBNjkxMUMwMEMyMEY0RiAvKiBTVkdBbmltYXRvckZhY3Rv
cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4RkIzRjg0MTNCQzc1NEMwMDk5RkMxOCAvKiBTVkdB
dHRyaWJ1dGVUb1Byb3BlcnR5TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk5QzBEMDBC
RjIyMDA3MUI3ODIgLyogU1ZHQ2lyY2xlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTQx
MSw3ICsyOTQyNiw3IEBACiAJCQkJRkRDNTRGMDQxMzk5QjBEQTAwOEQ5MTE3IC8qIEJpcXVhZEZp
bHRlck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTYwMjYxMkIwMjY3NjAwQzFBMzU5
IC8qIEJpcXVhZFByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODk5NDMyOTBCNDIz
Mzg4MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzc3QTNB
OTAxNUVGQ0U5QjAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3IC8qIFBsYXRmb3JtSW1hZ2VDRy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5NzZENkM3ODEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkyRURFRjFGMzEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYkRhdGEuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRTFEMzFDREMxOTE5NjAyMDAwMTAwNUEzIC8qIEJsb2JEYXRhRmls
ZVJlZmVyZW5jZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5Nzc0LDYgKzI5Nzg5LDcgQEAKIAkJ
CQkyRTJEOTlFODEwRTJCQzFDMDA0OTYzMzcgLyogRE9NQmxvYi5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTg1MDg5Q0Q4MEE5OEM0MjgwMEEyNzVBQSAvKiBET01DREFUQVNlY3Rpb24ubW0gaW4gU291
cmNlcyAqLywKIAkJCQk4NUFDQTk4NzBBOUI1MjAzMDA2NzFFOTAgLyogRE9NQ2hhcmFjdGVyRGF0
YS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTU1Q0JBNkExMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFn
ZUZyYW1lRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTA4OUNEQTBBOThDNDI4MDBBMjc1
QUEgLyogRE9NQ29tbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTk3OEQwN0JFMTQ1QTBGNkMw
MDk2OTA4RCAvKiBET01Db3JlRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1OEMz
OEE2MEFBOEYyMDQwMEIxODdBNCAvKiBET01Db3VudGVyLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbSBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCmluZGV4IDQwMTFlYTNmZDhjMDQ2OTc0YzU1ZDQ4ZTM5
NmYxYjgzYjgxZjMzNWQuLmE1YWM0ZjA1YWUzMzlhOGQ2NDcwNmMxMGZjMGY3YWY0MDQyNTYyM2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCkBAIC02MDYsNyArNjA2LDcgQEAgLSAo
dm9pZClnZXRQcmV2aWV3U25hcHNob3RJbWFnZTooQ0dJbWFnZVJlZiopY2dJbWFnZSBhbmRSZWN0
czooTlNBcnJheSAqKilyZWN0cwogCiAgICAgaWYgKHRleHRJbmRpY2F0b3IpIHsKICAgICAgICAg
aWYgKEltYWdlKiBpbWFnZSA9IHRleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpKQotICAgICAg
ICAgICAgKmNnSW1hZ2UgPSAoQ0dJbWFnZVJlZilDRkF1dG9yZWxlYXNlKENHSW1hZ2VSZXRhaW4o
aW1hZ2UtPmdldENHSW1hZ2VSZWYoKSkpOworICAgICAgICAgICAgKmNnSW1hZ2UgPSBpbWFnZS0+
bmF0aXZlSW1hZ2UoKS5hdXRvcmVsZWFzZSgpOwogICAgIH0KIAogICAgIFJldGFpblB0cjxOU011
dGFibGVBcnJheT4gcmVjdEFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0XSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9y
V2luZG93Lm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5t
bQppbmRleCAzNjRhOWE4N2NlNmYwNjYzOTQ4Yjg4NDZlOGUyY2U2ZDE5MGYyNDg5Li5hNzRkYTg1
YWNlY2EzYzY2OThkZDE1NmFiMzFhNmM5NzFhMzU0ZTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cubW0KQEAgLTE2Miw5ICsxNjIsOSBAQCAtIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIHRleHRJbmRpY2F0b3I6KFBh
c3NSZWZQdHI8VGV4dEluZGljYQogICAgIGNvbnRlbnRzSW1hZ2VMb2dpY2FsU2l6ZS5zY2FsZSgx
IC8gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yKCkpOwogICAgIFJldGFp
blB0cjxDR0ltYWdlUmVmPiBjb250ZW50c0ltYWdlOwogICAgIGlmIChpbmRpY2F0b3JXYW50c0Nv
bnRlbnRDcm9zc2ZhZGUoKl90ZXh0SW5kaWNhdG9yKSkKLSAgICAgICAgY29udGVudHNJbWFnZSA9
IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0KCktPmdldENHSW1hZ2VS
ZWYoKTsKKyAgICAgICAgY29udGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1h
Z2VXaXRoSGlnaGxpZ2h0KCktPm5hdGl2ZUltYWdlKCk7CiAgICAgZWxzZQotICAgICAgICBjb250
ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpLT5nZXRDR0ltYWdlUmVm
KCk7CisgICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdl
KCktPm5hdGl2ZUltYWdlKCk7CiAKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGJvdW5j
ZUxheWVycyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwogCkBAIC0y
NjUsNyArMjY1LDcgQEAgc3RhdGljIFJldGFpblB0cjxDQUtleWZyYW1lQW5pbWF0aW9uPiBjcmVh
dGVCb3VuY2VBbmltYXRpb24oQ0ZUaW1lSW50ZXJ2YWwgZHVyYXQKIHN0YXRpYyBSZXRhaW5QdHI8
Q0FCYXNpY0FuaW1hdGlvbj4gY3JlYXRlQ29udGVudENyb3NzZmFkZUFuaW1hdGlvbihDRlRpbWVJ
bnRlcnZhbCBkdXJhdGlvbiwgVGV4dEluZGljYXRvciYgdGV4dEluZGljYXRvcikKIHsKICAgICBS
ZXRhaW5QdHI8Q0FCYXNpY0FuaW1hdGlvbj4gY3Jvc3NmYWRlQW5pbWF0aW9uID0gW0NBQmFzaWNB
bmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6QCJjb250ZW50cyJdOwotICAgIFJldGFpblB0
cjxDR0ltYWdlUmVmPiBjb250ZW50c0ltYWdlID0gdGV4dEluZGljYXRvci5jb250ZW50SW1hZ2Uo
KS0+Z2V0Q0dJbWFnZVJlZigpOworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb250ZW50c0lt
YWdlID0gdGV4dEluZGljYXRvci5jb250ZW50SW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKTsKICAgICBb
Y3Jvc3NmYWRlQW5pbWF0aW9uIHNldFRvVmFsdWU6KGlkKWNvbnRlbnRzSW1hZ2UuZ2V0KCldOwog
ICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0RmlsbE1vZGU6a0NBRmlsbE1vZGVGb3J3YXJkc107
CiAgICAgW2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRSZW1vdmVkT25Db21wbGV0aW9uOk5PXTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAppbmRl
eCA0NjBkMWI4NTZiNzdiN2NmNGVjNjg5NjU4MWI4MzNkM2U3Zjk3MDE0Li5mYzY0OWQxMGFhYjlj
MTNmZmYyOTMwNTVhNzA3Y2I3NDUzNzQ2OTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCkBAIC02OCwxNSArNjgsMTMgQEAgQml0bWFw
SW1hZ2U6OkJpdG1hcEltYWdlKE5hdGl2ZUltYWdlUHRyJiYgaW1hZ2UsIEltYWdlT2JzZXJ2ZXIq
IG9ic2VydmVyKQogICAgICwgbV9oYXZlRnJhbWVDb3VudCh0cnVlKQogICAgICwgbV9hbmltYXRp
b25GaW5pc2hlZFdoZW5DYXRjaGluZ1VwKGZhbHNlKQogeworICAgIG1fZnJhbWVzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoMSk7CisgICAgbV9mcmFtZXMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUo
aW1hZ2UpKTsKKyAgICAKICAgICAvLyBTaW5jZSB3ZSBkb24ndCBoYXZlIGEgZGVjb2Rlciwgd2Ug
Y2FuJ3QgZmlndXJlIG91dCB0aGUgaW1hZ2Ugb3JpZW50YXRpb24uCiAgICAgLy8gU2V0IG1fc2l6
ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiB0byBiZSB0aGUgc2FtZSBhcyBtX3NpemUgc28gaXQncyBu
b3QgMHgwLgotICAgIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiA9IG1fc2l6ZSA9IE5hdGl2
ZUltYWdlOjpzaXplKGltYWdlKTsKKyAgICBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBt
X3NpemUgPSBtX2ZyYW1lc1swXS5zaXplKCk7CiAgICAgbV9kZWNvZGVkU2l6ZSA9IG1fc2l6ZS5h
cmVhKCkgKiA0OwotICAgIAotICAgIG1fZnJhbWVzLmdyb3coMSk7Ci0gICAgbV9mcmFtZXNbMF0u
bV9oYXNBbHBoYSA9IE5hdGl2ZUltYWdlOjpoYXNBbHBoYShpbWFnZSk7Ci0gICAgbV9mcmFtZXNb
MF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOwotICAgIG1fZnJhbWVzWzBdLm1faW1hZ2UgPSBXVEZN
b3ZlKGltYWdlKTsKIH0KIAogQml0bWFwSW1hZ2U6On5CaXRtYXBJbWFnZSgpCkBAIC0xMDUsNyAr
MTAzLDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6aGF2ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBp
bmRleCkKICAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2U7CisgICAgcmV0dXJu
IG1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpOwogfQogCiBib29sIEJpdG1hcEltYWdlOjpoYXNT
aW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0CkBAIC0xMjUsOSArMTIzLDcgQEAgdm9pZCBCaXRt
YXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKGJvb2wgZGVzdHJveUFsbCkKICAgICAgICAgLy8g
VGhlIHVuZGVybHlpbmcgZnJhbWUgaXNuJ3QgYWN0dWFsbHkgY2hhbmdpbmcgKHdlJ3JlIGp1c3Qg
dHJ5aW5nIHRvCiAgICAgICAgIC8vIHNhdmUgdGhlIG1lbW9yeSBmb3IgdGhlIGZyYW1lYnVmZmVy
IGRhdGEpLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNsZWFyCiAgICAgICAgIC8vIHRoZSBtZXRhZGF0
YS4KLSAgICAgICAgdW5zaWduZWQgZnJhbWVCeXRlcyA9IG1fZnJhbWVzW2ldLm1fZnJhbWVCeXRl
czsKLSAgICAgICAgaWYgKG1fZnJhbWVzW2ldLmNsZWFyKGZhbHNlKSkKLSAgICAgICAgICAgIGZy
YW1lQnl0ZXNDbGVhcmVkICs9IGZyYW1lQnl0ZXM7CisgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVk
ICs9IG1fZnJhbWVzW2ldLmNsZWFyKEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRhZGF0YSk7
CiAgICAgfQogCiAgICAgbV9zb3VyY2UuY2xlYXIoZGVzdHJveUFsbCwgY2xlYXJCZWZvcmVGcmFt
ZSwgZGF0YSgpLCBtX2FsbERhdGFSZWNlaXZlZCk7CkBAIC0xNTAsOCArMTQ2LDggQEAgdm9pZCBC
aXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3NhcnkoYm9vbCBkZXN0cm95QWxs
KQogICAgICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBhbGxGcmFtZUJ5dGVzID0gMDsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVzLnNpemUoKTsgKytpKQotICAgICAgICBh
bGxGcmFtZUJ5dGVzICs9IG1fZnJhbWVzW2ldLnVzZWRGcmFtZUJ5dGVzKCk7CisgICAgZm9yIChh
dXRvJiBmcmFtZSA6IG1fZnJhbWVzKQorICAgICAgICBhbGxGcmFtZUJ5dGVzICs9IGZyYW1lLmZy
YW1lQnl0ZXMoKTsKIAogICAgIGlmIChhbGxGcmFtZUJ5dGVzID4gbGFyZ2VBbmltYXRpb25DdXRv
ZmYpIHsKICAgICAgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdlICVwIGRlc3Ryb3lEZWNvZGVk
RGF0YUlmTmVjZXNzYXJ5IGRlc3Ryb3lpbmdEYXRhOiBhbGxGcmFtZUJ5dGVzPSV1IGN1dG9mZj0l
dSIsIHRoaXMsIGFsbEZyYW1lQnl0ZXMsIGxhcmdlQW5pbWF0aW9uQ3V0b2ZmKTsKQEAgLTE3Nyw3
ICsxNzMsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkZXN0cm95TWV0YWRhdGFBbmROb3RpZnkodW5z
aWduZWQgZnJhbWVCeXRlc0NsZWFyZWQsIENsZWFyZWRTbwogICAgICAgICBpbWFnZU9ic2VydmVy
KCktPmRlY29kZWRTaXplQ2hhbmdlZCh0aGlzLCAtc2FmZUNhc3Q8aW50PihmcmFtZUJ5dGVzQ2xl
YXJlZCkpOwogfQogCi12b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwg
U3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lQ2FjaGluZyBmcmFt
ZUNhY2hpbmcpCit2b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vi
c2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyBj
YWNoaW5nKQogewogICAgIHNpemVfdCBudW1GcmFtZXMgPSBmcmFtZUNvdW50KCk7CiAgICAgQVNT
RVJUKG1fZGVjb2RlZFNpemUgPT0gMCB8fCBudW1GcmFtZXMgPiAxKTsKQEAgLTE4NSwyNSArMTgx
LDEyIEBAIHZvaWQgQml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUoc2l6ZV90IGluZGV4LCBTdWJzYW1w
bGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIEltCiAgICAgaWYgKG1fZnJhbWVzLnNpemUoKSA8
IG51bUZyYW1lcykKICAgICAgICAgbV9mcmFtZXMuZ3JvdyhudW1GcmFtZXMpOwogCi0gICAgaWYg
KGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhQW5kRnJhbWUpIHsKLSAgICAgICAgbV9mcmFt
ZXNbaW5kZXhdLm1faW1hZ2UgPSBtX3NvdXJjZS5jcmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRl
eCwgc3Vic2FtcGxpbmdMZXZlbCk7Ci0gICAgICAgIG1fZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBs
aW5nTGV2ZWwgPSBzdWJzYW1wbGluZ0xldmVsOwotICAgIH0KLQotICAgIG1fZnJhbWVzW2luZGV4
XS5tX29yaWVudGF0aW9uID0gbV9zb3VyY2Uub3JpZW50YXRpb25BdEluZGV4KGluZGV4KTsKLSAg
ICBtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOwotICAgIG1fZnJhbWVzW2lu
ZGV4XS5tX2lzQ29tcGxldGUgPSBtX3NvdXJjZS5mcmFtZUlzQ29tcGxldGVBdEluZGV4KGluZGV4
KTsKKyAgICBtX2ZyYW1lc1tpbmRleF0gPSBtX3NvdXJjZS5jcmVhdGVGcmFtZURhdGFBdEluZGV4
KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsLCBjYWNoaW5nKTsKIAotICAgIGlmIChyZXBldGl0aW9u
Q291bnQoZmFsc2UpICE9IGNBbmltYXRpb25Ob25lKQotICAgICAgICBtX2ZyYW1lc1tpbmRleF0u
bV9kdXJhdGlvbiA9IG1fc291cmNlLmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KTsKKyAgICBM
T0coSW1hZ2VzLCAiQml0bWFwSW1hZ2UgJXAgY2FjaGVGcmFtZSAlbHUgKCVzJXUgYnl0ZXMsIGNv
bXBsZXRlICVkKSIsIHRoaXMsIGluZGV4LCBjYWNoaW5nID09IEltYWdlRnJhbWVEYXRhOjpDYWNo
aW5nOjpNZXRhZGF0YSA/ICJtZXRhZGF0YSBvbmx5LCAiIDogIiIsIG1fZnJhbWVzW2luZGV4XS5m
cmFtZUJ5dGVzKCksIG1fZnJhbWVzW2luZGV4XS5pc0NvbXBsZXRlKCkpOwogCi0gICAgbV9mcmFt
ZXNbaW5kZXhdLm1faGFzQWxwaGEgPSBtX3NvdXJjZS5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRl
eCk7Ci0gICAgbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWVCeXRlcyA9IG1fc291cmNlLmZyYW1lQnl0
ZXNBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsKLQotICAgIExPRyhJbWFnZXMsICJC
aXRtYXBJbWFnZSAlcCBjYWNoZUZyYW1lICVsdSAoJXMldSBieXRlcywgY29tcGxldGUgJWQpIiwg
dGhpcywgaW5kZXgsIGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhT25seSA/ICJtZXRhZGF0
YSBvbmx5LCAiIDogIiIsIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXMsIG1fZnJhbWVzW2lu
ZGV4XS5tX2lzQ29tcGxldGUpOwotCi0gICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKSB7
Ci0gICAgICAgIGludCBkZWx0YUJ5dGVzID0gc2FmZUNhc3Q8aW50PihtX2ZyYW1lc1tpbmRleF0u
bV9mcmFtZUJ5dGVzKTsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhdLmhhc0ltYWdlKCkpIHsKKyAg
ICAgICAgaW50IGRlbHRhQnl0ZXMgPSBzYWZlQ2FzdDxpbnQ+KG1fZnJhbWVzW2luZGV4XS5mcmFt
ZUJ5dGVzKCkpOwogICAgICAgICBtX2RlY29kZWRTaXplICs9IGRlbHRhQnl0ZXM7CiAgICAgICAg
IC8vIFRoZSBmdWxseS1kZWNvZGVkIGZyYW1lIHdpbGwgc3Vic3VtZSB0aGUgcGFydGlhbGx5IGRl
Y29kZWQgZGF0YSB1c2VkCiAgICAgICAgIC8vIHRvIGRldGVybWluZSBpbWFnZSBwcm9wZXJ0aWVz
LgpAQCAtMjg4LDIxICsyNzEsMTkgQEAgYm9vbCBCaXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQoYm9v
bCBhbGxEYXRhUmVjZWl2ZWQpCiAgICAgLy8gZnJhbWUgYWZmZWN0ZWQgYnkgYXBwZW5kaW5nIG5l
dyBkYXRhIGhlcmUuIFRodXMgd2UgaGF2ZSB0byBjbGVhciBhbGwgdGhlCiAgICAgLy8gaW5jb21w
bGV0ZSBmcmFtZXMgdG8gYmUgc2FmZS4KICAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQ2xlYXJlZCA9
IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lcy5zaXplKCk7ICsraSkgewor
ICAgIGZvciAoYXV0byYgZnJhbWUgOiBtX2ZyYW1lcykgewogICAgICAgICAvLyBOT1RFOiBEb24n
dCBjYWxsIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoKSBoZXJlLCB0aGF0IHdpbGwgdHJ5IHRvCiAg
ICAgICAgIC8vIGRlY29kZSBhbnkgdW5jYWNoZWQgKGkuZS4gbmV2ZXItZGVjb2RlZCBvcgogICAg
ICAgICAvLyBjbGVhcmVkLW9uLWEtcHJldmlvdXMtcGFzcykgZnJhbWVzIQotICAgICAgICB1bnNp
Z25lZCBmcmFtZUJ5dGVzID0gbV9mcmFtZXNbaV0ubV9mcmFtZUJ5dGVzOwotICAgICAgICBpZiAo
bV9mcmFtZXNbaV0ubV9oYXZlTWV0YWRhdGEgJiYgIW1fZnJhbWVzW2ldLm1faXNDb21wbGV0ZSkK
LSAgICAgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IChtX2ZyYW1lc1tpXS5jbGVhcih0cnVl
KSA/IGZyYW1lQnl0ZXMgOiAwKTsKKyAgICAgICAgaWYgKGZyYW1lLmhhc01ldGFkYXRhKCkgJiYg
IWZyYW1lLmlzQ29tcGxldGUoKSkKKyAgICAgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IGZy
YW1lLmNsZWFyKEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpFbXB0eSk7CiAgICAgfQogICAgIGRl
c3Ryb3lNZXRhZGF0YUFuZE5vdGlmeShmcmFtZUJ5dGVzQ2xlYXJlZCwgQ2xlYXJlZFNvdXJjZTo6
Tm8pOwogI2Vsc2UKICAgICAvLyBGSVhNRTogd2h5IGlzIHRoaXMgZGlmZmVyZW50IGZvciBpT1M/
CiAgICAgaW50IGRlbHRhQnl0ZXMgPSAwOwogICAgIGlmICghbV9mcmFtZXMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGludCBieXRlcyA9IG1fZnJhbWVzW21fZnJhbWVzLnNpemUoKSAtIDFdLm1fZnJh
bWVCeXRlczsKLSAgICAgICAgaWYgKG1fZnJhbWVzW21fZnJhbWVzLnNpemUoKSAtIDFdLmNsZWFy
KHRydWUpKSB7CisgICAgICAgIGlmIChpbnQgYnl0ZXMgPSBtX2ZyYW1lc1ttX2ZyYW1lcy5zaXpl
KCkgLSAxXS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6RW1wdHkpKSB7CiAgICAgICAg
ICAgICBkZWx0YUJ5dGVzICs9IGJ5dGVzOwogICAgICAgICAgICAgZGVsdGFCeXRlcyArPSBtX2Rl
Y29kZWRQcm9wZXJ0aWVzU2l6ZTsKICAgICAgICAgICAgIG1fZGVjb2RlZFByb3BlcnRpZXNTaXpl
ID0gMDsKQEAgLTM2NiwxNSArMzQ3LDE1IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmlzU2l6ZUF2YWls
YWJsZSgpCiAgICAgcmV0dXJuIG1fc2l6ZUF2YWlsYWJsZTsKIH0KIAotYm9vbCBCaXRtYXBJbWFn
ZTo6ZW5zdXJlRnJhbWVJc0NhY2hlZChzaXplX3QgaW5kZXgsIEltYWdlRnJhbWVDYWNoaW5nIGZy
YW1lQ2FjaGluZykKK2Jvb2wgQml0bWFwSW1hZ2U6OmVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90
IGluZGV4LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyBjYWNoaW5nKQogewogICAgIGlmIChpbmRl
eCA+PSBmcmFtZUNvdW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChpbmRl
eCA+PSBtX2ZyYW1lcy5zaXplKCkKLSAgICAgICAgfHwgKGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1l
dGFkYXRhQW5kRnJhbWUgJiYgIW1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKQotICAgICAgICB8fCAo
ZnJhbWVDYWNoaW5nID09IENhY2hlTWV0YWRhdGFPbmx5ICYmICFtX2ZyYW1lc1tpbmRleF0ubV9o
YXZlTWV0YWRhdGEpKQotICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwLCBmcmFtZUNhY2hpbmcp
OworICAgICAgICB8fCAoY2FjaGluZyA9PSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRh
dGFBbmRJbWFnZSAmJiAhbV9mcmFtZXNbaW5kZXhdLmhhc0ltYWdlKCkpCisgICAgICAgIHx8IChj
YWNoaW5nID09IEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRhZGF0YSAmJiAhbV9mcmFtZXNb
aW5kZXhdLmhhc01ldGFkYXRhKCkpKQorICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwLCBjYWNo
aW5nKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMzg4LDEwICszNjksOSBAQCBOYXRpdmVJ
bWFnZVB0ciBCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBmbG9h
dCBwcmVzZW50YXRpb25TYwogCiAgICAgLy8gV2UgbWF5IGhhdmUgY2FjaGVkIGEgZnJhbWUgd2l0
aCBhIGhpZ2hlciBzdWJzYW1wbGluZyBsZXZlbCwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkIHRvCiAg
ICAgLy8gcmUtZGVjb2RlIHdpdGggYSBsb3dlciBsZXZlbC4KLSAgICBpZiAoaW5kZXggPCBtX2Zy
YW1lcy5zaXplKCkgJiYgbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2UgJiYgc3Vic2FtcGxpbmdMZXZl
bCA8IG1fZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBsaW5nTGV2ZWwpIHsKKyAgICBpZiAoaW5kZXgg
PCBtX2ZyYW1lcy5zaXplKCkgJiYgbV9mcmFtZXNbaW5kZXhdLmhhc0ltYWdlKCkgJiYgc3Vic2Ft
cGxpbmdMZXZlbCA8IG1fZnJhbWVzW2luZGV4XS5zdWJzYW1wbGluZ0xldmVsKCkpIHsKICAgICAg
ICAgLy8gSWYgdGhlIGltYWdlIGlzIGFscmVhZHkgY2FjaGVkLCBidXQgYXQgdG9vIHNtYWxsIGEg
c2l6ZSwgcmUtZGVjb2RlIGEgbGFyZ2VyIHZlcnNpb24uCi0gICAgICAgIGludCBzaXplQ2hhbmdl
ID0gLW1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIG1fZnJhbWVzW2luZGV4
XS5jbGVhcih0cnVlKTsKKyAgICAgICAgaW50IHNpemVDaGFuZ2UgPSAtbV9mcmFtZXNbaW5kZXhd
LmNsZWFyKEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpFbXB0eSk7CiAgICAgICAgIGludmFsaWRh
dGVQbGF0Zm9ybURhdGEoKTsKICAgICAgICAgbV9kZWNvZGVkU2l6ZSArPSBzaXplQ2hhbmdlOwog
ICAgICAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQpAQCAtMzk5LDQwICszNzksNzIgQEAgTmF0aXZl
SW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgZmxv
YXQgcHJlc2VudGF0aW9uU2MKICAgICB9CiAKICAgICAvLyBJZiB3ZSBoYXZlbid0IGZldGNoZWQg
YSBmcmFtZSB5ZXQsIGRvIHNvLgotICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkgfHwg
IW1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKQotICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCBzdWJz
YW1wbGluZ0xldmVsLCBDYWNoZU1ldGFkYXRhQW5kRnJhbWUpOworICAgIGlmIChpbmRleCA+PSBt
X2ZyYW1lcy5zaXplKCkgfHwgIW1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpKQorICAgICAgICBj
YWNoZUZyYW1lKGluZGV4LCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGlu
Zzo6TWV0YWRhdGFBbmRJbWFnZSk7CisKKyAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLmltYWdl
KCk7Cit9CisgICAgCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2UoKQor
eworICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKTsKK30KKyAgICAKK05hdGl2ZUltYWdl
UHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQor
eworICAgIHNpemVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKKyAgICAKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1h
Z2VBdEluZGV4KGkpOworICAgICAgICBpZiAoaW1hZ2UgJiYgUGxhdGZvcm1JbWFnZShpbWFnZSku
c2l6ZSgpID09IHNpemUpCisgICAgICAgICAgICByZXR1cm4gaW1hZ2U7CisgICAgfQorICAgIAor
ICAgIC8vIEZhbGxiYWNrIHRvIHRoZSBmaXJzdCBmcmFtZSBpbWFnZSBpZiB3ZSBjYW4ndCBmaW5k
IHRoZSByaWdodCBzaXplCisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KDApOworfQorICAg
IAorTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCkKK3sKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOworfQog
Ci0gICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOworVmVjdG9yPE5hdGl2ZUltYWdl
UHRyPiBCaXRtYXBJbWFnZTo6ZnJhbWVzTmF0aXZlSW1hZ2VzKCkKK3sKKyAgICBWZWN0b3I8TmF0
aXZlSW1hZ2VQdHI+IGltYWdlczsKKyAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7Cisg
ICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGlm
IChhdXRvIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkpCisgICAgICAgICAgICBpbWFnZXMu
YXBwZW5kKGltYWdlKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGltYWdlczsKIH0KIAogYm9v
bCBCaXRtYXBJbWFnZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCiB7Ci0g
ICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBDYWNoZU1ldGFkYXRhT25seSkpCisg
ICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGlu
Zzo6TWV0YWRhdGEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbV9mcmFt
ZXNbaW5kZXhdLm1faXNDb21wbGV0ZTsKKyAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLmlzQ29t
cGxldGUoKTsKIH0KIAogZmxvYXQgQml0bWFwSW1hZ2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNp
emVfdCBpbmRleCkKIHsKLSAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQoaW5kZXgsIENhY2hl
TWV0YWRhdGFPbmx5KSkKKyAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQoaW5kZXgsIEltYWdl
RnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRhZGF0YSkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAg
cmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2R1cmF0aW9uOwotfQotCi1OYXRpdmVJbWFnZVB0ciBC
aXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKQotewotICAgIHJldHVybiBm
cmFtZUltYWdlQXRJbmRleChjdXJyZW50RnJhbWUoKSk7CisgICAgcmV0dXJuIG1fZnJhbWVzW2lu
ZGV4XS5kdXJhdGlvbigpOwogfQogCiBib29sIEJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJ
bmRleChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4
LCBDYWNoZU1ldGFkYXRhT25seSkpCisgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4
LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEpCi0gICAgICAgIHJl
dHVybiBtX2ZyYW1lc1tpbmRleF0ubV9oYXNBbHBoYTsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhd
Lmhhc01ldGFkYXRhKCkpCisgICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0uaGFzQWxwaGEo
KTsKIAogICAgIHJldHVybiBtX3NvdXJjZS5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRleCk7CiB9
CkBAIC00NDQsMTEgKzQ1NiwxMSBAQCBib29sIEJpdG1hcEltYWdlOjpjdXJyZW50RnJhbWVLbm93
blRvQmVPcGFxdWUoKQogCiBJbWFnZU9yaWVudGF0aW9uIEJpdG1hcEltYWdlOjpmcmFtZU9yaWVu
dGF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2Fj
aGVkKGluZGV4LCBDYWNoZU1ldGFkYXRhT25seSkpCisgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2Fj
aGVkKGluZGV4LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEpKQogICAgICAgICBy
ZXR1cm4gSW1hZ2VPcmllbnRhdGlvbigpOwogCi0gICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX2hh
dmVNZXRhZGF0YSkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX29yaWVudGF0aW9u
OworICAgIGlmIChtX2ZyYW1lc1tpbmRleF0uaGFzTWV0YWRhdGEoKSkKKyAgICAgICAgcmV0dXJu
IG1fZnJhbWVzW2luZGV4XS5vcmllbnRhdGlvbigpOwogCiAgICAgcmV0dXJuIG1fc291cmNlLm9y
aWVudGF0aW9uQXRJbmRleChpbmRleCk7CiB9CkBAIC03MDAsMTcgKzcxMiw1NiBAQCBDb2xvciBC
aXRtYXBJbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkKICAgICAgICAgcmV0dXJuIENvbG9y
KCk7CiAgICAgCiAgICAgQVNTRVJUKG1fZnJhbWVzLnNpemUoKSk7Ci0gICAgbV9zb2xpZENvbG9y
ID0gTmF0aXZlSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcihtX2ZyYW1lc1swXS5tX2ltYWdl
LmdldCgpKTsKKyAgICBtX3NvbGlkQ29sb3IgPSBtX2ZyYW1lc1swXS5zaW5nbGVQaXhlbFNvbGlk
Q29sb3IoKTsKICAgICAKICAgICBBU1NFUlQobV9zb2xpZENvbG9yKTsKICAgICByZXR1cm4gbV9z
b2xpZENvbG9yLnZhbHVlKCk7CiB9CiAgICAgCitib29sIEJpdG1hcEltYWdlOjppc0FsbW9zdFNv
bGlkQ29sb3IoKQoreworICAgIGlmIChmcmFtZUNvdW50KCkgIT0gMSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcmV0dXJuIGVuc3VyZUZyYW1lSXNDYWNoZWQoMCkgJiYgbV9mcmFtZXNb
MF0uaXNBbG1vc3RTb2xpZENvbG9yKCk7Cit9CisgICAgCiBib29sIEJpdG1hcEltYWdlOjpjYW5B
bmltYXRlKCkKIHsKICAgICByZXR1cm4gc2hvdWxkQW5pbWF0ZSgpICYmIGZyYW1lQ291bnQoKSA+
IDE7CiB9CiAKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2Ny
aXB0aW9uIGRlc2NyaXB0aW9uKQoreworICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5KCkgfHwgc3Jj
UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworI2lmIFBMQVRGT1JNKElPUykKKyAg
ICBzdGFydEFuaW1hdGlvbihEb05vdENhdGNoVXApOworI2Vsc2UKKyAgICBzdGFydEFuaW1hdGlv
bigpOworI2VuZGlmCisgICAgCisgICAgQ29sb3IgY29sb3IgPSBzaW5nbGVQaXhlbFNvbGlkQ29s
b3IoKTsKKyAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7CisgICAgICAgIGZpbGxXaXRoU29saWRD
b2xvcihjb250ZXh0LCBkZXN0UmVjdCwgY29sb3IsIG9wKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBhdXRvIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJh
bWUsIFBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUoY29udGV4dCwgZGVzdFJlY3QsIHNy
Y1JlY3QpKTsKKyAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBo
YXZlIGFuIGltYWdlIHlldC4KKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEltYWdlT3JpZW50
YXRpb24gb3JpZW50YXRpb24oZGVzY3JpcHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKTsKKyAgICBp
ZiAoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VP
cmllbnRhdGlvbikKKyAgICAgICAgb3JpZW50YXRpb24gPSBmcmFtZU9yaWVudGF0aW9uQXRJbmRl
eChtX2N1cnJlbnRGcmFtZSk7CisgICAgCisgICAgUGxhdGZvcm1JbWFnZShpbWFnZSkuZHJhdyhj
b250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgbV9zaXplLCBvcCwgbW9kZSwgb3JpZW50YXRpb24p
OworICAgIAorICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCisgICAgICAgIGltYWdlT2JzZXJ2ZXIo
KS0+ZGlkRHJhdyh0aGlzKTsKK30KKyAgICAKIHZvaWQgQml0bWFwSW1hZ2U6OmR1bXAoVGV4dFN0
cmVhbSYgdHMpIGNvbnN0CiB7CiAgICAgSW1hZ2U6OmR1bXAodHMpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKaW5kZXggMDc1ODkyOWNkODdmYWRh
Y2YwMmI2ZWQ4ZWVhZmU3ZGVmZDY2ZjBjNS4uMjIxOGM4MjRiNTI4ZmQ2MzliYWIxMzhkZWNjOThi
OTgxNmExNjgxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Qml0bWFwSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRt
YXBJbWFnZS5oCkBAIC0yOCwxMSArMjgsMTMgQEAKICNpZm5kZWYgQml0bWFwSW1hZ2VfaAogI2Rl
ZmluZSBCaXRtYXBJbWFnZV9oCiAKLSNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkNvbG9y
LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lRGF0YS5oIgogI2lu
Y2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgogI2lu
Y2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCiAKICNpZiBVU0Uo
Q0cpIHx8IFVTRShBUFBLSVQpCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtNDcsNjMg
KzQ5LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgSEJJVE1BUF9fICpIQklUTUFQOwogI2VuZGlmCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKLSAgICBzdHJ1Y3QgRnJhbWVEYXRhOwotfQotCi1uYW1lc3BhY2Ug
V1RGIHsKLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBWZWN0b3JUcmFpdHM8V2ViQ29yZTo6RnJhbWVE
YXRhPiA6IHB1YmxpYyBTaW1wbGVDbGFzc1ZlY3RvclRyYWl0cyB7Ci0gICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGNhbkluaXRpYWxpemVXaXRoTWVtc2V0ID0gZmFsc2U7IC8vIE5vdCBhbGwgRnJh
bWVEYXRhIG1lbWJlcnMgaW5pdGlhbGl6ZSB0byAwLgotICAgIH07Ci19Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgVGltZXI7CiAKLW5hbWVzcGFjZSBOYXRpdmVJbWFnZSB7Ci0gICAg
SW50U2l6ZSBzaXplKGNvbnN0IE5hdGl2ZUltYWdlUHRyJik7Ci0gICAgYm9vbCBoYXNBbHBoYShj
b25zdCBOYXRpdmVJbWFnZVB0ciYpOwotICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcihj
b25zdCBOYXRpdmVJbWFnZVB0ciYpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIEZyYW1lRGF0YSBDbGFzcwotLy8gPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXN0cnVjdCBGcmFtZURh
dGEgewotcHVibGljOgotICAgIEZyYW1lRGF0YSgpCi0gICAgICAgIDogbV9oYXZlTWV0YWRhdGEo
ZmFsc2UpCi0gICAgICAgICwgbV9pc0NvbXBsZXRlKGZhbHNlKQotICAgICAgICAsIG1faGFzQWxw
aGEodHJ1ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgfkZyYW1lRGF0YSgpCi0gICAgeyAKLSAgICAg
ICAgY2xlYXIodHJ1ZSk7Ci0gICAgfQotCi0gICAgLy8gQ2xlYXIgdGhlIGNhY2hlZCBpbWFnZSBk
YXRhIG9uIHRoZSBmcmFtZSwgYW5kIChvcHRpb25hbGx5KSB0aGUgbWV0YWRhdGEuCi0gICAgLy8g
UmV0dXJucyB3aGV0aGVyIHRoZXJlIHdhcyBjYWNoZWQgaW1hZ2UgZGF0YSB0byBjbGVhci4KLSAg
ICBib29sIGNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSk7Ci0gICAgCi0gICAgdW5zaWduZWQgdXNl
ZEZyYW1lQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlID8gbV9mcmFtZUJ5dGVzIDogMDsg
fQotCi0gICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsKLSAgICBJbWFnZU9yaWVudGF0aW9uIG1f
b3JpZW50YXRpb24geyBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbiB9OwotICAgIFN1YnNhbXBsaW5n
TGV2ZWwgbV9zdWJzYW1wbGluZ0xldmVsIHsgMCB9OwotICAgIGZsb2F0IG1fZHVyYXRpb24geyAw
IH07Ci0gICAgYm9vbCBtX2hhdmVNZXRhZGF0YSA6IDE7Ci0gICAgYm9vbCBtX2lzQ29tcGxldGUg
OiAxOwotICAgIGJvb2wgbV9oYXNBbHBoYSA6IDE7Ci0gICAgdW5zaWduZWQgbV9mcmFtZUJ5dGVz
IHsgMCB9OwotfTsKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLy8gQml0bWFwSW1hZ2UgQ2xhc3MKLS8vID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQogY2xhc3MgQml0bWFwSW1hZ2UgZmluYWwg
OiBwdWJsaWMgSW1hZ2UgewogICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFnZTsKICAgICBm
cmllbmQgY2xhc3MgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U7CkBAIC0xNTUsMTIgKzEwMyw2IEBA
IHB1YmxpYzoKICAgICBDRkRhdGFSZWYgZ2V0VElGRlJlcHJlc2VudGF0aW9uKCkgb3ZlcnJpZGU7
CiAjZW5kaWYKIAotI2lmIFVTRShDRykKLSAgICBXRUJDT1JFX0VYUE9SVCBDR0ltYWdlUmVmIGdl
dENHSW1hZ2VSZWYoKSBvdmVycmlkZTsKLSAgICBDR0ltYWdlUmVmIGdldEZpcnN0Q0dJbWFnZVJl
Zk9mU2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7Ci0gICAgUmV0YWluUHRyPENGQXJyYXlS
ZWY+IGdldENHSW1hZ2VBcnJheSgpIG92ZXJyaWRlOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShX
SU4pCiAgICAgYm9vbCBnZXRIQklUTUFQKEhCSVRNQVApIG92ZXJyaWRlOwogICAgIGJvb2wgZ2V0
SEJJVE1BUE9mU2l6ZShIQklUTUFQLCBjb25zdCBJbnRTaXplKikgb3ZlcnJpZGU7CkBAIC0xNzQs
OCArMTE2LDEzIEBAIHB1YmxpYzoKICAgICBFdmFzX09iamVjdCogZ2V0RXZhc09iamVjdChFdmFz
Kikgb3ZlcnJpZGU7CiAjZW5kaWYKIAorICAgIFdFQkNPUkVfRVhQT1JUIE5hdGl2ZUltYWdlUHRy
IG5hdGl2ZUltYWdlKCkgb3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VP
ZlNpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwogICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgb3ZlcnJpZGU7CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBv
cmllbnRhdGlvbkZvckN1cnJlbnRGcmFtZSgpIG92ZXJyaWRlIHsgcmV0dXJuIGZyYW1lT3JpZW50
YXRpb25BdEluZGV4KGN1cnJlbnRGcmFtZSgpKTsgfQorICAgIFZlY3RvcjxOYXRpdmVJbWFnZVB0
cj4gZnJhbWVzTmF0aXZlSW1hZ2VzKCkgb3ZlcnJpZGU7CisgICAgCisgICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBpc0FsbW9zdFNvbGlkQ29sb3IoKTsKIAogICAgIGJvb2wgY3VycmVudEZyYW1lS25v
d25Ub0JlT3BhcXVlKCkgb3ZlcnJpZGU7CiAKQEAgLTIxNSw3ICsxNjIsNiBAQCBwcm90ZWN0ZWQ6
CiAgICAgc2l6ZV90IGZyYW1lQ291bnQoKTsKIAogICAgIE5hdGl2ZUltYWdlUHRyIGZyYW1lSW1h
Z2VBdEluZGV4KHNpemVfdCwgZmxvYXQgcHJlc2VudGF0aW9uU2NhbGVIaW50ID0gMSk7Ci0gICAg
TmF0aXZlSW1hZ2VQdHIgY29weVVuc2NhbGVkRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90KTsKIAog
ICAgIGJvb2wgaGF2ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCk7CiAKQEAgLTIyNSwxMSArMTcx
LDEwIEBAIHByb3RlY3RlZDoKICAgICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3JpZW50YXRpb25B
dEluZGV4KHNpemVfdCk7CiAKICAgICAvLyBEZWNvZGVzIGFuZCBjYWNoZXMgYSBmcmFtZS4gTmV2
ZXIgYWNjZXNzZWQgZXhjZXB0IGludGVybmFsbHkuCi0gICAgZW51bSBJbWFnZUZyYW1lQ2FjaGlu
ZyB7IENhY2hlTWV0YWRhdGFPbmx5LCBDYWNoZU1ldGFkYXRhQW5kRnJhbWUgfTsKLSAgICB2b2lk
IGNhY2hlRnJhbWUoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lQ2Fj
aGluZyA9IENhY2hlTWV0YWRhdGFBbmRGcmFtZSk7CisgICAgdm9pZCBjYWNoZUZyYW1lKHNpemVf
dCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgPSBJbWFn
ZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSk7CiAKICAgICAvLyBDYWxsZWQg
YmVmb3JlIGFjY2Vzc2luZyBtX2ZyYW1lc1tpbmRleF0gZm9yIGluZm8gd2l0aG91dCBkZWNvZGlu
Zy4gUmV0dXJucyBmYWxzZSBvbiBpbmRleCBvdXQgb2YgYm91bmRzLgotICAgIGJvb2wgZW5zdXJl
RnJhbWVJc0NhY2hlZChzaXplX3QgaW5kZXgsIEltYWdlRnJhbWVDYWNoaW5nID0gQ2FjaGVNZXRh
ZGF0YUFuZEZyYW1lKTsKKyAgICBib29sIGVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4
LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyA9IEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRh
ZGF0YUFuZEltYWdlKTsKIAogICAgIC8vIENhbGxlZCB0byBpbnZhbGlkYXRlIGNhY2hlZCBkYXRh
LiBXaGVuIHxkZXN0cm95QWxsfCBpcyB0cnVlLCB3ZSB3aXBlIG91dAogICAgIC8vIHRoZSBlbnRp
cmUgZnJhbWUgYnVmZmVyIGNhY2hlIGFuZCB0ZWxsIHRoZSBpbWFnZSBzb3VyY2UgdG8gZGVzdHJv
eQpAQCAtMjkyLDcgKzIzNyw3IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBJbnRTaXplIG1fc2l6
ZVJlc3BlY3RpbmdPcmllbnRhdGlvbjsKIAogICAgIHNpemVfdCBtX2N1cnJlbnRGcmFtZSB7IDAg
fTsgLy8gVGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGZyYW1lIG9mIGFuaW1hdGlvbi4KLSAgICBW
ZWN0b3I8RnJhbWVEYXRhLCAxPiBtX2ZyYW1lczsgLy8gQW4gYXJyYXkgb2YgdGhlIGNhY2hlZCBm
cmFtZXMgb2YgdGhlIGFuaW1hdGlvbi4gV2UgaGF2ZSB0byByZWYgZnJhbWVzIHRvIHBpbiB0aGVt
IGluIHRoZSBjYWNoZS4KKyAgICBWZWN0b3I8SW1hZ2VGcmFtZURhdGEsIDE+IG1fZnJhbWVzOyAv
LyBBbiBhcnJheSBvZiB0aGUgY2FjaGVkIGZyYW1lcyBvZiB0aGUgYW5pbWF0aW9uLiBXZSBoYXZl
IHRvIHJlZiBmcmFtZXMgdG8gcGluIHRoZW0gaW4gdGhlIGNhY2hlLgogCiAgICAgc3RkOjp1bmlx
dWVfcHRyPFRpbWVyPiBtX2ZyYW1lVGltZXI7CiAgICAgaW50IG1fcmVwZXRpdGlvbkNvdW50IHsg
Y0FuaW1hdGlvbk5vbmUgfTsgLy8gSG93IG1hbnkgdG90YWwgYW5pbWF0aW9uIGxvb3BzIHdlIHNo
b3VsZCBkby4gVGhpcyB3aWxsIGJlIGNBbmltYXRpb25Ob25lIGlmIHRoaXMgaW1hZ2UgdHlwZSBp
cyBpbmNhcGFibGUgb2YgYW5pbWF0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwUGl4ZWxzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBQaXhlbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZmFlM2QyZTQwY2NmMWQ4MWY2YmE1
N2RiNjgyZDkyZDQ2OWJiYWMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwUGl4ZWxzLmgKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXpl
LmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCaXRtYXBQaXhlbHMgeworcHVibGlj
OgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Qml0bWFwUGl4ZWxzPiBjcmVhdGUoY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bWFrZV91bmlxdWU8Qml0bWFwUGl4ZWxzPihzaXplLCBwcmVtdWx0aXBseUFscGhh
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gY3Jl
YXRlKGNvbnN0IEJpdG1hcFBpeGVscyYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX3VuaXF1ZTxCaXRtYXBQaXhlbHM+KG90aGVyKTsKKyAgICB9CisKKyAgICBCaXRtYXBQ
aXhlbHMoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhID0gdHJ1ZSkK
KyAgICAgICAgOiBtX3ByZW11bHRpcGx5QWxwaGEocHJlbXVsdGlwbHlBbHBoYSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCghc2l6ZS5pc0VtcHR5KCkpOworICAgICAgICBzZXRTaXplKHNpemUpOwor
ICAgIH0KKworICAgIEJpdG1hcFBpeGVscyhjb25zdCBCaXRtYXBQaXhlbHMmIG90aGVyKQorICAg
IHsKKyAgICAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBvdGhlci5tX2JhY2tpbmdTdG9yZTsKKyAg
ICAgICAgbV9waXhlbHMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7CisgICAgICAgIG1fc2l6ZSA9
IG90aGVyLm1fc2l6ZTsKKyAgICAgICAgbV9yZWN0ID0gb3RoZXIubV9yZWN0OworICAgICAgICBt
X3ByZW11bHRpcGx5QWxwaGEgPSBvdGhlci5tX3ByZW11bHRpcGx5QWxwaGE7CisgICAgfQorCisg
ICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2UoKSBjb25zdDsKKworICAgIGJvb2wgc2V0U2l6ZShjb25z
dCBJbnRTaXplJiBzaXplKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS50cnlS
ZXNlcnZlQ2FwYWNpdHkoc2l6ZS5hcmVhKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgbV9iYWNraW5nU3RvcmUucmVzaXplKHNpemUuYXJlYSgpKTsKKyAg
ICAgICAgbV9waXhlbHMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7CisgICAgICAgIG1fc2l6ZSA9
IHNpemU7CisgICAgICAgIG1fcmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXplKTsKKyAg
ICAgICAgY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZv
aWQgc2V0UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFt
X3NpemUuaXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKGluQm91bmRzKHJlY3QpKTsKKyAgICAg
ICAgbV9yZWN0ID0gcmVjdDsKKyAgICB9CisgICAgCisgICAgSW50U2l6ZSBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplOyB9CisgICAgSW50UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9y
ZWN0OyB9CisKKyAgICBSR0JBMzIqIGF0KGludCB4LCBpbnQgeSkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3BpeGVscyArIHkgKiBtX3NpemUud2lkdGgoKSArIHg7CisgICAgfQorCisg
ICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtZW1zZXQobV9waXhlbHMsIDAsIG1fc2l6
ZS5hcmVhKCkgKiBzaXplb2YoUkdCQTMyKSk7CisgICAgfQorCisgICAgdm9pZCBjbGVhclJlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSB8
fCBpbkJvdW5kcyhyZWN0KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAg
IHNpemVfdCByZWN0V2lkdGhJbkJ5dGVzID0gcmVjdC53aWR0aCgpICogc2l6ZW9mKFJHQkEzMik7
CisgICAgICAgIFJHQkEzMiogc3RhcnQgPSBhdChyZWN0LngoKSwgcmVjdC55KCkpOworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QuaGVpZ2h0KCk7ICsraSkgeworICAgICAgICAgICAg
bWVtc2V0KHN0YXJ0LCAwLCByZWN0V2lkdGhJbkJ5dGVzKTsKKyAgICAgICAgICAgIHN0YXJ0ICs9
IG1fc2l6ZS53aWR0aCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCByZXBlYXRGaXJz
dFJvdyhjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHJlY3QuaXNFbXB0
eSgpIHx8IGluQm91bmRzKHJlY3QpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICAgICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkgKiBzaXplb2YoUkdC
QTMyKTsKKyAgICAgICAgUkdCQTMyKiBzcmMgPSBhdChyZWN0LngoKSwgcmVjdC55KCkpOworICAg
ICAgICBSR0JBMzIqIGRlc3QgPSBzcmMgKyBtX3NpemUud2lkdGgoKTsKKyAgICAgICAgZm9yIChp
bnQgaSA9IDE7IGkgPCByZWN0LmhlaWdodCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1lbWNweShk
ZXN0LCBzcmMsIHJlY3RXaWR0aEluQnl0ZXMpOworICAgICAgICAgICAgZGVzdCArPSBtX3NpemUu
d2lkdGgoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgc2V0UkdCQShpbnQgeCwgaW50
IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAg
eworICAgICAgICBzZXRSR0JBKGF0KHgsIHkpLCByLCBnLCBiLCBhKTsKKyAgICB9CisKKyAgICB2
b2lkIHNldFJHQkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25l
ZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEg
fHwgYSA+PSAyNTUpCisgICAgICAgICAgICAqZGVzdCA9IG1ha2VSR0JBKHIsIGcsIGIsIGEpOwor
ICAgICAgICBlbHNlIGlmICghYSkKKyAgICAgICAgICAgICpkZXN0ID0gMDsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgKmRlc3QgPSBtYWtlUHJlbXVsdGlwbGllZFJHQkEociwgZywgYiwgYSk7
CisgICAgfQorCisgICAgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIsIHVu
c2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAgeworICAgICAgICBpZiAoIWEp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoYSA+PSAyNTUgfHwg
IWFscGhhQ2hhbm5lbCgqZGVzdCkpIHsKKyAgICAgICAgICAgIHNldFJHQkEoZGVzdCwgciwgZywg
YiwgYSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmICghbV9wcmVtdWx0aXBseUFscGhhKQorICAgICAgICAgICAgKmRlc3QgPSBtYWtlUHJlbXVs
dGlwbGllZFJHQkEocmVkQ2hhbm5lbCgqZGVzdCksIGdyZWVuQ2hhbm5lbCgqZGVzdCksIGJsdWVD
aGFubmVsKCpkZXN0KSwgYWxwaGFDaGFubmVsKCpkZXN0KSk7CisgICAgICAgIAorICAgICAgICBS
R0JBMzIgc3JjID0gbWFrZVJHQkEociwgZywgYiwgYSk7CisgICAgICAgICpkZXN0ID0gQ29sb3Io
KmRlc3QpLmJsZW5kKHNyYykucmdiKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIW1fcHJlbXVs
dGlwbHlBbHBoYSkKKyAgICAgICAgICAgICpkZXN0ID0gbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEo
cmVkQ2hhbm5lbCgqZGVzdCksIGdyZWVuQ2hhbm5lbCgqZGVzdCksIGJsdWVDaGFubmVsKCpkZXN0
KSwgYWxwaGFDaGFubmVsKCpkZXN0KSk7CisgICAgfQorCisgICAgYm9vbCBpbkJvdW5kcyhjb25z
dCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSW50UmVjdChJ
bnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHBvaW50KTsKKyAgICB9CisKKyAgICBib29sIGlu
Qm91bmRzKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
SW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHJlY3QpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBWZWN0b3I8UkdCQTMyPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBSR0JBMzIqIG1f
cGl4ZWxzIHsgbnVsbHB0ciB9OworICAgIEludFNpemUgbV9zaXplOworICAgIEludFJlY3QgbV9y
ZWN0OyAvLyBUaGlzIHdpbGwgYWx3YXlzIGp1c3QgYmUgdGhlIGVudGlyZSBidWZmZXIgZXhjZXB0
IGZvciBHSUYgYW5kIFBORyBmcmFtZXMKKyAgICBib29sIG1fcHJlbXVsdGlwbHlBbHBoYSB7IHRy
dWUgfTsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cAppbmRleCA0ZTI1YWE2ZmQ3NGQxZTQ2YzU0MTYxNDk4YmMxNzJiZjYwMDg3NWQxLi40MzlmNWE2
M2M3YmViZTU2MDQyYjI0ZTdkNzJlY2NlY2YzNmM0MGM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCkBAIC00OSw2ICs0OSw0MCBAQCBjb25zdCBSR0JBMzIg
Q29sb3I6OnRyYW5zcGFyZW50Owogc3RhdGljIGNvbnN0IFJHQkEzMiBsaWdodGVuZWRCbGFjayA9
IDB4RkY1NDU0NTQ7CiBzdGF0aWMgY29uc3QgUkdCQTMyIGRhcmtlbmVkV2hpdGUgPSAweEZGQUJB
QkFCOwogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG11bHRpcGx5MjU1KHVuc2lnbmVkIGMpCit7
CisgICAgLy8gYyAqIDI1NQorICAgIC8vICAgPSBjICogKDI1NiAtIDEpCisgICAgLy8gICA9IGMg
KiAyNTYgLSBjCisgICAgcmV0dXJuIChjIDw8IDgpIC0gYzsKK30KKworc3RhdGljIGlubGluZSB1
bnNpZ25lZCBkaXZpZGUyNTUodW5zaWduZWQgYykKK3sKKyAgICAvLyBjIC8gMjU1CisgICAgLy8g
ICA9IGMgLyAyNTYgKiAoMSArIDEgLyAyNTUpCisgICAgLy8gICA9IChjICsgYyAvIDI1NSkgLyAy
NTYKKyAgICAvLyAgID0gKGMgKyAoYyArIGMgLyAyNTUpIC8gMjU2KSAvIDI1NgorICAgIC8vICAg
PSAoYyArIGMgLyAyNTYgKyBjIC8gKDI1NSB4IDI1NikpIC8gMjU2CisgICAgLy8gIH49IChjICsg
YyAvIDI1NiArIDEpIC8gMjU2CisgICAgcmV0dXJuIChjICsgKGMgPj4gOCkgKyAxKSA+PiA4Owor
fQorICAgIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBkaXZpZGVDZWlsKHVuc2lnbmVkIGMsIHVu
c2lnbmVkIGQpCit7CisgICAgcmV0dXJuIChjICsgZCAtIDEpIC8gZDsKK30KKyAgICAKK3N0YXRp
YyBpbmxpbmUgdW5zaWduZWQgcHJlbXVsdGlwbGllZENoYW5uZWwodW5zaWduZWQgYywgdW5zaWdu
ZWQgYSkKK3sKKyAgICByZXR1cm4gZGl2aWRlMjU1KGMgKiBhKTsKK30KKworc3RhdGljIGlubGlu
ZSB1bnNpZ25lZCB1bnByZW11bHRpcGxpZWRDaGFubmVsKHVuc2lnbmVkIGMsIHVuc2lnbmVkIGEp
Cit7CisgICAgcmV0dXJuIGRpdmlkZUNlaWwobXVsdGlwbHkyNTUoYyksIGEpOworfQorICAgIAog
UkdCQTMyIG1ha2VSR0IoaW50IHIsIGludCBnLCBpbnQgYikKIHsKICAgICByZXR1cm4gMHhGRjAw
MDAwMCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKHIsIDI1NSkpIDw8IDE2IHwgc3RkOjptYXgoMCwg
c3RkOjptaW4oZywgMjU1KSkgPDwgOCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGIsIDI1NSkpOwpA
QCAtNTksNiArOTMsMTYgQEAgUkdCQTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGlu
dCBhKQogICAgIHJldHVybiBzdGQ6Om1heCgwLCBzdGQ6Om1pbihhLCAyNTUpKSA8PCAyNCB8IHN0
ZDo6bWF4KDAsIHN0ZDo6bWluKHIsIDI1NSkpIDw8IDE2IHwgc3RkOjptYXgoMCwgc3RkOjptaW4o
ZywgMjU1KSkgPDwgOCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGIsIDI1NSkpOwogfQogCitSR0JB
MzIgbWFrZVByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQorewor
ICAgIHJldHVybiBtYWtlUkdCQShwcmVtdWx0aXBsaWVkQ2hhbm5lbChyLCBhKSwgcHJlbXVsdGlw
bGllZENoYW5uZWwoZywgYSksIHByZW11bHRpcGxpZWRDaGFubmVsKGIsIGEpLCBhKTsKK30KKyAg
ICAKK1JHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBp
bnQgYSkKK3sKKyAgICByZXR1cm4gbWFrZVJHQkEodW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChyLCBh
KSwgdW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBhKSwgdW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChi
LCBhKSwgYSk7Cit9CisgICAgCiBzdGF0aWMgaW50IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGZsb2F0
IGYpCiB7CiAgICAgLy8gV2UgdXNlIGxyb3VuZGYgYW5kIDI1NSBpbnN0ZWFkIG9mIG5leHRhZnRl
cmYoMjU2LCAwKSB0byBtYXRjaCBDRydzIHJvdW5kaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuaAppbmRleCBkZDI2MjcwYmI0NjYwYjMzYWUwNzBlOGM5NDQ1MjBkNzI4
NDU0YjhhLi5hNTQ1MzJjNzc1NWE3Yzg3NjkzNjI0MGNhZTRlYzM3YTRkYTBkMDQzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKQEAgLTU0LDYgKzU0LDggQEAgdHlw
ZWRlZiB1bnNpZ25lZCBSR0JBMzI7IC8vIERlcHJlY2F0ZWQ6IFR5cGUgZm9yIGFuIFJHQkEgcXVh
ZHJ1cGxldC4gVXNlIFJHQkEgY2wKIAogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VSR0IoaW50
IHIsIGludCBnLCBpbnQgYik7CiBXRUJDT1JFX0VYUE9SVCBSR0JBMzIgbWFrZVJHQkEoaW50IHIs
IGludCBnLCBpbnQgYiwgaW50IGEpOworV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VQcmVtdWx0
aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7CitXRUJDT1JFX0VYUE9SVCBS
R0JBMzIgbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEp
OwogCiBXRUJDT1JFX0VYUE9SVCBSR0JBMzIgY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShSR0JBMzIg
Y29sb3IsIGZsb2F0IG92ZXJyaWRlQWxwaGEpOwogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIGNvbG9y
V2l0aE92ZXJyaWRlQWxwaGEoUkdCQTMyIGNvbG9yLCBPcHRpb25hbDxmbG9hdD4gb3ZlcnJpZGVB
bHBoYSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAppbmRleCA3YTI5
OTkyZjc3MTg4ZTAzODI4ZDgwYTY1YjhiZTJjZDhkYzJkZTc2Li44ZTdiNTJiMWY0ZjMxYzc0YTNj
YjJhMTMyMTVkYTc3YTJiMThjMDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlLmgKQEAgLTEzNyw4ICsxMzcsMTEgQEAgcHVibGljOgogCiAgICAgZW51bSBUaWxlUnVs
ZSB7IFN0cmV0Y2hUaWxlLCBSb3VuZFRpbGUsIFNwYWNlVGlsZSwgUmVwZWF0VGlsZSB9OwogCisg
ICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSgpIHsgcmV0dXJuIG51bGxwdHI7
IH0KKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlT2ZTaXplKGNvbnN0IElu
dFNpemUmKSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBu
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICB2aXJ0
dWFsIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb25Gb3JDdXJyZW50RnJhbWUoKSB7IHJldHVy
biBJbWFnZU9yaWVudGF0aW9uKCk7IH0KKyAgICB2aXJ0dWFsIFZlY3RvcjxOYXRpdmVJbWFnZVB0
cj4gZnJhbWVzTmF0aXZlSW1hZ2VzKCkgeyByZXR1cm4geyB9OyB9CiAKICAgICAvLyBBY2Nlc3Nv
cnMgZm9yIG5hdGl2ZSBpbWFnZSBmb3JtYXRzLgogCkBAIC0xNTAsMTIgKzE1Myw2IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIENGRGF0YVJlZiBnZXRUSUZGUmVwcmVzZW50YXRpb24oKSB7IHJldHVy
biBudWxscHRyOyB9CiAjZW5kaWYKIAotI2lmIFVTRShDRykKLSAgICB2aXJ0dWFsIENHSW1hZ2VS
ZWYgZ2V0Q0dJbWFnZVJlZigpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIENHSW1h
Z2VSZWYgZ2V0Rmlyc3RDR0ltYWdlUmVmT2ZTaXplKGNvbnN0IEludFNpemUmKSB7IHJldHVybiBu
dWxscHRyOyB9Ci0gICAgdmlydHVhbCBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gZ2V0Q0dJbWFnZUFy
cmF5KCkgeyByZXR1cm4gbnVsbHB0cjsgfQotI2VuZGlmCi0KICNpZiBQTEFURk9STShXSU4pCiAg
ICAgdmlydHVhbCBib29sIGdldEhCSVRNQVAoSEJJVE1BUCkgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0SEJJVE1BUE9mU2l6ZShIQklUTUFQLCBjb25zdCBJbnRTaXplKikg
eyByZXR1cm4gZmFsc2U7IH0KQEAgLTE3OSw2ICsxNzYsOCBAQCBwdWJsaWM6CiAjaWYgIUFTU0VS
VF9ESVNBQkxFRAogICAgIHZpcnR1YWwgYm9vbCBub3RTb2xpZENvbG9yKCkgeyByZXR1cm4gdHJ1
ZTsgfQogI2VuZGlmCisgICAgCisgICAgdmlydHVhbCB2b2lkIGxheW91dElmTmVlZGVkKCkgeyB9
CiAKICAgICB2aXJ0dWFsIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3Q7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iZmQyMGNmOGU2MWY0YjFhMWZlMDhlYjMzMmI3MTY1N2YwMTQ4YzE1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURh
dGEuY3BwCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1l
RGF0YS5oIgorCisjaW5jbHVkZSAiQ29sb3IuaCIKKworI2lmIFVTRShDRykKKyNpbmNsdWRlICJJ
bWFnZURlY29kZXJDRy5oIgorI2Vsc2UKKyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKKyNlbmRp
ZgorCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0ltYWdlRnJhbWVEYXRhOjpJbWFnZUZyYW1lRGF0YSgpCit7Cit9CisKK0ltYWdlRnJhbWVEYXRh
OjpJbWFnZUZyYW1lRGF0YShOYXRpdmVJbWFnZVB0ciYmIGltYWdlKQorICAgIDogbV9zdGF0dXMo
RGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlKQorICAgICwgbV9pbWFnZShXVEZNb3ZlKGltYWdlKSkK
K3sKKyAgICBtX3NpemUgPSBQbGF0Zm9ybUltYWdlKG1faW1hZ2UpLnNpemUoKTsKKyAgICBtX2hh
c0FscGhhID0gUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5oYXNBbHBoYSgpOworfQorCitJbWFnZUZy
YW1lRGF0YTo6SW1hZ2VGcmFtZURhdGEoSW1hZ2VEZWNvZGVyJiBkZWNvZGVyLCBzaXplX3QgaW5k
ZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgQ2FjaGluZyBmcmFtZUNhY2hp
bmcpCit7CisgICAgQVNTRVJUKGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YSB8fCBm
cmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSk7CisgICAgCisgICAgaWYg
KGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpJbWFnZSB8fCBmcmFtZUNhY2hpbmcgPT0gQ2FjaGlu
Zzo6TWV0YWRhdGFBbmRJbWFnZSkgeworICAgICAgICBtX2ltYWdlID0gZGVjb2Rlci5jcmVhdGVG
cmFtZUltYWdlQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7CisgICAgICAgIG1fc3Vi
c2FtcGxpbmdMZXZlbCA9IHN1YnNhbXBsaW5nTGV2ZWw7CisgICAgfQorICAgIAorICAgIGlmIChm
cmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGEgfHwgZnJhbWVDYWNoaW5nID09IENhY2hp
bmc6Ok1ldGFkYXRhQW5kSW1hZ2UpIHsKKyAgICAgICAgbV9vcmllbnRhdGlvbiA9IGRlY29kZXIu
b3JpZW50YXRpb25BdEluZGV4KGluZGV4KTsKKyAgICAgICAgbV9zdGF0dXMgPSBkZWNvZGVyLmZy
YW1lSXNDb21wbGV0ZUF0SW5kZXgoaW5kZXgpID8gRGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlIDog
RGVjb2RpbmdTdGF0dXM6OlBhcnRpYWw7CisgICAgICAgIAorICAgICAgICBpZiAoZGVjb2Rlci5y
ZXBldGl0aW9uQ291bnQoKSAhPSBjQW5pbWF0aW9uTm9uZSkKKyAgICAgICAgICAgIG1fZHVyYXRp
b24gPSBkZWNvZGVyLmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KTsKKyAgICAgICAgCisgICAg
ICAgIG1faGFzQWxwaGEgPSBkZWNvZGVyLmZyYW1lSGFzQWxwaGFBdEluZGV4KGluZGV4KTsKKyAg
ICAgICAgbV9zaXplID0gZGVjb2Rlci5mcmFtZVNpemVBdEluZGV4KGluZGV4LCBzdWJzYW1wbGlu
Z0xldmVsKTsKKyAgICB9Cit9CisKK0ltYWdlRnJhbWVEYXRhOjp+SW1hZ2VGcmFtZURhdGEoKQor
eworICAgIGNsZWFyU3ViSW1hZ2VzKCk7Cit9CisgICAgCitJbWFnZUZyYW1lRGF0YSYgSW1hZ2VG
cmFtZURhdGE6Om9wZXJhdG9yPShjb25zdCBJbWFnZUZyYW1lRGF0YSYgb3RoZXIpCit7CisgICAg
aWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBtX3N0YXR1
cyA9IG90aGVyLm1fc3RhdHVzOworICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKKyAgICBtX2lt
YWdlID0gb3RoZXIubV9pbWFnZTsKKyAgICAKKyAgICBtX3BpeGVscyA9IG90aGVyLnBpeGVscygp
ID8gQml0bWFwUGl4ZWxzOjpjcmVhdGUoKm90aGVyLnBpeGVscygpKSA6IG51bGxwdHI7CisgICAg
CisgICAgbV9vcmllbnRhdGlvbiA9IG90aGVyLm1fb3JpZW50YXRpb247CisgICAgbV9zdWJzYW1w
bGluZ0xldmVsID0gb3RoZXIubV9zdWJzYW1wbGluZ0xldmVsOworICAgIG1fZHVyYXRpb24gPSBv
dGhlci5tX2R1cmF0aW9uOworICAgIG1faGFzQWxwaGEgPSBvdGhlci5tX2hhc0FscGhhOworICAg
IHJldHVybiAqdGhpczsKK30KKwordm9pZCBJbWFnZUZyYW1lRGF0YTo6Y2xlYXJTdWJJbWFnZXMo
KQoreworICAgIGlmICghbV9pbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFBsYXRm
b3JtSW1hZ2UobV9pbWFnZSkuY2xlYXJTdWJJbWFnZXMoKTsKK30KKwordW5zaWduZWQgSW1hZ2VG
cmFtZURhdGE6OmNsZWFyKENhY2hpbmcgZnJhbWVDYWNoaW5nKQoreworICAgIEFTU0VSVChmcmFt
ZUNhY2hpbmcgPT0gQ2FjaGluZzo6RW1wdHkgfHwgZnJhbWVDYWNoaW5nID09IENhY2hpbmc6Ok1l
dGFkYXRhKTsKKyAgICAKKyAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzID0gdGhpcy0+ZnJhbWVCeXRl
cygpOworICAgIAorICAgIGNsZWFyU3ViSW1hZ2VzKCk7CisgICAgCisgICAgaWYgKGZyYW1lQ2Fj
aGluZyA9PSBDYWNoaW5nOjpFbXB0eSkKKyAgICAgICAgKnRoaXMgPSBJbWFnZUZyYW1lRGF0YSgp
OworICAgIGVsc2UKKyAgICAgICAgbV9pbWFnZSA9IG51bGxwdHI7CisgICAgCisgICAgcmV0dXJu
IGZyYW1lQnl0ZXM7Cit9CisKK0NvbG9yIEltYWdlRnJhbWVEYXRhOjpzaW5nbGVQaXhlbFNvbGlk
Q29sb3IoKSBjb25zdAoreworICAgIGlmICghaGFzSW1hZ2UoKSB8fCBtX3NpemUgIT0gSW50U2l6
ZSgxLCAxKSkKKyAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgCisgICAgcmV0dXJuIFBsYXRm
b3JtSW1hZ2UobV9pbWFnZSkuc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCk7Cit9CisKK2Jvb2wgSW1h
Z2VGcmFtZURhdGE6OmlzQWxtb3N0U29saWRDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKCFoYXNJ
bWFnZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIFBsYXRmb3Jt
SW1hZ2UobV9pbWFnZSkuaXNBbG1vc3RTb2xpZENvbG9yKCk7Cit9CisgICAgCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mNmZiNzU4ZWYzYTQyNThjYmRiM2FlMmY0NmU4NDQwZjczMGVmNDdjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEu
aApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkJpdG1hcFBpeGVscy5oIgorI2lu
Y2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVk
ZSAiTmF0aXZlSW1hZ2VQdHIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb2xv
cjsKK2NsYXNzIEltYWdlRGVjb2RlcjsKKworLy8gU3Vic2FtcGxpbmdMZXZlbC4gMCBpcyBubyBz
dWJzYW1wbGluZywgMSBpcyBoYWxmIGRpbWVuc2lvbnMgb24gZWFjaCBheGlzIGV0Yy4KK3VzaW5n
IFN1YnNhbXBsaW5nTGV2ZWwgPSB1aW50OF90OworCitlbnVtIDogU3Vic2FtcGxpbmdMZXZlbCB7
CisgICAgTWluU3Vic2FtcGxpbmdMZXZlbCA9IDAsCisgICAgTWF4U3Vic2FtcGxpbmdMZXZlbCA9
IDMsCisgICAgRGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwgPSBNaW5TdWJzYW1wbGluZ0xldmVsCit9
OworCitjbGFzcyBJbWFnZUZyYW1lRGF0YSB7CisgICAgZnJpZW5kIGNsYXNzIEltYWdlRGVjb2Rl
cjsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIENhY2hpbmcgeyBFbXB0eSwgTWV0YWRhdGEsIElt
YWdlLCBNZXRhZGF0YUFuZEltYWdlIH07CisgICAgZW51bSBjbGFzcyBEZWNvZGluZ1N0YXR1cyB7
IEVtcHR5LCBQYXJ0aWFsLCBDb21wbGV0ZSB9OworICAgIAorICAgIEltYWdlRnJhbWVEYXRhKCk7
CisgICAgSW1hZ2VGcmFtZURhdGEoTmF0aXZlSW1hZ2VQdHImJik7CisgICAgSW1hZ2VGcmFtZURh
dGEoSW1hZ2VEZWNvZGVyJiwgc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsID0gRGVmYXVs
dFN1YnNhbXBsaW5nTGV2ZWwsIENhY2hpbmcgPSBDYWNoaW5nOjpNZXRhZGF0YUFuZEltYWdlKTsK
KyAgICBJbWFnZUZyYW1lRGF0YShjb25zdCBJbWFnZUZyYW1lRGF0YSYgb3RoZXIpIHsgb3BlcmF0
b3I9KG90aGVyKTsgfQorCisgICAgfkltYWdlRnJhbWVEYXRhKCk7CisKKyAgICBJbWFnZUZyYW1l
RGF0YSYgb3BlcmF0b3I9KGNvbnN0IEltYWdlRnJhbWVEYXRhJiBvdGhlcik7CisgICAgCisgICAg
dW5zaWduZWQgY2xlYXIoQ2FjaGluZyk7CisgICAgQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9y
KCkgY29uc3Q7CisgICAgYm9vbCBpc0FsbW9zdFNvbGlkQ29sb3IoKSBjb25zdDsKKyAgICAKKyAg
ICBEZWNvZGluZ1N0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQorICAg
IGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzID09IERlY29kaW5nU3Rh
dHVzOjpDb21wbGV0ZTsgfQorICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGhhc1Bp
eGVscygpID8gcGl4ZWxzKCktPnNpemUoKSA6IG1fc2l6ZTsgfQorICAgIHVuc2lnbmVkIGZyYW1l
Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBoYXNJbWFnZSgpID8gbV9zaXplLmFyZWEoKSAqIHNpemVv
ZihSR0JBMzIpIDogMDsgfQorICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlKCkgY29uc3QgeyByZXR1
cm4gbV9pbWFnZTsgfQorICAgIEJpdG1hcFBpeGVscyogcGl4ZWxzKCkgY29uc3QgeyByZXR1cm4g
bV9waXhlbHMgPyBtX3BpeGVscy5nZXQoKSA6IG51bGxwdHI7IH0KKyAgICAKKyAgICBJbWFnZU9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9vcmllbnRhdGlvbjsgfQor
ICAgIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3Vic2FtcGxpbmdMZXZlbDsgfQorICAgIGZsb2F0IGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9kdXJhdGlvbjsgfQorICAgIAorICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiBt
X2hhc0FscGhhOyB9CisgICAgYm9vbCBoYXNJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7
IH0KKyAgICBib29sIGhhc01ldGFkYXRhKCkgY29uc3QgeyByZXR1cm4gIW1fc2l6ZS5pc0VtcHR5
KCk7IH0KKyAgICBib29sIGhhc1BpeGVscygpIGNvbnN0IHsgcmV0dXJuIHBpeGVscygpOyB9Cisg
ICAgCitwcml2YXRlOgorICAgIHZvaWQgY2xlYXJTdWJJbWFnZXMoKTsKKworICAgIHZvaWQgc2V0
U3RhdHVzKERlY29kaW5nU3RhdHVzIHN0YXR1cykgeyBtX3N0YXR1cyA9IHN0YXR1czsgfQorICAg
IHZvaWQgc2V0T3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgeyBtX29y
aWVudGF0aW9uID0gb3JpZW50YXRpb247IH07CisgICAgdm9pZCBzZXREdXJhdGlvbih1bnNpZ25l
ZCBkdXJhdGlvbikgeyBtX2R1cmF0aW9uID0gZHVyYXRpb247IH0KKyAgICB2b2lkIHNldEhhc0Fs
cGhhKGJvb2wgaGFzQWxwaGEpIHsgbV9oYXNBbHBoYSA9IGhhc0FscGhhOyB9CisgICAgCisgICAg
RGVjb2RpbmdTdGF0dXMgbV9zdGF0dXMgeyBEZWNvZGluZ1N0YXR1czo6RW1wdHkgfTsKKyAgICBJ
bnRTaXplIG1fc2l6ZTsKKyAgICBOYXRpdmVJbWFnZVB0ciBtX2ltYWdlOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxCaXRtYXBQaXhlbHM+IG1fcGl4ZWxzOworICAgIAorICAgIEltYWdlT3JpZW50YXRp
b24gbV9vcmllbnRhdGlvbiB7IERlZmF1bHRJbWFnZU9yaWVudGF0aW9uIH07CisgICAgU3Vic2Ft
cGxpbmdMZXZlbCBtX3N1YnNhbXBsaW5nTGV2ZWwgeyAwIH07CisgICAgZmxvYXQgbV9kdXJhdGlv
biB7IDAgfTsKKyAgICBib29sIG1faGFzQWxwaGEgeyB0cnVlIH07Cit9OworICAgIAorfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCmluZGV4
IGRkZDhhNTViYTA5MDZjNTg2NmExOTJjZjhlNDE0ZWE3MDdiNzI4YWMuLjgyZjZlMmQ2ZTQ1NDMz
ZGExYTdkNTZiMzcwZGZhNjFhNGM0MTkxMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKQEAgLTIyNCw2ICsyMjQsMTEgQEAgTmF0aXZl
SW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRl
eCwgU3Vic2FtcGxpbmdMZXYKICAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSA/IG1fZGVjb2Rlci0+
Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpIDogbnVsbHB0
cjsKIH0KIAorSW1hZ2VGcmFtZURhdGEgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lRGF0YUF0SW5k
ZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIEltYWdl
RnJhbWVEYXRhOjpDYWNoaW5nIGNhY2hpbmcpCit7CisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkg
PyBJbWFnZUZyYW1lRGF0YSgqbV9kZWNvZGVyLCBpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgY2Fj
aGluZykgOiBJbWFnZUZyYW1lRGF0YSgpOworfQorICAgIAogdm9pZCBJbWFnZVNvdXJjZTo6ZHVt
cChUZXh0U3RyZWFtJiB0cykgY29uc3QKIHsKICAgICBpZiAobV9hbGxvd1N1YnNhbXBsaW5nKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKaW5kZXgg
NjAzNTczOWI3ZThiMDk2ZGM4ZGZlOWM1MzBhNDJjNmYyOTFiZGEwMC4uYTQwYzdjZTkzMDdjZGFk
ZjA3OWFiNzAxYTgyNzk5YjY5MDUyOWQ0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaWZuZGVmIEltYWdl
U291cmNlX2gKICNkZWZpbmUgSW1hZ2VTb3VyY2VfaAogCisjaW5jbHVkZSAiSW1hZ2VGcmFtZURh
dGEuaCIKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW50UG9pbnQu
aCIKICNpbmNsdWRlICJOYXRpdmVJbWFnZVB0ci5oIgpAQCAtNjMsOSArNjQsNiBAQCBjb25zdCBp
bnQgY0FuaW1hdGlvbkxvb3BPbmNlID0gMDsKIGNvbnN0IGludCBjQW5pbWF0aW9uTG9vcEluZmlu
aXRlID0gLTE7CiBjb25zdCBpbnQgY0FuaW1hdGlvbk5vbmUgPSAtMjsKIAotLy8gU3Vic2FtcGxp
bmdMZXZlbC4gMCBpcyBubyBzdWJzYW1wbGluZywgMSBpcyBoYWxmIGRpbWVuc2lvbnMgb24gZWFj
aCBheGlzIGV0Yy4KLXR5cGVkZWYgc2hvcnQgU3Vic2FtcGxpbmdMZXZlbDsKLQogY2xhc3MgSW1h
Z2VTb3VyY2UgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlU291cmNlKTsKICAgICBm
cmllbmQgY2xhc3MgQml0bWFwSW1hZ2U7CkBAIC0xMzIsMTggKzEzMCwxOSBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBhbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoc2l6ZV90KSBjb25zdDsKICAg
ICAKICAgICAvLyBTaXplIG9mIG9wdGlvbmFsbHkgc3Vic2FtcGxlZCBmcmFtZS4KLSAgICBJbnRT
aXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gMCwgUmVzcGVj
dEltYWdlT3JpZW50YXRpb25FbnVtID0gRG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikgY29u
c3Q7CisgICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZl
bCA9IERlZmF1bHRTdWJzYW1wbGluZ0xldmVsLCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0g
PSBEb05vdFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKSBjb25zdDsKICAgICAKICAgICAvLyBSZXR1
cm4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgZGVjb2RlZCBmcmFtZS4gSWYgdGhlIGZyYW1l
IGlzIG5vdCB5ZXQKICAgICAvLyBkZWNvZGVkIHRoZW4gcmV0dXJuIDAuCi0gICAgdW5zaWduZWQg
ZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gMCkgY29uc3Q7Cisg
ICAgdW5zaWduZWQgZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0g
RGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0OwogICAgIAogICAgIGZsb2F0IGZyYW1lRHVy
YXRpb25BdEluZGV4KHNpemVfdCk7CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkF0
SW5kZXgoc2l6ZV90KSBjb25zdDsgLy8gRVhJRiBpbWFnZSBvcmllbnRhdGlvbgogICAgIAogICAg
IC8vIENhbGxlcnMgc2hvdWxkIG5vdCBjYWxsIHRoaXMgYWZ0ZXIgY2FsbGluZyBjbGVhcigpIHdp
dGggYSBoaWdoZXIgaW5kZXg7CiAgICAgLy8gc2VlIGNvbW1lbnRzIG9uIGNsZWFyKCkgYWJvdmUu
Ci0gICAgTmF0aXZlSW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90LCBTdWJz
YW1wbGluZ0xldmVsID0gMCk7CisgICAgTmF0aXZlSW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0
SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gRGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwp
OworICAgIEltYWdlRnJhbWVEYXRhIGNyZWF0ZUZyYW1lRGF0YUF0SW5kZXgoc2l6ZV90LCBTdWJz
YW1wbGluZ0xldmVsID0gRGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlRnJhbWVEYXRhOjpD
YWNoaW5nID0gSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOwogICAg
IAogcHJpdmF0ZToKICAgICB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmFiN2FlYTQ4OWYzZWIyYTgyODc3MWMyMTAzZThkNGQwYmUxN2JlNWQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdl
LmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKyNp
bmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb2xvcjsKK2NsYXNzIEZsb2F0UmVjdDsK
K2NsYXNzIEludFNpemU7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CisKK2NsYXNzIFBsYXRmb3Jt
SW1hZ2UgeworcHVibGljOgorICAgIFBsYXRmb3JtSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHIm
IGltYWdlKQorICAgICAgICA6IG1faW1hZ2UoaW1hZ2UpCisgICAgeworICAgIH0KKworICAgIGJv
b2wgaXNOaWwoKSBjb25zdCB7IHJldHVybiAhbV9pbWFnZTsgfQorICAgIHZvaWQgY2xlYXJTdWJJ
bWFnZXMoKTsKKworICAgIEludFNpemUgc2l6ZSgpIGNvbnN0OworICAgIGJvb2wgaGFzQWxwaGEo
KSBjb25zdDsKKyAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdDsKKyAgICBi
b29sIGlzQWxtb3N0U29saWRDb2xvcigpIGNvbnN0OworICAgIHZvaWQgZHJhdyhHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUs
IGNvbnN0IEltYWdlT3JpZW50YXRpb24mKSBjb25zdDsKKworICAgIHN0YXRpYyBmbG9hdCBzdWJz
YW1wbGluZ1NjYWxlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCk7CisKK3ByaXZhdGU6CisjaWYgVVNFKENHKQorICAg
IENHSW1hZ2VSZWYgY2dJbWFnZVJlZigpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UgPyBtX2ltYWdl
LmdldCgpIDogbnVsbHB0cjsgfQorI2VuZGlmCisgICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsK
K307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbQppbmRleCBmNGMxNDU3YmJiMjU1NzU0
ZjAwYTA2MjVlZTgzZTA0ZGE3YzZlZmNmLi5kNTIwZjVkNTg1YWM2MGRiYWVlMjU1ZTFiODNjMjRk
YzY4NzIxMGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCkBAIC0yMTIsNyArMjEyLDcg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnVwZGF0ZURpc3Bs
YXlNb2RlKCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgbV9wYXVzZWRJbWFnZSA9IGltYWdlLT5nZXRDR0ltYWdlUmVm
KCk7CisgICAgICAgICAgICAgICAgbV9wYXVzZWRJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgpOwogICAgICAgICAgICAgICAgIGlmICghbV9wYXVzZWRJbWFnZSkgewog
ICAgICAgICAgICAgICAgICAgICBtX2Rpc3BsYXlNb2RlID0gUGFpbnRJdEJsYWNrOwogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDE3NzIyYmVjNTNhYjhhMDhhOGRhODUyOGI5ZTBkN2M0ZDBjZDQx
MzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCaXRt
YXBJbWFnZS5oIgotCi0jaWYgVVNFKENBSVJPKQotCi0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMu
aCIKLSNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0
Q2Fpcm8uaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIE5hdGl2ZUltYWdlIHsKLQotSW50U2l6ZSBzaXpl
KGNvbnN0IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiBpbWFnZSkKLXsKLSAgICByZXR1cm4gY2Fp
cm9TdXJmYWNlU2l6ZShpbWFnZS5nZXQoKSk7Ci19Ci0KLWJvb2wgaGFzQWxwaGEoY29uc3QgUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4mIGltYWdlKQotewotICAgIHJldHVybiBjYWlyb19zdXJmYWNl
X2dldF9jb250ZW50KGltYWdlLmdldCgpKSAhPSBDQUlST19DT05URU5UX0NPTE9SOwotfQotCi1D
b2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoY29uc3QgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4m
IGltYWdlKQotewotICAgIEFTU0VSVChpbWFnZSk7Ci0gICAgCi0gICAgaWYgKE5hdGl2ZUltYWdl
OjpzaXplKGltYWdlKSAhPSBJbnRTaXplKDEsIDEpKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsK
LQotICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKGltYWdlLmdldCgpKSAhPSBDQUlST19T
VVJGQUNFX1RZUEVfSU1BR0UpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotCi0gICAgUkdCQTMy
KiBwaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFJHQkEzMio+KGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X2RhdGEoaW1hZ2UuZ2V0KCkpKTsKLSAgICByZXR1cm4gY29sb3JGcm9tUHJlbXVsdGlw
bGllZEFSR0IoKnBpeGVsKTsKLX0KLQotfQotCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCwKLSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJ
bWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pCi17Ci0gICAgaWYgKCFkc3Qu
d2lkdGgoKSB8fCAhZHN0LmhlaWdodCgpIHx8ICFzcmMud2lkdGgoKSB8fCAhc3JjLmhlaWdodCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGFydEFuaW1hdGlvbigpOwotCi0gICAgYXV0byBz
dXJmYWNlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwotICAgIGlmICghc3Vy
ZmFjZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCi0g
ICAgICAgIHJldHVybjsKLQotICAgIENvbG9yIGNvbG9yID0gc2luZ2xlUGl4ZWxTb2xpZENvbG9y
KCk7Ci0gICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBmaWxsV2l0aFNvbGlkQ29s
b3IoY29udGV4dCwgZHN0LCBjb2xvciwgb3ApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgY29udGV4dC5zYXZlKCk7Ci0KLSAgICAvLyBTZXQgdGhlIGNvbXBvc2l0aW5nIG9wZXJhdGlv
bi4KLSAgICBpZiAob3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciAmJiBibGVuZE1vZGUgPT0gQmxl
bmRNb2RlTm9ybWFsICYmICFmcmFtZUhhc0FscGhhQXRJbmRleChtX2N1cnJlbnRGcmFtZSkpCi0g
ICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOwotICAg
IGVsc2UKLSAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3AsIGJsZW5kTW9k
ZSk7Ci0KLSNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQotICAgIEludFNp
emUgc2NhbGVkU2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUoc3VyZmFjZS5nZXQoKSk7Ci0gICAgRmxv
YXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGxpbmco
c3JjLCBzY2FsZWRTaXplKTsKLSNlbHNlCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdChz
cmMpOwotI2VuZGlmCi0KLSAgICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3JpZW50YXRpb24oZGVz
Y3JpcHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKTsKLSAgICBpZiAoZGVzY3JpcHRpb24ucmVzcGVj
dEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikKLSAgICAgICAg
ZnJhbWVPcmllbnRhdGlvbiA9IGZyYW1lT3JpZW50YXRpb25BdEluZGV4KG1fY3VycmVudEZyYW1l
KTsKLQotICAgIEZsb2F0UmVjdCBkc3RSZWN0ID0gZHN0OwotCi0gICAgaWYgKGZyYW1lT3JpZW50
YXRpb24gIT0gRGVmYXVsdEltYWdlT3JpZW50YXRpb24pIHsKLSAgICAgICAgLy8gSW1hZ2VPcmll
bnRhdGlvbiBleHBlY3RzIHRoZSBvcmlnaW4gdG8gYmUgYXQgKDAsIDApLgotICAgICAgICBjb250
ZXh0LnRyYW5zbGF0ZShkc3RSZWN0LngoKSwgZHN0UmVjdC55KCkpOwotICAgICAgICBkc3RSZWN0
LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoKSk7Ci0gICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKGZy
YW1lT3JpZW50YXRpb24udHJhbnNmb3JtRnJvbURlZmF1bHQoZHN0UmVjdC5zaXplKCkpKTsKLSAg
ICAgICAgaWYgKGZyYW1lT3JpZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSkgewotICAgICAg
ICAgICAgLy8gVGhlIGRlc3RpbmF0aW9uIHJlY3RhbmdsZSB3aWxsIGhhdmUgaXQncyB3aWR0aCBh
bmQgaGVpZ2h0IGFscmVhZHkgcmV2ZXJzZWQgZm9yIHRoZSBvcmllbnRhdGlvbiBvZgotICAgICAg
ICAgICAgLy8gdGhlIGltYWdlLCBhcyBpdCB3YXMgbmVlZGVkIGZvciBwYWdlIGxheW91dCwgc28g
d2UgbmVlZCB0byByZXZlcnNlIGl0IGJhY2sgaGVyZS4KLSAgICAgICAgICAgIGRzdFJlY3QgPSBG
bG9hdFJlY3QoZHN0UmVjdC54KCksIGRzdFJlY3QueSgpLCBkc3RSZWN0LmhlaWdodCgpLCBkc3RS
ZWN0LndpZHRoKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29udGV4dC5wbGF0Zm9ybUNv
bnRleHQoKS0+ZHJhd1N1cmZhY2VUb0NvbnRleHQoc3VyZmFjZS5nZXQoKSwgZHN0UmVjdCwgYWRq
dXN0ZWRTcmNSZWN0LCBjb250ZXh0KTsKLQotICAgIGNvbnRleHQucmVzdG9yZSgpOwotCi0gICAg
aWYgKGltYWdlT2JzZXJ2ZXIoKSkKLSAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRo
aXMpOwotfQotCi1ib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQotewot
ICAgIGlmIChjbGVhck1ldGFkYXRhKQotICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOwot
Ci0gICAgaWYgKG1faW1hZ2UpIHsKLSAgICAgICAgbV9pbWFnZSA9IG51bGxwdHI7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjcwYWRhZWMyNzBlMzFiMDU0YWZjNWY2NmQ0ODI4OGFlYmYwNjFlM2EK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJD
YWlyb1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCisjaW5j
bHVkZSA8Y2Fpcm8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFBsYXRmb3JtSW1h
Z2U6OmNsZWFyU3ViSW1hZ2VzKCkKK3sKK30KKworSW50U2l6ZSBQbGF0Zm9ybUltYWdlOjpzaXpl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNOaWwoKSA/IEludFNpemUoKSA6IGNhaXJvU3VyZmFj
ZVNpemUobV9pbWFnZS5nZXQoKSk7Cit9CisKK2Jvb2wgUGxhdGZvcm1JbWFnZTo6aGFzQWxwaGEo
KSBjb25zdAoreworICAgIHJldHVybiBpc05pbCgpIHx8IGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRl
bnQobV9pbWFnZS5nZXQoKSkgIT0gQ0FJUk9fQ09OVEVOVF9DT0xPUjsKK30KKworQ29sb3IgUGxh
dGZvcm1JbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3QKK3sKKyAgICBpZiAoaXNO
aWwoKSB8fCBzaXplKCkgIT0gSW50U2l6ZSgxLCAxKSkKKyAgICAgICAgcmV0dXJuIENvbG9yKCk7
CisKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShtX2ltYWdlLmdldCgpKSAhPSBDQUlS
T19TVVJGQUNFX1RZUEVfSU1BR0UpCisgICAgICAgIHJldHVybiBDb2xvcigpOworCisgICAgUkdC
QTMyKiBwaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFJHQkEzMio+KGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2RhdGEobV9pbWFnZS5nZXQoKSkpOworICAgIHJldHVybiBjb2xvckZyb21QcmVt
dWx0aXBsaWVkQVJHQigqcGl4ZWwpOworfQorCitib29sIFBsYXRmb3JtSW1hZ2U6OmlzQWxtb3N0
U29saWRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitmbG9hdCBQbGF0
Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYpCit7CisgICAgcmV0dXJuIDE7Cit9CisKK3ZvaWQgUGxh
dGZvcm1JbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50U2l6ZSYsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSwgY29uc3QgSW1hZ2VPcmllbnRhdGlv
biYgb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgY29udGV4dC5zYXZlKCk7CisgICAgCisgICAg
Ly8gU2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCisgICAgaWYgKG9wID09IENvbXBvc2l0
ZVNvdXJjZU92ZXIgJiYgbW9kZSA9PSBCbGVuZE1vZGVOb3JtYWwgJiYgIWhhc0FscGhhKCkpCisg
ICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOworICAg
IGVsc2UKKyAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3AsIG1vZGUpOwor
ICAgICAgICAKKyNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQorICAgIElu
dFNpemUgc2NhbGVkU2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUobV9pbWFnZS5nZXQoKSk7CisgICAg
RmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGxp
bmcoc3JjUmVjdCwgc2NhbGVkU2l6ZSk7CisjZWxzZQorICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNy
Y1JlY3Qoc3JjUmVjdCk7CisjZW5kaWYKKyAgICAgICAgCisgICAgRmxvYXRSZWN0IGFkanVzdGVk
RGVzdFJlY3QgPSBkZXN0UmVjdDsKKyAgICAgICAgCisgICAgaWYgKG9yaWVudGF0aW9uICE9IERl
ZmF1bHRJbWFnZU9yaWVudGF0aW9uKSB7CisgICAgICAgIC8vIEltYWdlT3JpZW50YXRpb24gZXhw
ZWN0cyB0aGUgb3JpZ2luIHRvIGJlIGF0ICgwLCAwKS4KKyAgICAgICAgY29udGV4dC50cmFuc2xh
dGUoZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCkpOworICAgICAgICBhZGp1c3RlZERlc3RSZWN0
LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoKSk7CisgICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKG9y
aWVudGF0aW9uLnRyYW5zZm9ybUZyb21EZWZhdWx0KGFkanVzdGVkRGVzdFJlY3Quc2l6ZSgpKSk7
CisgICAgICAgIGlmIChvcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpKSB7CisgICAgICAg
ICAgICAvLyBUaGUgZGVzdGluYXRpb24gcmVjdGFuZ2xlIHdpbGwgaGF2ZSBpdCdzIHdpZHRoIGFu
ZCBoZWlnaHQgYWxyZWFkeSByZXZlcnNlZCBmb3IgdGhlIG9yaWVudGF0aW9uIG9mCisgICAgICAg
ICAgICAvLyB0aGUgaW1hZ2UsIGFzIGl0IHdhcyBuZWVkZWQgZm9yIHBhZ2UgbGF5b3V0LCBzbyB3
ZSBuZWVkIHRvIHJldmVyc2UgaXQgYmFjayBoZXJlLgorICAgICAgICAgICAgYWRqdXN0ZWREZXN0
UmVjdC5zZXRTaXplKGFkanVzdGVkRGVzdFJlY3Quc2l6ZSgpLnRyYW5zcG9zZWRTaXplKCkpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1N1
cmZhY2VUb0NvbnRleHQobV9pbWFnZS5nZXQoKSwgYWRqdXN0ZWREZXN0UmVjdCwgYWRqdXN0ZWRT
cmNSZWN0LCBjb250ZXh0KTsKKworICAgIGNvbnRleHQucmVzdG9yZSgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2M4MWExNzBiZTc5YWU2YmU2Y2FjZGM5OWY0YzM5OGNh
YWY0MjZkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMjA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkJpdG1hcEltYWdlLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJDb3JlR3JhcGhp
Y3NTUEkuaCIKLSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJHZW9tZXRy
eVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVkZSAi
SW1hZ2VPYnNlcnZlci5oIgotI2luY2x1ZGUgIlN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCIKLSNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLSNpZiBVU0UoQVBQS0lUKQotI2luY2x1ZGUgPEFw
cGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgotI2VuZGlmCi0KLSNpZiBQ
TEFURk9STShDT0NPQSkKLSNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0jZW5k
aWYKLQotI2lmIFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2Uv
V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1uYW1lc3BhY2UgTmF0aXZlSW1hZ2UgewotCi1JbnRTaXplIHNpemUoY29uc3QgUmV0YWluUHRy
PENHSW1hZ2VSZWY+JiBpbWFnZSkKLXsKLSAgICBBU1NFUlQoaW1hZ2UpOwotICAgIHJldHVybiBJ
bnRTaXplKENHSW1hZ2VHZXRXaWR0aChpbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQoaW1h
Z2UuZ2V0KCkpKTsKLX0KLQotYm9vbCBoYXNBbHBoYShjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4mKQotewotICAgIC8vIEZJWE1FOiBBbnN3ZXIgY29ycmVjdGx5IHRoZSBxdWVzdGlvbjogZG9l
cyB0aGUgQ0dJbWFnZVJlZiBoYXZlIGFscGhhIGNoYW5ubmVsPwotICAgIHJldHVybiB0cnVlOwot
fQotICAgIAotQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKGNvbnN0IFJldGFpblB0cjxDR0lt
YWdlUmVmPiYgaW1hZ2UpCi17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICAKLSAgICBpZiAoTmF0
aXZlSW1hZ2U6OnNpemUoaW1hZ2UpICE9IEludFNpemUoMSwgMSkpCi0gICAgICAgIHJldHVybiBD
b2xvcigpOwotICAgIAotICAgIHVuc2lnbmVkIGNoYXIgcGl4ZWxbNF07IC8vIFJHQkEKLSAgICBh
dXRvIGJpdG1hcENvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShwaXhlbCwg
MSwgMSwgOCwgc2l6ZW9mKHBpeGVsKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwKLSAgICAgICAga0NH
SW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcpKTsK
LQotICAgIGlmICghYml0bWFwQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0gICAg
Ci0gICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGJpdG1hcENvbnRleHQuZ2V0KCksIGtDR0JsZW5k
TW9kZUNvcHkpOwotICAgIENHQ29udGV4dERyYXdJbWFnZShiaXRtYXBDb250ZXh0LmdldCgpLCBD
R1JlY3RNYWtlKDAsIDAsIDEsIDEpLCBpbWFnZS5nZXQoKSk7Ci0gICAgCi0gICAgaWYgKCFwaXhl
bFszXSkKLSAgICAgICAgcmV0dXJuIENvbG9yKDAsIDAsIDAsIDApOwotCi0gICAgcmV0dXJuIENv
bG9yKHBpeGVsWzBdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICogMjU1IC8gcGl4ZWxbM10s
IHBpeGVsWzJdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKLX0KLQotfQotCi1ib29sIEZy
YW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQotewotICAgIGlmIChjbGVhck1ldGFk
YXRhKQotICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOwotCi0gICAgbV9zdWJzYW1wbGlu
Z0xldmVsID0gMDsKLQotICAgIGlmIChtX2ltYWdlKSB7Ci0jaWYgQ0FDSEVfU1VCSU1BR0VTCi0g
ICAgICAgIHN1YmltYWdlQ2FjaGUoKS5jbGVhckltYWdlKG1faW1hZ2UuZ2V0KCkpOwotI2VuZGlm
Ci0gICAgICAgIG1faW1hZ2UgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1DR0ltYWdlUmVmIEJpdG1hcEltYWdlOjpnZXRDR0lt
YWdlUmVmKCkKLXsKLSAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCkuZ2V0KCk7Ci19Ci0K
LUNHSW1hZ2VSZWYgQml0bWFwSW1hZ2U6OmdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6ZShjb25zdCBJ
bnRTaXplJiBzaXplKQotewotICAgIHNpemVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgQ0dJbWFnZVJlZiBj
Z0ltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkuZ2V0KCk7Ci0gICAgICAgIGlmIChjZ0ltYWdl
ICYmIEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGNnSW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGNn
SW1hZ2UpKSA9PSBzaXplKQotICAgICAgICAgICAgcmV0dXJuIGNnSW1hZ2U7Ci0gICAgfQotCi0g
ICAgLy8gRmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgQ0dJbWFnZVJlZiBpZiB3ZSBjYW4ndCBmaW5k
IHRoZSByaWdodCBzaXplCi0gICAgcmV0dXJuIGdldENHSW1hZ2VSZWYoKTsKLX0KLQotUmV0YWlu
UHRyPENGQXJyYXlSZWY+IEJpdG1hcEltYWdlOjpnZXRDR0ltYWdlQXJyYXkoKQotewotICAgIHNp
emVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKLSAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICAKLSAgICBDRk11dGFibGVBcnJheVJlZiBhcnJheSA9IENGQXJyYXlD
cmVhdGVNdXRhYmxlKE5VTEwsIGNvdW50LCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKENHSW1hZ2VS
ZWYgY3VyckZyYW1lID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkuZ2V0KCkpCi0gICAgICAgICAgICBD
RkFycmF5QXBwZW5kVmFsdWUoYXJyYXksIGN1cnJGcmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBh
ZG9wdENGKGFycmF5KTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQmIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3AsIEJsZW5kTW9kZSBibGVuZE1vZGUs
IEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikKLXsKLSNpZiBQTEFURk9S
TShJT1MpCi0gICAgc3RhcnRBbmltYXRpb24oRG9Ob3RDYXRjaFVwKTsKLSNlbHNlCi0gICAgc3Rh
cnRBbmltYXRpb24oKTsKLSNlbmRpZgotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdl
OwotICAgIC8vIE5ldmVyIHVzZSBzdWJzYW1wbGVkIGltYWdlcyBmb3IgZHJhd2luZyBpbnRvIFBE
RiBjb250ZXh0cy4KLSAgICBpZiAod2tDR0NvbnRleHRJc1BERkNvbnRleHQoY3R4dC5wbGF0Zm9y
bUNvbnRleHQoKSkpCi0gICAgICAgIGltYWdlID0gY29weVVuc2NhbGVkRnJhbWVJbWFnZUF0SW5k
ZXgobV9jdXJyZW50RnJhbWUpOwotICAgIGVsc2UgewotICAgICAgICBDR1JlY3QgdHJhbnNmb3Jt
ZWREZXN0aW5hdGlvblJlY3QgPSBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShkZXN0UmVjdCwg
Q0dDb250ZXh0R2V0Q1RNKGN0eHQucGxhdGZvcm1Db250ZXh0KCkpKTsKLSAgICAgICAgZmxvYXQg
c3Vic2FtcGxpbmdTY2FsZSA9IHN0ZDo6bWluPGZsb2F0PigxLCBzdGQ6Om1heCh0cmFuc2Zvcm1l
ZERlc3RpbmF0aW9uUmVjdC5zaXplLndpZHRoIC8gc3JjUmVjdC53aWR0aCgpLCB0cmFuc2Zvcm1l
ZERlc3RpbmF0aW9uUmVjdC5zaXplLmhlaWdodCAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsKLQotICAg
ICAgICBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lLCBzdWJzYW1wbGlu
Z1NjYWxlKTsKLSAgICB9Ci0KLSAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3
ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIENv
bG9yIGNvbG9yID0gc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCk7Ci0gICAgaWYgKGNvbG9yLmlzVmFs
aWQoKSkgewotICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwgZGVzdFJlY3QsIGNvbG9y
LCBjb21wb3NpdGVPcCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBTdWJzYW1w
bGluZyBtYXkgaGF2ZSBnaXZlbiB1cyBhbiBpbWFnZSB0aGF0IGlzIHNtYWxsZXIgdGhhbiBzaXpl
KCkuCi0gICAgSW50U2l6ZSBpbWFnZVNpemUoQ0dJbWFnZUdldFdpZHRoKGltYWdlLmdldCgpKSwg
Q0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSkpOwotICAgIAotICAgIC8vIHNyY1JlY3QgaXMg
aW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB1bnN1YnNhbXBsZWQgaW1hZ2UsIHNvIHdlIGhhdmUg
dG8gbWFwIGl0IHRvIHRoZSBzdWJzYW1wbGVkIGltYWdlLgotICAgIEZsb2F0UmVjdCBzY2FsZWRT
cmNSZWN0ID0gc3JjUmVjdDsKLSAgICBpZiAoaW1hZ2VTaXplICE9IG1fc2l6ZSkgewotICAgICAg
ICBGbG9hdFJlY3Qgb3JpZ2luYWxJbWFnZUJvdW5kcyhGbG9hdFBvaW50KCksIG1fc2l6ZSk7Ci0g
ICAgICAgIEZsb2F0UmVjdCBzdWJzYW1wbGVkSW1hZ2VCb3VuZHMoRmxvYXRQb2ludCgpLCBpbWFn
ZVNpemUpOwotICAgICAgICBzY2FsZWRTcmNSZWN0ID0gbWFwUmVjdChzcmNSZWN0LCBvcmlnaW5h
bEltYWdlQm91bmRzLCBzdWJzYW1wbGVkSW1hZ2VCb3VuZHMpOwotICAgIH0KLSAgICAKLSAgICBJ
bWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uOwotICAgIGlmIChkZXNjcmlwdGlvbi5yZXNwZWN0
SW1hZ2VPcmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQotICAgICAgICBv
cmllbnRhdGlvbiA9IGZyYW1lT3JpZW50YXRpb25BdEluZGV4KG1fY3VycmVudEZyYW1lKTsKLQot
ICAgIGN0eHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzY2Fs
ZWRTcmNSZWN0LCBjb21wb3NpdGVPcCwgYmxlbmRNb2RlLCBvcmllbnRhdGlvbik7Ci0KLSAgICBp
ZiAoaW1hZ2VPYnNlcnZlcigpKQotICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhp
cyk7Ci19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBCaXRtYXBJbWFnZTo6Y29weVVuc2NhbGVk
RnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4KQotewotICAgIGlmIChpbmRleCA+PSBmcmFt
ZUNvdW50KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGluZGV4ID49IG1f
ZnJhbWVzLnNpemUoKSB8fCAhbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2UpCi0gICAgICAgIGNhY2hl
RnJhbWUoaW5kZXgsIDApOwotCi0gICAgaWYgKCFtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1wbGlu
Z0xldmVsKQotICAgICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2U7Ci0KLSAgICBy
ZXR1cm4gbV9zb3VyY2UuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgpOwotfQotCi19Ci0K
LSNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUGF0dGVybkNHLmNwcAppbmRleCBiNDI4ZDUwZDk0YmY5MjQyODAzMjg3ZDJlZWMxNmJk
NjljNTI4ZDkyLi4zZGFhMTM5YWI3ZWE1YjQyMTU3Nzg4MzVkMzUzZDhhZGI1ZjBjNzVlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAK
QEAgLTcyLDcgKzcyLDcgQEAgQ0dQYXR0ZXJuUmVmIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0
dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRyYW4KICAgICAvLyBJZiB3ZSdy
ZSByZXBlYXRpbmcgaW4gYm90aCBkaXJlY3Rpb25zLCB3ZSBjYW4gdXNlIGltYWdlLWJhY2tlZCBw
YXR0ZXJucwogICAgIC8vIGluc3RlYWQgb2YgY3VzdG9tIHBhdHRlcm5zLCBhbmQgYXZvaWQgdGls
aW5nLWVkZ2UgcGl4ZWwgY3JhY2tzLgogICAgIGlmIChtX3JlcGVhdFggJiYgbV9yZXBlYXRZKQot
ICAgICAgICByZXR1cm4gd2tDR1BhdHRlcm5DcmVhdGVXaXRoSW1hZ2VBbmRUcmFuc2Zvcm0odGls
ZUltYWdlKCktPmdldENHSW1hZ2VSZWYoKSwgcGF0dGVyblRyYW5zZm9ybSwgd2tQYXR0ZXJuVGls
aW5nQ29uc3RhbnRTcGFjaW5nKTsKKyAgICAgICAgcmV0dXJuIHdrQ0dQYXR0ZXJuQ3JlYXRlV2l0
aEltYWdlQW5kVHJhbnNmb3JtKHRpbGVJbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmdldCgpLCBwYXR0
ZXJuVHJhbnNmb3JtLCB3a1BhdHRlcm5UaWxpbmdDb25zdGFudFNwYWNpbmcpOwogCiAgICAgLy8g
SWYgRkxUX01BWCBzaG91bGQgYWxzbyBiZSB1c2VkIGZvciB4U3RlcCBvciB5U3RlcCwgbm90aGlu
ZyBpcyByZW5kZXJlZC4gVXNpbmcgZnJhY3Rpb25zIG9mIEZMVF9NQVggYWxzbwogICAgIC8vIHJl
c3VsdCBpbiBub3RoaW5nIGJlaW5nIHJlbmRlcmVkLgpAQCAtODMsNyArODMsNyBAQCBDR1BhdHRl
cm5SZWYgUGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdXNlclNwYWNlVHJhbgogICAgIENHRmxvYXQgeVN0ZXAgPSBtX3JlcGVhdFkgPyB0aWxlUmVj
dC5oZWlnaHQoKSA6ICgxIDw8IDIyKTsKIAogICAgIC8vIFRoZSBwYXR0ZXJuIHdpbGwgcmVsZWFz
ZSB0aGUgQ0dJbWFnZVJlZiB3aGVuIGl0J3MgZG9uZSByZW5kZXJpbmcgaW4gcGF0dGVyblJlbGVh
c2VDYWxsYmFjawotICAgIENHSW1hZ2VSZWYgcGxhdGZvcm1JbWFnZSA9IENHSW1hZ2VSZXRhaW4o
dGlsZUltYWdlKCktPmdldENHSW1hZ2VSZWYoKSk7CisgICAgQ0dJbWFnZVJlZiBwbGF0Zm9ybUlt
YWdlID0gdGlsZUltYWdlKCktPm5hdGl2ZUltYWdlKCkubGVha1JlZigpOwogCiAgICAgY29uc3Qg
Q0dQYXR0ZXJuQ2FsbGJhY2tzIHBhdHRlcm5DYWxsYmFja3MgPSB7IDAsIHBhdHRlcm5DYWxsYmFj
aywgcGF0dGVyblJlbGVhc2VDYWxsYmFjayB9OwogICAgIHJldHVybiBDR1BhdHRlcm5DcmVhdGUo
cGxhdGZvcm1JbWFnZSwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHhTdGVwLCB5U3RlcCwg
a0NHUGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2luZywgVFJVRSwgJnBhdHRlcm5DYWxsYmFja3Mp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZv
cm1JbWFnZUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BsYXRm
b3JtSW1hZ2VDRy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWZiMmRlMGVhMTJkYTIxNGYxMDQ2YzM5NjJlOGVh
YjUzYzY0NDEyNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAi
Q29sb3IuaCIKKyNpbmNsdWRlICJDb3JlR3JhcGhpY3NTUEkuaCIKKyNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dENHLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlN1YmltYWdlQ2Fj
aGVXaXRoVGltZXIuaCIKKworI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDxXZWJLaXRTeXN0
ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworICAgIAordm9pZCBQbGF0Zm9ybUltYWdlOjpjbGVhclN1YkltYWdlcygpCit7
CisjaWYgQ0FDSEVfU1VCSU1BR0VTCisgICAgaWYgKCFpc05pbCgpKQorICAgICAgICBzdWJpbWFn
ZUNhY2hlKCkuY2xlYXJJbWFnZShjZ0ltYWdlUmVmKCkpOworI2VuZGlmCit9CisKK0ludFNpemUg
UGxhdGZvcm1JbWFnZTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzTmlsKCkgPyBJbnRT
aXplKCkgOiBJbnRTaXplKENHSW1hZ2VHZXRXaWR0aChjZ0ltYWdlUmVmKCkpLCBDR0ltYWdlR2V0
SGVpZ2h0KGNnSW1hZ2VSZWYoKSkpOworfQorCitib29sIFBsYXRmb3JtSW1hZ2U6Omhhc0FscGhh
KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogQW5zd2VyIGNvcnJlY3RseSB0aGUgcXVlc3Rpb246
IGRvZXMgdGhlIENHSW1hZ2VSZWYgaGF2ZSBhbHBoYSBjaGFubm5lbD8KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworQ29sb3IgUGxhdGZvcm1JbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29u
c3QKK3sKKyAgICBpZiAoaXNOaWwoKSB8fCBzaXplKCkgIT0gSW50U2l6ZSgxLCAxKSkKKyAgICAg
ICAgcmV0dXJuIENvbG9yKCk7CisgICAgCisgICAgdW5zaWduZWQgY2hhciBwaXhlbFs0XTsgLy8g
UkdCQQorICAgIGF1dG8gYml0bWFwQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3Jl
YXRlKHBpeGVsLCAxLCAxLCA4LCBzaXplb2YocGl4ZWwpLCBzUkdCQ29sb3JTcGFjZVJlZigpLAor
ICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QgfCBrQ0dCaXRtYXBCeXRlT3Jk
ZXIzMkJpZykpOworICAgIAorICAgIGlmICghYml0bWFwQ29udGV4dCkKKyAgICAgICAgcmV0dXJu
IENvbG9yKCk7CisgICAgCisgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGJpdG1hcENvbnRleHQu
Z2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOworICAgIENHQ29udGV4dERyYXdJbWFnZShiaXRtYXBD
b250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIDEsIDEpLCBjZ0ltYWdlUmVmKCkpOworICAg
IAorICAgIGlmICghcGl4ZWxbM10pCisgICAgICAgIHJldHVybiBDb2xvcigwLCAwLCAwLCAwKTsK
KyAgICAKKyAgICByZXR1cm4gQ29sb3IocGl4ZWxbMF0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxb
MV0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMl0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbM10p
OworfQorICAgIAorYm9vbCBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKSBjb25z
dAoreworICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBjZ0ltYWdlUmVmKCk7CisgICAgQVNTRVJUKENH
SW1hZ2VHZXRCaXRzUGVyQ29tcG9uZW50KGltYWdlKSA9PSA4KTsKKyAgICAKKyAgICBDR0JpdG1h
cEluZm8gaW1hZ2VJbmZvID0gQ0dJbWFnZUdldEJpdG1hcEluZm8oaW1hZ2UpOworICAgIGlmICgh
KGltYWdlSW5mbyAmIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlKSB8fCAoaW1hZ2VJbmZvICYg
a0NHQml0bWFwQWxwaGFJbmZvTWFzaykgIT0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJz
dCkgeworICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYmVpbmcgYWJsZSB0byBoYW5kbGUgb3Ro
ZXIgcGl4ZWwgZm9ybWF0cy4KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHdpZHRoID0gQ0dJbWFnZUdl
dFdpZHRoKGltYWdlKTsKKyAgICBzaXplX3QgaGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChpbWFn
ZSk7CisgICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0gQ0dJbWFnZUdldEJ5dGVzUGVyUm93KGltYWdl
KTsKKyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBwcm92aWRlciA9IGFkb3B0Q0YoQ0dE
YXRhUHJvdmlkZXJDb3B5RGF0YShDR0ltYWdlR2V0RGF0YVByb3ZpZGVyKGltYWdlKSkpOworICAg
IGNvbnN0IFVJbnQ4KiBkYXRhID0gQ0ZEYXRhR2V0Qnl0ZVB0cihwcm92aWRlci5nZXQoKSk7Cisg
ICAgCisgICAgLy8gT3ZlcmxheSBhIGdyaWQgb2Ygc2FtcGxpbmcgZG90cyBvbiB0b3Agb2YgYSBn
cmF5c2NhbGUgdmVyc2lvbiBvZiB0aGUgaW1hZ2UuCisgICAgLy8gRm9yIHRoZSBpbnRlcmlvciBw
b2ludHMsIGNhbGN1bGF0ZSB0aGUgZGlmZmVyZW5jZSBpbiBsdW1pbmFuY2UgYW1vbmcgdGhlIHNh
bXBsZSBwb2ludAorICAgIC8vIGFuZCBpdHMgc3Vycm91bmRzIHBvaW50cywgc2NhbGVkIGJ5IHRy
YW5zcGFyZW5jeS4KKyAgICBjb25zdCB1bnNpZ25lZCBzYW1wbGVSb3dzID0gNzsKKyAgICBjb25z
dCB1bnNpZ25lZCBzYW1wbGVDb2xzID0gNzsKKyAgICAvLyBGSVhNRTogUmVmaW5lIHRoZSBwcm9w
ZXIgbnVtYmVyIG9mIHNhbXBsZXMsIGFuZCBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgYXNwZWN0IHJh
dGlvcy4KKyAgICBpZiAod2lkdGggPCBzYW1wbGVDb2xzIHx8IGhlaWdodCA8IHNhbXBsZVJvd3Mp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBFbnN1cmUgdGhhdCB0aGUgbGFz
dCByb3cvY29sdW1uIGxhbmQgb24gdGhlIGltYWdlIHBlcmltZXRlci4KKyAgICBjb25zdCBmbG9h
dCBzdHJpZGVXaWR0aCA9IHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCAtIDEpIC8gKHNhbXBsZUNv
bHMgLSAxKTsKKyAgICBjb25zdCBmbG9hdCBzdHJpZGVIZWlnaHQgPSBzdGF0aWNfY2FzdDxmbG9h
dD4oaGVpZ2h0IC0gMSkgLyAoc2FtcGxlUm93cyAtIDEpOworICAgIGZsb2F0IHNhbXBsZXNbc2Ft
cGxlUm93c11bc2FtcGxlQ29sc107CisgICAgCisgICAgLy8gRmluZCB0aGUgbHVtaW5hbmNlIG9m
IHRoZSBzYW1wbGUgcG9pbnRzLgorICAgIGZsb2F0IHkgPSAwOworICAgIGNvbnN0IFVJbnQ4KiBy
b3cgPSBkYXRhOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzYW1wbGVSb3dzOyArK2kp
IHsKKyAgICAgICAgZmxvYXQgeCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGog
PCBzYW1wbGVDb2xzOyArK2opIHsKKyAgICAgICAgICAgIGNvbnN0IFVJbnQ4KiBwMCA9IHJvdyAr
IChzdGF0aWNfY2FzdDxpbnQ+KHggKyAuNSkpICogNDsKKyAgICAgICAgICAgIC8vIFIgRyBCIEEK
KyAgICAgICAgICAgIHNhbXBsZXNbaV1bal0gPSAoMC4yMTI1ICogKnAwICsgMC43MTU0ICogKihw
MCsxKSArIDAuMDcyMSAqICoocDArMikpICogKihwMCszKSAvIDI1NTsKKyAgICAgICAgICAgIHgg
Kz0gc3RyaWRlV2lkdGg7CisgICAgICAgIH0KKyAgICAgICAgeSArPSBzdHJpZGVIZWlnaHQ7Cisg
ICAgICAgIHJvdyA9IGRhdGEgKyAoc3RhdGljX2Nhc3Q8aW50Pih5ICsgLjUpKSAqIGJ5dGVzUGVy
Um93OworICAgIH0KKyAgICAKKyAgICAvLyBEZXRlcm1pbmUgdGhlIGltYWdlIHNjb3JlLgorICAg
IGZsb2F0IGFjY3VtU2NvcmUgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzYW1w
bGVSb3dzIC0gMTsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDE7IGogPCBzYW1w
bGVDb2xzIC0gMTsgKytqKSB7CisgICAgICAgICAgICBmbG9hdCBkaWZmID0gc2FtcGxlc1tpIC0g
MV1bal0gKyBzYW1wbGVzW2kgKyAxXVtqXSArIHNhbXBsZXNbaV1baiAtIDFdICsgc2FtcGxlc1tp
XVtqICsgMV0gLSA0ICogc2FtcGxlc1tpXVtqXTsKKyAgICAgICAgICAgIGFjY3VtU2NvcmUgKz0g
ZGlmZiAqIGRpZmY7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gVGhlIHNjb3JlIGZv
ciBhIGdpdmVuIHNhbXBsZSBjYW4gYmUgd2l0aGluIHRoZSByYW5nZSBvZiAwIGFuZCAyNTVeMi4K
KyAgICByZXR1cm4gYWNjdW1TY29yZSA8IDI1MDAgKiAoc2FtcGxlUm93cyAtIDIpICogKHNhbXBs
ZUNvbHMgLSAyKTsKK30KKworZmxvYXQgUGxhdGZvcm1JbWFnZTo6c3Vic2FtcGxpbmdTY2FsZShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCkKK3sKKyAgICAvLyBOZXZlciB1c2Ugc3Vic2FtcGxlZCBpbWFn
ZXMgZm9yIGRyYXdpbmcgaW50byBQREYgY29udGV4dHMuCisgICAgaWYgKHdrQ0dDb250ZXh0SXNQ
REZDb250ZXh0KGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpKQorICAgICAgICByZXR1cm4gMTsK
KyAgICAKKyAgICBDR1JlY3QgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3QgPSBDR1JlY3RBcHBs
eUFmZmluZVRyYW5zZm9ybShkZXN0UmVjdCwgQ0dDb250ZXh0R2V0Q1RNKGNvbnRleHQucGxhdGZv
cm1Db250ZXh0KCkpKTsKKyAgICByZXR1cm4gc3RkOjptaW48ZmxvYXQ+KDEsIHN0ZDo6bWF4KHRy
YW5zZm9ybWVkRGVzdGluYXRpb25SZWN0LnNpemUud2lkdGggLyBzcmNSZWN0LndpZHRoKCksIHRy
YW5zZm9ybWVkRGVzdGluYXRpb25SZWN0LnNpemUuaGVpZ2h0IC8gc3JjUmVjdC5oZWlnaHQoKSkp
OworfQorCit2b2lkIFBsYXRmb3JtSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEludFNpemUmIHNyY1NpemUsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9k
ZSwgY29uc3QgSW1hZ2VPcmllbnRhdGlvbiYgb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgLy8g
U3Vic2FtcGxpbmcgbWF5IGhhdmUgZ2l2ZW4gdXMgYW4gaW1hZ2UgdGhhdCBpcyBzbWFsbGVyIHRo
YW4gc2l6ZSgpLgorICAgIEludFNpemUgc3Vic2FtcGxlZEltYWdlU2l6ZSA9IHNpemUoKTsKKyAg
ICAKKyAgICAvLyBzcmNSZWN0IGlzIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgdW5zdWJzYW1w
bGVkIGltYWdlLCBzbyB3ZSBoYXZlIHRvIG1hcCBpdCB0byB0aGUgc3Vic2FtcGxlZCBpbWFnZS4K
KyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBpZiAoc3Vic2Ft
cGxlZEltYWdlU2l6ZSAhPSBzcmNTaXplKQorICAgICAgICBhZGp1c3RlZFNyY1JlY3QgPSBtYXBS
ZWN0KHNyY1JlY3QsIEZsb2F0UmVjdCh7IH0sIHNyY1NpemUpLCBGbG9hdFJlY3QoeyB9LCBzdWJz
YW1wbGVkSW1hZ2VTaXplKSk7CisgICAgCisgICAgY29udGV4dC5kcmF3TmF0aXZlSW1hZ2UobV9p
bWFnZSwgc3Vic2FtcGxlZEltYWdlU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3As
IG1vZGUsIG9yaWVudGF0aW9uKTsKK30KKyAgICAKK30KKworI2VuZGlmIC8vIFVTRShDRykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1RleHRUcmFj
a1JlcHJlc2VudGF0aW9uQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tCmluZGV4IDg5NzIwZDE3MzY1
ZGE3ZThiYTg0NjlkNTI5NDU0OGQ1MTg0N2E3ZmUuLjQ0NzZmYzVmODdjMzQ5ODhmNmQ5YWQ1NWVl
YmQ4ZDFiOWJiMDIyZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2Nv
YS5tbQpAQCAtMTI5LDcgKzEyOSw3IEBAIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2E6On5U
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hKCkKIHZvaWQgVGV4dFRyYWNrUmVwcmVzZW50YXRp
b25Db2NvYTo6dXBkYXRlKCkKIHsKICAgICBpZiAoYXV0byByZXByZXNlbnRhdGlvbiA9IG1fY2xp
ZW50LmNyZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2UoKSkKLSAgICAgICAgW21fbGF5
ZXIuZ2V0KCkgc2V0Q29udGVudHM6KGlkKXJlcHJlc2VudGF0aW9uLT5nZXRDR0ltYWdlUmVmKCld
OworICAgICAgICBbbV9sYXllci5nZXQoKSBzZXRDb250ZW50czooaWQpcmVwcmVzZW50YXRpb24t
Pm5hdGl2ZUltYWdlKCkuZ2V0KCldOwogfQogCiB2b2lkIFRleHRUcmFja1JlcHJlc2VudGF0aW9u
Q29jb2E6OnNldENvbnRlbnRTY2FsZShmbG9hdCBzY2FsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQppbmRleCAwMWViNmRkMzAwNDNhMjI1
MjkxNzZmZDkxMjExN2RjNTc3NmMxN2JhLi5kYzFjN2M3MDk1ZDk0NGM0YzYyZjFmZTA5MzU3MDJh
MTNjN2M3YTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvSW1hZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0ltYWdlTWFjLm1tCkBAIC04NSwzMSArODUsMjIgQEAgQ0ZEYXRhUmVmIEJpdG1hcEltYWdlOjpn
ZXRUSUZGUmVwcmVzZW50YXRpb24oKQogICAgIGlmIChtX3RpZmZSZXApCiAgICAgICAgIHJldHVy
biBtX3RpZmZSZXAuZ2V0KCk7CiAKLSAgICB1bnNpZ25lZCBudW1GcmFtZXMgPSBmcmFtZUNvdW50
KCk7CisgICAgYXV0byBuYXRpdmVJbWFnZXMgPSB0aGlzLT5mcmFtZXNOYXRpdmVJbWFnZXMoKTsK
IAotICAgIC8vIElmIG51bUZyYW1lcyBpcyB6ZXJvLCB3ZSBrbm93IGZvciBjZXJ0YWluIHRoaXMg
aW1hZ2UgZG9lc24ndCBoYXZlIHZhbGlkIGRhdGEKKyAgICAvLyBJZiBmcmFtZXNJbWFnZXMuc2l6
ZSgpIGlzIHplcm8sIHdlIGtub3cgZm9yIGNlcnRhaW4gdGhpcyBpbWFnZSBkb2Vzbid0IGhhdmUg
dmFsaWQgZGF0YQogICAgIC8vIEV2ZW4gdGhvdWdoIHRoZSBjYWxsIHRvIENHSW1hZ2VEZXN0aW5h
dGlvbkNyZWF0ZVdpdGhEYXRhIHdpbGwgZmFpbCBhbmQgd2UnbGwgaGFuZGxlIGl0IGdyYWNlZnVs
bHksCiAgICAgLy8gaW4gY2VydGFpbiBjaXJjdW1zdGFuY2VzIHRoYXQgY2FsbCB3aWxsIHNwYW0g
dGhlIGNvbnNvbGUgd2l0aCBhbiBlcnJvciBtZXNzYWdlCi0gICAgaWYgKCFudW1GcmFtZXMpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgVmVjdG9yPENHSW1hZ2VSZWY+IGltYWdlczsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRnJhbWVzOyArK2kgKSB7Ci0gICAgICAgIENHSW1h
Z2VSZWYgY2dJbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpOwotICAgICAgICBpZiAo
Y2dJbWFnZSkKLSAgICAgICAgICAgIGltYWdlcy5hcHBlbmQoY2dJbWFnZSk7Ci0gICAgfQotCi0g
ICAgdW5zaWduZWQgbnVtVmFsaWRGcmFtZXMgPSBpbWFnZXMuc2l6ZSgpOworICAgIGlmICghbmF0
aXZlSW1hZ2VzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZXRhaW5Q
dHI8Q0ZNdXRhYmxlRGF0YVJlZj4gZGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgw
LCAwKSk7Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VEZXN0aW5hdGlvblJlZj4gZGVzdGluYXRpb24g
PSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEuZ2V0KCksIGtV
VFR5cGVUSUZGLCBudW1WYWxpZEZyYW1lcywgMCkpOworICAgIFJldGFpblB0cjxDR0ltYWdlRGVz
dGluYXRpb25SZWY+IGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVh
dGVXaXRoRGF0YShkYXRhLmdldCgpLCBrVVRUeXBlVElGRiwgbmF0aXZlSW1hZ2VzLnNpemUoKSwg
MCkpOwogCiAgICAgaWYgKCFkZXN0aW5hdGlvbikKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVZhbGlk
RnJhbWVzOyArK2kpCi0gICAgICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0
aW9uLmdldCgpLCBpbWFnZXNbaV0sIDApOworICAgIGZvciAoYXV0byBuYXRpdmVJbWFnZSA6IG5h
dGl2ZUltYWdlcykKKyAgICAgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRp
b24uZ2V0KCksIG5hdGl2ZUltYWdlLmdldCgpLCAwKTsKIAogICAgIENHSW1hZ2VEZXN0aW5hdGlv
bkZpbmFsaXplKGRlc3RpbmF0aW9uLmdldCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAKaW5kZXggMjE3NTNi
ZDA3OGExYzU1YzMyNzE5YzE0ODQ2ZjBmNmI5OTc1ZjhmZC4uODYxMDI1MDhiZWQ3MjlmZmFmNDYw
NzdlYWI4MjA5NmU5ZWIxYWMzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCkBAIC0xNDIsNyArMTQyLDcgQEAg
SW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0IEltYWdlRnJhbWUmIG90aGVy
KQogICAgICAgICByZXR1cm4gKnRoaXM7CiAKICAgICBjb3B5Qml0bWFwRGF0YShvdGhlcik7Ci0g
ICAgc2V0T3JpZ2luYWxGcmFtZVJlY3Qob3RoZXIub3JpZ2luYWxGcmFtZVJlY3QoKSk7CisgICAg
c2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7CiAgICAgc2V0U3RhdHVzKG90aGVyLnN0YXR1
cygpKTsKICAgICBzZXREdXJhdGlvbihvdGhlci5kdXJhdGlvbigpKTsKICAgICBzZXREaXNwb3Nh
bE1ldGhvZChvdGhlci5kaXNwb3NhbE1ldGhvZCgpKTsKQEAgLTE1Miw4ICsxNTIsNyBAQCBJbWFn
ZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpCiAK
IHZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXJQaXhlbERhdGEoKQogewotICAgIG1fYmFja2luZ1N0b3Jl
LmNsZWFyKCk7Ci0gICAgbV9ieXRlcyA9IDA7CisgICAgbV9waXhlbHMgPSBudWxscHRyOwogICAg
IG1fc3RhdHVzID0gRnJhbWVFbXB0eTsKICAgICAvLyBOT1RFOiBEbyBub3QgcmVzZXQgb3RoZXIg
bWVtYmVycyBoZXJlOyBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoKSBjYWxscyB0aGlzCiAgICAgLy8g
dG8gZnJlZSB0aGUgYml0bWFwIGRhdGEsIGJ1dCBvdGhlciBmdW5jdGlvbnMgbGlrZSBpbml0RnJh
bWVCdWZmZXIoKSBhbmQKQEAgLTE2MywyNCArMTYyLDE2IEBAIHZvaWQgSW1hZ2VGcmFtZTo6Y2xl
YXJQaXhlbERhdGEoKQogCiB2b2lkIEltYWdlRnJhbWU6Onplcm9GaWxsUGl4ZWxEYXRhKCkKIHsK
LSAgICBtZW1zZXQobV9ieXRlcywgMCwgbV9zaXplLndpZHRoKCkgKiBtX3NpemUuaGVpZ2h0KCkg
KiBzaXplb2YoUGl4ZWxEYXRhKSk7CisgICAgbV9waXhlbHMtPmNsZWFyKCk7CiAgICAgbV9oYXNB
bHBoYSA9IHRydWU7CiB9CiAKIHZvaWQgSW1hZ2VGcmFtZTo6emVyb0ZpbGxGcmFtZVJlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBBU1NFUlQoSW50UmVjdChJbnRQb2ludCgpLCBtX3Np
emUpLmNvbnRhaW5zKHJlY3QpKTsKLQogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkgKiBz
aXplb2YoUGl4ZWxEYXRhKTsKLSAgICBQaXhlbERhdGEqIHN0YXJ0ID0gbV9ieXRlcyArIChyZWN0
LnkoKSAqIHdpZHRoKCkpICsgcmVjdC54KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0
LmhlaWdodCgpOyArK2kpIHsKLSAgICAgICAgbWVtc2V0KHN0YXJ0LCAwLCByZWN0V2lkdGhJbkJ5
dGVzKTsKLSAgICAgICAgc3RhcnQgKz0gd2lkdGgoKTsKLSAgICB9Ci0KKyAgICBtX3BpeGVscy0+
Y2xlYXJSZWN0KHJlY3QpOwogICAgIHNldEhhc0FscGhhKHRydWUpOwogfQogCkBAIC0xODksMjUg
KzE4MCwyMyBAQCBib29sIEltYWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKGNvbnN0IEltYWdlRnJh
bWUmIG90aGVyKQogICAgIGlmICh0aGlzID09ICZvdGhlcikKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICBtX2JhY2tpbmdTdG9yZSA9IG90aGVyLm1fYmFja2luZ1N0b3JlOwotICAgIG1fYnl0
ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7Ci0gICAgbV9zaXplID0gb3RoZXIubV9zaXplOwot
ICAgIHNldEhhc0FscGhhKG90aGVyLm1faGFzQWxwaGEpOworICAgIGlmIChvdGhlci5tX3BpeGVs
cykKKyAgICAgICAgbV9waXhlbHMgPSBCaXRtYXBQaXhlbHM6OmNyZWF0ZSgqb3RoZXIubV9waXhl
bHMuZ2V0KCkpOworICAgIGVsc2UKKyAgICAgICAgbV9waXhlbHMgPSBudWxscHRyOwogICAgIHJl
dHVybiB0cnVlOwogfQogCiBib29sIEltYWdlRnJhbWU6OnNldFNpemUoaW50IG5ld1dpZHRoLCBp
bnQgbmV3SGVpZ2h0KQogewotICAgIEFTU0VSVCghd2lkdGgoKSAmJiAhaGVpZ2h0KCkpOwotICAg
IHNpemVfdCBiYWNraW5nU3RvcmVTaXplID0gbmV3V2lkdGggKiBuZXdIZWlnaHQ7Ci0gICAgaWYg
KCFtX2JhY2tpbmdTdG9yZS50cnlSZXNlcnZlQ2FwYWNpdHkoYmFja2luZ1N0b3JlU2l6ZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2JhY2tpbmdTdG9yZS5yZXNpemUoYmFja2luZ1N0
b3JlU2l6ZSk7Ci0gICAgbV9ieXRlcyA9IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsKLSAgICBtX3Np
emUgPSBJbnRTaXplKG5ld1dpZHRoLCBuZXdIZWlnaHQpOworICAgIEFTU0VSVCghbV9waXhlbHMp
OworICAgIG1fcGl4ZWxzID0gQml0bWFwUGl4ZWxzOjpjcmVhdGUoSW50U2l6ZShuZXdXaWR0aCwg
bmV3SGVpZ2h0KSwgbV9wcmVtdWx0aXBseUFscGhhKTsKKyAgICByZXR1cm4gbV9waXhlbHMgIT0g
bnVsbHB0cjsKK30KIAotICAgIHplcm9GaWxsUGl4ZWxEYXRhKCk7Ci0gICAgcmV0dXJuIHRydWU7
Cit2b2lkIEltYWdlRnJhbWU6OmNvcHlSb3dOVGltZXMoaW50IHN0YXJ0WCwgaW50IGVuZFgsIGlu
dCBzdGFydFksIGludCBlbmRZKQoreworICAgIG1fcGl4ZWxzLT5yZXBlYXRGaXJzdFJvdyhJbnRS
ZWN0KHN0YXJ0WCwgc3RhcnRZLCBlbmRYIC1zdGFydFggLCBlbmRZIC0gc3RhcnRZKSk7CiB9CiAK
IGJvb2wgSW1hZ2VGcmFtZTo6aGFzQWxwaGEoKSBjb25zdApAQCAtMjkxLDcgKzI4MCw3IEBAIHVu
c2lnbmVkIEltYWdlRGVjb2Rlcjo6ZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25z
dAogICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpIDw9IGluZGV4KQogICAgICAgICBy
ZXR1cm4gMDsKICAgICAvLyBGSVhNRTogVXNlIHRoZSBkaW1lbnNpb24gb2YgdGhlIHJlcXVlc3Rl
ZCBmcmFtZS4KLSAgICByZXR1cm4gbV9zaXplLmFyZWEoKSAqIHNpemVvZihJbWFnZUZyYW1lOjpQ
aXhlbERhdGEpOworICAgIHJldHVybiBtX3NpemUuYXJlYSgpICogc2l6ZW9mKFJHQkEzMik7CiB9
CiAKIGZsb2F0IEltYWdlRGVjb2Rlcjo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaAppbmRleCAyZjhlZWUxNzgxZDE2MmQ4NmM0OWZlMWRhYzcyYTJlN2U0MGE1ZDZk
Li4zYmUzZmVlZTA5NGZhZjAzYmMwZTk2ZDgyMGExMWExN2Y0YTRjZmM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaApA
QCAtMjgsNiArMjgsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkJpdG1hcFBpeGVs
cy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCkBAIC01Nyw3ICs1OCw2IEBAIHVzaW5nIENvbG9yUHJv
ZmlsZSA9IFZlY3RvcjxjaGFyPjsKICAgICAgICAgICAgIERpc3Bvc2VPdmVyd3JpdGVQcmV2aW91
cyAgLy8gQ2xlYXIgZnJhbWUgdG8gcHJldmlvdXMgZnJhbWVidWZmZXIKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udGVudHMKICAgICAgICAgfTsKLSAgICAgICAg
dHlwZWRlZiB1bnNpZ25lZCBQaXhlbERhdGE7CiAKICAgICAgICAgSW1hZ2VGcmFtZSgpOwogCkBA
IC04MCwzMCArODAsMjQgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAg
ICAgICAvLyBDb3BpZXMgdGhlIHBpeGVsIGRhdGEgYXQgWyhzdGFydFgsIHN0YXJ0WSksIChlbmRY
LCBzdGFydFkpKSB0byB0aGUKICAgICAgICAgLy8gc2FtZSBYLWNvb3JkaW5hdGVzIG9uIGVhY2gg
c3Vic2VxdWVudCByb3cgdXAgdG8gYnV0IG5vdCBpbmNsdWRpbmcKICAgICAgICAgLy8gZW5kWS4K
LSAgICAgICAgdm9pZCBjb3B5Um93TlRpbWVzKGludCBzdGFydFgsIGludCBlbmRYLCBpbnQgc3Rh
cnRZLCBpbnQgZW5kWSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHN0YXJ0WCA8IHdp
ZHRoKCkpOwotICAgICAgICAgICAgQVNTRVJUKGVuZFggPD0gd2lkdGgoKSk7Ci0gICAgICAgICAg
ICBBU1NFUlQoc3RhcnRZIDwgaGVpZ2h0KCkpOwotICAgICAgICAgICAgQVNTRVJUKGVuZFkgPD0g
aGVpZ2h0KCkpOwotICAgICAgICAgICAgY29uc3QgaW50IHJvd0J5dGVzID0gKGVuZFggLSBzdGFy
dFgpICogc2l6ZW9mKFBpeGVsRGF0YSk7Ci0gICAgICAgICAgICBjb25zdCBQaXhlbERhdGEqIGNv
bnN0IHN0YXJ0QWRkciA9IGdldEFkZHIoc3RhcnRYLCBzdGFydFkpOwotICAgICAgICAgICAgZm9y
IChpbnQgZGVzdFkgPSBzdGFydFkgKyAxOyBkZXN0WSA8IGVuZFk7ICsrZGVzdFkpCi0gICAgICAg
ICAgICAgICAgbWVtY3B5KGdldEFkZHIoc3RhcnRYLCBkZXN0WSksIHN0YXJ0QWRkciwgcm93Qnl0
ZXMpOwotICAgICAgICB9CisgICAgICAgIHZvaWQgY29weVJvd05UaW1lcyhpbnQgc3RhcnRYLCBp
bnQgZW5kWCwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOwogCiAgICAgICAgIC8vIEFsbG9jYXRlcyBz
cGFjZSBmb3IgdGhlIHBpeGVsIGRhdGEuICBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IHBpeGVs
cwogICAgICAgICAvLyBhcmUgd3JpdHRlbi4gIE11c3Qgb25seSBiZSBjYWxsZWQgb25jZS4gIFJl
dHVybnMgd2hldGhlciBhbGxvY2F0aW9uCiAgICAgICAgIC8vIHN1Y2NlZWRlZC4KICAgICAgICAg
Ym9vbCBzZXRTaXplKGludCBuZXdXaWR0aCwgaW50IG5ld0hlaWdodCk7CisgICAgICAgIAorICAg
ICAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3BpeGVscy0+c2l6ZSgpOyB9CiAK
ICAgICAgICAgLy8gUmV0dXJucyBhIGNhbGxlci1vd25lZCBwb2ludGVyIHRvIHRoZSB1bmRlcmx5
aW5nIG5hdGl2ZSBpbWFnZSBkYXRhLgogICAgICAgICAvLyAoQWN0dWFsIHVzZTogVGhpcyBwb2lu
dGVyIHdpbGwgYmUgb3duZWQgYnkgQml0bWFwSW1hZ2UgYW5kIGZyZWVkIGluCiAgICAgICAgIC8v
IEZyYW1lRGF0YTo6Y2xlYXIoKSkuCi0gICAgICAgIE5hdGl2ZUltYWdlUHRyIGFzTmV3TmF0aXZl
SW1hZ2UoKSBjb25zdDsKKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIgYXNOZXdOYXRpdmVJbWFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxzLT5pbWFnZSgpOyB9CisKKyAgICAgICAgaW5saW5lIEJp
dG1hcFBpeGVscyogcGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gbV9waXhlbHMgPyBtX3BpeGVscy5n
ZXQoKSA6IG51bGxwdHI7IH0KKyAgICAgICAgaW5saW5lIGJvb2wgaGFzUGl4ZWxzKCkgY29uc3Qg
eyByZXR1cm4gcGl4ZWxzKCk7IH0KIAogICAgICAgICBib29sIGhhc0FscGhhKCkgY29uc3Q7Ci0g
ICAgICAgIGNvbnN0IEludFJlY3QmIG9yaWdpbmFsRnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9vcmlnaW5hbEZyYW1lUmVjdDsgfQogICAgICAgICBGcmFtZVN0YXR1cyBzdGF0dXMoKSBjb25z
dCB7IHJldHVybiBtX3N0YXR1czsgfQogICAgICAgICB1bnNpZ25lZCBkdXJhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KICAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNw
b3NhbE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcG9zYWxNZXRob2Q7IH0KQEAgLTExMSw3
ICsxMDUsNiBAQCB1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hhcj47CiAKICAgICAgICAg
dm9pZCBzZXRIYXNBbHBoYShib29sIGFscGhhKTsKICAgICAgICAgdm9pZCBzZXRDb2xvclByb2Zp
bGUoY29uc3QgQ29sb3JQcm9maWxlJik7Ci0gICAgICAgIHZvaWQgc2V0T3JpZ2luYWxGcmFtZVJl
Y3QoY29uc3QgSW50UmVjdCYgcikgeyBtX29yaWdpbmFsRnJhbWVSZWN0ID0gcjsgfQogICAgICAg
ICB2b2lkIHNldFN0YXR1cyhGcmFtZVN0YXR1cyBzdGF0dXMpOwogICAgICAgICB2b2lkIHNldER1
cmF0aW9uKHVuc2lnbmVkIGR1cmF0aW9uKSB7IG1fZHVyYXRpb24gPSBkdXJhdGlvbjsgfQogICAg
ICAgICB2b2lkIHNldERpc3Bvc2FsTWV0aG9kKEZyYW1lRGlzcG9zYWxNZXRob2QgbWV0aG9kKSB7
IG1fZGlzcG9zYWxNZXRob2QgPSBtZXRob2Q7IH0KQEAgLTExOSwxMDggKzExMiwzMiBAQCB1c2lu
ZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hhcj47CiAKICAgICAgICAgaW5saW5lIHZvaWQgc2V0
UkdCQShpbnQgeCwgaW50IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVu
c2lnbmVkIGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHNldFJHQkEoZ2V0QWRkcih4LCB5KSwg
ciwgZywgYiwgYSk7CisgICAgICAgICAgICBtX3BpeGVscy0+c2V0UkdCQSh4LCB5LCByLCBnLCBi
LCBhKTsKICAgICAgICAgfQogCi0gICAgICAgIGlubGluZSBQaXhlbERhdGEqIGdldEFkZHIoaW50
IHgsIGludCB5KQorICAgICAgICBpbmxpbmUgUkdCQTMyKiBnZXRBZGRyKGludCB4LCBpbnQgeSkK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXMgKyAoeSAqIHdpZHRoKCkpICsg
eDsKKyAgICAgICAgICAgIHJldHVybiBtX3BpeGVscy0+YXQoeCwgeSk7CiAgICAgICAgIH0KIAot
ICAgICAgICBpbmxpbmUgYm9vbCBoYXNQaXhlbERhdGEoKSBjb25zdAorICAgICAgICBpbmxpbmUg
dm9pZCBzZXRSR0JBKFJHQkEzMiogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWdu
ZWQgYiwgdW5zaWduZWQgYSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXM7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBVc2UgZml4IHBvaW50IG11bHRpcGxpZXIgaW5zdGVh
ZCBvZiBpbnRlZ2VyIGRpdmlzaW9uIG9yIGZsb2F0aW5nIHBvaW50IG1hdGguCi0gICAgICAgIC8v
IFRoaXMgbXVsdGlwbGVyIHByb2R1Y2VzIGV4YWN0bHkgdGhlIHNhbWUgcmVzdWx0IGZvciBhbGwg
dmFsdWVzIGluIHJhbmdlIDAgLSAyNTUuCi0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBm
aXhQb2ludFNoaWZ0ID0gMjQ7Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmaXhQb2lu
dE11bHQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oMS4wIC8gMjU1LjAgKiAoMSA8PCBmaXhQb2lu
dFNoaWZ0KSkgKyAxOwotICAgICAgICAvLyBNdWx0aXBsaWVzIHVuc2lnbmVkIHZhbHVlIGJ5IGZp
eHBvaW50IHZhbHVlIGFuZCBjb252ZXJ0cyBiYWNrIHRvIHVuc2lnbmVkLgotICAgICAgICBzdGF0
aWMgdW5zaWduZWQgZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KHVuc2lnbmVkIGZpeGVkLCB1bnNp
Z25lZCB2KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gIChmaXhlZCAqIHYpID4+IGZp
eFBvaW50U2hpZnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKFBp
eGVsRGF0YSogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWdu
ZWQgYSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAmJiBh
IDwgMjU1KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFhKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICpkZXN0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhTXVsdCA9IGEgKiBmaXhQb2ludE11
bHQ7Ci0gICAgICAgICAgICAgICAgciA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShyLCBhbHBo
YU11bHQpOwotICAgICAgICAgICAgICAgIGcgPSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkoZywg
YWxwaGFNdWx0KTsKLSAgICAgICAgICAgICAgICBiID0gZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5
KGIsIGFscGhhTXVsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqZGVzdCA9IChhIDw8
IDI0IHwgciA8PCAxNiB8IGcgPDwgOCB8IGIpOworICAgICAgICAgICAgbV9waXhlbHMtPnNldFJH
QkEoZGVzdCwgciwgZywgYiwgYSk7CiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShBUE5HKQotICAg
ICAgICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRpdmlkZTI1NSh1bnNpZ25lZCBhKQorICAgICAg
ICBpbmxpbmUgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVk
IGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biAoYSArIChhID4+IDgpICsgMSkgPj4gODsKLSAgICAgICAgfQotCi0gICAgICAgIGlubGluZSB2
b2lkIG92ZXJSR0JBKFBpeGVsRGF0YSogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5z
aWduZWQgYiwgdW5zaWduZWQgYSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFhKQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgaWYgKGEgPCAyNTUpIHsKLSAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBhRGVzdCA9ICgoKmRlc3QpID4+IDI0KSAmIDI1NTsKLSAgICAg
ICAgICAgICAgICBpZiAoYURlc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgckRl
c3QgPSAoKCpkZXN0KSA+PiAxNikgJiAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGdEZXN0ID0gKCgqZGVzdCkgPj4gOCkgJiAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGJEZXN0ID0gKCpkZXN0KSAmIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
YUF1eCA9IDI1NSAtIGE7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFs
cGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByRGVzdCA9IGRpdmlkZTI1NShyRGVzdCAq
IGFEZXN0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdEZXN0ID0gZGl2aWRlMjU1KGdEZXN0
ICogYURlc3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgYkRlc3QgPSBkaXZpZGUyNTUoYkRl
c3QgKiBhRGVzdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ciA9IGRpdmlkZTI1NShyICogYSArIHJEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAg
IGcgPSBkaXZpZGUyNTUoZyAqIGEgKyBnRGVzdCAqIGFBdXgpOwotICAgICAgICAgICAgICAgICAg
ICBiID0gZGl2aWRlMjU1KGIgKiBhICsgYkRlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAgICAg
ICAgYSArPSBkaXZpZGUyNTUoYURlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFtX3ByZW11bHRpcGx5QWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAociAq
IDI1NSArIGEgLSAxKSAvIGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnID0gKGcgKiAyNTUg
KyBhIC0gMSkgLyBhOwotICAgICAgICAgICAgICAgICAgICAgICAgYiA9IChiICogMjU1ICsgYSAt
IDEpIC8gYTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAobV9wcmVtdWx0aXBseUFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBkaXZpZGUy
NTUociAqIGEpOwotICAgICAgICAgICAgICAgICAgICBnID0gZGl2aWRlMjU1KGcgKiBhKTsKLSAg
ICAgICAgICAgICAgICAgICAgYiA9IGRpdmlkZTI1NShiICogYSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3QgPSAoYSA8PCAyNCB8IHIgPDwgMTYg
fCBnIDw8IDggfCBiKTsKKyAgICAgICAgICAgIG1fcGl4ZWxzLT5vdmVyUkdCQShkZXN0LCByLCBn
LCBiLCBhKTsKICAgICAgICAgfQogI2VuZGlmCiAKICAgICBwcml2YXRlOgotICAgICAgICBpbnQg
d2lkdGgoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9zaXplLndpZHRo
KCk7Ci0gICAgICAgIH0KKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gbV9w
aXhlbHM7CiAKLSAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBtX3NpemUuaGVpZ2h0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBWZWN0b3I8
UGl4ZWxEYXRhPiBtX2JhY2tpbmdTdG9yZTsKLSAgICAgICAgUGl4ZWxEYXRhKiBtX2J5dGVzOyAv
LyBUaGUgbWVtb3J5IGlzIGJhY2tlZCBieSBtX2JhY2tpbmdTdG9yZS4KLSAgICAgICAgSW50U2l6
ZSBtX3NpemU7CiAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIG1fY29sb3JQcm9maWxlIGFu
eW1vcmU/CiAgICAgICAgIENvbG9yUHJvZmlsZSBtX2NvbG9yUHJvZmlsZTsKICAgICAgICAgYm9v
bCBtX2hhc0FscGhhOwotICAgICAgICBJbnRSZWN0IG1fb3JpZ2luYWxGcmFtZVJlY3Q7IC8vIFRo
aXMgd2lsbCBhbHdheXMganVzdCBiZSB0aGUgZW50aXJlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gYnVmZmVyIGV4Y2VwdCBmb3IgR0lGIGZyYW1lcyB3aG9zZQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yaWdpbmFsIHJlY3Qgd2FzIHNt
YWxsZXIgdGhhbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBv
dmVyYWxsIGltYWdlIHNpemUuCiAgICAgICAgIEZyYW1lU3RhdHVzIG1fc3RhdHVzOwogICAgICAg
ICB1bnNpZ25lZCBtX2R1cmF0aW9uOwogICAgICAgICBGcmFtZURpc3Bvc2FsTWV0aG9kIG1fZGlz
cG9zYWxNZXRob2Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcAppbmRleCA1YzAwNTUzNGVjZDky
MTM0YTEzYjMyOTU4OTI3NzkwZjA3YWQwZjgxLi5mOTE4Y2YzMjQyOTY3ZjcyN2E3NTM3YTNiNGE2
NWYxMjk0OWM3NmMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAKQEAgLTg2LDkgKzg2LDYg
QEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6ZGVjb2RlQk1QKGJvb2wgb25seVNpemUpCiAgICAgICAg
IC8vIHRoZXNlIDBzIGNvdWxkIGFjdHVhbGx5IHNob3cgdGhyb3VnaC4KICAgICAgICAgbV9idWZm
ZXItPnNldEhhc0FscGhhKGZhbHNlKTsKIAotICAgICAgICAvLyBGb3IgQk1QcywgdGhlIGZyYW1l
IGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgotICAgICAgICBtX2J1ZmZlci0+c2V0T3Jp
Z2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBtX3BhcmVudC0+c2l6ZSgpKSk7Ci0K
ICAgICAgICAgaWYgKCFtX2lzVG9wRG93bikKICAgICAgICAgICAgIG1fY29vcmQuc2V0WShtX3Bh
cmVudC0+c2l6ZSgpLmhlaWdodCgpIC0gMSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vQml0bWFwUGl4ZWxzQ2Fpcm8uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vQml0bWFwUGl4
ZWxzQ2Fpcm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVhYWY4YTBhMzZiMThjYmY3Mjc3ZDJjMmUyNmViNDE3
MTI1NjAwZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHAKQEAgLTAsMCArMSw0MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkJpdG1hcFBpeGVscy5oIgorCisjaW5jbHVkZSA8Y2Fpcm8u
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBQaXhlbHM6
OmltYWdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9jcmVhdGVfZm9yX2RhdGEoCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hh
cio+KGNvbnN0X2Nhc3Q8UkdCQTMyKj4obV9waXhlbHMpKSwKKyAgICAgICAgQ0FJUk9fRk9STUFU
X0FSR0IzMiwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSwgc2l6ZSgpLndpZHRoKCkg
KiBzaXplb2YoUkdCQTMyKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURl
Y29kZXJDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9j
YWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDdiNDEyOTVmODU3MzU4ZmJiZjM1YzFiMDUyNWU4ZDZjYzM1MjBmNTguLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgot
Ci0jaW5jbHVkZSA8Y2Fpcm8uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1OYXRpdmVJbWFn
ZVB0ciBJbWFnZUZyYW1lOjphc05ld05hdGl2ZUltYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
YWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoCi0gICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGNvbnN0X2Nhc3Q8UGl4ZWxEYXRhKj4obV9i
eXRlcykpLAotICAgICAgICBDQUlST19GT1JNQVRfQVJHQjMyLCB3aWR0aCgpLCBoZWlnaHQoKSwg
d2lkdGgoKSAqIHNpemVvZihQaXhlbERhdGEpKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dp
Zi9HSUZJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKaW5kZXggOWY5OTJhN2JlMWQ2NjcyMjY3NWMy
ZTg1NGFkMTg5MWU2MGY4NTc3Yy4uMThjZTczOGU4NjMyOTllOTY2M2RlM2EyZTM5NTNlMjBkZWFl
MmY3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Z2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKQEAgLTIxMywxMCArMjEzLDEwIEBA
IGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4
LCBjb25zdCBWZWN0b3I8dW5zaWduZWQKIAogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lIGlm
IG5lY2Vzc2FyeS4KICAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVb
ZnJhbWVJbmRleF07Ci0gICAgaWYgKCgoYnVmZmVyLnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZy
YW1lRW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkpIHx8ICFidWZmZXIuaGFz
UGl4ZWxEYXRhKCkpCisgICAgaWYgKCgoYnVmZmVyLnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZy
YW1lRW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkpIHx8ICFidWZmZXIuaGFz
UGl4ZWxzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEltYWdlRnJhbWU6OlBpeGVs
RGF0YSogY3VycmVudEFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcih4QmVnaW4sIHlCZWdpbik7Cisg
ICAgUkdCQTMyKiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHhCZWdpbiwgeUJlZ2lu
KTsKICAgICAvLyBXcml0ZSBvbmUgcm93J3Mgd29ydGggb2YgZGF0YSBpbnRvIHRoZSBmcmFtZS4g
IAogICAgIGZvciAoaW50IHggPSB4QmVnaW47IHggPCB4RW5kOyArK3gpIHsKICAgICAgICAgY29u
c3QgdW5zaWduZWQgY2hhciBzb3VyY2VWYWx1ZSA9IHJvd0J1ZmZlclsobV9zY2FsZWQgPyBtX3Nj
YWxlZENvbHVtbnNbeF0gOiB4KSAtIGZyYW1lQ29udGV4dC0+eE9mZnNldF07CkBAIC0yNDAsNyAr
MjQwLDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZy
YW1lSW5kZXgsIGNvbnN0IFZlY3Rvcjx1bnNpZ25lZAogCiAgICAgLy8gVGVsbCB0aGUgZnJhbWUg
dG8gY29weSB0aGUgcm93IGRhdGEgaWYgbmVlZCBiZS4KICAgICBpZiAocmVwZWF0Q291bnQgPiAx
KQotICAgICAgICBidWZmZXIuY29weVJvd05UaW1lcyh4QmVnaW4sIHhFbmQsIHlCZWdpbiwgeUVu
ZCk7CisgICAgICAgIGJ1ZmZlci5waXhlbHMoKS0+Y29weVJvd05UaW1lcyh4QmVnaW4sIHhFbmQs
IHlCZWdpbiwgeUVuZCk7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTI2MCw3ICsyNjAsNyBA
QCBib29sIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpZ25lZCBmcmFtZUluZGV4
LCB1bnNpZ25lZCBmcmFtZUR1cmF0aW9uLAogICAgIGlmICghbV9jdXJyZW50QnVmZmVyU2F3QWxw
aGEpIHsKICAgICAgICAgLy8gVGhlIHdob2xlIGZyYW1lIHdhcyBub24tdHJhbnNwYXJlbnQsIHNv
IGl0J3MgcG9zc2libGUgdGhhdCB0aGUgZW50aXJlCiAgICAgICAgIC8vIHJlc3VsdGluZyBidWZm
ZXIgd2FzIG5vbi10cmFuc3BhcmVudCwgYW5kIHdlIGNhbiBzZXRIYXNBbHBoYShmYWxzZSkuCi0g
ICAgICAgIGlmIChidWZmZXIub3JpZ2luYWxGcmFtZVJlY3QoKS5jb250YWlucyhJbnRSZWN0KElu
dFBvaW50KCksIHNjYWxlZFNpemUoKSkpKQorICAgICAgICBpZiAoYnVmZmVyLnBpeGVscygpLT5y
ZWN0KCkuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzY2FsZWRTaXplKCkpKSkKICAgICAg
ICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7CiAgICAgICAgIGVsc2UgaWYgKGZyYW1l
SW5kZXgpIHsKICAgICAgICAgICAgIC8vIFRyaWNreSBjYXNlLiAgVGhpcyBmcmFtZSBkb2VzIG5v
dCBoYXZlIGFscGhhIG9ubHkgaWYgZXZlcnl3aGVyZQpAQCAtMjgzLDcgKzI4Myw3IEBAIGJvb2wg
R0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2ln
bmVkIGZyYW1lRHVyYXRpb24sCiAgICAgICAgICAgICAvLyBUaGUgb25seSByZW1haW5pbmcgY2Fz
ZSBpcyBhIERpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yIGZyYW1lLiAgSWYKICAgICAgICAgICAgIC8v
IGl0IGhhZCBubyBhbHBoYSwgYW5kIGl0cyByZWN0IGlzIGNvbnRhaW5lZCBpbiB0aGUgY3VycmVu
dCBmcmFtZSdzCiAgICAgICAgICAgICAvLyByZWN0LCB3ZSBrbm93IHRoZSBjdXJyZW50IGZyYW1l
IGhhcyBubyBhbHBoYS4KLSAgICAgICAgICAgIGlmICgocHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRo
b2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NlT3ZlcndyaXRlQmdjb2xvcikgJiYgIXByZXZCdWZm
ZXItPmhhc0FscGhhKCkgJiYgYnVmZmVyLm9yaWdpbmFsRnJhbWVSZWN0KCkuY29udGFpbnMocHJl
dkJ1ZmZlci0+b3JpZ2luYWxGcmFtZVJlY3QoKSkpCisgICAgICAgICAgICBpZiAoKHByZXZCdWZm
ZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zZU92ZXJ3cml0ZUJnY29s
b3IpICYmICFwcmV2QnVmZmVyLT5oYXNBbHBoYSgpICYmIGJ1ZmZlci5waXhlbHMoKS0+cmVjdCgp
LmNvbnRhaW5zKHByZXZCdWZmZXItPnBpeGVscygpLT5yZWN0KCkpKQogICAgICAgICAgICAgICAg
IGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNTMsMTEg
KzM1Myw2IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW5zaWduZWQg
ZnJhbWVJbmRleCkKICAgICAgICAgZnJhbWVSZWN0LnNldEhlaWdodChzaXplKCkuaGVpZ2h0KCkg
LSBmcmFtZUNvbnRleHQtPnlPZmZzZXQpOwogCiAgICAgSW1hZ2VGcmFtZSogY29uc3QgYnVmZmVy
ID0gJm1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsKLSAgICBpbnQgbGVmdCA9IHVwcGVy
Qm91bmRTY2FsZWRYKGZyYW1lUmVjdC54KCkpOwotICAgIGludCByaWdodCA9IGxvd2VyQm91bmRT
Y2FsZWRYKGZyYW1lUmVjdC5tYXhYKCksIGxlZnQpOwotICAgIGludCB0b3AgPSB1cHBlckJvdW5k
U2NhbGVkWShmcmFtZVJlY3QueSgpKTsKLSAgICBpbnQgYm90dG9tID0gbG93ZXJCb3VuZFNjYWxl
ZFkoZnJhbWVSZWN0Lm1heFkoKSwgdG9wKTsKLSAgICBidWZmZXItPnNldE9yaWdpbmFsRnJhbWVS
ZWN0KEludFJlY3QobGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJvdHRvbSAtIHRvcCkpOwogCiAg
ICAgaWYgKCFmcmFtZUluZGV4KSB7CiAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGZyYW1l
LCBzbyB3ZSdyZSBub3QgcmVseWluZyBvbiBhbnkgcHJldmlvdXMgZGF0YS4KQEAgLTM4Nyw3ICsz
ODIsNyBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuc2lnbmVkIGZy
YW1lSW5kZXgpCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIGNs
ZWFyIHRoZSBwcmV2aW91cyBmcmFtZSB0byB0cmFuc3BhcmVudCwgd2l0aG91dAogICAgICAgICAg
ICAgLy8gYWZmZWN0aW5nIHBpeGVscyBpbiB0aGUgaW1hZ2Ugb3V0c2lkZSBvZiB0aGUgZnJhbWUu
Ci0gICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBwcmV2UmVjdCA9IHByZXZCdWZmZXItPm9yaWdp
bmFsRnJhbWVSZWN0KCk7CisgICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBwcmV2UmVjdCA9IHBy
ZXZCdWZmZXItPnBpeGVscygpLT5yZWN0KCk7CiAgICAgICAgICAgICBjb25zdCBJbnRTaXplJiBi
dWZmZXJTaXplID0gc2NhbGVkU2l6ZSgpOwogICAgICAgICAgICAgaWYgKCFmcmFtZUluZGV4IHx8
IHByZXZSZWN0LmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpIHsK
ICAgICAgICAgICAgICAgICAvLyBDbGVhcmluZyB0aGUgZmlyc3QgZnJhbWUsIG9yIGEgZnJhbWUg
dGhlIHNpemUgb2YgdGhlIHdob2xlCkBAIC00MDIsNiArMzk3LDEyIEBAIGJvb2wgR0lGSW1hZ2VE
ZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW5zaWduZWQgZnJhbWVJbmRleCkKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICBpbnQgbGVmdCA9IHVwcGVyQm91bmRTY2Fs
ZWRYKGZyYW1lUmVjdC54KCkpOworICAgIGludCByaWdodCA9IGxvd2VyQm91bmRTY2FsZWRYKGZy
YW1lUmVjdC5tYXhYKCksIGxlZnQpOworICAgIGludCB0b3AgPSB1cHBlckJvdW5kU2NhbGVkWShm
cmFtZVJlY3QueSgpKTsKKyAgICBpbnQgYm90dG9tID0gbG93ZXJCb3VuZFNjYWxlZFkoZnJhbWVS
ZWN0Lm1heFkoKSwgdG9wKTsKKyAgICBidWZmZXItPnBpeGVscy0+c2V0UmVjdChJbnRSZWN0KGxl
ZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3ApKTsKIAogICAgIC8vIFVwZGF0ZSBv
dXIgc3RhdHVzIHRvIGJlIHBhcnRpYWxseSBjb21wbGV0ZS4KICAgICBidWZmZXItPnNldFN0YXR1
cyhJbWFnZUZyYW1lOjpGcmFtZVBhcnRpYWwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5j
cHAKaW5kZXggZWU2NmFjMTRkNGJlMDdjYTlhZmZiMmEzYWZmODllYmZhNjJmYjEyZS4uOThmZmUw
MjAyMTVjYzkzNjQ3MGUzMTNjNzJmM2I0YTc1NmI1ZmEzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFn
ZURlY29kZXIuY3BwCkBAIC01ODgsNyArNTg4LDcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpz
ZXRGYWlsZWQoKQogfQogCiB0ZW1wbGF0ZSA8Sl9DT0xPUl9TUEFDRSBjb2xvclNwYWNlPgotdm9p
ZCBzZXRQaXhlbChJbWFnZUZyYW1lJiBidWZmZXIsIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogY3Vy
cmVudEFkZHJlc3MsIEpTQU1QQVJSQVkgc2FtcGxlcywgaW50IGNvbHVtbikKK3ZvaWQgc2V0UGl4
ZWwoSW1hZ2VGcmFtZSYgYnVmZmVyLCBSR0JBMzIqIGN1cnJlbnRBZGRyZXNzLCBKU0FNUEFSUkFZ
IHNhbXBsZXMsIGludCBjb2x1bW4pCiB7CiAgICAgSlNBTVBMRSoganNhbXBsZSA9ICpzYW1wbGVz
ICsgY29sdW1uICogKGNvbG9yU3BhY2UgPT0gSkNTX1JHQiA/IDMgOiA0KTsKIApAQCAtNjMxLDcg
KzYzMSw3IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKEltYWdlRnJh
bWUmIGJ1ZmZlcikKICAgICAgICAgaWYgKGRlc3RZIDwgMCkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogY3VycmVudEFkZHJlc3MgPSBidWZm
ZXIuZ2V0QWRkcigwLCBkZXN0WSk7CisgICAgICAgIFJHQkEzMiogY3VycmVudEFkZHJlc3MgPSBi
dWZmZXIuZ2V0QWRkcigwLCBkZXN0WSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lk
dGg7ICsreCkgewogICAgICAgICAgICAgc2V0UGl4ZWw8Y29sb3JTcGFjZT4oYnVmZmVyLCBjdXJy
ZW50QWRkcmVzcywgc2FtcGxlcywgaXNTY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4KTsK
ICAgICAgICAgICAgICsrY3VycmVudEFkZHJlc3M7CkBAIC02NjEsOSArNjYxLDYgQEAgYm9vbCBK
UEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoKQogICAgICAgICAvLyBsb2FkaW5nLiBU
aGUgY29tcGxldGVkIGltYWdlIHdpbGwgYmUgbWFya2VkIGZ1bGx5IG9wYXF1ZSBpbiBqcGVnQ29t
cGxldGUoKS4KICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKHRydWUpOwogICAgICAgICBidWZm
ZXIuc2V0Q29sb3JQcm9maWxlKG1fY29sb3JQcm9maWxlKTsKLQotICAgICAgICAvLyBGb3IgSlBF
R3MsIHRoZSBmcmFtZSBhbHdheXMgZmlsbHMgdGhlIGVudGlyZSBpbWFnZS4KLSAgICAgICAgYnVm
ZmVyLnNldE9yaWdpbmFsRnJhbWVSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSgpKSk7CiAg
ICAgfQogCiAgICAganBlZ19kZWNvbXByZXNzX3N0cnVjdCogaW5mbyA9IG1fcmVhZGVyLT5pbmZv
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9w
bmcvUE5HSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCmluZGV4IGU2NDRhNzExMGVmY2I1NDBkODlj
ZTFiYTgxMTAwYmM0ODIzYjE4ZjIuLjU4ZjI5MGEwYjRjMmE5YjMyNDRiZGIwMTg1MzczNjAzZGRk
MWU5ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCkBAIC00NTIsMTkgKzQ1MiwxOSBA
QCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKICAgICB9CiB9CiAKLXN0
YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJHQihJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGRlc3Qs
IHBuZ19ieXRlcCBwaXhlbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJHQihSR0JBMzIq
IGRlc3QsIHBuZ19ieXRlcCBwaXhlbCkKIHsKICAgICAqZGVzdCA9IDB4RkYwMDAwMDBVIHwgcGl4
ZWxbMF0gPDwgMTYgfCBwaXhlbFsxXSA8PCA4IHwgcGl4ZWxbMl07CiB9CiAKLXN0YXRpYyBpbmxp
bmUgdm9pZCBzZXRQaXhlbFJHQkEoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBkZXN0LCBwbmdfYnl0
ZXAgcGl4ZWwsIHVuc2lnbmVkIGNoYXImIG5vblRyaXZpYWxBbHBoYU1hc2spCitzdGF0aWMgaW5s
aW5lIHZvaWQgc2V0UGl4ZWxSR0JBKFJHQkEzMiogZGVzdCwgcG5nX2J5dGVwIHBpeGVsLCB1bnNp
Z25lZCBjaGFyJiBub25Ucml2aWFsQWxwaGFNYXNrKQogewogICAgIHVuc2lnbmVkIGNoYXIgYSA9
IHBpeGVsWzNdOwogICAgICpkZXN0ID0gYSA8PCAyNCB8IHBpeGVsWzBdIDw8IDE2IHwgcGl4ZWxb
MV0gPDwgOCB8IHBpeGVsWzJdOwogICAgIG5vblRyaXZpYWxBbHBoYU1hc2sgfD0gKDI1NSAtIGEp
OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxQcmVtdWx0aXBsaWVkUkdCQShJbWFn
ZUZyYW1lOjpQaXhlbERhdGEqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCwgdW5zaWduZWQgY2hhciYg
bm9uVHJpdmlhbEFscGhhTWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFByZW11bHRp
cGxpZWRSR0JBKFJHQkEzMiogZGVzdCwgcG5nX2J5dGVwIHBpeGVsLCB1bnNpZ25lZCBjaGFyJiBu
b25Ucml2aWFsQWxwaGFNYXNrKQogewogICAgIHVuc2lnbmVkIGNoYXIgYSA9IHBpeGVsWzNdOwog
ICAgIHVuc2lnbmVkIGNoYXIgciA9IGZhc3REaXZpZGVCeTI1NShwaXhlbFswXSAqIGEpOwpAQCAt
NTEzLDggKzUxMyw2IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWdu
ZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRleCwKICAgICAgICAgICAgIGluaXRG
cmFtZUJ1ZmZlcihtX2N1cnJlbnRGcmFtZSk7CiAgICAgICAgIGVsc2UKICNlbmRpZgotICAgICAg
ICAvLyBGb3IgUE5HcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgot
ICAgICAgICBidWZmZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBz
aXplKCkpKTsKICAgICB9CiAKICAgICAvKiBsaWJwbmcgY29tbWVudHMgKGhlcmUgdG8gZXhwbGFp
biB3aGF0IGZvbGxvd3MpLgpAQCAtNTczLDcgKzU3MSw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVy
Ojpyb3dBdmFpbGFibGUodW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRl
eCwKICAgICB9CiAKICAgICAvLyBXcml0ZSB0aGUgZGVjb2RlZCByb3cgcGl4ZWxzIHRvIHRoZSBm
cmFtZSBidWZmZXIuCi0gICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBhZGRyZXNzID0gYnVmZmVy
LmdldEFkZHIoMCwgeSk7CisgICAgUkdCQTMyKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoMCwg
eSk7CiAgICAgaW50IHdpZHRoID0gc2NhbGVkU2l6ZSgpLndpZHRoKCk7CiAgICAgdW5zaWduZWQg
Y2hhciBub25Ucml2aWFsQWxwaGFNYXNrID0gMDsKIApAQCAtODM0LDExICs4MzIsNiBAQCB2b2lk
IFBOR0ltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHNpemVfdCBmcmFtZUluZGV4KQogICAg
ICAgICBmcmFtZVJlY3Quc2V0SGVpZ2h0KHNpemUoKS5oZWlnaHQoKSAtIG1feU9mZnNldCk7CiAK
ICAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07
Ci0gICAgaW50IGxlZnQgPSB1cHBlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QueCgpKTsKLSAgICBp
bnQgcmlnaHQgPSBsb3dlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QubWF4WCgpLCBsZWZ0KTsKLSAg
ICBpbnQgdG9wID0gdXBwZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWN0LnkoKSk7Ci0gICAgaW50IGJv
dHRvbSA9IGxvd2VyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC5tYXhZKCksIHRvcCk7Ci0gICAgYnVm
ZmVyLnNldE9yaWdpbmFsRnJhbWVSZWN0KEludFJlY3QobGVmdCwgdG9wLCByaWdodCAtIGxlZnQs
IGJvdHRvbSAtIHRvcCkpOwogCiAgICAgLy8gVGhlIHN0YXJ0aW5nIHN0YXRlIGZvciB0aGlzIGZy
YW1lIGRlcGVuZHMgb24gdGhlIHByZXZpb3VzIGZyYW1lJ3MKICAgICAvLyBkaXNwb3NhbCBtZXRo
b2QuCkBAIC04NjIsNyArODU1LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1
ZmZlcihzaXplX3QgZnJhbWVJbmRleCkKICAgICB9IGVsc2UgewogICAgICAgICAvLyBXZSB3YW50
IHRvIGNsZWFyIHRoZSBwcmV2aW91cyBmcmFtZSB0byB0cmFuc3BhcmVudCwgd2l0aG91dAogICAg
ICAgICAvLyBhZmZlY3RpbmcgcGl4ZWxzIGluIHRoZSBpbWFnZSBvdXRzaWRlIG9mIHRoZSBmcmFt
ZS4KLSAgICAgICAgY29uc3QgSW50UmVjdCYgcHJldlJlY3QgPSBwcmV2QnVmZmVyLT5vcmlnaW5h
bEZyYW1lUmVjdCgpOworICAgICAgICBjb25zdCBJbnRSZWN0JiBwcmV2UmVjdCA9IHByZXZCdWZm
ZXItPnBpeGVscygpLT5yZWN0KCk7CiAgICAgICAgIGlmICghZnJhbWVJbmRleCB8fCBwcmV2UmVj
dC5jb250YWlucyhJbnRSZWN0KEludFBvaW50KCksIHNjYWxlZFNpemUoKSkpKSB7CiAgICAgICAg
ICAgICAvLyBDbGVhcmluZyB0aGUgZmlyc3QgZnJhbWUsIG9yIGEgZnJhbWUgdGhlIHNpemUgb2Yg
dGhlIHdob2xlCiAgICAgICAgICAgICAvLyBpbWFnZSwgcmVzdWx0cyBpbiBhIGNvbXBsZXRlbHkg
ZW1wdHkgaW1hZ2UuCkBAIC04NzMsNiArODY2LDEyIEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpp
bml0RnJhbWVCdWZmZXIoc2l6ZV90IGZyYW1lSW5kZXgpCiAgICAgICAgICAgICBidWZmZXIuemVy
b0ZpbGxGcmFtZVJlY3QocHJldlJlY3QpOwogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIGlu
dCBsZWZ0ID0gdXBwZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0LngoKSk7CisgICAgaW50IHJpZ2h0
ID0gbG93ZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0Lm1heFgoKSwgbGVmdCk7CisgICAgaW50IHRv
cCA9IHVwcGVyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC55KCkpOworICAgIGludCBib3R0b20gPSBs
b3dlckJvdW5kU2NhbGVkWShmcmFtZVJlY3QubWF4WSgpLCB0b3ApOworICAgIGJ1ZmZlci5waXhl
bHMtPnNldFJlY3QoSW50UmVjdChsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9w
KSk7CiB9CiAKIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKCkKQEAgLTg4Niw3
ICs4ODUsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAgICAgcG5n
X2J5dGVwIGludGVybGFjZUJ1ZmZlciA9IG1fcmVhZGVyLT5pbnRlcmxhY2VCdWZmZXIoKTsKIAog
ICAgIGlmIChtX2N1cnJlbnRGcmFtZSAmJiBpbnRlcmxhY2VCdWZmZXIpIHsKLSAgICAgICAgY29u
c3QgSW50UmVjdCYgcmVjdCA9IGJ1ZmZlci5vcmlnaW5hbEZyYW1lUmVjdCgpOworICAgICAgICBj
b25zdCBJbnRSZWN0JiByZWN0ID0gYnVmZmVyLnBpeGVscygpLT5yZWN0KCk7CiAgICAgICAgIGJv
b2wgaGFzQWxwaGEgPSBtX3JlYWRlci0+aGFzQWxwaGEoKTsKICAgICAgICAgdW5zaWduZWQgY29s
b3JDaGFubmVscyA9IGhhc0FscGhhID8gNCA6IDM7CiAgICAgICAgIGJvb2wgbm9uVHJpdmlhbEFs
cGhhID0gZmFsc2U7CkBAIC04OTYsNyArODk1LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmZy
YW1lQ29tcGxldGUoKQogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCiAg
ICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcmVjdC5tYXhZKCkgLSByZWN0LnkoKTsgKyt5KSB7
CiAgICAgICAgICAgICBwbmdfYnl0ZXAgcm93ID0gaW50ZXJsYWNlQnVmZmVyICsgKG1fc2NhbGVk
ID8gbV9zY2FsZWRSb3dzW3ldIDogeSkgKiBjb2xvckNoYW5uZWxzICogc2l6ZSgpLndpZHRoKCk7
Ci0gICAgICAgICAgICBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGFkZHJlc3MgPSBidWZmZXIuZ2V0
QWRkcihyZWN0LngoKSwgeSArIHJlY3QueSgpKTsKKyAgICAgICAgICAgIFJHQkEzMiogYWRkcmVz
cyA9IGJ1ZmZlci5nZXRBZGRyKHJlY3QueCgpLCB5ICsgcmVjdC55KCkpOwogICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCByZWN0Lm1heFgoKSAtIHJlY3QueCgpOyArK3gpIHsKICAgICAg
ICAgICAgICAgICBwbmdfYnl0ZXAgcGl4ZWwgPSByb3cgKyAobV9zY2FsZWQgPyBtX3NjYWxlZENv
bHVtbnNbeF0gOiB4KSAqIGNvbG9yQ2hhbm5lbHM7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQg
YWxwaGEgPSBoYXNBbHBoYSA/IHBpeGVsWzNdIDogMjU1OwpAQCAtOTEyLDcgKzkxMSw3IEBAIHZv
aWQgUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKCkKICAgICAgICAgcG5nX2J5dGVwIHJv
dyA9IGludGVybGFjZUJ1ZmZlcjsKICAgICAgICAgZm9yIChpbnQgeSA9IHJlY3QueSgpOyB5IDwg
cmVjdC5tYXhZKCk7ICsreSwgcm93ICs9IGNvbG9yQ2hhbm5lbHMgKiBzaXplKCkud2lkdGgoKSkg
ewogICAgICAgICAgICAgcG5nX2J5dGVwIHBpeGVsID0gcm93OwotICAgICAgICAgICAgSW1hZ2VG
cmFtZTo6UGl4ZWxEYXRhKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIocmVjdC54KCksIHkpOwor
ICAgICAgICAgICAgUkdCQTMyKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIocmVjdC54KCksIHkp
OwogICAgICAgICAgICAgZm9yIChpbnQgeCA9IHJlY3QueCgpOyB4IDwgcmVjdC5tYXhYKCk7ICsr
eCwgcGl4ZWwgKz0gY29sb3JDaGFubmVscykgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFs
cGhhID0gaGFzQWxwaGEgPyBwaXhlbFszXSA6IDI1NTsKICAgICAgICAgICAgICAgICBub25Ucml2
aWFsQWxwaGEgfD0gYWxwaGEgPCAyNTU7CkBAIC05MjUsNyArOTI0LDcgQEAgdm9pZCBQTkdJbWFn
ZURlY29kZXI6OmZyYW1lQ29tcGxldGUoKQogI2VuZGlmCiAKICAgICAgICAgaWYgKCFub25Ucml2
aWFsQWxwaGEpIHsKLSAgICAgICAgICAgIGlmIChidWZmZXIub3JpZ2luYWxGcmFtZVJlY3QoKS5j
b250YWlucyhJbnRSZWN0KEludFBvaW50KCksIHNjYWxlZFNpemUoKSkpKQorICAgICAgICAgICAg
aWYgKGJ1ZmZlci5waXhlbHMoKS0+cmVjdCgpLmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwg
c2NhbGVkU2l6ZSgpKSkpCiAgICAgICAgICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNl
KTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIHNpemVfdCBmcmFtZUluZGV4
ID0gbV9jdXJyZW50RnJhbWU7CkBAIC05MzMsNyArOTMyLDcgQEAgdm9pZCBQTkdJbWFnZURlY29k
ZXI6OmZyYW1lQ29tcGxldGUoKQogICAgICAgICAgICAgICAgIHdoaWxlIChmcmFtZUluZGV4ICYm
IChwcmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2VPdmVy
d3JpdGVQcmV2aW91cykpCiAgICAgICAgICAgICAgICAgICAgIHByZXZCdWZmZXIgPSAmbV9mcmFt
ZUJ1ZmZlckNhY2hlWy0tZnJhbWVJbmRleF07CiAgICAgICAgICAgICAgICAgaWYgKChwcmV2QnVm
ZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVCZ2Nv
bG9yKQotICAgICAgICAgICAgICAgICAgICAmJiAhcHJldkJ1ZmZlci0+aGFzQWxwaGEoKSAmJiBi
dWZmZXIub3JpZ2luYWxGcmFtZVJlY3QoKS5jb250YWlucyhwcmV2QnVmZmVyLT5vcmlnaW5hbEZy
YW1lUmVjdCgpKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgIXByZXZCdWZmZXItPmhhc0FscGhh
KCkgJiYgYnVmZmVyLnBpeGVscygpLT5yZWN0KCkuY29udGFpbnMocHJldkJ1ZmZlci0+cGl4ZWxz
KCktPnJlY3QoKSkpCiAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxz
ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoIW1fYmxlbmQgJiYgIWJ1ZmZl
ci5oYXNBbHBoYSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHAKaW5kZXggMTI0YTFi
MmYxOTk3ZmU2NzhjNjFiNTJmMzA1OGRiNGQ2Yjg4Njc5YS4uMDIyYzZmMGFiMjVlODFjMGFjZGY2
ZDU0Mzk0MmE3YzEyNWMwNmIyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwCkBA
IC0xMzIsMTQgKzEzMiwxMyBAQCBib29sIFdFQlBJbWFnZURlY29kZXI6OmRlY29kZShib29sIG9u
bHlTaXplKQogICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgICAgICBidWZmZXIu
c2V0U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIGJ1ZmZlci5zZXRI
YXNBbHBoYShtX2hhc0FscGhhKTsKLSAgICAgICAgYnVmZmVyLnNldE9yaWdpbmFsRnJhbWVSZWN0
KEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSgpKSk7CiAgICAgfQogCiAgICAgaWYgKCFtX2RlY29k
ZXIpIHsKICAgICAgICAgV0VCUF9DU1BfTU9ERSBtb2RlID0gb3V0cHV0TW9kZShtX2hhc0FscGhh
KTsKICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpCiAgICAgICAgICAgICBtb2RlID0g
b3V0cHV0TW9kZShmYWxzZSk7Ci0gICAgICAgIGludCByb3dTdHJpZGUgPSBzaXplKCkud2lkdGgo
KSAqIHNpemVvZihJbWFnZUZyYW1lOjpQaXhlbERhdGEpOworICAgICAgICBpbnQgcm93U3RyaWRl
ID0gc2l6ZSgpLndpZHRoKCkgKiBzaXplb2YoUkdCQTMyKTsKICAgICAgICAgdWludDhfdCogb3V0
cHV0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyLmdldEFkZHIoMCwgMCkpOwog
ICAgICAgICBpbnQgb3V0cHV0U2l6ZSA9IHNpemUoKS5oZWlnaHQoKSAqIHJvd1N0cmlkZTsKICAg
ICAgICAgbV9kZWNvZGVyID0gV2ViUElOZXdSR0IobW9kZSwgb3V0cHV0LCBvdXRwdXRTaXplLCBy
b3dTdHJpZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tCmluZGV4
IDIxNmNkMDkzZjI2NDY3Y2JhODhhNDNmNjkzYWJmNGNmNTFkZDFhNGQuLmQxMTQ1NGIwNWVmODg5
OTNhNjI4OTM4OTZiYzBjMTE3MjhjNWVkNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlk
ZW9Tb3VyY2VNYWMubW0KQEAgLTg3LDcgKzg3LDcgQEAgdm9pZCBNb2NrUmVhbHRpbWVWaWRlb1Nv
dXJjZU1hYzo6dXBkYXRlUGxhdGZvcm1MYXllcigpIGNvbnN0CiAgICAgICAgIGlmICghaW1hZ2Up
CiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBtX3ByZXZpZXdJbWFnZSA9IGltYWdlLT5n
ZXRDR0ltYWdlUmVmKCk7CisgICAgICAgIG1fcHJldmlld0ltYWdlID0gaW1hZ2UtPm5hdGl2ZUlt
YWdlKCk7CiAgICAgICAgIGlmICghbV9wcmV2aWV3SW1hZ2UpCiAgICAgICAgICAgICBicmVhazsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2lu
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAKaW5k
ZXggMzZjZDY1MTZlODBmMTc0OGJmZWFiNzdhOTMwMjcxYzEyMWRlODAxOS4uNGI0ZTM3NzllOTZm
NzhjNjU0MGE1M2M0NDc4YzNiZmQ5MzVmNTNlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwCkBAIC0xMzYsOSArMTM2LDkgQEAgRHJhZ0ltYWdl
UmVmIGNyZWF0ZURyYWdJbWFnZUZyb21JbWFnZShJbWFnZSogaW1nLCBJbWFnZU9yaWVudGF0aW9u
RGVzY3JpcHRpb24pCiAgICAgQ0dDb250ZXh0U2NhbGVDVE0oZHJhd0NvbnRleHQsIDEsIC0xKTsK
ICAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3IoZHJhd0NvbnRleHQsIHdoaXRlKTsKICAgICBDR0Nv
bnRleHRGaWxsUmVjdChkcmF3Q29udGV4dCwgcmVjdCk7Ci0gICAgaWYgKGF1dG8gc3JjSW1hZ2Ug
PSBpbWctPmdldENHSW1hZ2VSZWYoKSkgeworICAgIGlmIChhdXRvIHNyY0ltYWdlID0gaW1nLT5u
YXRpdmVJbWFnZSgpKSB7CiAgICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShkcmF3Q29udGV4
dCwga0NHQmxlbmRNb2RlTm9ybWFsKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGRyYXdD
b250ZXh0LCByZWN0LCBzcmNJbWFnZSk7CisgICAgICAgIENHQ29udGV4dERyYXdJbWFnZShkcmF3
Q29udGV4dCwgcmVjdCwgc3JjSW1hZ2UuZ2V0KCkpOwogICAgIH0KICAgICBDR0NvbnRleHRSZWxl
YXNlKGRyYXdDb250ZXh0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9tYWMvTWlzYy9X
ZWJDYWNoZS5tbSBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0KaW5kZXggYjY1
OWQ2ZGJmOWFkNjk5OWMzYWM5NjJkZTk1MTU3ODA5N2UxZjNiMS4uN2M1ZWQyMTBkZGIyYTMyYTc2
NjY3NGMxMjBkOTk0YzJmYTQ3ZTdmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvTWlz
Yy9XZWJDYWNoZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNhY2hlLm1tCkBA
IC0yMDQsNyArMjA0LDcgQEAgKyAoQ0dJbWFnZVJlZilpbWFnZUZvclVSTDooTlNVUkwgKil1cmwK
ICAgICBXZWJDb3JlOjpDYWNoZWRJbWFnZSYgY2FjaGVkSW1hZ2UgPSBkb3duY2FzdDxXZWJDb3Jl
OjpDYWNoZWRJbWFnZT4oKmNhY2hlZFJlc291cmNlKTsKICAgICBpZiAoIWNhY2hlZEltYWdlLmhh
c0ltYWdlKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBjYWNoZWRJbWFn
ZS5pbWFnZSgpLT5nZXRDR0ltYWdlUmVmKCk7CisgICAgcmV0dXJuIGNhY2hlZEltYWdlLmltYWdl
KCktPm5hdGl2ZUltYWdlKCkuZ2V0KCk7CiB9CiAKICNlbmRpZiAvLyBQTEFURk9STShJT1MpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0YWJh
c2VDRy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0YWJh
c2VDRy5jcHAKaW5kZXggMGY2ZGU3YTE0NmE2MTFhNTJhYTFlNTM5MDE5ZmE2YzFjNDY3MjVhZS4u
MzA1NjMzNmNiNjZmZTRhZjE4YmRjNTI5YWNhMmY4ZmM4ODFkZmU1NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9jZy9XS0ljb25EYXRhYmFzZUNHLmNwcApA
QCAtMzcsMTIgKzM3LDIzIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogQ0dJbWFnZVJlZiBX
S0ljb25EYXRhYmFzZVRyeUdldENHSW1hZ2VGb3JVUkwoV0tJY29uRGF0YWJhc2VSZWYgaWNvbkRh
dGFiYXNlUmVmLCBXS1VSTFJlZiB1cmxSZWYsIFdLU2l6ZSBzaXplKQogewogICAgIEltYWdlKiBp
bWFnZSA9IHRvSW1wbChpY29uRGF0YWJhc2VSZWYpLT5pbWFnZUZvclBhZ2VVUkwodG9XVEZTdHJp
bmcodXJsUmVmKSk7Ci0gICAgcmV0dXJuIGltYWdlID8gaW1hZ2UtPmdldEZpcnN0Q0dJbWFnZVJl
Zk9mU2l6ZShJbnRTaXplKHN0YXRpY19jYXN0PGludD4oc2l6ZS53aWR0aCksIHN0YXRpY19jYXN0
PGludD4oc2l6ZS5oZWlnaHQpKSkgOiAwOworICAgIHJldHVybiBpbWFnZSA/IGltYWdlLT5uYXRp
dmVJbWFnZU9mU2l6ZShJbnRTaXplKHN0YXRpY19jYXN0PGludD4oc2l6ZS53aWR0aCksIHN0YXRp
Y19jYXN0PGludD4oc2l6ZS5oZWlnaHQpKSkuZ2V0KCkgOiBudWxscHRyOwogfQogCiBDRkFycmF5
UmVmIFdLSWNvbkRhdGFiYXNlVHJ5Q29weUNHSW1hZ2VBcnJheUZvclVSTChXS0ljb25EYXRhYmFz
ZVJlZiBpY29uRGF0YWJhc2VSZWYsIFdLVVJMUmVmIHVybFJlZikKIHsKICAgICBJbWFnZSogaW1h
Z2UgPSB0b0ltcGwoaWNvbkRhdGFiYXNlUmVmKS0+aW1hZ2VGb3JQYWdlVVJMKHRvV1RGU3RyaW5n
KHVybFJlZikpOwotICAgIHJldHVybiBpbWFnZSA/IGltYWdlLT5nZXRDR0ltYWdlQXJyYXkoKS5s
ZWFrUmVmKCkgOiAwOworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgYXV0byBuYXRpdmVJbWFnZXMgPSBpbWFnZS0+ZnJhbWVzTmF0aXZlSW1hZ2VzKCk7Cisg
ICAgaWYgKCFuYXRpdmVJbWFnZXMuc2l6ZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAKKyAgICBDRk11dGFibGVBcnJheVJlZiBhcnJheSA9IENGQXJyYXlDcmVhdGVNdXRhYmxlKG51
bGxwdHIsIG5hdGl2ZUltYWdlcy5zaXplKCksICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpOworICAg
IGZvciAoYXV0byBuYXRpdmVJbWFnZSA6IG5hdGl2ZUltYWdlcykKKyAgICAgICAgQ0ZBcnJheUFw
cGVuZFZhbHVlKGFycmF5LCBuYXRpdmVJbWFnZS5nZXQoKSk7CisgICAgCisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PENGQXJyYXlSZWY+KENGUmV0YWluKGFycmF5KSk7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1t
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24u
bW0KaW5kZXggZGM3OTgzYWI5ODhjMmQwNGExNzMwZWUxMzczMDNjMjQ0MTYxNTE5Ny4uZmJjM2U1
ZDRjNTQzMDFjZTkyMTdhNDBmOGQwOGJkNTgzNTI3ODdjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24ubW0KQEAg
LTQwNzEsNyArNDA3MSw3IEBAIC0gKFVJSW1hZ2UgKilfcHJlc2VudGF0aW9uU25hcHNob3RGb3JQ
cmV2aWV3SXRlbUNvbnRyb2xsZXI6KFVJUHJldmlld0l0ZW1Db250cm9sCiB7CiAgICAgaWYgKCFf
cG9zaXRpb25JbmZvcm1hdGlvbi5saW5rSW5kaWNhdG9yLmNvbnRlbnRJbWFnZSkKICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIFtbW1VJSW1hZ2UgYWxsb2NdIGluaXRXaXRoQ0dJ
bWFnZTpfcG9zaXRpb25JbmZvcm1hdGlvbi5saW5rSW5kaWNhdG9yLmNvbnRlbnRJbWFnZS0+Z2V0
Q0dJbWFnZVJlZigpXSBhdXRvcmVsZWFzZV07CisgICAgcmV0dXJuIFtbW1VJSW1hZ2UgYWxsb2Nd
IGluaXRXaXRoQ0dJbWFnZTpfcG9zaXRpb25JbmZvcm1hdGlvbi5saW5rSW5kaWNhdG9yLmNvbnRl
bnRJbWFnZS0+bmF0aXZlSW1hZ2UoKS5nZXQoKV0gYXV0b3JlbGVhc2VdOwogfQogCiAtIChOU0Fy
cmF5ICopX3ByZXNlbnRhdGlvblJlY3RzRm9yUHJldmlld0l0ZW1Db250cm9sbGVyOihVSVByZXZp
ZXdJdGVtQ29udHJvbGxlciAqKWNvbnRyb2xsZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvUGx1Z2lucy9QbHVnaW5WaWV3LmNwcAppbmRleCA5YTMzZjdjYzdkYzdjN2Q3MmY5ZGE3
NDMwOThiN2RiY2E4MjQwOWNmLi5hNTMyNTEwNjc4YjlmNTM1MTQ1OGEzOGE5ZjQyMzM3NDdkMDM1
ZjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
Vmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZp
ZXcuY3BwCkBAIC0xNzI3LDY5ICsxNzI3LDYgQEAgdm9pZCBQbHVnaW5WaWV3Ojp3aW5kb3dlZFBs
dWdpblZpc2liaWxpdHlEaWRDaGFuZ2UoYm9vbCBpc1Zpc2libGUsIHVpbnQ2NF90IHdpbmQKIH0K
ICNlbmRpZgogCi0jaWYgUExBVEZPUk0oQ09DT0EpCi1zdGF0aWMgYm9vbCBpc0FsbW9zdFNvbGlk
Q29sb3IoQml0bWFwSW1hZ2UqIGJpdG1hcCkKLXsKLSAgICBDR0ltYWdlUmVmIGltYWdlID0gYml0
bWFwLT5nZXRDR0ltYWdlUmVmKCk7Ci0gICAgQVNTRVJUKENHSW1hZ2VHZXRCaXRzUGVyQ29tcG9u
ZW50KGltYWdlKSA9PSA4KTsKLQotICAgIENHQml0bWFwSW5mbyBpbWFnZUluZm8gPSBDR0ltYWdl
R2V0Qml0bWFwSW5mbyhpbWFnZSk7Ci0gICAgaWYgKCEoaW1hZ2VJbmZvICYga0NHQml0bWFwQnl0
ZU9yZGVyMzJMaXR0bGUpIHx8IChpbWFnZUluZm8gJiBrQ0dCaXRtYXBBbHBoYUluZm9NYXNrKSAh
PSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBD
b25zaWRlciBiZWluZyBhYmxlIHRvIGhhbmRsZSBvdGhlciBwaXhlbCBmb3JtYXRzLgotICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIHNpemVfdCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0aChpbWFnZSk7Ci0gICAgc2l6ZV90IGhl
aWdodCA9IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpOwotICAgIHNpemVfdCBieXRlc1BlclJvdyA9
IENHSW1hZ2VHZXRCeXRlc1BlclJvdyhpbWFnZSk7Ci0KLSAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVm
PiBwcm92aWRlciA9IGFkb3B0Q0YoQ0dEYXRhUHJvdmlkZXJDb3B5RGF0YShDR0ltYWdlR2V0RGF0
YVByb3ZpZGVyKGltYWdlKSkpOwotICAgIGNvbnN0IFVJbnQ4KiBkYXRhID0gQ0ZEYXRhR2V0Qnl0
ZVB0cihwcm92aWRlci5nZXQoKSk7Ci0KLSAgICAvLyBPdmVybGF5IGEgZ3JpZCBvZiBzYW1wbGlu
ZyBkb3RzIG9uIHRvcCBvZiBhIGdyYXlzY2FsZSB2ZXJzaW9uIG9mIHRoZSBpbWFnZS4KLSAgICAv
LyBGb3IgdGhlIGludGVyaW9yIHBvaW50cywgY2FsY3VsYXRlIHRoZSBkaWZmZXJlbmNlIGluIGx1
bWluYW5jZSBhbW9uZyB0aGUgc2FtcGxlIHBvaW50Ci0gICAgLy8gYW5kIGl0cyBzdXJyb3VuZHMg
cG9pbnRzLCBzY2FsZWQgYnkgdHJhbnNwYXJlbmN5LgotICAgIGNvbnN0IHVuc2lnbmVkIHNhbXBs
ZVJvd3MgPSA3OwotICAgIGNvbnN0IHVuc2lnbmVkIHNhbXBsZUNvbHMgPSA3OwotICAgIC8vIEZJ
WE1FOiBSZWZpbmUgdGhlIHByb3BlciBudW1iZXIgb2Ygc2FtcGxlcywgYW5kIGFjY29tbW9kYXRl
IGRpZmZlcmVudCBhc3BlY3QgcmF0aW9zLgotICAgIGlmICh3aWR0aCA8IHNhbXBsZUNvbHMgfHwg
aGVpZ2h0IDwgc2FtcGxlUm93cykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRW5z
dXJlIHRoYXQgdGhlIGxhc3Qgcm93L2NvbHVtbiBsYW5kIG9uIHRoZSBpbWFnZSBwZXJpbWV0ZXIu
Ci0gICAgY29uc3QgZmxvYXQgc3RyaWRlV2lkdGggPSBzdGF0aWNfY2FzdDxmbG9hdD4od2lkdGgg
LSAxKSAvIChzYW1wbGVDb2xzIC0gMSk7Ci0gICAgY29uc3QgZmxvYXQgc3RyaWRlSGVpZ2h0ID0g
c3RhdGljX2Nhc3Q8ZmxvYXQ+KGhlaWdodCAtIDEpIC8gKHNhbXBsZVJvd3MgLSAxKTsKLSAgICBm
bG9hdCBzYW1wbGVzW3NhbXBsZVJvd3NdW3NhbXBsZUNvbHNdOwotCi0gICAgLy8gRmluZCB0aGUg
bHVtaW5hbmNlIG9mIHRoZSBzYW1wbGUgcG9pbnRzLgotICAgIGZsb2F0IHkgPSAwOwotICAgIGNv
bnN0IFVJbnQ4KiByb3cgPSBkYXRhOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzYW1w
bGVSb3dzOyArK2kpIHsKLSAgICAgICAgZmxvYXQgeCA9IDA7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaiA9IDA7IGogPCBzYW1wbGVDb2xzOyArK2opIHsKLSAgICAgICAgICAgIGNvbnN0IFVJbnQ4
KiBwMCA9IHJvdyArIChzdGF0aWNfY2FzdDxpbnQ+KHggKyAuNSkpICogNDsKLSAgICAgICAgICAg
IC8vIFIgRyBCIEEKLSAgICAgICAgICAgIHNhbXBsZXNbaV1bal0gPSAoMC4yMTI1ICogKnAwICsg
MC43MTU0ICogKihwMCsxKSArIDAuMDcyMSAqICoocDArMikpICogKihwMCszKSAvIDI1NTsKLSAg
ICAgICAgICAgIHggKz0gc3RyaWRlV2lkdGg7Ci0gICAgICAgIH0KLSAgICAgICAgeSArPSBzdHJp
ZGVIZWlnaHQ7Ci0gICAgICAgIHJvdyA9IGRhdGEgKyAoc3RhdGljX2Nhc3Q8aW50Pih5ICsgLjUp
KSAqIGJ5dGVzUGVyUm93OwotICAgIH0KLQotICAgIC8vIERldGVybWluZSB0aGUgaW1hZ2Ugc2Nv
cmUuCi0gICAgZmxvYXQgYWNjdW1TY29yZSA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsg
aSA8IHNhbXBsZVJvd3MgLSAxOyArK2kpIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMTsg
aiA8IHNhbXBsZUNvbHMgLSAxOyArK2opIHsKLSAgICAgICAgICAgIGZsb2F0IGRpZmYgPSBzYW1w
bGVzW2kgLSAxXVtqXSArIHNhbXBsZXNbaSArIDFdW2pdICsgc2FtcGxlc1tpXVtqIC0gMV0gKyBz
YW1wbGVzW2ldW2ogKyAxXSAtIDQgKiBzYW1wbGVzW2ldW2pdOwotICAgICAgICAgICAgYWNjdW1T
Y29yZSArPSBkaWZmICogZGlmZjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZSBzY29y
ZSBmb3IgYSBnaXZlbiBzYW1wbGUgY2FuIGJlIHdpdGhpbiB0aGUgcmFuZ2Ugb2YgMCBhbmQgMjU1
XjIuCi0gICAgcmV0dXJuIGFjY3VtU2NvcmUgPCAyNTAwICogKHNhbXBsZVJvd3MgLSAyKSAqIChz
YW1wbGVDb2xzIC0gMik7Ci19Ci0jZW5kaWYKLQogdm9pZCBQbHVnaW5WaWV3OjpwbHVnaW5TbmFw
c2hvdFRpbWVyRmlyZWQoKQogewogI2lmIEVOQUJMRShQUklNQVJZX1NOQVBTSE9UVEVEX1BMVUdJ
Tl9IRVVSSVNUSUMpCkBAIC0xODA5LDcgKzE3NDYsNyBAQCB2b2lkIFBsdWdpblZpZXc6OnBsdWdp
blNuYXBzaG90VGltZXJGaXJlZCgpCiAKICAgICAgICAgaWYgKHNuYXBzaG90SW1hZ2UpIHsKICNp
ZiBFTkFCTEUoUFJJTUFSWV9TTkFQU0hPVFRFRF9QTFVHSU5fSEVVUklTVElDKQotICAgICAgICAg
ICAgYm9vbCBzbmFwc2hvdElzQWxtb3N0U29saWRDb2xvciA9IGlzQWxtb3N0U29saWRDb2xvcihk
b3duY2FzdDxCaXRtYXBJbWFnZT4oc25hcHNob3RJbWFnZS5nZXQoKSkpOworICAgICAgICAgICAg
Ym9vbCBzbmFwc2hvdElzQWxtb3N0U29saWRDb2xvciA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8Qml0
bWFwSW1hZ2U+KHNuYXBzaG90SW1hZ2UpLT5pc0FsbW9zdFNvbGlkQ29sb3IoKTsKICAgICAgICAg
ICAgIHNuYXBzaG90Rm91bmQgPSAhc25hcHNob3RJc0FsbW9zdFNvbGlkQ29sb3I7CiAjZW5kaWYK
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283461</attachid>
            <date>2016-07-12 15:29:02 -0700</date>
            <delta_ts>2016-07-12 15:59:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159679-20160712152819.patch</filename>
            <type>text/plain</type>
            <size>145302</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzMTAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWM1YmQ5YmQwNmExOWJl
NWNhMDJjNTE3MmQ2ZWYyZWJiZmVjMWMxOS4uZmU4ZDJmNTExZmM2N2M2MzliMzQwY2RiOWM3MTZj
MDllOWU4ODFlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzMSBAQAorMjAxNi0wNy0xMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0
IHRoZSBwaXhlbCBkYXRhIG9mIEltYWdlRnJhbWUgdG8gYSBzZXBhcmF0ZSBjbGFzcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5Njc5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgcGl4ZWwg
ZGF0YSBtYW5pcHVsYXRpb24gcGFydCBpbiBJbWFnZUZyYW1lIGludG8gYSBzZXBhcmF0ZSBjbGFz
cworICAgICAgICBhbmQgdGhlbiBtYWtlIGl0IG9wdGlvbmFsIChhbGxvY2F0ZWQgb24gZGVtYW5k
KS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2lu
Q2Fpcm8uY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFBpeGVsczo6Qml0bWFwUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBp
eGVsczo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpoZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFBpeGVsczo6YXQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmNsZWFyUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OnJlcGVhdEZpcnN0Um93KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcFBpeGVsczo6c2V0UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQ
aXhlbHM6Om92ZXJSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6aW5Cb3Vu
ZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Om11bHRpcGx5MjU1KToKKyAgICAgICAgKFdlYkNvcmU6OmRpdmlkZTI1NSk6CisgICAg
ICAgIChXZWJDb3JlOjpkaXZpZGVDZWlsKToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxp
ZWRDaGFubmVsKToKKyAgICAgICAgKFdlYkNvcmU6OnVucHJlbXVsdGlwbGllZENoYW5uZWwpOgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZVByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VVblByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6cGl4ZWxzKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWVEYXRhOjpoYXNQaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y2xlYXJQaXhl
bERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGxQaXhlbERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGxGcmFtZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weUJpdG1hcERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojpjb3B5Um93TlRpbWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0UkdCQSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpnZXRBZGRyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6Omhhc1BpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpvdmVyUkdC
QSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjp3aWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
Y29weVJvd05UaW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpm
aXhQb2ludFVuc2lnbmVkTXVsdGlwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6ZGl2aWRlMjU1KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1h
Z2VSZWFkZXI6OmRlY29kZUJNUCk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Y2Fpcm8vQml0bWFwUGl4ZWxzQ2Fpcm8uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwLgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjppbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KToKKyAgICAgICAgKFdlYkNvcmU6OkdJ
RkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFn
ZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFBp
eGVsKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5l
cyk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhlbFJHQik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRQaXhlbFJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxQcmVtdWx0aXBsaWVk
UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorCisyMDE2LTA3LTEx
ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAg
UmVuYW1lIEZyYW1lRGF0YSB0byBJbWFnZUZyYW1lRGF0YSBhbmQgbW92ZSBpdCB0byBhIHNlcGFy
YXRlIGZpbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1NTQ0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1vdmUgSW1hZ2VGcmFtZURhdGEgdG8gYSBzZXBhcmF0ZSBmaWxlIHNvIGl0IGNhbiBiZSBjYWNo
ZWQgYnkgSW1hZ2VTb3VyY2UKKyAgICAgICAgYW5kIHdpbGwgc3RpbGwgYmUgY29uc3VtZWQgYnkg
Qml0bWFwSW1hZ2UuIE1ha2UgdGhlIGRhdGEgbWVtYmVycyBvZiBJbWFnZUZyYW1lRGF0YQorICAg
ICAgICBiZSBwcml2YXRlIGFuZCBhZGQgZ2V0dGVycyB0byByZXR1cm4gdGhlaXIgdmFsdWVzLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cyAtLSBDb2RlIHJlZmFjdG9yaW5nLCBubyBiZWhhdmlvciBj
aGFuZ2UuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpoYXZlRnJhbWVJbWFnZUF0SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3Nh
cnkpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjplbnN1cmVGcmFtZUlzQ2FjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJ
bWFnZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJ
bWFnZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpmcmFtZU9yaWVudGF0aW9uQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
Ojppc0FsbW9zdFNvbGlkQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1h
cEltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OkZyYW1lRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6On5GcmFtZURhdGEpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp1c2VkRnJhbWVCeXRlcyk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lRGF0YUF0SW5kZXgpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvaW1hZ2VGcmFtZURhdGEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWVEYXRhOjpJbWFnZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0
YTo6fkltYWdlRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpj
bGVhclN1YkltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6Y2xlYXIp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OnNpbmdsZVBpeGVsU29saWRDb2xv
cik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6aXNBbG1vc3RTb2xpZENvbG9y
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9pbWFnZUZyYW1lRGF0YS5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpzdGF0dXMpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZURhdGE6OmlzQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZURhdGE6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmZy
YW1lQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpvcmllbnRhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6c3Vic2FtcGxpbmdMZXZlbCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lRGF0YTo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZURhdGE6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpo
YXNJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6aGFzTWV0YWRhdGEp
OgorCisyMDE2LTA2LTI0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxj
b20+CisKKyAgICAgICAgSW50cm9kdWNlIFBsYXRmb3JtSW1hZ2UgYW5kIG1ha2UgaXQgaXMgYSB3
cmFwcGVyIGZvciBOYXRpdmVJbWFnZVB0cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhlIG1haW4gcHVycG9zZSBvZiB0aGlzIHJlZmFjdG9yaW5nIGlz
IHRvIG1vdmUgdGhlIHBsYXRmb3JtIGltYWdlIGRlcGVuZGVudAorICAgICAgICBjb2RlIGZyb20g
Qml0bWFwSW1hZ2UgdG8gUGxhdGZvcm1JbWFnZS4gUGxhdGZvcm1JbWFnZSBpcyByZXNwb25zaWJs
ZSBvZiAKKyAgICAgICAgZHJhd2luZyB0aGUgaW1hZ2UgYW5kIGFuc3dlcmluZyBOYXRpdmVJbWFn
ZVB0ciBxdWVzdGlvbnMgd2hlbiBhbiBJbWFnZURlY29kZXIKKyAgICAgICAgaXMgbm90IGF2YWls
YWJsZS4gQXBhcnQgZnJvbSBkcmF3aW5nIHRoZSBpbWFnZSwgdGhlIHF1ZXJ5IGZ1bmN0aW9ucyB3
aWxsIGJlCisgICAgICAgIGNhbGxlZCBvbmx5IHdoZW4gY29uc3RydWN0aW5nIGEgRnJhbWVEYXRh
IHNvIHdlIHdpbGwga2VlcCBldmVyeXRoaW5nIGFzIGEKKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIu
IEJ1dCB3ZSB3aWxsIGNhc3QgdGhlIE5hdGl2ZUltYWdlUHRyIHRvIFBsYXRmb3JtSW1hZ2Ugd2hl
bgorICAgICAgICBhIHBsYXRmb3JtIGRlcGVuZGVudCBmdW5jdGlvbiBpcyBuZWVkZWQuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzIC0tIENvZGUgcmVmYWN0b3JpbmcsIG5vIGJlaGF2aW9yIGNoYW5n
ZS4KKworICAgICAgICAqIFBsYXRmb3JtQXBwbGVXaW4uY21ha2U6CisgICAgICAgICogUGxhdGZv
cm1FZmwuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogUGxh
dGZvcm1NYWMuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1XaW5DYWlyby5jbWFrZToKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGlu
Z3Mvb2JqYy9ET00ubW06CisgICAgICAgICgtW0RPTU5vZGUgZ2V0UHJldmlld1NuYXBzaG90SW1h
Z2U6YW5kUmVjdHM6XSk6CisgICAgICAgICogcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5t
bToKKyAgICAgICAgKC1bV2ViVGV4dEluZGljYXRvclZpZXcgaW5pdFdpdGhGcmFtZTp0ZXh0SW5k
aWNhdG9yOm1hcmdpbjpvZmZzZXQ6XSk6CisgICAgICAgIChjcmVhdGVDb250ZW50Q3Jvc3NmYWRl
QW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3NhcnkpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBJbWFnZTo6bmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5h
dGl2ZUltYWdlT2ZTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJh
bWVzTmF0aXZlSW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpzaW5nbGVQ
aXhlbFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmlzQWxtb3N0
U29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lRGF0YTo6RnJhbWVEYXRhKToKKyAgICAgICAgbV9oYXNBbHBoYSBjYW4gYmUgaW5pdGlh
bGl6ZWQgd2l0aCBmYWxzZSBiZWNhdXNlIGl0IGlzIGFjY2Vzc2VkIG9ubHkgaW4KKyAgICAgICAg
Qml0bWFwSW1hZ2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KCkgYW5kIGl0IGlzIGd1YXJkZWQgYnkg
bV9oYXZlTWV0YWRhdGEuCisgICAgICAgIEJvdGggbV9oYXZlTWV0YWRhdGEgYW5kIG1faGFzQWxw
aGEgYXJlIHNldCBpbiBCaXRtYXBJbWFnZSBjb25zdHJ1Y3RvcgorICAgICAgICBhbmQgaW4gQml0
bWFwSW1hZ2U6OmNhY2hlRnJhbWUoKS4KKworICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp+
RnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6Y2xlYXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6
bmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2U6OmdldENHSW1hZ2VSZWYpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2U6OmdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZTo6Z2V0Q0dJbWFnZUFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1JbWFnZTo6UGxhdGZvcm1JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUltYWdlOjppc05pbCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpjZ0lt
YWdlUmVmKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9N
ZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW06CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnVwZGF0ZURpc3BsYXlNb2Rl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8u
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Qml0bWFwSW1hZ2VDYWlyby5jcHAuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpj
bGVhclN1YkltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1JbWFnZTo6c3Vic2FtcGxpbmdTY2FsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUltYWdlOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9C
aXRtYXBJbWFnZUNHLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QYXR0ZXJuQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0dGVybjo6Y3JlYXRlUGxhdGZv
cm1QYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdl
Q0cuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OmNsZWFyU3Vi
SW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6aGFzQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1JbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtSW1hZ2U6OmlzQWxtb3N0U29saWRDb2xvcik6IE1vdmVkIGZyb20gUGx1Z2luVmll
dy5jcHAgc2luY2UgUGxhdGZvcm1JbWFnZSBpcyB3aGF0IHRoaXMgZnVuY3Rpb24gYmVsb25ncyB0
by4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUpOiBS
ZXR1cm5zIHRoZSBzdWItc2FtcGxpbmcgc2NhbGUgYmFzZWQgb24gdGhlIGNvbnRleHQgc2NhbGlu
Zy4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW06Cisg
ICAgICAgIChUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hOjp1cGRhdGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjpnZXRUSUZGUmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjp1cGRhdGVQbGF0Zm9ybUxheWVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKToKKwogMjAxNi0wNy0xMSAgU2FtIFdlaW5p
ZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFNwZWVjaCBTeW50aGVzaXM6IGdldHRpbmcg
bGlzdCBvZiB2b2ljZXMgbm8gbG9uZ2VyIHdvcmtzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggYzFiYzBi
YmRlMzYxMjVjNDYyYmY0ODFkZGFkNWRkMmY4MjdkNTIzOS4uMThkMWViZWJlZTkyMGIyZjI5ZWYz
Mjg3N2RlZDJlMWVjZmY5N2Q0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisy
MDE2LTA3LTExICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisK
KyAgICAgICAgSW50cm9kdWNlIFBsYXRmb3JtSW1hZ2UgYW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVy
IGZvciBOYXRpdmVJbWFnZVB0cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBNaXNjL1dlYkNhY2hlLm1tOgorICAgICAgICAoK1tXZWJDYWNoZSBpbWFn
ZUZvclVSTDpdKToKKwogMjAxNi0wNy0xMSAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUu
Y29tPgogCiAgICAgICAgIEFkZCBzeW50aGV0aWMgY2xpY2sgb3JpZ2luIHRvIFdLTmF2aWdhdGlv
bkFjdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwppbmRleCBiNDdlMmNlYTc5YThkZDdjNTMzNWQyY2Q1OGU3OTYxNTMz
NWM1MDJjLi5mMWYxNjcyNTg0YzBlZTgxODU4YTdlOTY1NTNhY2Q5Y2QwYWM2ZmVkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTYtMDctMTEgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fi
b3VoYWxsYXdhQGFwcGxlLGNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgUGxhdGZvcm1JbWFnZSBh
bmQgbWFrZSBpdCBpcyBhIHdyYXBwZXIgZm9yIE5hdGl2ZUltYWdlUHRyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTg2ODQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9jZy9X
S0ljb25EYXRhYmFzZUNHLmNwcDoKKyAgICAgICAgKFdLSWNvbkRhdGFiYXNlVHJ5R2V0Q0dJbWFn
ZUZvclVSTCk6CisgICAgICAgIChXS0ljb25EYXRhYmFzZVRyeUNvcHlDR0ltYWdlQXJyYXlGb3JV
UkwpOgorICAgICAgICBJdCB3YXMgdGhlIG9ubHkgcGxhY2UgaW4gdGhlIGNvZGUgd2hpY2ggdXNl
cyBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZUFycmF5KCkuCisgICAgICAgIENhbGwgQml0bWFwSW1h
Z2U6OmZyYW1lc05hdGl2ZUltYWdlcygpIGluc3RlYWQgYW5kIGZvcm0gdGhlIHJldHVybmVkCisg
ICAgICAgIFZlY3RvcjxOYXRpdmVJbWFnZVB0cj4gYnVpbGQgdGhlIENGQXJyYXlSZWYuCisgICAg
ICAgIAorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1t
OgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9wcmVzZW50YXRpb25TbmFwc2hvdEZvclByZXZp
ZXdJdGVtQ29udHJvbGxlcjpdKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
Vmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OnBsdWdpblNuYXBzaG90VGlt
ZXJGaXJlZCk6CisgICAgICAgIAorICAgICAgICAoV2ViS2l0Ojppc0FsbW9zdFNvbGlkQ29sb3Ip
OiBEZWxldGVkLgorICAgICAgICBNb3ZlIHRoZSBzdGF0aWMgZnVuY3Rpb24gaXNBbG1vc3RTb2xp
ZENvbG9yIHRvIFBsYXRmb3JtSW1hZ2U6OmlzQWxtb3N0U29saWRDb2xvcigpLgorCiAyMDE2LTA3
LTExICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgW1dLMl1baU9T
XSBJbnRlcm1pdHRlbnQgY3Jhc2ggaW4gW1VJQXBwbGljYXRpb24gYmVnaW5CYWNrZ3JvdW5kVGFz
a1dpdGhOYW1lXSBleHBpcmF0aW9uIGhhbmRsZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZTc4
YjA0MmIxMDQwMWUxZjRlZTNhMmFiMWEwNTJjMjE4YzNhMTFlMy4uMjI2ZWM5Yjg0ZTcyMmZmZjNl
MmYwNGRjZTdkYjcwZTNkZDRiODNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIyMjYsNiAr
MjIyNiw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JU09W
VFRDdWUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFt
ZURhdGEuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPcmllbnRhdGlvbi5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9JbnRQb2ludC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVX
aW4uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCmluZGV4IDVm
Zjk5MWZmN2RhMzA4YmI5MTgyZWNlM2JmMTIxNzMwYTU0OGQyODcuLmJhZTMxZWFmODZlN2ZjYTkw
NTgyNTA5MmFhMzhhNzhjMTFlNDIyMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtQXBwbGVXaW4uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5j
bWFrZQpAQCAtNTUsNyArNTUsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dLQ0FDRlZpZXdMYXllclRyZWVIb3N0LmNwcAogCi0g
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9Db2xvckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9p
bnRDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAKQEAgLTc1
LDYgKzc0LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Q
YXRoQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UK
aW5kZXggNTE0NTA0ZTZlYzI1YWE1ZTQzYjk5Mzk4ZDVlMzVjZWVlYTc2NmFhNC4uNjRhZTE3MTA4
OWRjYmYwY2Q0NWI3MGE5YjhmNzBlZmE5ZmZkZWRiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21h
a2UKQEAgLTEyMiw3ICsxMjIsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9JbXBsLmNwcAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Rm9udENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZi
dXp6TkcuY3BwCkBAIC0xMzQsNiArMTMzLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxh
dGZvcm1QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fp
cm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3JtYXRpb25NYXRyaXhD
YWlyby5jcHAKQEAgLTE3OSw5ICsxNzksOSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3gxMS9YVW5pcXVlUmVzb3VyY2UuY3BwCiAKLSAgICBwbGF0Zm9ybS9p
bWFnZS1lbmNvZGVycy9KUEVHSW1hZ2VFbmNvZGVyLmNwcAorICAgIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcAogCi0gICAgcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vaW1hZ2Ut
ZW5jb2RlcnMvSlBFR0ltYWdlRW5jb2Rlci5jcHAKIAogICAgIHBsYXRmb3JtL25ldHdvcmsvZWZs
L05ldHdvcmtTdGF0ZU5vdGlmaWVyRWZsLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmlu
ZGV4IDY0NWFkZDFjZTM4ODg4YjA0ZDRhMmQ4OWFkYTBhN2M2ZGUxOTk4NmIuLmQzMWY1NzA2YTY5
NTliMjMxYjViZmIyMmYwN2QxODQzYWU4NjFhMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtl
CkBAIC0xMDEsNyArMTAxLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9JbXBsLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JhY2tpbmdTdG9yZUJhY2tlbmRDYWlyb1gxMS5j
cHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0Zsb2F0UmVjdENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ZvbnRDYWlyby5jcHAKQEAgLTExNSw2ICsxMTQsNyBAQCBsaXN0KEFQUEVORCBXZWJD
b3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9QbGF0Zm9ybVBhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9SZWZQdHJDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1h
dGlvbk1hdHJpeENhaXJvLmNwcApAQCAtMTQ5LDcgKzE0OSw3IEBAIGxpc3QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCiAgICAg
cGxhdGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5jcHAKIAotICAgIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcAogCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3RrL1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlR3RrLmNwcAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
TWFjLmNtYWtlCmluZGV4IDlmNmY0OTZiNmNjNGVmNmU0Yjc0ZDg0YWMwYWE5ZGVhNTVhMDIzN2Iu
LjRkZGVkMzA4OGY0ZjM5NmZlZjQ0NGU3ZWU2NWM2NDEwNjU4ZjU4NDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtTWFjLmNtYWtlCkBAIC0zOTcsNyArMzk3LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvV2ViU3lzdGVtQmFja2Ryb3BMYXll
ci5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1dlYlRpbGVkQmFja2luZ0xheWVy
Lm1tCiAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
RmxvYXRQb2ludENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UmVjdENHLmNw
cApAQCAtNDE3LDYgKzQxNiw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvUGF0aENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1XaW5DYWlyby5jbWFrZQppbmRleCAyYzU1M2IwNTUxZGFkNjlhYTE5OWQ5NjBmNTUyMzQz
ZDkyMGYwN2IzLi4zNDJhYTkyNzMyZmQ4ZjkyZTg1Y2ZhNjI2ZDU1NTcwZWY2NmI2YTY4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKQEAgLTIxLDcgKzIxLDYgQEAgbGlzdChB
UFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAKIAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vRmxvYXRSZWN0Q2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENh
aXJvLmNwcApAQCAtMzQsNiArMzMsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L1BsYXRmb3JtQ29udGV4dENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Bs
YXRmb3JtSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9y
bVBhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQdHJDYWlyby5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1hdHJpeENhaXJv
LmNwcApAQCAtNDYsNyArNDYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAog
Ci0gICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3Bw
CisgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vQml0bWFwUGl4ZWxzQ2Fpcm8uY3Bw
CiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvblN0dWIuY3BwCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBjMTFiYzQ3ZTVjYWQ2MzBhMzY1N2NkZTFhZDlmN2I3NmEwYTU1YzY2Li5mZjJhNDk4YmE5
NmI4MWRhMDNmODFhMzAxYTg1YmUzNzRkMGVjNjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDg0LDcgKzE0ODQsNyBAQAog
CQkzNzVDRDIzMjExOUQ0M0M4MDBBMkE4NTkgLyogSHlwaGVuYXRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NUNEMjMxMTE5RDQzQzgwMEEyQTg1
OSAvKiBIeXBoZW5hdGlvbi5oICovOyB9OwogCQkzNzZEQ0NFMTEzQjRGOTY2MDAyRUJFRkMgLyog
VGV4dFJ1bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzNzZEQ0NFMDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5jcHAgKi87IH07CiAJCTM3NzRB
QkE1MEZBMjFFQjQwMEFEN0RFOSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NzRBQkEzMEZBMjFFQjQw
MEFEN0RFOSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkzNzdBM0E5MDE1RUZDRTlCMDA1OUY1Qzcg
LyogQml0bWFwSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogQml0bWFwSW1hZ2VDRy5jcHAg
Ki87IH07CisJCTM3N0EzQTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc3QTNBOEYx
NUVGQ0U5QTAwNTlGNUM3IC8qIFBsYXRmb3JtSW1hZ2VDRy5jcHAgKi87IH07CiAJCTM3OTE5QzIz
MEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3OTE5QzIxMEI3RDE4ODYwMEE1Njk5OCAv
KiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCAqLzsgfTsKIAkJMzc5MTlDMjQwQjdEMTg4NjAwQTU2OTk4
IC8qIFBvc2l0aW9uSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDM3OTE5QzIyMEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9y
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMzc5MjkxN0ExOTg1
RUYzOTAwRjRCNjYxIC8qIENyZWRlbnRpYWxCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzkyOTE3ODE5ODVFRjM5MDBGNEI2NjEgLyogQ3JlZGVu
dGlhbEJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMjMyNSwxMCArMjMyNSwxNCBAQAogCQk1M0VEM0ZERjE2N0E4OEU3MDA2NzYyRTYgLyog
SlNJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0VEM0ZERDE2N0E4OEU3MDA2NzYyRTYgLyogSlNJbnRlcm5h
bFNldHRpbmdzR2VuZXJhdGVkLmggKi87IH07CiAJCTUzRUY3NjZCMTY1MzBBNjEwMDRDQkU0OSAv
KiBTZXR0aW5nc01hY3Jvcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTNFRjc2NkExNjUzMEE2MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi87
IH07CiAJCTUzRUY3NjZDMTY1MzE5OTQwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oIGluIENv
cHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTNFRjc2NkExNjUzMEE2MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi87IH07CisJCTU1
MDRFNENCMUQzNTU3QjIwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MDRFNENBMUQzNTUzMkQwMEZFNTA4OCAv
KiBCaXRtYXBQaXhlbHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk1NTBBMEJDOTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDNzA4
NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgKi87IH07CiAJCTU1MEEwQkNBMDg1
RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlm
aWVkTmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTU1NUI4N0VDMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTVCODdFQTFDQUFGMEFC
MDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovOyB9OwogCQk1NTVCODdFRDFDQUFGMEFC
MDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU1NUI4N0VCMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29k
ZXJDRy5oICovOyB9OworCQk1NTc0RjA4NzFEMDI3OTA5MDBCOUYxNEMgLyogUGxhdGZvcm1JbWFn
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU3NEYw
ODUxRDAyNzQ0NDAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1NUNCQTZBMTFEMURGMkUxMDA0NTE4NjAg
LyogSW1hZ2VGcmFtZURhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTVDQkE2OUYxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmNw
cCAqLzsgfTsKKwkJNTVDQkE2QTIxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUNCQTZBMDFE
MURGMkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NzJBN0YyMTFDNkU1NzE5MDA5QzYxNDkgLyog
U2ltdWxhdGVkQ2xpY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU3MkE3RjIwMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5oICovOyB9
OwogCQk1NzJBN0YyMzFDNkU1QTY2MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcyQTdGMjIxQzZFNUE2
NjAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCAqLzsgfTsKIAkJNTdFRjVFNjAxRDIwQzgz
OTAwMTcxRTYwIC8qIFRleHRDb2RlY1JlcGxhY2VtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0VGNUU1RjFEMjBDODM5MDAxNzFFNjAgLyogVGV4
dENvZGVjUmVwbGFjZW1lbnQuaCAqLzsgfTsKQEAgLTkwNjEsNyArOTA2NSw3IEBACiAJCTM3NkRD
Q0UwMTNCNEY5NjYwMDJFQkVGQyAvKiBUZXh0UnVuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFRleHRSdW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzNzcyQjA5NTE2NTM1ODU2MDAwQTQ5Q0EgLyogUG9wdXBPcGVuaW5nT2JzZXJ2ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9wdXBPcGVuaW5nT2JzZXJ2ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc3NEFCQTMwRkEyMUVCNDAwQUQ3REU5IC8qIE92
ZXJsYXBUZXN0UmVxdWVzdENsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQml0bWFwSW1hZ2VDRy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBQbGF0Zm9y
bUltYWdlQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGxhdGZv
cm1JbWFnZUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc5MTlDMjEwQjdE
MTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFBvc2l0aW9uSXRlcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkzNzkxOUMyMjBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9zaXRpb25JdGVyYXRvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzkyOTE3ODE5ODVFRjM5MDBGNEI2NjEg
LyogQ3JlZGVudGlhbEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3Jl
ZGVudGlhbEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk5ODksMTAgKzk5
OTMsMTQgQEAKIAkJNTNFRDNGREMxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJuYWxTZXR0aW5n
c0dlbmVyYXRlZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0lu
dGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1M0VEM0ZERDE2N0E4OEU3MDA2NzYyRTYgLyogSlNJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVk
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50ZXJuYWxTZXR0aW5nc0dl
bmVyYXRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0VGNzY2QTE2NTMwQTYx
MDA0Q0JFNDkgLyogU2V0dGluZ3NNYWNyb3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2V0dGluZ3NNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTUw
NEU0Q0ExRDM1NTMyRDAwRkU1MDg4IC8qIEJpdG1hcFBpeGVscy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBC
aXRtYXBQaXhlbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTUwQTBCQzcwODVG
NjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1NTBB
MEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZWROYW1lLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1NTVC
ODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VEZWNvZGVyQ0cuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVy
Q0cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VEZWNvZGVyQ0cuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTU3NEYwODUxRDAyNzQ0NDAwQjlGMTRDIC8q
IFBsYXRmb3JtSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1NUNCQTY5RjFEMURGMkUxMDA0NTE4NjAgLyogSW1hZ2VG
cmFtZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VG
cmFtZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NUNCQTZBMDFEMURG
MkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW1hZ2VGcmFtZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTVENDA4RjcxQTdDNjMxODAwQzc4NDUwIC8qIFNWR0ltYWdlQ2xpZW50cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdJbWFnZUNsaWVudHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTcyQTdGMjAxQzZFNTcxOTAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNr
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXVsYXRlZENsaWNrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MkE3RjIyMUM2RTVBNjYwMDlDNjE0OSAvKiBT
aW11bGF0ZWRDbGljay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
aW11bGF0ZWRDbGljay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjAyNCw3
ICsyMjAzMiw2IEBACiAJCUIyNzUzNTI5MEIwNTM4MTQwMDJDRTY0RiAvKiBjZyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMzc3QTNBOEYxNUVGQ0U5QTAw
NTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovLAogCQkJCTBGQ0YzMzIzMEYyQjk3MTUwMDRC
Njc5NSAvKiBDb2xvckNHLmNwcCAqLywKIAkJCQlCMjc1MzUyQjBCMDUzODE0MDAyQ0U2NEYgLyog
RmxvYXRQb2ludENHLmNwcCAqLywKIAkJCQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxv
YXRSZWN0Q0cuY3BwICovLApAQCAtMjIwNTEsNiArMjIwNTgsNyBAQAogCQkJCUE4MEEzOEZEMEU1
MENDODIwMEEyNUVCQyAvKiBQYXR0ZXJuQ0cuY3BwICovLAogCQkJCUIyNzUzNTM2MEIwNTM4MTQw
MDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmNwcCAqLywKIAkJCQlCMjc1MzUzNzBCMDUzODE0
MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5oICovLAorCQkJCTM3N0EzQThGMTVFRkNFOUEw
MDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwICovLAogCQkJCTFGQzQwRkI4MTY1NUM1OTEw
MDQwRjI5RSAvKiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcCAqLywKIAkJCQkxRkM0MEZCNzE2
NTVDNTkxMDA0MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5oICovLAogCQkJCUIyNzUz
NTJBMEIwNTM4MTQwMDJDRTY0RiAvKiBUcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcCAqLywKQEAg
LTIyMTE4LDYgKzIyMTI2LDcgQEAKIAkJCQlCRUYyOUVFOTE3MTVERDA5MDBDNEI0QzkgLyogQXVk
aW9UcmFja1ByaXZhdGUuaCAqLywKIAkJCQlBODk5NDMyNzBCNDIzMzg3MDBEN0M4MDIgLyogQml0
bWFwSW1hZ2UuY3BwICovLAogCQkJCUE4OTk0MzI2MEI0MjMzODcwMEQ3QzgwMiAvKiBCaXRtYXBJ
bWFnZS5oICovLAorCQkJCTU1MDRFNENBMUQzNTUzMkQwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMu
aCAqLywKIAkJCQlDRERFMDJFOTE4QjNERkM3MDBDRjdGRjEgLyogQ0RNU2Vzc2lvbi5oICovLAog
CQkJCUIyNzUzNTM4MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5jcHAgKi8sCiAJCQkJQjI3NTM1
MzkwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmggKi8sCkBAIC0yMjIwMiw2ICsyMjIxMSw4IEBA
CiAJCQkJNDNEMjU5NzYxM0M4MTZGNDAwNjA4NTU5IC8qIEltYWdlQnVmZmVyLmNwcCAqLywKIAkJ
CQlCMkExMEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLywKIAkJCQkyMkJE
OUY3RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi8sCisJCQkJNTVDQkE2
OUYxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmNwcCAqLywKKwkJCQk1NUNCQTZB
MDFEMURGMkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCAqLywKIAkJCQlCQzdGNDRBNzBC
OUUzMjRFMDBBOUQwODEgLyogSW1hZ2VPYnNlcnZlci5oICovLAogCQkJCUE4NzQ4RDc0MTJDQzNG
ODkwMDFGQkE0MSAvKiBJbWFnZU9yaWVudGF0aW9uLmNwcCAqLywKIAkJCQlBODc0OEQ2NjEyQ0Mz
NzYzMDAxRkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5oICovLApAQCAtMjIyNTEsNiArMjIyNjIs
NyBAQAogCQkJCTJENTAwMkZBMUI1NkQ3OTkwMDIwQUFGNyAvKiBQYXRoVXRpbGl0aWVzLmggKi8s
CiAJCQkJQThGQTZFNUMwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwICovLAogCQkJCUE4
RkE2RTVCMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggKi8sCisJCQkJNTU3NEYwODUxRDAy
NzQ0NDAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCAqLywKIAkJCQkwNTYyRjk2MDE1NzNGODhG
MDAzMUNBMTYgLyogUGxhdGZvcm1MYXllci5oICovLAogCQkJCUNFRUZDRDdCMTlEQjMzREMwMDM4
NzZENyAvKiBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQkwNzI4NDdFMjE2
RUJDNUIwMDA0M0NGQTQgLyogUGxhdGZvcm1UZXh0VHJhY2suaCAqLywKQEAgLTI2MDE4LDYgKzI2
MDMwLDcgQEAKIAkJCQk4NUU3MTFCOTBBQzVENTM1MDA1MzI3MEYgLyogRE9NSFRNTE1hcEVsZW1l
bnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1MTU3OUYwQzAzQkJEMzAwOEJCMEVF
IC8qIERPTUhUTUxNYXJxdWVlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1MTU2RUEw
QzAzQjc0MTAwOEJCMEVFIC8qIERPTUhUTUxNYXJxdWVlRWxlbWVudEludGVybmFsLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1NTc0RjA4NzFEMDI3OTA5MDBCOUYxNEMgLyogUGxhdGZvcm1JbWFnZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkRFQzY2NTUxQzgyRDA0MTAwOTk4NDZBIC8qIERPTUhUTUxN
ZWRpYUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERUM2NjUxMUM4MkQwMTYwMDk5ODQ2
QSAvKiBET01IVE1MTWVkaWFFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1
QkE0RDEzMEFBNjg4NjgwMDg4MDUyRCAvKiBET01IVE1MTWVudUVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjY0NTksNiArMjY0NzIsNyBAQAogCQkJCUQzNTlENzhBMTI5Q0EyNzEwMDA2RTVE
MiAvKiBIVE1MRGV0YWlsc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE3OUZBMEEx
OTE2REYwMEE4RUY1RiAvKiBIVE1MRGlyZWN0b3J5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThFQTdDQjcwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxEaXZFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk1NUNCQTZBMjFEMURGMkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4RUE3OUY3MEExOTE2REYwMEE4RUY1RiAvKiBIVE1MRExpc3RF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOThFNTA4MjQ1RTU5MDAxRTlBQkMgLyog
SFRNTERvY3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdCMzg2NzEyMjg4M0U5MDBCODFG
RjggLyogSFRNTERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTI4MzU5LDYgKzI4
MzczLDcgQEAKIAkJCQlCMjIyNzk5MzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OTk1MEQwMEJGMjIwMDcxQjc4MiAv
KiBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5
OTgwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0FuaW1hdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTU1MDRFNENCMUQzNTU3QjIwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQzOUQzMzQ1MTNBNjkxMUMwMEMyMEY0RiAvKiBTVkdBbmltYXRvckZhY3Rv
cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4RkIzRjg0MTNCQzc1NEMwMDk5RkMxOCAvKiBTVkdB
dHRyaWJ1dGVUb1Byb3BlcnR5TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk5QzBEMDBC
RjIyMDA3MUI3ODIgLyogU1ZHQ2lyY2xlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTQx
MSw3ICsyOTQyNiw3IEBACiAJCQkJRkRDNTRGMDQxMzk5QjBEQTAwOEQ5MTE3IC8qIEJpcXVhZEZp
bHRlck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTYwMjYxMkIwMjY3NjAwQzFBMzU5
IC8qIEJpcXVhZFByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODk5NDMyOTBCNDIz
Mzg4MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzc3QTNB
OTAxNUVGQ0U5QjAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3IC8qIFBsYXRmb3JtSW1hZ2VDRy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5NzZENkM3ODEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkyRURFRjFGMzEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYkRhdGEuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRTFEMzFDREMxOTE5NjAyMDAwMTAwNUEzIC8qIEJsb2JEYXRhRmls
ZVJlZmVyZW5jZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5Nzc0LDYgKzI5Nzg5LDcgQEAKIAkJ
CQkyRTJEOTlFODEwRTJCQzFDMDA0OTYzMzcgLyogRE9NQmxvYi5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTg1MDg5Q0Q4MEE5OEM0MjgwMEEyNzVBQSAvKiBET01DREFUQVNlY3Rpb24ubW0gaW4gU291
cmNlcyAqLywKIAkJCQk4NUFDQTk4NzBBOUI1MjAzMDA2NzFFOTAgLyogRE9NQ2hhcmFjdGVyRGF0
YS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTU1Q0JBNkExMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFn
ZUZyYW1lRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTA4OUNEQTBBOThDNDI4MDBBMjc1
QUEgLyogRE9NQ29tbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTk3OEQwN0JFMTQ1QTBGNkMw
MDk2OTA4RCAvKiBET01Db3JlRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1OEMz
OEE2MEFBOEYyMDQwMEIxODdBNCAvKiBET01Db3VudGVyLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbSBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCmluZGV4IDQwMTFlYTNmZDhjMDQ2OTc0YzU1ZDQ4ZTM5
NmYxYjgzYjgxZjMzNWQuLmE1YWM0ZjA1YWUzMzlhOGQ2NDcwNmMxMGZjMGY3YWY0MDQyNTYyM2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCkBAIC02MDYsNyArNjA2LDcgQEAgLSAo
dm9pZClnZXRQcmV2aWV3U25hcHNob3RJbWFnZTooQ0dJbWFnZVJlZiopY2dJbWFnZSBhbmRSZWN0
czooTlNBcnJheSAqKilyZWN0cwogCiAgICAgaWYgKHRleHRJbmRpY2F0b3IpIHsKICAgICAgICAg
aWYgKEltYWdlKiBpbWFnZSA9IHRleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpKQotICAgICAg
ICAgICAgKmNnSW1hZ2UgPSAoQ0dJbWFnZVJlZilDRkF1dG9yZWxlYXNlKENHSW1hZ2VSZXRhaW4o
aW1hZ2UtPmdldENHSW1hZ2VSZWYoKSkpOworICAgICAgICAgICAgKmNnSW1hZ2UgPSBpbWFnZS0+
bmF0aXZlSW1hZ2UoKS5hdXRvcmVsZWFzZSgpOwogICAgIH0KIAogICAgIFJldGFpblB0cjxOU011
dGFibGVBcnJheT4gcmVjdEFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0XSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9y
V2luZG93Lm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5t
bQppbmRleCAzNjRhOWE4N2NlNmYwNjYzOTQ4Yjg4NDZlOGUyY2U2ZDE5MGYyNDg5Li5hNzRkYTg1
YWNlY2EzYzY2OThkZDE1NmFiMzFhNmM5NzFhMzU0ZTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cubW0KQEAgLTE2Miw5ICsxNjIsOSBAQCAtIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIHRleHRJbmRpY2F0b3I6KFBh
c3NSZWZQdHI8VGV4dEluZGljYQogICAgIGNvbnRlbnRzSW1hZ2VMb2dpY2FsU2l6ZS5zY2FsZSgx
IC8gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yKCkpOwogICAgIFJldGFp
blB0cjxDR0ltYWdlUmVmPiBjb250ZW50c0ltYWdlOwogICAgIGlmIChpbmRpY2F0b3JXYW50c0Nv
bnRlbnRDcm9zc2ZhZGUoKl90ZXh0SW5kaWNhdG9yKSkKLSAgICAgICAgY29udGVudHNJbWFnZSA9
IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0KCktPmdldENHSW1hZ2VS
ZWYoKTsKKyAgICAgICAgY29udGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1h
Z2VXaXRoSGlnaGxpZ2h0KCktPm5hdGl2ZUltYWdlKCk7CiAgICAgZWxzZQotICAgICAgICBjb250
ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpLT5nZXRDR0ltYWdlUmVm
KCk7CisgICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdl
KCktPm5hdGl2ZUltYWdlKCk7CiAKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGJvdW5j
ZUxheWVycyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwogCkBAIC0y
NjUsNyArMjY1LDcgQEAgc3RhdGljIFJldGFpblB0cjxDQUtleWZyYW1lQW5pbWF0aW9uPiBjcmVh
dGVCb3VuY2VBbmltYXRpb24oQ0ZUaW1lSW50ZXJ2YWwgZHVyYXQKIHN0YXRpYyBSZXRhaW5QdHI8
Q0FCYXNpY0FuaW1hdGlvbj4gY3JlYXRlQ29udGVudENyb3NzZmFkZUFuaW1hdGlvbihDRlRpbWVJ
bnRlcnZhbCBkdXJhdGlvbiwgVGV4dEluZGljYXRvciYgdGV4dEluZGljYXRvcikKIHsKICAgICBS
ZXRhaW5QdHI8Q0FCYXNpY0FuaW1hdGlvbj4gY3Jvc3NmYWRlQW5pbWF0aW9uID0gW0NBQmFzaWNB
bmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6QCJjb250ZW50cyJdOwotICAgIFJldGFpblB0
cjxDR0ltYWdlUmVmPiBjb250ZW50c0ltYWdlID0gdGV4dEluZGljYXRvci5jb250ZW50SW1hZ2Uo
KS0+Z2V0Q0dJbWFnZVJlZigpOworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb250ZW50c0lt
YWdlID0gdGV4dEluZGljYXRvci5jb250ZW50SW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKTsKICAgICBb
Y3Jvc3NmYWRlQW5pbWF0aW9uIHNldFRvVmFsdWU6KGlkKWNvbnRlbnRzSW1hZ2UuZ2V0KCldOwog
ICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0RmlsbE1vZGU6a0NBRmlsbE1vZGVGb3J3YXJkc107
CiAgICAgW2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRSZW1vdmVkT25Db21wbGV0aW9uOk5PXTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAppbmRl
eCA0NjBkMWI4NTZiNzdiN2NmNGVjNjg5NjU4MWI4MzNkM2U3Zjk3MDE0Li5mYzY0OWQxMGFhYjlj
MTNmZmYyOTMwNTVhNzA3Y2I3NDUzNzQ2OTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCkBAIC02OCwxNSArNjgsMTMgQEAgQml0bWFw
SW1hZ2U6OkJpdG1hcEltYWdlKE5hdGl2ZUltYWdlUHRyJiYgaW1hZ2UsIEltYWdlT2JzZXJ2ZXIq
IG9ic2VydmVyKQogICAgICwgbV9oYXZlRnJhbWVDb3VudCh0cnVlKQogICAgICwgbV9hbmltYXRp
b25GaW5pc2hlZFdoZW5DYXRjaGluZ1VwKGZhbHNlKQogeworICAgIG1fZnJhbWVzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoMSk7CisgICAgbV9mcmFtZXMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUo
aW1hZ2UpKTsKKyAgICAKICAgICAvLyBTaW5jZSB3ZSBkb24ndCBoYXZlIGEgZGVjb2Rlciwgd2Ug
Y2FuJ3QgZmlndXJlIG91dCB0aGUgaW1hZ2Ugb3JpZW50YXRpb24uCiAgICAgLy8gU2V0IG1fc2l6
ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiB0byBiZSB0aGUgc2FtZSBhcyBtX3NpemUgc28gaXQncyBu
b3QgMHgwLgotICAgIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiA9IG1fc2l6ZSA9IE5hdGl2
ZUltYWdlOjpzaXplKGltYWdlKTsKKyAgICBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBt
X3NpemUgPSBtX2ZyYW1lc1swXS5zaXplKCk7CiAgICAgbV9kZWNvZGVkU2l6ZSA9IG1fc2l6ZS5h
cmVhKCkgKiA0OwotICAgIAotICAgIG1fZnJhbWVzLmdyb3coMSk7Ci0gICAgbV9mcmFtZXNbMF0u
bV9oYXNBbHBoYSA9IE5hdGl2ZUltYWdlOjpoYXNBbHBoYShpbWFnZSk7Ci0gICAgbV9mcmFtZXNb
MF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOwotICAgIG1fZnJhbWVzWzBdLm1faW1hZ2UgPSBXVEZN
b3ZlKGltYWdlKTsKIH0KIAogQml0bWFwSW1hZ2U6On5CaXRtYXBJbWFnZSgpCkBAIC0xMDUsNyAr
MTAzLDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6aGF2ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBp
bmRleCkKICAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2U7CisgICAgcmV0dXJu
IG1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpOwogfQogCiBib29sIEJpdG1hcEltYWdlOjpoYXNT
aW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0CkBAIC0xMjUsOSArMTIzLDcgQEAgdm9pZCBCaXRt
YXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKGJvb2wgZGVzdHJveUFsbCkKICAgICAgICAgLy8g
VGhlIHVuZGVybHlpbmcgZnJhbWUgaXNuJ3QgYWN0dWFsbHkgY2hhbmdpbmcgKHdlJ3JlIGp1c3Qg
dHJ5aW5nIHRvCiAgICAgICAgIC8vIHNhdmUgdGhlIG1lbW9yeSBmb3IgdGhlIGZyYW1lYnVmZmVy
IGRhdGEpLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNsZWFyCiAgICAgICAgIC8vIHRoZSBtZXRhZGF0
YS4KLSAgICAgICAgdW5zaWduZWQgZnJhbWVCeXRlcyA9IG1fZnJhbWVzW2ldLm1fZnJhbWVCeXRl
czsKLSAgICAgICAgaWYgKG1fZnJhbWVzW2ldLmNsZWFyKGZhbHNlKSkKLSAgICAgICAgICAgIGZy
YW1lQnl0ZXNDbGVhcmVkICs9IGZyYW1lQnl0ZXM7CisgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVk
ICs9IG1fZnJhbWVzW2ldLmNsZWFyKEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRhZGF0YSk7
CiAgICAgfQogCiAgICAgbV9zb3VyY2UuY2xlYXIoZGVzdHJveUFsbCwgY2xlYXJCZWZvcmVGcmFt
ZSwgZGF0YSgpLCBtX2FsbERhdGFSZWNlaXZlZCk7CkBAIC0xNTAsOCArMTQ2LDggQEAgdm9pZCBC
aXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3NhcnkoYm9vbCBkZXN0cm95QWxs
KQogICAgICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBhbGxGcmFtZUJ5dGVzID0gMDsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVzLnNpemUoKTsgKytpKQotICAgICAgICBh
bGxGcmFtZUJ5dGVzICs9IG1fZnJhbWVzW2ldLnVzZWRGcmFtZUJ5dGVzKCk7CisgICAgZm9yIChh
dXRvJiBmcmFtZSA6IG1fZnJhbWVzKQorICAgICAgICBhbGxGcmFtZUJ5dGVzICs9IGZyYW1lLmZy
YW1lQnl0ZXMoKTsKIAogICAgIGlmIChhbGxGcmFtZUJ5dGVzID4gbGFyZ2VBbmltYXRpb25DdXRv
ZmYpIHsKICAgICAgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdlICVwIGRlc3Ryb3lEZWNvZGVk
RGF0YUlmTmVjZXNzYXJ5IGRlc3Ryb3lpbmdEYXRhOiBhbGxGcmFtZUJ5dGVzPSV1IGN1dG9mZj0l
dSIsIHRoaXMsIGFsbEZyYW1lQnl0ZXMsIGxhcmdlQW5pbWF0aW9uQ3V0b2ZmKTsKQEAgLTE3Nyw3
ICsxNzMsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkZXN0cm95TWV0YWRhdGFBbmROb3RpZnkodW5z
aWduZWQgZnJhbWVCeXRlc0NsZWFyZWQsIENsZWFyZWRTbwogICAgICAgICBpbWFnZU9ic2VydmVy
KCktPmRlY29kZWRTaXplQ2hhbmdlZCh0aGlzLCAtc2FmZUNhc3Q8aW50PihmcmFtZUJ5dGVzQ2xl
YXJlZCkpOwogfQogCi12b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwg
U3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lQ2FjaGluZyBmcmFt
ZUNhY2hpbmcpCit2b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vi
c2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyBj
YWNoaW5nKQogewogICAgIHNpemVfdCBudW1GcmFtZXMgPSBmcmFtZUNvdW50KCk7CiAgICAgQVNT
RVJUKG1fZGVjb2RlZFNpemUgPT0gMCB8fCBudW1GcmFtZXMgPiAxKTsKQEAgLTE4NSwyNSArMTgx
LDEyIEBAIHZvaWQgQml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUoc2l6ZV90IGluZGV4LCBTdWJzYW1w
bGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIEltCiAgICAgaWYgKG1fZnJhbWVzLnNpemUoKSA8
IG51bUZyYW1lcykKICAgICAgICAgbV9mcmFtZXMuZ3JvdyhudW1GcmFtZXMpOwogCi0gICAgaWYg
KGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhQW5kRnJhbWUpIHsKLSAgICAgICAgbV9mcmFt
ZXNbaW5kZXhdLm1faW1hZ2UgPSBtX3NvdXJjZS5jcmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRl
eCwgc3Vic2FtcGxpbmdMZXZlbCk7Ci0gICAgICAgIG1fZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBs
aW5nTGV2ZWwgPSBzdWJzYW1wbGluZ0xldmVsOwotICAgIH0KLQotICAgIG1fZnJhbWVzW2luZGV4
XS5tX29yaWVudGF0aW9uID0gbV9zb3VyY2Uub3JpZW50YXRpb25BdEluZGV4KGluZGV4KTsKLSAg
ICBtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOwotICAgIG1fZnJhbWVzW2lu
ZGV4XS5tX2lzQ29tcGxldGUgPSBtX3NvdXJjZS5mcmFtZUlzQ29tcGxldGVBdEluZGV4KGluZGV4
KTsKKyAgICBtX2ZyYW1lc1tpbmRleF0gPSBtX3NvdXJjZS5jcmVhdGVGcmFtZURhdGFBdEluZGV4
KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsLCBjYWNoaW5nKTsKIAotICAgIGlmIChyZXBldGl0aW9u
Q291bnQoZmFsc2UpICE9IGNBbmltYXRpb25Ob25lKQotICAgICAgICBtX2ZyYW1lc1tpbmRleF0u
bV9kdXJhdGlvbiA9IG1fc291cmNlLmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KTsKKyAgICBM
T0coSW1hZ2VzLCAiQml0bWFwSW1hZ2UgJXAgY2FjaGVGcmFtZSAlbHUgKCVzJXUgYnl0ZXMsIGNv
bXBsZXRlICVkKSIsIHRoaXMsIGluZGV4LCBjYWNoaW5nID09IEltYWdlRnJhbWVEYXRhOjpDYWNo
aW5nOjpNZXRhZGF0YSA/ICJtZXRhZGF0YSBvbmx5LCAiIDogIiIsIG1fZnJhbWVzW2luZGV4XS5m
cmFtZUJ5dGVzKCksIG1fZnJhbWVzW2luZGV4XS5pc0NvbXBsZXRlKCkpOwogCi0gICAgbV9mcmFt
ZXNbaW5kZXhdLm1faGFzQWxwaGEgPSBtX3NvdXJjZS5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRl
eCk7Ci0gICAgbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWVCeXRlcyA9IG1fc291cmNlLmZyYW1lQnl0
ZXNBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsKLQotICAgIExPRyhJbWFnZXMsICJC
aXRtYXBJbWFnZSAlcCBjYWNoZUZyYW1lICVsdSAoJXMldSBieXRlcywgY29tcGxldGUgJWQpIiwg
dGhpcywgaW5kZXgsIGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhT25seSA/ICJtZXRhZGF0
YSBvbmx5LCAiIDogIiIsIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXMsIG1fZnJhbWVzW2lu
ZGV4XS5tX2lzQ29tcGxldGUpOwotCi0gICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKSB7
Ci0gICAgICAgIGludCBkZWx0YUJ5dGVzID0gc2FmZUNhc3Q8aW50PihtX2ZyYW1lc1tpbmRleF0u
bV9mcmFtZUJ5dGVzKTsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhdLmhhc0ltYWdlKCkpIHsKKyAg
ICAgICAgaW50IGRlbHRhQnl0ZXMgPSBzYWZlQ2FzdDxpbnQ+KG1fZnJhbWVzW2luZGV4XS5mcmFt
ZUJ5dGVzKCkpOwogICAgICAgICBtX2RlY29kZWRTaXplICs9IGRlbHRhQnl0ZXM7CiAgICAgICAg
IC8vIFRoZSBmdWxseS1kZWNvZGVkIGZyYW1lIHdpbGwgc3Vic3VtZSB0aGUgcGFydGlhbGx5IGRl
Y29kZWQgZGF0YSB1c2VkCiAgICAgICAgIC8vIHRvIGRldGVybWluZSBpbWFnZSBwcm9wZXJ0aWVz
LgpAQCAtMjg4LDIxICsyNzEsMTkgQEAgYm9vbCBCaXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQoYm9v
bCBhbGxEYXRhUmVjZWl2ZWQpCiAgICAgLy8gZnJhbWUgYWZmZWN0ZWQgYnkgYXBwZW5kaW5nIG5l
dyBkYXRhIGhlcmUuIFRodXMgd2UgaGF2ZSB0byBjbGVhciBhbGwgdGhlCiAgICAgLy8gaW5jb21w
bGV0ZSBmcmFtZXMgdG8gYmUgc2FmZS4KICAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQ2xlYXJlZCA9
IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lcy5zaXplKCk7ICsraSkgewor
ICAgIGZvciAoYXV0byYgZnJhbWUgOiBtX2ZyYW1lcykgewogICAgICAgICAvLyBOT1RFOiBEb24n
dCBjYWxsIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoKSBoZXJlLCB0aGF0IHdpbGwgdHJ5IHRvCiAg
ICAgICAgIC8vIGRlY29kZSBhbnkgdW5jYWNoZWQgKGkuZS4gbmV2ZXItZGVjb2RlZCBvcgogICAg
ICAgICAvLyBjbGVhcmVkLW9uLWEtcHJldmlvdXMtcGFzcykgZnJhbWVzIQotICAgICAgICB1bnNp
Z25lZCBmcmFtZUJ5dGVzID0gbV9mcmFtZXNbaV0ubV9mcmFtZUJ5dGVzOwotICAgICAgICBpZiAo
bV9mcmFtZXNbaV0ubV9oYXZlTWV0YWRhdGEgJiYgIW1fZnJhbWVzW2ldLm1faXNDb21wbGV0ZSkK
LSAgICAgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IChtX2ZyYW1lc1tpXS5jbGVhcih0cnVl
KSA/IGZyYW1lQnl0ZXMgOiAwKTsKKyAgICAgICAgaWYgKGZyYW1lLmhhc01ldGFkYXRhKCkgJiYg
IWZyYW1lLmlzQ29tcGxldGUoKSkKKyAgICAgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IGZy
YW1lLmNsZWFyKEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpFbXB0eSk7CiAgICAgfQogICAgIGRl
c3Ryb3lNZXRhZGF0YUFuZE5vdGlmeShmcmFtZUJ5dGVzQ2xlYXJlZCwgQ2xlYXJlZFNvdXJjZTo6
Tm8pOwogI2Vsc2UKICAgICAvLyBGSVhNRTogd2h5IGlzIHRoaXMgZGlmZmVyZW50IGZvciBpT1M/
CiAgICAgaW50IGRlbHRhQnl0ZXMgPSAwOwogICAgIGlmICghbV9mcmFtZXMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGludCBieXRlcyA9IG1fZnJhbWVzW21fZnJhbWVzLnNpemUoKSAtIDFdLm1fZnJh
bWVCeXRlczsKLSAgICAgICAgaWYgKG1fZnJhbWVzW21fZnJhbWVzLnNpemUoKSAtIDFdLmNsZWFy
KHRydWUpKSB7CisgICAgICAgIGlmIChpbnQgYnl0ZXMgPSBtX2ZyYW1lc1ttX2ZyYW1lcy5zaXpl
KCkgLSAxXS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6RW1wdHkpKSB7CiAgICAgICAg
ICAgICBkZWx0YUJ5dGVzICs9IGJ5dGVzOwogICAgICAgICAgICAgZGVsdGFCeXRlcyArPSBtX2Rl
Y29kZWRQcm9wZXJ0aWVzU2l6ZTsKICAgICAgICAgICAgIG1fZGVjb2RlZFByb3BlcnRpZXNTaXpl
ID0gMDsKQEAgLTM2NiwxNSArMzQ3LDE1IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmlzU2l6ZUF2YWls
YWJsZSgpCiAgICAgcmV0dXJuIG1fc2l6ZUF2YWlsYWJsZTsKIH0KIAotYm9vbCBCaXRtYXBJbWFn
ZTo6ZW5zdXJlRnJhbWVJc0NhY2hlZChzaXplX3QgaW5kZXgsIEltYWdlRnJhbWVDYWNoaW5nIGZy
YW1lQ2FjaGluZykKK2Jvb2wgQml0bWFwSW1hZ2U6OmVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90
IGluZGV4LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyBjYWNoaW5nKQogewogICAgIGlmIChpbmRl
eCA+PSBmcmFtZUNvdW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChpbmRl
eCA+PSBtX2ZyYW1lcy5zaXplKCkKLSAgICAgICAgfHwgKGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1l
dGFkYXRhQW5kRnJhbWUgJiYgIW1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKQotICAgICAgICB8fCAo
ZnJhbWVDYWNoaW5nID09IENhY2hlTWV0YWRhdGFPbmx5ICYmICFtX2ZyYW1lc1tpbmRleF0ubV9o
YXZlTWV0YWRhdGEpKQotICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwLCBmcmFtZUNhY2hpbmcp
OworICAgICAgICB8fCAoY2FjaGluZyA9PSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRh
dGFBbmRJbWFnZSAmJiAhbV9mcmFtZXNbaW5kZXhdLmhhc0ltYWdlKCkpCisgICAgICAgIHx8IChj
YWNoaW5nID09IEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRhZGF0YSAmJiAhbV9mcmFtZXNb
aW5kZXhdLmhhc01ldGFkYXRhKCkpKQorICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwLCBjYWNo
aW5nKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMzg4LDEwICszNjksOSBAQCBOYXRpdmVJ
bWFnZVB0ciBCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBmbG9h
dCBwcmVzZW50YXRpb25TYwogCiAgICAgLy8gV2UgbWF5IGhhdmUgY2FjaGVkIGEgZnJhbWUgd2l0
aCBhIGhpZ2hlciBzdWJzYW1wbGluZyBsZXZlbCwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkIHRvCiAg
ICAgLy8gcmUtZGVjb2RlIHdpdGggYSBsb3dlciBsZXZlbC4KLSAgICBpZiAoaW5kZXggPCBtX2Zy
YW1lcy5zaXplKCkgJiYgbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2UgJiYgc3Vic2FtcGxpbmdMZXZl
bCA8IG1fZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBsaW5nTGV2ZWwpIHsKKyAgICBpZiAoaW5kZXgg
PCBtX2ZyYW1lcy5zaXplKCkgJiYgbV9mcmFtZXNbaW5kZXhdLmhhc0ltYWdlKCkgJiYgc3Vic2Ft
cGxpbmdMZXZlbCA8IG1fZnJhbWVzW2luZGV4XS5zdWJzYW1wbGluZ0xldmVsKCkpIHsKICAgICAg
ICAgLy8gSWYgdGhlIGltYWdlIGlzIGFscmVhZHkgY2FjaGVkLCBidXQgYXQgdG9vIHNtYWxsIGEg
c2l6ZSwgcmUtZGVjb2RlIGEgbGFyZ2VyIHZlcnNpb24uCi0gICAgICAgIGludCBzaXplQ2hhbmdl
ID0gLW1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIG1fZnJhbWVzW2luZGV4
XS5jbGVhcih0cnVlKTsKKyAgICAgICAgaW50IHNpemVDaGFuZ2UgPSAtbV9mcmFtZXNbaW5kZXhd
LmNsZWFyKEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpFbXB0eSk7CiAgICAgICAgIGludmFsaWRh
dGVQbGF0Zm9ybURhdGEoKTsKICAgICAgICAgbV9kZWNvZGVkU2l6ZSArPSBzaXplQ2hhbmdlOwog
ICAgICAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQpAQCAtMzk5LDQwICszNzksNzIgQEAgTmF0aXZl
SW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgZmxv
YXQgcHJlc2VudGF0aW9uU2MKICAgICB9CiAKICAgICAvLyBJZiB3ZSBoYXZlbid0IGZldGNoZWQg
YSBmcmFtZSB5ZXQsIGRvIHNvLgotICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkgfHwg
IW1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKQotICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCBzdWJz
YW1wbGluZ0xldmVsLCBDYWNoZU1ldGFkYXRhQW5kRnJhbWUpOworICAgIGlmIChpbmRleCA+PSBt
X2ZyYW1lcy5zaXplKCkgfHwgIW1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpKQorICAgICAgICBj
YWNoZUZyYW1lKGluZGV4LCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGlu
Zzo6TWV0YWRhdGFBbmRJbWFnZSk7CisKKyAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLmltYWdl
KCk7Cit9CisgICAgCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2UoKQor
eworICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKTsKK30KKyAgICAKK05hdGl2ZUltYWdl
UHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQor
eworICAgIHNpemVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKKyAgICAKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1h
Z2VBdEluZGV4KGkpOworICAgICAgICBpZiAoaW1hZ2UgJiYgUGxhdGZvcm1JbWFnZShpbWFnZSku
c2l6ZSgpID09IHNpemUpCisgICAgICAgICAgICByZXR1cm4gaW1hZ2U7CisgICAgfQorICAgIAor
ICAgIC8vIEZhbGxiYWNrIHRvIHRoZSBmaXJzdCBmcmFtZSBpbWFnZSBpZiB3ZSBjYW4ndCBmaW5k
IHRoZSByaWdodCBzaXplCisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KDApOworfQorICAg
IAorTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCkKK3sKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOworfQog
Ci0gICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOworVmVjdG9yPE5hdGl2ZUltYWdl
UHRyPiBCaXRtYXBJbWFnZTo6ZnJhbWVzTmF0aXZlSW1hZ2VzKCkKK3sKKyAgICBWZWN0b3I8TmF0
aXZlSW1hZ2VQdHI+IGltYWdlczsKKyAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7Cisg
ICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGlm
IChhdXRvIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkpCisgICAgICAgICAgICBpbWFnZXMu
YXBwZW5kKGltYWdlKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGltYWdlczsKIH0KIAogYm9v
bCBCaXRtYXBJbWFnZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCiB7Ci0g
ICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBDYWNoZU1ldGFkYXRhT25seSkpCisg
ICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGlu
Zzo6TWV0YWRhdGEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbV9mcmFt
ZXNbaW5kZXhdLm1faXNDb21wbGV0ZTsKKyAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLmlzQ29t
cGxldGUoKTsKIH0KIAogZmxvYXQgQml0bWFwSW1hZ2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNp
emVfdCBpbmRleCkKIHsKLSAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQoaW5kZXgsIENhY2hl
TWV0YWRhdGFPbmx5KSkKKyAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQoaW5kZXgsIEltYWdl
RnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRhZGF0YSkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAg
cmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2R1cmF0aW9uOwotfQotCi1OYXRpdmVJbWFnZVB0ciBC
aXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKQotewotICAgIHJldHVybiBm
cmFtZUltYWdlQXRJbmRleChjdXJyZW50RnJhbWUoKSk7CisgICAgcmV0dXJuIG1fZnJhbWVzW2lu
ZGV4XS5kdXJhdGlvbigpOwogfQogCiBib29sIEJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJ
bmRleChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4
LCBDYWNoZU1ldGFkYXRhT25seSkpCisgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4
LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEpCi0gICAgICAgIHJl
dHVybiBtX2ZyYW1lc1tpbmRleF0ubV9oYXNBbHBoYTsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhd
Lmhhc01ldGFkYXRhKCkpCisgICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0uaGFzQWxwaGEo
KTsKIAogICAgIHJldHVybiBtX3NvdXJjZS5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRleCk7CiB9
CkBAIC00NDQsMTEgKzQ1NiwxMSBAQCBib29sIEJpdG1hcEltYWdlOjpjdXJyZW50RnJhbWVLbm93
blRvQmVPcGFxdWUoKQogCiBJbWFnZU9yaWVudGF0aW9uIEJpdG1hcEltYWdlOjpmcmFtZU9yaWVu
dGF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2Fj
aGVkKGluZGV4LCBDYWNoZU1ldGFkYXRhT25seSkpCisgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2Fj
aGVkKGluZGV4LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEpKQogICAgICAgICBy
ZXR1cm4gSW1hZ2VPcmllbnRhdGlvbigpOwogCi0gICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX2hh
dmVNZXRhZGF0YSkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX29yaWVudGF0aW9u
OworICAgIGlmIChtX2ZyYW1lc1tpbmRleF0uaGFzTWV0YWRhdGEoKSkKKyAgICAgICAgcmV0dXJu
IG1fZnJhbWVzW2luZGV4XS5vcmllbnRhdGlvbigpOwogCiAgICAgcmV0dXJuIG1fc291cmNlLm9y
aWVudGF0aW9uQXRJbmRleChpbmRleCk7CiB9CkBAIC03MDAsMTcgKzcxMiw1NiBAQCBDb2xvciBC
aXRtYXBJbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkKICAgICAgICAgcmV0dXJuIENvbG9y
KCk7CiAgICAgCiAgICAgQVNTRVJUKG1fZnJhbWVzLnNpemUoKSk7Ci0gICAgbV9zb2xpZENvbG9y
ID0gTmF0aXZlSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcihtX2ZyYW1lc1swXS5tX2ltYWdl
LmdldCgpKTsKKyAgICBtX3NvbGlkQ29sb3IgPSBtX2ZyYW1lc1swXS5zaW5nbGVQaXhlbFNvbGlk
Q29sb3IoKTsKICAgICAKICAgICBBU1NFUlQobV9zb2xpZENvbG9yKTsKICAgICByZXR1cm4gbV9z
b2xpZENvbG9yLnZhbHVlKCk7CiB9CiAgICAgCitib29sIEJpdG1hcEltYWdlOjppc0FsbW9zdFNv
bGlkQ29sb3IoKQoreworICAgIGlmIChmcmFtZUNvdW50KCkgIT0gMSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcmV0dXJuIGVuc3VyZUZyYW1lSXNDYWNoZWQoMCkgJiYgbV9mcmFtZXNb
MF0uaXNBbG1vc3RTb2xpZENvbG9yKCk7Cit9CisgICAgCiBib29sIEJpdG1hcEltYWdlOjpjYW5B
bmltYXRlKCkKIHsKICAgICByZXR1cm4gc2hvdWxkQW5pbWF0ZSgpICYmIGZyYW1lQ291bnQoKSA+
IDE7CiB9CiAKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2Ny
aXB0aW9uIGRlc2NyaXB0aW9uKQoreworICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5KCkgfHwgc3Jj
UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworI2lmIFBMQVRGT1JNKElPUykKKyAg
ICBzdGFydEFuaW1hdGlvbihEb05vdENhdGNoVXApOworI2Vsc2UKKyAgICBzdGFydEFuaW1hdGlv
bigpOworI2VuZGlmCisgICAgCisgICAgQ29sb3IgY29sb3IgPSBzaW5nbGVQaXhlbFNvbGlkQ29s
b3IoKTsKKyAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7CisgICAgICAgIGZpbGxXaXRoU29saWRD
b2xvcihjb250ZXh0LCBkZXN0UmVjdCwgY29sb3IsIG9wKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBhdXRvIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJh
bWUsIFBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUoY29udGV4dCwgZGVzdFJlY3QsIHNy
Y1JlY3QpKTsKKyAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBo
YXZlIGFuIGltYWdlIHlldC4KKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEltYWdlT3JpZW50
YXRpb24gb3JpZW50YXRpb24oZGVzY3JpcHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKTsKKyAgICBp
ZiAoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VP
cmllbnRhdGlvbikKKyAgICAgICAgb3JpZW50YXRpb24gPSBmcmFtZU9yaWVudGF0aW9uQXRJbmRl
eChtX2N1cnJlbnRGcmFtZSk7CisgICAgCisgICAgUGxhdGZvcm1JbWFnZShpbWFnZSkuZHJhdyhj
b250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgbV9zaXplLCBvcCwgbW9kZSwgb3JpZW50YXRpb24p
OworICAgIAorICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCisgICAgICAgIGltYWdlT2JzZXJ2ZXIo
KS0+ZGlkRHJhdyh0aGlzKTsKK30KKyAgICAKIHZvaWQgQml0bWFwSW1hZ2U6OmR1bXAoVGV4dFN0
cmVhbSYgdHMpIGNvbnN0CiB7CiAgICAgSW1hZ2U6OmR1bXAodHMpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKaW5kZXggMDc1ODkyOWNkODdmYWRh
Y2YwMmI2ZWQ4ZWVhZmU3ZGVmZDY2ZjBjNS4uMjIxOGM4MjRiNTI4ZmQ2MzliYWIxMzhkZWNjOThi
OTgxNmExNjgxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Qml0bWFwSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRt
YXBJbWFnZS5oCkBAIC0yOCwxMSArMjgsMTMgQEAKICNpZm5kZWYgQml0bWFwSW1hZ2VfaAogI2Rl
ZmluZSBCaXRtYXBJbWFnZV9oCiAKLSNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkNvbG9y
LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lRGF0YS5oIgogI2lu
Y2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgogI2lu
Y2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCiAKICNpZiBVU0Uo
Q0cpIHx8IFVTRShBUFBLSVQpCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtNDcsNjMg
KzQ5LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgSEJJVE1BUF9fICpIQklUTUFQOwogI2VuZGlmCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKLSAgICBzdHJ1Y3QgRnJhbWVEYXRhOwotfQotCi1uYW1lc3BhY2Ug
V1RGIHsKLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBWZWN0b3JUcmFpdHM8V2ViQ29yZTo6RnJhbWVE
YXRhPiA6IHB1YmxpYyBTaW1wbGVDbGFzc1ZlY3RvclRyYWl0cyB7Ci0gICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGNhbkluaXRpYWxpemVXaXRoTWVtc2V0ID0gZmFsc2U7IC8vIE5vdCBhbGwgRnJh
bWVEYXRhIG1lbWJlcnMgaW5pdGlhbGl6ZSB0byAwLgotICAgIH07Ci19Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgVGltZXI7CiAKLW5hbWVzcGFjZSBOYXRpdmVJbWFnZSB7Ci0gICAg
SW50U2l6ZSBzaXplKGNvbnN0IE5hdGl2ZUltYWdlUHRyJik7Ci0gICAgYm9vbCBoYXNBbHBoYShj
b25zdCBOYXRpdmVJbWFnZVB0ciYpOwotICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcihj
b25zdCBOYXRpdmVJbWFnZVB0ciYpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIEZyYW1lRGF0YSBDbGFzcwotLy8gPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXN0cnVjdCBGcmFtZURh
dGEgewotcHVibGljOgotICAgIEZyYW1lRGF0YSgpCi0gICAgICAgIDogbV9oYXZlTWV0YWRhdGEo
ZmFsc2UpCi0gICAgICAgICwgbV9pc0NvbXBsZXRlKGZhbHNlKQotICAgICAgICAsIG1faGFzQWxw
aGEodHJ1ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgfkZyYW1lRGF0YSgpCi0gICAgeyAKLSAgICAg
ICAgY2xlYXIodHJ1ZSk7Ci0gICAgfQotCi0gICAgLy8gQ2xlYXIgdGhlIGNhY2hlZCBpbWFnZSBk
YXRhIG9uIHRoZSBmcmFtZSwgYW5kIChvcHRpb25hbGx5KSB0aGUgbWV0YWRhdGEuCi0gICAgLy8g
UmV0dXJucyB3aGV0aGVyIHRoZXJlIHdhcyBjYWNoZWQgaW1hZ2UgZGF0YSB0byBjbGVhci4KLSAg
ICBib29sIGNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSk7Ci0gICAgCi0gICAgdW5zaWduZWQgdXNl
ZEZyYW1lQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlID8gbV9mcmFtZUJ5dGVzIDogMDsg
fQotCi0gICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsKLSAgICBJbWFnZU9yaWVudGF0aW9uIG1f
b3JpZW50YXRpb24geyBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbiB9OwotICAgIFN1YnNhbXBsaW5n
TGV2ZWwgbV9zdWJzYW1wbGluZ0xldmVsIHsgMCB9OwotICAgIGZsb2F0IG1fZHVyYXRpb24geyAw
IH07Ci0gICAgYm9vbCBtX2hhdmVNZXRhZGF0YSA6IDE7Ci0gICAgYm9vbCBtX2lzQ29tcGxldGUg
OiAxOwotICAgIGJvb2wgbV9oYXNBbHBoYSA6IDE7Ci0gICAgdW5zaWduZWQgbV9mcmFtZUJ5dGVz
IHsgMCB9OwotfTsKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLy8gQml0bWFwSW1hZ2UgQ2xhc3MKLS8vID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQogY2xhc3MgQml0bWFwSW1hZ2UgZmluYWwg
OiBwdWJsaWMgSW1hZ2UgewogICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFnZTsKICAgICBm
cmllbmQgY2xhc3MgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U7CkBAIC0xNTUsMTIgKzEwMyw2IEBA
IHB1YmxpYzoKICAgICBDRkRhdGFSZWYgZ2V0VElGRlJlcHJlc2VudGF0aW9uKCkgb3ZlcnJpZGU7
CiAjZW5kaWYKIAotI2lmIFVTRShDRykKLSAgICBXRUJDT1JFX0VYUE9SVCBDR0ltYWdlUmVmIGdl
dENHSW1hZ2VSZWYoKSBvdmVycmlkZTsKLSAgICBDR0ltYWdlUmVmIGdldEZpcnN0Q0dJbWFnZVJl
Zk9mU2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7Ci0gICAgUmV0YWluUHRyPENGQXJyYXlS
ZWY+IGdldENHSW1hZ2VBcnJheSgpIG92ZXJyaWRlOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShX
SU4pCiAgICAgYm9vbCBnZXRIQklUTUFQKEhCSVRNQVApIG92ZXJyaWRlOwogICAgIGJvb2wgZ2V0
SEJJVE1BUE9mU2l6ZShIQklUTUFQLCBjb25zdCBJbnRTaXplKikgb3ZlcnJpZGU7CkBAIC0xNzQs
OCArMTE2LDEzIEBAIHB1YmxpYzoKICAgICBFdmFzX09iamVjdCogZ2V0RXZhc09iamVjdChFdmFz
Kikgb3ZlcnJpZGU7CiAjZW5kaWYKIAorICAgIFdFQkNPUkVfRVhQT1JUIE5hdGl2ZUltYWdlUHRy
IG5hdGl2ZUltYWdlKCkgb3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VP
ZlNpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwogICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgb3ZlcnJpZGU7CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBv
cmllbnRhdGlvbkZvckN1cnJlbnRGcmFtZSgpIG92ZXJyaWRlIHsgcmV0dXJuIGZyYW1lT3JpZW50
YXRpb25BdEluZGV4KGN1cnJlbnRGcmFtZSgpKTsgfQorICAgIFZlY3RvcjxOYXRpdmVJbWFnZVB0
cj4gZnJhbWVzTmF0aXZlSW1hZ2VzKCkgb3ZlcnJpZGU7CisgICAgCisgICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBpc0FsbW9zdFNvbGlkQ29sb3IoKTsKIAogICAgIGJvb2wgY3VycmVudEZyYW1lS25v
d25Ub0JlT3BhcXVlKCkgb3ZlcnJpZGU7CiAKQEAgLTIxNSw3ICsxNjIsNiBAQCBwcm90ZWN0ZWQ6
CiAgICAgc2l6ZV90IGZyYW1lQ291bnQoKTsKIAogICAgIE5hdGl2ZUltYWdlUHRyIGZyYW1lSW1h
Z2VBdEluZGV4KHNpemVfdCwgZmxvYXQgcHJlc2VudGF0aW9uU2NhbGVIaW50ID0gMSk7Ci0gICAg
TmF0aXZlSW1hZ2VQdHIgY29weVVuc2NhbGVkRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90KTsKIAog
ICAgIGJvb2wgaGF2ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCk7CiAKQEAgLTIyNSwxMSArMTcx
LDEwIEBAIHByb3RlY3RlZDoKICAgICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3JpZW50YXRpb25B
dEluZGV4KHNpemVfdCk7CiAKICAgICAvLyBEZWNvZGVzIGFuZCBjYWNoZXMgYSBmcmFtZS4gTmV2
ZXIgYWNjZXNzZWQgZXhjZXB0IGludGVybmFsbHkuCi0gICAgZW51bSBJbWFnZUZyYW1lQ2FjaGlu
ZyB7IENhY2hlTWV0YWRhdGFPbmx5LCBDYWNoZU1ldGFkYXRhQW5kRnJhbWUgfTsKLSAgICB2b2lk
IGNhY2hlRnJhbWUoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lQ2Fj
aGluZyA9IENhY2hlTWV0YWRhdGFBbmRGcmFtZSk7CisgICAgdm9pZCBjYWNoZUZyYW1lKHNpemVf
dCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgPSBJbWFn
ZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSk7CiAKICAgICAvLyBDYWxsZWQg
YmVmb3JlIGFjY2Vzc2luZyBtX2ZyYW1lc1tpbmRleF0gZm9yIGluZm8gd2l0aG91dCBkZWNvZGlu
Zy4gUmV0dXJucyBmYWxzZSBvbiBpbmRleCBvdXQgb2YgYm91bmRzLgotICAgIGJvb2wgZW5zdXJl
RnJhbWVJc0NhY2hlZChzaXplX3QgaW5kZXgsIEltYWdlRnJhbWVDYWNoaW5nID0gQ2FjaGVNZXRh
ZGF0YUFuZEZyYW1lKTsKKyAgICBib29sIGVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4
LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyA9IEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRh
ZGF0YUFuZEltYWdlKTsKIAogICAgIC8vIENhbGxlZCB0byBpbnZhbGlkYXRlIGNhY2hlZCBkYXRh
LiBXaGVuIHxkZXN0cm95QWxsfCBpcyB0cnVlLCB3ZSB3aXBlIG91dAogICAgIC8vIHRoZSBlbnRp
cmUgZnJhbWUgYnVmZmVyIGNhY2hlIGFuZCB0ZWxsIHRoZSBpbWFnZSBzb3VyY2UgdG8gZGVzdHJv
eQpAQCAtMjkyLDcgKzIzNyw3IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBJbnRTaXplIG1fc2l6
ZVJlc3BlY3RpbmdPcmllbnRhdGlvbjsKIAogICAgIHNpemVfdCBtX2N1cnJlbnRGcmFtZSB7IDAg
fTsgLy8gVGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGZyYW1lIG9mIGFuaW1hdGlvbi4KLSAgICBW
ZWN0b3I8RnJhbWVEYXRhLCAxPiBtX2ZyYW1lczsgLy8gQW4gYXJyYXkgb2YgdGhlIGNhY2hlZCBm
cmFtZXMgb2YgdGhlIGFuaW1hdGlvbi4gV2UgaGF2ZSB0byByZWYgZnJhbWVzIHRvIHBpbiB0aGVt
IGluIHRoZSBjYWNoZS4KKyAgICBWZWN0b3I8SW1hZ2VGcmFtZURhdGEsIDE+IG1fZnJhbWVzOyAv
LyBBbiBhcnJheSBvZiB0aGUgY2FjaGVkIGZyYW1lcyBvZiB0aGUgYW5pbWF0aW9uLiBXZSBoYXZl
IHRvIHJlZiBmcmFtZXMgdG8gcGluIHRoZW0gaW4gdGhlIGNhY2hlLgogCiAgICAgc3RkOjp1bmlx
dWVfcHRyPFRpbWVyPiBtX2ZyYW1lVGltZXI7CiAgICAgaW50IG1fcmVwZXRpdGlvbkNvdW50IHsg
Y0FuaW1hdGlvbk5vbmUgfTsgLy8gSG93IG1hbnkgdG90YWwgYW5pbWF0aW9uIGxvb3BzIHdlIHNo
b3VsZCBkby4gVGhpcyB3aWxsIGJlIGNBbmltYXRpb25Ob25lIGlmIHRoaXMgaW1hZ2UgdHlwZSBp
cyBpbmNhcGFibGUgb2YgYW5pbWF0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwUGl4ZWxzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBQaXhlbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZmFlM2QyZTQwY2NmMWQ4MWY2YmE1
N2RiNjgyZDkyZDQ2OWJiYWMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwUGl4ZWxzLmgKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXpl
LmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCaXRtYXBQaXhlbHMgeworcHVibGlj
OgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Qml0bWFwUGl4ZWxzPiBjcmVhdGUoY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bWFrZV91bmlxdWU8Qml0bWFwUGl4ZWxzPihzaXplLCBwcmVtdWx0aXBseUFscGhh
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gY3Jl
YXRlKGNvbnN0IEJpdG1hcFBpeGVscyYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX3VuaXF1ZTxCaXRtYXBQaXhlbHM+KG90aGVyKTsKKyAgICB9CisKKyAgICBCaXRtYXBQ
aXhlbHMoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhID0gdHJ1ZSkK
KyAgICAgICAgOiBtX3ByZW11bHRpcGx5QWxwaGEocHJlbXVsdGlwbHlBbHBoYSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCghc2l6ZS5pc0VtcHR5KCkpOworICAgICAgICBzZXRTaXplKHNpemUpOwor
ICAgIH0KKworICAgIEJpdG1hcFBpeGVscyhjb25zdCBCaXRtYXBQaXhlbHMmIG90aGVyKQorICAg
IHsKKyAgICAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBvdGhlci5tX2JhY2tpbmdTdG9yZTsKKyAg
ICAgICAgbV9waXhlbHMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7CisgICAgICAgIG1fc2l6ZSA9
IG90aGVyLm1fc2l6ZTsKKyAgICAgICAgbV9yZWN0ID0gb3RoZXIubV9yZWN0OworICAgICAgICBt
X3ByZW11bHRpcGx5QWxwaGEgPSBvdGhlci5tX3ByZW11bHRpcGx5QWxwaGE7CisgICAgfQorCisg
ICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2UoKSBjb25zdDsKKworICAgIGJvb2wgc2V0U2l6ZShjb25z
dCBJbnRTaXplJiBzaXplKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS50cnlS
ZXNlcnZlQ2FwYWNpdHkoc2l6ZS5hcmVhKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgbV9iYWNraW5nU3RvcmUucmVzaXplKHNpemUuYXJlYSgpKTsKKyAg
ICAgICAgbV9waXhlbHMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7CisgICAgICAgIG1fc2l6ZSA9
IHNpemU7CisgICAgICAgIG1fcmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXplKTsKKyAg
ICAgICAgY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZv
aWQgc2V0UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFt
X3NpemUuaXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKGluQm91bmRzKHJlY3QpKTsKKyAgICAg
ICAgbV9yZWN0ID0gcmVjdDsKKyAgICB9CisgICAgCisgICAgSW50U2l6ZSBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplOyB9CisgICAgSW50UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9y
ZWN0OyB9CisKKyAgICBSR0JBMzIqIGF0KGludCB4LCBpbnQgeSkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3BpeGVscyArIHkgKiBtX3NpemUud2lkdGgoKSArIHg7CisgICAgfQorCisg
ICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtZW1zZXQobV9waXhlbHMsIDAsIG1fc2l6
ZS5hcmVhKCkgKiBzaXplb2YoUkdCQTMyKSk7CisgICAgfQorCisgICAgdm9pZCBjbGVhclJlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSB8
fCBpbkJvdW5kcyhyZWN0KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAg
IHNpemVfdCByZWN0V2lkdGhJbkJ5dGVzID0gcmVjdC53aWR0aCgpICogc2l6ZW9mKFJHQkEzMik7
CisgICAgICAgIFJHQkEzMiogc3RhcnQgPSBhdChyZWN0LngoKSwgcmVjdC55KCkpOworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QuaGVpZ2h0KCk7ICsraSkgeworICAgICAgICAgICAg
bWVtc2V0KHN0YXJ0LCAwLCByZWN0V2lkdGhJbkJ5dGVzKTsKKyAgICAgICAgICAgIHN0YXJ0ICs9
IG1fc2l6ZS53aWR0aCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCByZXBlYXRGaXJz
dFJvdyhjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHJlY3QuaXNFbXB0
eSgpIHx8IGluQm91bmRzKHJlY3QpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICAgICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkgKiBzaXplb2YoUkdC
QTMyKTsKKyAgICAgICAgUkdCQTMyKiBzcmMgPSBhdChyZWN0LngoKSwgcmVjdC55KCkpOworICAg
ICAgICBSR0JBMzIqIGRlc3QgPSBzcmMgKyBtX3NpemUud2lkdGgoKTsKKyAgICAgICAgZm9yIChp
bnQgaSA9IDE7IGkgPCByZWN0LmhlaWdodCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1lbWNweShk
ZXN0LCBzcmMsIHJlY3RXaWR0aEluQnl0ZXMpOworICAgICAgICAgICAgZGVzdCArPSBtX3NpemUu
d2lkdGgoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgc2V0UkdCQShpbnQgeCwgaW50
IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAg
eworICAgICAgICBzZXRSR0JBKGF0KHgsIHkpLCByLCBnLCBiLCBhKTsKKyAgICB9CisKKyAgICB2
b2lkIHNldFJHQkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25l
ZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEg
fHwgYSA+PSAyNTUpCisgICAgICAgICAgICAqZGVzdCA9IG1ha2VSR0JBKHIsIGcsIGIsIGEpOwor
ICAgICAgICBlbHNlIGlmICghYSkKKyAgICAgICAgICAgICpkZXN0ID0gMDsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgKmRlc3QgPSBtYWtlUHJlbXVsdGlwbGllZFJHQkEociwgZywgYiwgYSk7
CisgICAgfQorCisgICAgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIsIHVu
c2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAgeworICAgICAgICBpZiAoIWEp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoYSA+PSAyNTUgfHwg
IWFscGhhQ2hhbm5lbCgqZGVzdCkpIHsKKyAgICAgICAgICAgIHNldFJHQkEoZGVzdCwgciwgZywg
YiwgYSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmICghbV9wcmVtdWx0aXBseUFscGhhKQorICAgICAgICAgICAgKmRlc3QgPSBtYWtlUHJlbXVs
dGlwbGllZFJHQkEocmVkQ2hhbm5lbCgqZGVzdCksIGdyZWVuQ2hhbm5lbCgqZGVzdCksIGJsdWVD
aGFubmVsKCpkZXN0KSwgYWxwaGFDaGFubmVsKCpkZXN0KSk7CisgICAgICAgIAorICAgICAgICBS
R0JBMzIgc3JjID0gbWFrZVJHQkEociwgZywgYiwgYSk7CisgICAgICAgICpkZXN0ID0gQ29sb3Io
KmRlc3QpLmJsZW5kKHNyYykucmdiKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIW1fcHJlbXVs
dGlwbHlBbHBoYSkKKyAgICAgICAgICAgICpkZXN0ID0gbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEo
cmVkQ2hhbm5lbCgqZGVzdCksIGdyZWVuQ2hhbm5lbCgqZGVzdCksIGJsdWVDaGFubmVsKCpkZXN0
KSwgYWxwaGFDaGFubmVsKCpkZXN0KSk7CisgICAgfQorCisgICAgYm9vbCBpbkJvdW5kcyhjb25z
dCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSW50UmVjdChJ
bnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHBvaW50KTsKKyAgICB9CisKKyAgICBib29sIGlu
Qm91bmRzKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
SW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHJlY3QpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBWZWN0b3I8UkdCQTMyPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBSR0JBMzIqIG1f
cGl4ZWxzIHsgbnVsbHB0ciB9OworICAgIEludFNpemUgbV9zaXplOworICAgIEludFJlY3QgbV9y
ZWN0OyAvLyBUaGlzIHdpbGwgYWx3YXlzIGp1c3QgYmUgdGhlIGVudGlyZSBidWZmZXIgZXhjZXB0
IGZvciBHSUYgYW5kIFBORyBmcmFtZXMKKyAgICBib29sIG1fcHJlbXVsdGlwbHlBbHBoYSB7IHRy
dWUgfTsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cAppbmRleCA0ZTI1YWE2ZmQ3NGQxZTQ2YzU0MTYxNDk4YmMxNzJiZjYwMDg3NWQxLi40MzlmNWE2
M2M3YmViZTU2MDQyYjI0ZTdkNzJlY2NlY2YzNmM0MGM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCkBAIC00OSw2ICs0OSw0MCBAQCBjb25zdCBSR0JBMzIg
Q29sb3I6OnRyYW5zcGFyZW50Owogc3RhdGljIGNvbnN0IFJHQkEzMiBsaWdodGVuZWRCbGFjayA9
IDB4RkY1NDU0NTQ7CiBzdGF0aWMgY29uc3QgUkdCQTMyIGRhcmtlbmVkV2hpdGUgPSAweEZGQUJB
QkFCOwogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG11bHRpcGx5MjU1KHVuc2lnbmVkIGMpCit7
CisgICAgLy8gYyAqIDI1NQorICAgIC8vICAgPSBjICogKDI1NiAtIDEpCisgICAgLy8gICA9IGMg
KiAyNTYgLSBjCisgICAgcmV0dXJuIChjIDw8IDgpIC0gYzsKK30KKworc3RhdGljIGlubGluZSB1
bnNpZ25lZCBkaXZpZGUyNTUodW5zaWduZWQgYykKK3sKKyAgICAvLyBjIC8gMjU1CisgICAgLy8g
ICA9IGMgLyAyNTYgKiAoMSArIDEgLyAyNTUpCisgICAgLy8gICA9IChjICsgYyAvIDI1NSkgLyAy
NTYKKyAgICAvLyAgID0gKGMgKyAoYyArIGMgLyAyNTUpIC8gMjU2KSAvIDI1NgorICAgIC8vICAg
PSAoYyArIGMgLyAyNTYgKyBjIC8gKDI1NSB4IDI1NikpIC8gMjU2CisgICAgLy8gIH49IChjICsg
YyAvIDI1NiArIDEpIC8gMjU2CisgICAgcmV0dXJuIChjICsgKGMgPj4gOCkgKyAxKSA+PiA4Owor
fQorICAgIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBkaXZpZGVDZWlsKHVuc2lnbmVkIGMsIHVu
c2lnbmVkIGQpCit7CisgICAgcmV0dXJuIChjICsgZCAtIDEpIC8gZDsKK30KKyAgICAKK3N0YXRp
YyBpbmxpbmUgdW5zaWduZWQgcHJlbXVsdGlwbGllZENoYW5uZWwodW5zaWduZWQgYywgdW5zaWdu
ZWQgYSkKK3sKKyAgICByZXR1cm4gZGl2aWRlMjU1KGMgKiBhKTsKK30KKworc3RhdGljIGlubGlu
ZSB1bnNpZ25lZCB1bnByZW11bHRpcGxpZWRDaGFubmVsKHVuc2lnbmVkIGMsIHVuc2lnbmVkIGEp
Cit7CisgICAgcmV0dXJuIGRpdmlkZUNlaWwobXVsdGlwbHkyNTUoYyksIGEpOworfQorICAgIAog
UkdCQTMyIG1ha2VSR0IoaW50IHIsIGludCBnLCBpbnQgYikKIHsKICAgICByZXR1cm4gMHhGRjAw
MDAwMCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKHIsIDI1NSkpIDw8IDE2IHwgc3RkOjptYXgoMCwg
c3RkOjptaW4oZywgMjU1KSkgPDwgOCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGIsIDI1NSkpOwpA
QCAtNTksNiArOTMsMTYgQEAgUkdCQTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGlu
dCBhKQogICAgIHJldHVybiBzdGQ6Om1heCgwLCBzdGQ6Om1pbihhLCAyNTUpKSA8PCAyNCB8IHN0
ZDo6bWF4KDAsIHN0ZDo6bWluKHIsIDI1NSkpIDw8IDE2IHwgc3RkOjptYXgoMCwgc3RkOjptaW4o
ZywgMjU1KSkgPDwgOCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGIsIDI1NSkpOwogfQogCitSR0JB
MzIgbWFrZVByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQorewor
ICAgIHJldHVybiBtYWtlUkdCQShwcmVtdWx0aXBsaWVkQ2hhbm5lbChyLCBhKSwgcHJlbXVsdGlw
bGllZENoYW5uZWwoZywgYSksIHByZW11bHRpcGxpZWRDaGFubmVsKGIsIGEpLCBhKTsKK30KKyAg
ICAKK1JHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBp
bnQgYSkKK3sKKyAgICByZXR1cm4gbWFrZVJHQkEodW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChyLCBh
KSwgdW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBhKSwgdW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChi
LCBhKSwgYSk7Cit9CisgICAgCiBzdGF0aWMgaW50IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGZsb2F0
IGYpCiB7CiAgICAgLy8gV2UgdXNlIGxyb3VuZGYgYW5kIDI1NSBpbnN0ZWFkIG9mIG5leHRhZnRl
cmYoMjU2LCAwKSB0byBtYXRjaCBDRydzIHJvdW5kaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuaAppbmRleCBkZDI2MjcwYmI0NjYwYjMzYWUwNzBlOGM5NDQ1MjBkNzI4
NDU0YjhhLi5hNTQ1MzJjNzc1NWE3Yzg3NjkzNjI0MGNhZTRlYzM3YTRkYTBkMDQzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKQEAgLTU0LDYgKzU0LDggQEAgdHlw
ZWRlZiB1bnNpZ25lZCBSR0JBMzI7IC8vIERlcHJlY2F0ZWQ6IFR5cGUgZm9yIGFuIFJHQkEgcXVh
ZHJ1cGxldC4gVXNlIFJHQkEgY2wKIAogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VSR0IoaW50
IHIsIGludCBnLCBpbnQgYik7CiBXRUJDT1JFX0VYUE9SVCBSR0JBMzIgbWFrZVJHQkEoaW50IHIs
IGludCBnLCBpbnQgYiwgaW50IGEpOworV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VQcmVtdWx0
aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7CitXRUJDT1JFX0VYUE9SVCBS
R0JBMzIgbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEp
OwogCiBXRUJDT1JFX0VYUE9SVCBSR0JBMzIgY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShSR0JBMzIg
Y29sb3IsIGZsb2F0IG92ZXJyaWRlQWxwaGEpOwogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIGNvbG9y
V2l0aE92ZXJyaWRlQWxwaGEoUkdCQTMyIGNvbG9yLCBPcHRpb25hbDxmbG9hdD4gb3ZlcnJpZGVB
bHBoYSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAppbmRleCA3YTI5
OTkyZjc3MTg4ZTAzODI4ZDgwYTY1YjhiZTJjZDhkYzJkZTc2Li44ZTdiNTJiMWY0ZjMxYzc0YTNj
YjJhMTMyMTVkYTc3YTJiMThjMDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlLmgKQEAgLTEzNyw4ICsxMzcsMTEgQEAgcHVibGljOgogCiAgICAgZW51bSBUaWxlUnVs
ZSB7IFN0cmV0Y2hUaWxlLCBSb3VuZFRpbGUsIFNwYWNlVGlsZSwgUmVwZWF0VGlsZSB9OwogCisg
ICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSgpIHsgcmV0dXJuIG51bGxwdHI7
IH0KKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlT2ZTaXplKGNvbnN0IElu
dFNpemUmKSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBu
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICB2aXJ0
dWFsIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb25Gb3JDdXJyZW50RnJhbWUoKSB7IHJldHVy
biBJbWFnZU9yaWVudGF0aW9uKCk7IH0KKyAgICB2aXJ0dWFsIFZlY3RvcjxOYXRpdmVJbWFnZVB0
cj4gZnJhbWVzTmF0aXZlSW1hZ2VzKCkgeyByZXR1cm4geyB9OyB9CiAKICAgICAvLyBBY2Nlc3Nv
cnMgZm9yIG5hdGl2ZSBpbWFnZSBmb3JtYXRzLgogCkBAIC0xNTAsMTIgKzE1Myw2IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIENGRGF0YVJlZiBnZXRUSUZGUmVwcmVzZW50YXRpb24oKSB7IHJldHVy
biBudWxscHRyOyB9CiAjZW5kaWYKIAotI2lmIFVTRShDRykKLSAgICB2aXJ0dWFsIENHSW1hZ2VS
ZWYgZ2V0Q0dJbWFnZVJlZigpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIENHSW1h
Z2VSZWYgZ2V0Rmlyc3RDR0ltYWdlUmVmT2ZTaXplKGNvbnN0IEludFNpemUmKSB7IHJldHVybiBu
dWxscHRyOyB9Ci0gICAgdmlydHVhbCBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gZ2V0Q0dJbWFnZUFy
cmF5KCkgeyByZXR1cm4gbnVsbHB0cjsgfQotI2VuZGlmCi0KICNpZiBQTEFURk9STShXSU4pCiAg
ICAgdmlydHVhbCBib29sIGdldEhCSVRNQVAoSEJJVE1BUCkgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0SEJJVE1BUE9mU2l6ZShIQklUTUFQLCBjb25zdCBJbnRTaXplKikg
eyByZXR1cm4gZmFsc2U7IH0KQEAgLTE3OSw2ICsxNzYsOCBAQCBwdWJsaWM6CiAjaWYgIUFTU0VS
VF9ESVNBQkxFRAogICAgIHZpcnR1YWwgYm9vbCBub3RTb2xpZENvbG9yKCkgeyByZXR1cm4gdHJ1
ZTsgfQogI2VuZGlmCisgICAgCisgICAgdmlydHVhbCB2b2lkIGxheW91dElmTmVlZGVkKCkgeyB9
CiAKICAgICB2aXJ0dWFsIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3Q7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iZmQyMGNmOGU2MWY0YjFhMWZlMDhlYjMzMmI3MTY1N2YwMTQ4YzE1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURh
dGEuY3BwCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1l
RGF0YS5oIgorCisjaW5jbHVkZSAiQ29sb3IuaCIKKworI2lmIFVTRShDRykKKyNpbmNsdWRlICJJ
bWFnZURlY29kZXJDRy5oIgorI2Vsc2UKKyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKKyNlbmRp
ZgorCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0ltYWdlRnJhbWVEYXRhOjpJbWFnZUZyYW1lRGF0YSgpCit7Cit9CisKK0ltYWdlRnJhbWVEYXRh
OjpJbWFnZUZyYW1lRGF0YShOYXRpdmVJbWFnZVB0ciYmIGltYWdlKQorICAgIDogbV9zdGF0dXMo
RGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlKQorICAgICwgbV9pbWFnZShXVEZNb3ZlKGltYWdlKSkK
K3sKKyAgICBtX3NpemUgPSBQbGF0Zm9ybUltYWdlKG1faW1hZ2UpLnNpemUoKTsKKyAgICBtX2hh
c0FscGhhID0gUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5oYXNBbHBoYSgpOworfQorCitJbWFnZUZy
YW1lRGF0YTo6SW1hZ2VGcmFtZURhdGEoSW1hZ2VEZWNvZGVyJiBkZWNvZGVyLCBzaXplX3QgaW5k
ZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgQ2FjaGluZyBmcmFtZUNhY2hp
bmcpCit7CisgICAgQVNTRVJUKGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YSB8fCBm
cmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSk7CisgICAgCisgICAgaWYg
KGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpJbWFnZSB8fCBmcmFtZUNhY2hpbmcgPT0gQ2FjaGlu
Zzo6TWV0YWRhdGFBbmRJbWFnZSkgeworICAgICAgICBtX2ltYWdlID0gZGVjb2Rlci5jcmVhdGVG
cmFtZUltYWdlQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7CisgICAgICAgIG1fc3Vi
c2FtcGxpbmdMZXZlbCA9IHN1YnNhbXBsaW5nTGV2ZWw7CisgICAgfQorICAgIAorICAgIGlmIChm
cmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGEgfHwgZnJhbWVDYWNoaW5nID09IENhY2hp
bmc6Ok1ldGFkYXRhQW5kSW1hZ2UpIHsKKyAgICAgICAgbV9vcmllbnRhdGlvbiA9IGRlY29kZXIu
b3JpZW50YXRpb25BdEluZGV4KGluZGV4KTsKKyAgICAgICAgbV9zdGF0dXMgPSBkZWNvZGVyLmZy
YW1lSXNDb21wbGV0ZUF0SW5kZXgoaW5kZXgpID8gRGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlIDog
RGVjb2RpbmdTdGF0dXM6OlBhcnRpYWw7CisgICAgICAgIAorICAgICAgICBpZiAoZGVjb2Rlci5y
ZXBldGl0aW9uQ291bnQoKSAhPSBjQW5pbWF0aW9uTm9uZSkKKyAgICAgICAgICAgIG1fZHVyYXRp
b24gPSBkZWNvZGVyLmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KTsKKyAgICAgICAgCisgICAg
ICAgIG1faGFzQWxwaGEgPSBkZWNvZGVyLmZyYW1lSGFzQWxwaGFBdEluZGV4KGluZGV4KTsKKyAg
ICAgICAgbV9zaXplID0gZGVjb2Rlci5mcmFtZVNpemVBdEluZGV4KGluZGV4LCBzdWJzYW1wbGlu
Z0xldmVsKTsKKyAgICB9Cit9CisKK0ltYWdlRnJhbWVEYXRhOjp+SW1hZ2VGcmFtZURhdGEoKQor
eworICAgIGNsZWFyU3ViSW1hZ2VzKCk7Cit9CisgICAgCitJbWFnZUZyYW1lRGF0YSYgSW1hZ2VG
cmFtZURhdGE6Om9wZXJhdG9yPShjb25zdCBJbWFnZUZyYW1lRGF0YSYgb3RoZXIpCit7CisgICAg
aWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBtX3N0YXR1
cyA9IG90aGVyLm1fc3RhdHVzOworICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKKyAgICBtX2lt
YWdlID0gb3RoZXIubV9pbWFnZTsKKyAgICAKKyAgICBtX3BpeGVscyA9IG90aGVyLnBpeGVscygp
ID8gQml0bWFwUGl4ZWxzOjpjcmVhdGUoKm90aGVyLnBpeGVscygpKSA6IG51bGxwdHI7CisgICAg
CisgICAgbV9vcmllbnRhdGlvbiA9IG90aGVyLm1fb3JpZW50YXRpb247CisgICAgbV9zdWJzYW1w
bGluZ0xldmVsID0gb3RoZXIubV9zdWJzYW1wbGluZ0xldmVsOworICAgIG1fZHVyYXRpb24gPSBv
dGhlci5tX2R1cmF0aW9uOworICAgIG1faGFzQWxwaGEgPSBvdGhlci5tX2hhc0FscGhhOworICAg
IHJldHVybiAqdGhpczsKK30KKwordm9pZCBJbWFnZUZyYW1lRGF0YTo6Y2xlYXJTdWJJbWFnZXMo
KQoreworICAgIGlmICghbV9pbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFBsYXRm
b3JtSW1hZ2UobV9pbWFnZSkuY2xlYXJTdWJJbWFnZXMoKTsKK30KKwordW5zaWduZWQgSW1hZ2VG
cmFtZURhdGE6OmNsZWFyKENhY2hpbmcgZnJhbWVDYWNoaW5nKQoreworICAgIEFTU0VSVChmcmFt
ZUNhY2hpbmcgPT0gQ2FjaGluZzo6RW1wdHkgfHwgZnJhbWVDYWNoaW5nID09IENhY2hpbmc6Ok1l
dGFkYXRhKTsKKyAgICAKKyAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzID0gdGhpcy0+ZnJhbWVCeXRl
cygpOworICAgIAorICAgIGNsZWFyU3ViSW1hZ2VzKCk7CisgICAgCisgICAgaWYgKGZyYW1lQ2Fj
aGluZyA9PSBDYWNoaW5nOjpFbXB0eSkKKyAgICAgICAgKnRoaXMgPSBJbWFnZUZyYW1lRGF0YSgp
OworICAgIGVsc2UKKyAgICAgICAgbV9pbWFnZSA9IG51bGxwdHI7CisgICAgCisgICAgcmV0dXJu
IGZyYW1lQnl0ZXM7Cit9CisKK0NvbG9yIEltYWdlRnJhbWVEYXRhOjpzaW5nbGVQaXhlbFNvbGlk
Q29sb3IoKSBjb25zdAoreworICAgIGlmICghaGFzSW1hZ2UoKSB8fCBtX3NpemUgIT0gSW50U2l6
ZSgxLCAxKSkKKyAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgCisgICAgcmV0dXJuIFBsYXRm
b3JtSW1hZ2UobV9pbWFnZSkuc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCk7Cit9CisKK2Jvb2wgSW1h
Z2VGcmFtZURhdGE6OmlzQWxtb3N0U29saWRDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKCFoYXNJ
bWFnZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIFBsYXRmb3Jt
SW1hZ2UobV9pbWFnZSkuaXNBbG1vc3RTb2xpZENvbG9yKCk7Cit9CisgICAgCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mNmZiNzU4ZWYzYTQyNThjYmRiM2FlMmY0NmU4NDQwZjczMGVmNDdjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEu
aApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkJpdG1hcFBpeGVscy5oIgorI2lu
Y2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVk
ZSAiTmF0aXZlSW1hZ2VQdHIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb2xv
cjsKK2NsYXNzIEltYWdlRGVjb2RlcjsKKworLy8gU3Vic2FtcGxpbmdMZXZlbC4gMCBpcyBubyBz
dWJzYW1wbGluZywgMSBpcyBoYWxmIGRpbWVuc2lvbnMgb24gZWFjaCBheGlzIGV0Yy4KK3VzaW5n
IFN1YnNhbXBsaW5nTGV2ZWwgPSB1aW50OF90OworCitlbnVtIDogU3Vic2FtcGxpbmdMZXZlbCB7
CisgICAgTWluU3Vic2FtcGxpbmdMZXZlbCA9IDAsCisgICAgTWF4U3Vic2FtcGxpbmdMZXZlbCA9
IDMsCisgICAgRGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwgPSBNaW5TdWJzYW1wbGluZ0xldmVsCit9
OworCitjbGFzcyBJbWFnZUZyYW1lRGF0YSB7CisgICAgZnJpZW5kIGNsYXNzIEltYWdlRGVjb2Rl
cjsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIENhY2hpbmcgeyBFbXB0eSwgTWV0YWRhdGEsIElt
YWdlLCBNZXRhZGF0YUFuZEltYWdlIH07CisgICAgZW51bSBjbGFzcyBEZWNvZGluZ1N0YXR1cyB7
IEVtcHR5LCBQYXJ0aWFsLCBDb21wbGV0ZSB9OworICAgIAorICAgIEltYWdlRnJhbWVEYXRhKCk7
CisgICAgSW1hZ2VGcmFtZURhdGEoTmF0aXZlSW1hZ2VQdHImJik7CisgICAgSW1hZ2VGcmFtZURh
dGEoSW1hZ2VEZWNvZGVyJiwgc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsID0gRGVmYXVs
dFN1YnNhbXBsaW5nTGV2ZWwsIENhY2hpbmcgPSBDYWNoaW5nOjpNZXRhZGF0YUFuZEltYWdlKTsK
KyAgICBJbWFnZUZyYW1lRGF0YShjb25zdCBJbWFnZUZyYW1lRGF0YSYgb3RoZXIpIHsgb3BlcmF0
b3I9KG90aGVyKTsgfQorCisgICAgfkltYWdlRnJhbWVEYXRhKCk7CisKKyAgICBJbWFnZUZyYW1l
RGF0YSYgb3BlcmF0b3I9KGNvbnN0IEltYWdlRnJhbWVEYXRhJiBvdGhlcik7CisgICAgCisgICAg
dW5zaWduZWQgY2xlYXIoQ2FjaGluZyk7CisgICAgQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9y
KCkgY29uc3Q7CisgICAgYm9vbCBpc0FsbW9zdFNvbGlkQ29sb3IoKSBjb25zdDsKKyAgICAKKyAg
ICBEZWNvZGluZ1N0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQorICAg
IGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzID09IERlY29kaW5nU3Rh
dHVzOjpDb21wbGV0ZTsgfQorICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGhhc1Bp
eGVscygpID8gcGl4ZWxzKCktPnNpemUoKSA6IG1fc2l6ZTsgfQorICAgIHVuc2lnbmVkIGZyYW1l
Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBoYXNJbWFnZSgpID8gbV9zaXplLmFyZWEoKSAqIHNpemVv
ZihSR0JBMzIpIDogMDsgfQorICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlKCkgY29uc3QgeyByZXR1
cm4gbV9pbWFnZTsgfQorICAgIEJpdG1hcFBpeGVscyogcGl4ZWxzKCkgY29uc3QgeyByZXR1cm4g
bV9waXhlbHMgPyBtX3BpeGVscy5nZXQoKSA6IG51bGxwdHI7IH0KKyAgICAKKyAgICBJbWFnZU9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9vcmllbnRhdGlvbjsgfQor
ICAgIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3Vic2FtcGxpbmdMZXZlbDsgfQorICAgIGZsb2F0IGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9kdXJhdGlvbjsgfQorICAgIAorICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiBt
X2hhc0FscGhhOyB9CisgICAgYm9vbCBoYXNJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7
IH0KKyAgICBib29sIGhhc01ldGFkYXRhKCkgY29uc3QgeyByZXR1cm4gIW1fc2l6ZS5pc0VtcHR5
KCk7IH0KKyAgICBib29sIGhhc1BpeGVscygpIGNvbnN0IHsgcmV0dXJuIHBpeGVscygpOyB9Cisg
ICAgCitwcml2YXRlOgorICAgIHZvaWQgY2xlYXJTdWJJbWFnZXMoKTsKKworICAgIHZvaWQgc2V0
U3RhdHVzKERlY29kaW5nU3RhdHVzIHN0YXR1cykgeyBtX3N0YXR1cyA9IHN0YXR1czsgfQorICAg
IHZvaWQgc2V0T3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgeyBtX29y
aWVudGF0aW9uID0gb3JpZW50YXRpb247IH07CisgICAgdm9pZCBzZXREdXJhdGlvbih1bnNpZ25l
ZCBkdXJhdGlvbikgeyBtX2R1cmF0aW9uID0gZHVyYXRpb247IH0KKyAgICB2b2lkIHNldEhhc0Fs
cGhhKGJvb2wgaGFzQWxwaGEpIHsgbV9oYXNBbHBoYSA9IGhhc0FscGhhOyB9CisgICAgCisgICAg
RGVjb2RpbmdTdGF0dXMgbV9zdGF0dXMgeyBEZWNvZGluZ1N0YXR1czo6RW1wdHkgfTsKKyAgICBJ
bnRTaXplIG1fc2l6ZTsKKyAgICBOYXRpdmVJbWFnZVB0ciBtX2ltYWdlOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxCaXRtYXBQaXhlbHM+IG1fcGl4ZWxzOworICAgIAorICAgIEltYWdlT3JpZW50YXRp
b24gbV9vcmllbnRhdGlvbiB7IERlZmF1bHRJbWFnZU9yaWVudGF0aW9uIH07CisgICAgU3Vic2Ft
cGxpbmdMZXZlbCBtX3N1YnNhbXBsaW5nTGV2ZWwgeyAwIH07CisgICAgZmxvYXQgbV9kdXJhdGlv
biB7IDAgfTsKKyAgICBib29sIG1faGFzQWxwaGEgeyB0cnVlIH07Cit9OworICAgIAorfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCmluZGV4
IGRkZDhhNTViYTA5MDZjNTg2NmExOTJjZjhlNDE0ZWE3MDdiNzI4YWMuLjgyZjZlMmQ2ZTQ1NDMz
ZGExYTdkNTZiMzcwZGZhNjFhNGM0MTkxMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKQEAgLTIyNCw2ICsyMjQsMTEgQEAgTmF0aXZl
SW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRl
eCwgU3Vic2FtcGxpbmdMZXYKICAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSA/IG1fZGVjb2Rlci0+
Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpIDogbnVsbHB0
cjsKIH0KIAorSW1hZ2VGcmFtZURhdGEgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lRGF0YUF0SW5k
ZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIEltYWdl
RnJhbWVEYXRhOjpDYWNoaW5nIGNhY2hpbmcpCit7CisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkg
PyBJbWFnZUZyYW1lRGF0YSgqbV9kZWNvZGVyLCBpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgY2Fj
aGluZykgOiBJbWFnZUZyYW1lRGF0YSgpOworfQorICAgIAogdm9pZCBJbWFnZVNvdXJjZTo6ZHVt
cChUZXh0U3RyZWFtJiB0cykgY29uc3QKIHsKICAgICBpZiAobV9hbGxvd1N1YnNhbXBsaW5nKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKaW5kZXgg
NjAzNTczOWI3ZThiMDk2ZGM4ZGZlOWM1MzBhNDJjNmYyOTFiZGEwMC4uYTQwYzdjZTkzMDdjZGFk
ZjA3OWFiNzAxYTgyNzk5YjY5MDUyOWQ0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaWZuZGVmIEltYWdl
U291cmNlX2gKICNkZWZpbmUgSW1hZ2VTb3VyY2VfaAogCisjaW5jbHVkZSAiSW1hZ2VGcmFtZURh
dGEuaCIKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW50UG9pbnQu
aCIKICNpbmNsdWRlICJOYXRpdmVJbWFnZVB0ci5oIgpAQCAtNjMsOSArNjQsNiBAQCBjb25zdCBp
bnQgY0FuaW1hdGlvbkxvb3BPbmNlID0gMDsKIGNvbnN0IGludCBjQW5pbWF0aW9uTG9vcEluZmlu
aXRlID0gLTE7CiBjb25zdCBpbnQgY0FuaW1hdGlvbk5vbmUgPSAtMjsKIAotLy8gU3Vic2FtcGxp
bmdMZXZlbC4gMCBpcyBubyBzdWJzYW1wbGluZywgMSBpcyBoYWxmIGRpbWVuc2lvbnMgb24gZWFj
aCBheGlzIGV0Yy4KLXR5cGVkZWYgc2hvcnQgU3Vic2FtcGxpbmdMZXZlbDsKLQogY2xhc3MgSW1h
Z2VTb3VyY2UgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlU291cmNlKTsKICAgICBm
cmllbmQgY2xhc3MgQml0bWFwSW1hZ2U7CkBAIC0xMzIsMTggKzEzMCwxOSBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBhbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoc2l6ZV90KSBjb25zdDsKICAg
ICAKICAgICAvLyBTaXplIG9mIG9wdGlvbmFsbHkgc3Vic2FtcGxlZCBmcmFtZS4KLSAgICBJbnRT
aXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gMCwgUmVzcGVj
dEltYWdlT3JpZW50YXRpb25FbnVtID0gRG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikgY29u
c3Q7CisgICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZl
bCA9IERlZmF1bHRTdWJzYW1wbGluZ0xldmVsLCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0g
PSBEb05vdFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKSBjb25zdDsKICAgICAKICAgICAvLyBSZXR1
cm4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgZGVjb2RlZCBmcmFtZS4gSWYgdGhlIGZyYW1l
IGlzIG5vdCB5ZXQKICAgICAvLyBkZWNvZGVkIHRoZW4gcmV0dXJuIDAuCi0gICAgdW5zaWduZWQg
ZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gMCkgY29uc3Q7Cisg
ICAgdW5zaWduZWQgZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0g
RGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0OwogICAgIAogICAgIGZsb2F0IGZyYW1lRHVy
YXRpb25BdEluZGV4KHNpemVfdCk7CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkF0
SW5kZXgoc2l6ZV90KSBjb25zdDsgLy8gRVhJRiBpbWFnZSBvcmllbnRhdGlvbgogICAgIAogICAg
IC8vIENhbGxlcnMgc2hvdWxkIG5vdCBjYWxsIHRoaXMgYWZ0ZXIgY2FsbGluZyBjbGVhcigpIHdp
dGggYSBoaWdoZXIgaW5kZXg7CiAgICAgLy8gc2VlIGNvbW1lbnRzIG9uIGNsZWFyKCkgYWJvdmUu
Ci0gICAgTmF0aXZlSW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90LCBTdWJz
YW1wbGluZ0xldmVsID0gMCk7CisgICAgTmF0aXZlSW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0
SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gRGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwp
OworICAgIEltYWdlRnJhbWVEYXRhIGNyZWF0ZUZyYW1lRGF0YUF0SW5kZXgoc2l6ZV90LCBTdWJz
YW1wbGluZ0xldmVsID0gRGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlRnJhbWVEYXRhOjpD
YWNoaW5nID0gSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOwogICAg
IAogcHJpdmF0ZToKICAgICB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmFiN2FlYTQ4OWYzZWIyYTgyODc3MWMyMTAzZThkNGQwYmUxN2JlNWQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdl
LmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKyNp
bmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb2xvcjsKK2NsYXNzIEZsb2F0UmVjdDsK
K2NsYXNzIEludFNpemU7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CisKK2NsYXNzIFBsYXRmb3Jt
SW1hZ2UgeworcHVibGljOgorICAgIFBsYXRmb3JtSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHIm
IGltYWdlKQorICAgICAgICA6IG1faW1hZ2UoaW1hZ2UpCisgICAgeworICAgIH0KKworICAgIGJv
b2wgaXNOaWwoKSBjb25zdCB7IHJldHVybiAhbV9pbWFnZTsgfQorICAgIHZvaWQgY2xlYXJTdWJJ
bWFnZXMoKTsKKworICAgIEludFNpemUgc2l6ZSgpIGNvbnN0OworICAgIGJvb2wgaGFzQWxwaGEo
KSBjb25zdDsKKyAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdDsKKyAgICBi
b29sIGlzQWxtb3N0U29saWRDb2xvcigpIGNvbnN0OworICAgIHZvaWQgZHJhdyhHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUs
IGNvbnN0IEltYWdlT3JpZW50YXRpb24mKSBjb25zdDsKKworICAgIHN0YXRpYyBmbG9hdCBzdWJz
YW1wbGluZ1NjYWxlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCk7CisKK3ByaXZhdGU6CisjaWYgVVNFKENHKQorICAg
IENHSW1hZ2VSZWYgY2dJbWFnZVJlZigpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UgPyBtX2ltYWdl
LmdldCgpIDogbnVsbHB0cjsgfQorI2VuZGlmCisgICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsK
K307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbQppbmRleCBmNGMxNDU3YmJiMjU1NzU0
ZjAwYTA2MjVlZTgzZTA0ZGE3YzZlZmNmLi5kNTIwZjVkNTg1YWM2MGRiYWVlMjU1ZTFiODNjMjRk
YzY4NzIxMGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCkBAIC0yMTIsNyArMjEyLDcg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnVwZGF0ZURpc3Bs
YXlNb2RlKCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgbV9wYXVzZWRJbWFnZSA9IGltYWdlLT5nZXRDR0ltYWdlUmVm
KCk7CisgICAgICAgICAgICAgICAgbV9wYXVzZWRJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgpOwogICAgICAgICAgICAgICAgIGlmICghbV9wYXVzZWRJbWFnZSkgewog
ICAgICAgICAgICAgICAgICAgICBtX2Rpc3BsYXlNb2RlID0gUGFpbnRJdEJsYWNrOwogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDE3NzIyYmVjNTNhYjhhMDhhOGRhODUyOGI5ZTBkN2M0ZDBjZDQx
MzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCaXRt
YXBJbWFnZS5oIgotCi0jaWYgVVNFKENBSVJPKQotCi0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMu
aCIKLSNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0
Q2Fpcm8uaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIE5hdGl2ZUltYWdlIHsKLQotSW50U2l6ZSBzaXpl
KGNvbnN0IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiBpbWFnZSkKLXsKLSAgICByZXR1cm4gY2Fp
cm9TdXJmYWNlU2l6ZShpbWFnZS5nZXQoKSk7Ci19Ci0KLWJvb2wgaGFzQWxwaGEoY29uc3QgUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4mIGltYWdlKQotewotICAgIHJldHVybiBjYWlyb19zdXJmYWNl
X2dldF9jb250ZW50KGltYWdlLmdldCgpKSAhPSBDQUlST19DT05URU5UX0NPTE9SOwotfQotCi1D
b2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoY29uc3QgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4m
IGltYWdlKQotewotICAgIEFTU0VSVChpbWFnZSk7Ci0gICAgCi0gICAgaWYgKE5hdGl2ZUltYWdl
OjpzaXplKGltYWdlKSAhPSBJbnRTaXplKDEsIDEpKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsK
LQotICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKGltYWdlLmdldCgpKSAhPSBDQUlST19T
VVJGQUNFX1RZUEVfSU1BR0UpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotCi0gICAgUkdCQTMy
KiBwaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFJHQkEzMio+KGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X2RhdGEoaW1hZ2UuZ2V0KCkpKTsKLSAgICByZXR1cm4gY29sb3JGcm9tUHJlbXVsdGlw
bGllZEFSR0IoKnBpeGVsKTsKLX0KLQotfQotCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCwKLSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJ
bWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pCi17Ci0gICAgaWYgKCFkc3Qu
d2lkdGgoKSB8fCAhZHN0LmhlaWdodCgpIHx8ICFzcmMud2lkdGgoKSB8fCAhc3JjLmhlaWdodCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGFydEFuaW1hdGlvbigpOwotCi0gICAgYXV0byBz
dXJmYWNlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwotICAgIGlmICghc3Vy
ZmFjZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCi0g
ICAgICAgIHJldHVybjsKLQotICAgIENvbG9yIGNvbG9yID0gc2luZ2xlUGl4ZWxTb2xpZENvbG9y
KCk7Ci0gICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBmaWxsV2l0aFNvbGlkQ29s
b3IoY29udGV4dCwgZHN0LCBjb2xvciwgb3ApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgY29udGV4dC5zYXZlKCk7Ci0KLSAgICAvLyBTZXQgdGhlIGNvbXBvc2l0aW5nIG9wZXJhdGlv
bi4KLSAgICBpZiAob3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciAmJiBibGVuZE1vZGUgPT0gQmxl
bmRNb2RlTm9ybWFsICYmICFmcmFtZUhhc0FscGhhQXRJbmRleChtX2N1cnJlbnRGcmFtZSkpCi0g
ICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOwotICAg
IGVsc2UKLSAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3AsIGJsZW5kTW9k
ZSk7Ci0KLSNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQotICAgIEludFNp
emUgc2NhbGVkU2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUoc3VyZmFjZS5nZXQoKSk7Ci0gICAgRmxv
YXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGxpbmco
c3JjLCBzY2FsZWRTaXplKTsKLSNlbHNlCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdChz
cmMpOwotI2VuZGlmCi0KLSAgICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3JpZW50YXRpb24oZGVz
Y3JpcHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKTsKLSAgICBpZiAoZGVzY3JpcHRpb24ucmVzcGVj
dEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikKLSAgICAgICAg
ZnJhbWVPcmllbnRhdGlvbiA9IGZyYW1lT3JpZW50YXRpb25BdEluZGV4KG1fY3VycmVudEZyYW1l
KTsKLQotICAgIEZsb2F0UmVjdCBkc3RSZWN0ID0gZHN0OwotCi0gICAgaWYgKGZyYW1lT3JpZW50
YXRpb24gIT0gRGVmYXVsdEltYWdlT3JpZW50YXRpb24pIHsKLSAgICAgICAgLy8gSW1hZ2VPcmll
bnRhdGlvbiBleHBlY3RzIHRoZSBvcmlnaW4gdG8gYmUgYXQgKDAsIDApLgotICAgICAgICBjb250
ZXh0LnRyYW5zbGF0ZShkc3RSZWN0LngoKSwgZHN0UmVjdC55KCkpOwotICAgICAgICBkc3RSZWN0
LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoKSk7Ci0gICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKGZy
YW1lT3JpZW50YXRpb24udHJhbnNmb3JtRnJvbURlZmF1bHQoZHN0UmVjdC5zaXplKCkpKTsKLSAg
ICAgICAgaWYgKGZyYW1lT3JpZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSkgewotICAgICAg
ICAgICAgLy8gVGhlIGRlc3RpbmF0aW9uIHJlY3RhbmdsZSB3aWxsIGhhdmUgaXQncyB3aWR0aCBh
bmQgaGVpZ2h0IGFscmVhZHkgcmV2ZXJzZWQgZm9yIHRoZSBvcmllbnRhdGlvbiBvZgotICAgICAg
ICAgICAgLy8gdGhlIGltYWdlLCBhcyBpdCB3YXMgbmVlZGVkIGZvciBwYWdlIGxheW91dCwgc28g
d2UgbmVlZCB0byByZXZlcnNlIGl0IGJhY2sgaGVyZS4KLSAgICAgICAgICAgIGRzdFJlY3QgPSBG
bG9hdFJlY3QoZHN0UmVjdC54KCksIGRzdFJlY3QueSgpLCBkc3RSZWN0LmhlaWdodCgpLCBkc3RS
ZWN0LndpZHRoKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29udGV4dC5wbGF0Zm9ybUNv
bnRleHQoKS0+ZHJhd1N1cmZhY2VUb0NvbnRleHQoc3VyZmFjZS5nZXQoKSwgZHN0UmVjdCwgYWRq
dXN0ZWRTcmNSZWN0LCBjb250ZXh0KTsKLQotICAgIGNvbnRleHQucmVzdG9yZSgpOwotCi0gICAg
aWYgKGltYWdlT2JzZXJ2ZXIoKSkKLSAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRo
aXMpOwotfQotCi1ib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQotewot
ICAgIGlmIChjbGVhck1ldGFkYXRhKQotICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOwot
Ci0gICAgaWYgKG1faW1hZ2UpIHsKLSAgICAgICAgbV9pbWFnZSA9IG51bGxwdHI7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjcwYWRhZWMyNzBlMzFiMDU0YWZjNWY2NmQ0ODI4OGFlYmYwNjFlM2EK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJD
YWlyb1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCisjaW5j
bHVkZSA8Y2Fpcm8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFBsYXRmb3JtSW1h
Z2U6OmNsZWFyU3ViSW1hZ2VzKCkKK3sKK30KKworSW50U2l6ZSBQbGF0Zm9ybUltYWdlOjpzaXpl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNOaWwoKSA/IEludFNpemUoKSA6IGNhaXJvU3VyZmFj
ZVNpemUobV9pbWFnZS5nZXQoKSk7Cit9CisKK2Jvb2wgUGxhdGZvcm1JbWFnZTo6aGFzQWxwaGEo
KSBjb25zdAoreworICAgIHJldHVybiBpc05pbCgpIHx8IGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRl
bnQobV9pbWFnZS5nZXQoKSkgIT0gQ0FJUk9fQ09OVEVOVF9DT0xPUjsKK30KKworQ29sb3IgUGxh
dGZvcm1JbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3QKK3sKKyAgICBpZiAoaXNO
aWwoKSB8fCBzaXplKCkgIT0gSW50U2l6ZSgxLCAxKSkKKyAgICAgICAgcmV0dXJuIENvbG9yKCk7
CisKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShtX2ltYWdlLmdldCgpKSAhPSBDQUlS
T19TVVJGQUNFX1RZUEVfSU1BR0UpCisgICAgICAgIHJldHVybiBDb2xvcigpOworCisgICAgUkdC
QTMyKiBwaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFJHQkEzMio+KGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2RhdGEobV9pbWFnZS5nZXQoKSkpOworICAgIHJldHVybiBjb2xvckZyb21QcmVt
dWx0aXBsaWVkQVJHQigqcGl4ZWwpOworfQorCitib29sIFBsYXRmb3JtSW1hZ2U6OmlzQWxtb3N0
U29saWRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitmbG9hdCBQbGF0
Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYpCit7CisgICAgcmV0dXJuIDE7Cit9CisKK3ZvaWQgUGxh
dGZvcm1JbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50U2l6ZSYsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSwgY29uc3QgSW1hZ2VPcmllbnRhdGlv
biYgb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgY29udGV4dC5zYXZlKCk7CisgICAgCisgICAg
Ly8gU2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCisgICAgaWYgKG9wID09IENvbXBvc2l0
ZVNvdXJjZU92ZXIgJiYgbW9kZSA9PSBCbGVuZE1vZGVOb3JtYWwgJiYgIWhhc0FscGhhKCkpCisg
ICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOworICAg
IGVsc2UKKyAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3AsIG1vZGUpOwor
ICAgICAgICAKKyNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQorICAgIElu
dFNpemUgc2NhbGVkU2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUobV9pbWFnZS5nZXQoKSk7CisgICAg
RmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGxp
bmcoc3JjUmVjdCwgc2NhbGVkU2l6ZSk7CisjZWxzZQorICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNy
Y1JlY3Qoc3JjUmVjdCk7CisjZW5kaWYKKyAgICAgICAgCisgICAgRmxvYXRSZWN0IGFkanVzdGVk
RGVzdFJlY3QgPSBkZXN0UmVjdDsKKyAgICAgICAgCisgICAgaWYgKG9yaWVudGF0aW9uICE9IERl
ZmF1bHRJbWFnZU9yaWVudGF0aW9uKSB7CisgICAgICAgIC8vIEltYWdlT3JpZW50YXRpb24gZXhw
ZWN0cyB0aGUgb3JpZ2luIHRvIGJlIGF0ICgwLCAwKS4KKyAgICAgICAgY29udGV4dC50cmFuc2xh
dGUoZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCkpOworICAgICAgICBhZGp1c3RlZERlc3RSZWN0
LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoKSk7CisgICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKG9y
aWVudGF0aW9uLnRyYW5zZm9ybUZyb21EZWZhdWx0KGFkanVzdGVkRGVzdFJlY3Quc2l6ZSgpKSk7
CisgICAgICAgIGlmIChvcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpKSB7CisgICAgICAg
ICAgICAvLyBUaGUgZGVzdGluYXRpb24gcmVjdGFuZ2xlIHdpbGwgaGF2ZSBpdCdzIHdpZHRoIGFu
ZCBoZWlnaHQgYWxyZWFkeSByZXZlcnNlZCBmb3IgdGhlIG9yaWVudGF0aW9uIG9mCisgICAgICAg
ICAgICAvLyB0aGUgaW1hZ2UsIGFzIGl0IHdhcyBuZWVkZWQgZm9yIHBhZ2UgbGF5b3V0LCBzbyB3
ZSBuZWVkIHRvIHJldmVyc2UgaXQgYmFjayBoZXJlLgorICAgICAgICAgICAgYWRqdXN0ZWREZXN0
UmVjdC5zZXRTaXplKGFkanVzdGVkRGVzdFJlY3Quc2l6ZSgpLnRyYW5zcG9zZWRTaXplKCkpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1N1
cmZhY2VUb0NvbnRleHQobV9pbWFnZS5nZXQoKSwgYWRqdXN0ZWREZXN0UmVjdCwgYWRqdXN0ZWRT
cmNSZWN0LCBjb250ZXh0KTsKKworICAgIGNvbnRleHQucmVzdG9yZSgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2M4MWExNzBiZTc5YWU2YmU2Y2FjZGM5OWY0YzM5OGNh
YWY0MjZkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMjA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkJpdG1hcEltYWdlLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJDb3JlR3JhcGhp
Y3NTUEkuaCIKLSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJHZW9tZXRy
eVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVkZSAi
SW1hZ2VPYnNlcnZlci5oIgotI2luY2x1ZGUgIlN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCIKLSNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLSNpZiBVU0UoQVBQS0lUKQotI2luY2x1ZGUgPEFw
cGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgotI2VuZGlmCi0KLSNpZiBQ
TEFURk9STShDT0NPQSkKLSNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0jZW5k
aWYKLQotI2lmIFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2Uv
V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1uYW1lc3BhY2UgTmF0aXZlSW1hZ2UgewotCi1JbnRTaXplIHNpemUoY29uc3QgUmV0YWluUHRy
PENHSW1hZ2VSZWY+JiBpbWFnZSkKLXsKLSAgICBBU1NFUlQoaW1hZ2UpOwotICAgIHJldHVybiBJ
bnRTaXplKENHSW1hZ2VHZXRXaWR0aChpbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQoaW1h
Z2UuZ2V0KCkpKTsKLX0KLQotYm9vbCBoYXNBbHBoYShjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4mKQotewotICAgIC8vIEZJWE1FOiBBbnN3ZXIgY29ycmVjdGx5IHRoZSBxdWVzdGlvbjogZG9l
cyB0aGUgQ0dJbWFnZVJlZiBoYXZlIGFscGhhIGNoYW5ubmVsPwotICAgIHJldHVybiB0cnVlOwot
fQotICAgIAotQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKGNvbnN0IFJldGFpblB0cjxDR0lt
YWdlUmVmPiYgaW1hZ2UpCi17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICAKLSAgICBpZiAoTmF0
aXZlSW1hZ2U6OnNpemUoaW1hZ2UpICE9IEludFNpemUoMSwgMSkpCi0gICAgICAgIHJldHVybiBD
b2xvcigpOwotICAgIAotICAgIHVuc2lnbmVkIGNoYXIgcGl4ZWxbNF07IC8vIFJHQkEKLSAgICBh
dXRvIGJpdG1hcENvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShwaXhlbCwg
MSwgMSwgOCwgc2l6ZW9mKHBpeGVsKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwKLSAgICAgICAga0NH
SW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcpKTsK
LQotICAgIGlmICghYml0bWFwQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0gICAg
Ci0gICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGJpdG1hcENvbnRleHQuZ2V0KCksIGtDR0JsZW5k
TW9kZUNvcHkpOwotICAgIENHQ29udGV4dERyYXdJbWFnZShiaXRtYXBDb250ZXh0LmdldCgpLCBD
R1JlY3RNYWtlKDAsIDAsIDEsIDEpLCBpbWFnZS5nZXQoKSk7Ci0gICAgCi0gICAgaWYgKCFwaXhl
bFszXSkKLSAgICAgICAgcmV0dXJuIENvbG9yKDAsIDAsIDAsIDApOwotCi0gICAgcmV0dXJuIENv
bG9yKHBpeGVsWzBdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICogMjU1IC8gcGl4ZWxbM10s
IHBpeGVsWzJdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKLX0KLQotfQotCi1ib29sIEZy
YW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQotewotICAgIGlmIChjbGVhck1ldGFk
YXRhKQotICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOwotCi0gICAgbV9zdWJzYW1wbGlu
Z0xldmVsID0gMDsKLQotICAgIGlmIChtX2ltYWdlKSB7Ci0jaWYgQ0FDSEVfU1VCSU1BR0VTCi0g
ICAgICAgIHN1YmltYWdlQ2FjaGUoKS5jbGVhckltYWdlKG1faW1hZ2UuZ2V0KCkpOwotI2VuZGlm
Ci0gICAgICAgIG1faW1hZ2UgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1DR0ltYWdlUmVmIEJpdG1hcEltYWdlOjpnZXRDR0lt
YWdlUmVmKCkKLXsKLSAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCkuZ2V0KCk7Ci19Ci0K
LUNHSW1hZ2VSZWYgQml0bWFwSW1hZ2U6OmdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6ZShjb25zdCBJ
bnRTaXplJiBzaXplKQotewotICAgIHNpemVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgQ0dJbWFnZVJlZiBj
Z0ltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkuZ2V0KCk7Ci0gICAgICAgIGlmIChjZ0ltYWdl
ICYmIEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGNnSW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGNn
SW1hZ2UpKSA9PSBzaXplKQotICAgICAgICAgICAgcmV0dXJuIGNnSW1hZ2U7Ci0gICAgfQotCi0g
ICAgLy8gRmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgQ0dJbWFnZVJlZiBpZiB3ZSBjYW4ndCBmaW5k
IHRoZSByaWdodCBzaXplCi0gICAgcmV0dXJuIGdldENHSW1hZ2VSZWYoKTsKLX0KLQotUmV0YWlu
UHRyPENGQXJyYXlSZWY+IEJpdG1hcEltYWdlOjpnZXRDR0ltYWdlQXJyYXkoKQotewotICAgIHNp
emVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKLSAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICAKLSAgICBDRk11dGFibGVBcnJheVJlZiBhcnJheSA9IENGQXJyYXlD
cmVhdGVNdXRhYmxlKE5VTEwsIGNvdW50LCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKENHSW1hZ2VS
ZWYgY3VyckZyYW1lID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkuZ2V0KCkpCi0gICAgICAgICAgICBD
RkFycmF5QXBwZW5kVmFsdWUoYXJyYXksIGN1cnJGcmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBh
ZG9wdENGKGFycmF5KTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQmIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3AsIEJsZW5kTW9kZSBibGVuZE1vZGUs
IEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikKLXsKLSNpZiBQTEFURk9S
TShJT1MpCi0gICAgc3RhcnRBbmltYXRpb24oRG9Ob3RDYXRjaFVwKTsKLSNlbHNlCi0gICAgc3Rh
cnRBbmltYXRpb24oKTsKLSNlbmRpZgotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdl
OwotICAgIC8vIE5ldmVyIHVzZSBzdWJzYW1wbGVkIGltYWdlcyBmb3IgZHJhd2luZyBpbnRvIFBE
RiBjb250ZXh0cy4KLSAgICBpZiAod2tDR0NvbnRleHRJc1BERkNvbnRleHQoY3R4dC5wbGF0Zm9y
bUNvbnRleHQoKSkpCi0gICAgICAgIGltYWdlID0gY29weVVuc2NhbGVkRnJhbWVJbWFnZUF0SW5k
ZXgobV9jdXJyZW50RnJhbWUpOwotICAgIGVsc2UgewotICAgICAgICBDR1JlY3QgdHJhbnNmb3Jt
ZWREZXN0aW5hdGlvblJlY3QgPSBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShkZXN0UmVjdCwg
Q0dDb250ZXh0R2V0Q1RNKGN0eHQucGxhdGZvcm1Db250ZXh0KCkpKTsKLSAgICAgICAgZmxvYXQg
c3Vic2FtcGxpbmdTY2FsZSA9IHN0ZDo6bWluPGZsb2F0PigxLCBzdGQ6Om1heCh0cmFuc2Zvcm1l
ZERlc3RpbmF0aW9uUmVjdC5zaXplLndpZHRoIC8gc3JjUmVjdC53aWR0aCgpLCB0cmFuc2Zvcm1l
ZERlc3RpbmF0aW9uUmVjdC5zaXplLmhlaWdodCAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsKLQotICAg
ICAgICBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lLCBzdWJzYW1wbGlu
Z1NjYWxlKTsKLSAgICB9Ci0KLSAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3
ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIENv
bG9yIGNvbG9yID0gc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCk7Ci0gICAgaWYgKGNvbG9yLmlzVmFs
aWQoKSkgewotICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwgZGVzdFJlY3QsIGNvbG9y
LCBjb21wb3NpdGVPcCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBTdWJzYW1w
bGluZyBtYXkgaGF2ZSBnaXZlbiB1cyBhbiBpbWFnZSB0aGF0IGlzIHNtYWxsZXIgdGhhbiBzaXpl
KCkuCi0gICAgSW50U2l6ZSBpbWFnZVNpemUoQ0dJbWFnZUdldFdpZHRoKGltYWdlLmdldCgpKSwg
Q0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSkpOwotICAgIAotICAgIC8vIHNyY1JlY3QgaXMg
aW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB1bnN1YnNhbXBsZWQgaW1hZ2UsIHNvIHdlIGhhdmUg
dG8gbWFwIGl0IHRvIHRoZSBzdWJzYW1wbGVkIGltYWdlLgotICAgIEZsb2F0UmVjdCBzY2FsZWRT
cmNSZWN0ID0gc3JjUmVjdDsKLSAgICBpZiAoaW1hZ2VTaXplICE9IG1fc2l6ZSkgewotICAgICAg
ICBGbG9hdFJlY3Qgb3JpZ2luYWxJbWFnZUJvdW5kcyhGbG9hdFBvaW50KCksIG1fc2l6ZSk7Ci0g
ICAgICAgIEZsb2F0UmVjdCBzdWJzYW1wbGVkSW1hZ2VCb3VuZHMoRmxvYXRQb2ludCgpLCBpbWFn
ZVNpemUpOwotICAgICAgICBzY2FsZWRTcmNSZWN0ID0gbWFwUmVjdChzcmNSZWN0LCBvcmlnaW5h
bEltYWdlQm91bmRzLCBzdWJzYW1wbGVkSW1hZ2VCb3VuZHMpOwotICAgIH0KLSAgICAKLSAgICBJ
bWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uOwotICAgIGlmIChkZXNjcmlwdGlvbi5yZXNwZWN0
SW1hZ2VPcmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQotICAgICAgICBv
cmllbnRhdGlvbiA9IGZyYW1lT3JpZW50YXRpb25BdEluZGV4KG1fY3VycmVudEZyYW1lKTsKLQot
ICAgIGN0eHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzY2Fs
ZWRTcmNSZWN0LCBjb21wb3NpdGVPcCwgYmxlbmRNb2RlLCBvcmllbnRhdGlvbik7Ci0KLSAgICBp
ZiAoaW1hZ2VPYnNlcnZlcigpKQotICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhp
cyk7Ci19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBCaXRtYXBJbWFnZTo6Y29weVVuc2NhbGVk
RnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4KQotewotICAgIGlmIChpbmRleCA+PSBmcmFt
ZUNvdW50KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGluZGV4ID49IG1f
ZnJhbWVzLnNpemUoKSB8fCAhbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2UpCi0gICAgICAgIGNhY2hl
RnJhbWUoaW5kZXgsIDApOwotCi0gICAgaWYgKCFtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1wbGlu
Z0xldmVsKQotICAgICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2U7Ci0KLSAgICBy
ZXR1cm4gbV9zb3VyY2UuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgpOwotfQotCi19Ci0K
LSNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUGF0dGVybkNHLmNwcAppbmRleCBiNDI4ZDUwZDk0YmY5MjQyODAzMjg3ZDJlZWMxNmJk
NjljNTI4ZDkyLi4zZGFhMTM5YWI3ZWE1YjQyMTU3Nzg4MzVkMzUzZDhhZGI1ZjBjNzVlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAK
QEAgLTcyLDcgKzcyLDcgQEAgQ0dQYXR0ZXJuUmVmIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0
dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRyYW4KICAgICAvLyBJZiB3ZSdy
ZSByZXBlYXRpbmcgaW4gYm90aCBkaXJlY3Rpb25zLCB3ZSBjYW4gdXNlIGltYWdlLWJhY2tlZCBw
YXR0ZXJucwogICAgIC8vIGluc3RlYWQgb2YgY3VzdG9tIHBhdHRlcm5zLCBhbmQgYXZvaWQgdGls
aW5nLWVkZ2UgcGl4ZWwgY3JhY2tzLgogICAgIGlmIChtX3JlcGVhdFggJiYgbV9yZXBlYXRZKQot
ICAgICAgICByZXR1cm4gd2tDR1BhdHRlcm5DcmVhdGVXaXRoSW1hZ2VBbmRUcmFuc2Zvcm0odGls
ZUltYWdlKCktPmdldENHSW1hZ2VSZWYoKSwgcGF0dGVyblRyYW5zZm9ybSwgd2tQYXR0ZXJuVGls
aW5nQ29uc3RhbnRTcGFjaW5nKTsKKyAgICAgICAgcmV0dXJuIHdrQ0dQYXR0ZXJuQ3JlYXRlV2l0
aEltYWdlQW5kVHJhbnNmb3JtKHRpbGVJbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmdldCgpLCBwYXR0
ZXJuVHJhbnNmb3JtLCB3a1BhdHRlcm5UaWxpbmdDb25zdGFudFNwYWNpbmcpOwogCiAgICAgLy8g
SWYgRkxUX01BWCBzaG91bGQgYWxzbyBiZSB1c2VkIGZvciB4U3RlcCBvciB5U3RlcCwgbm90aGlu
ZyBpcyByZW5kZXJlZC4gVXNpbmcgZnJhY3Rpb25zIG9mIEZMVF9NQVggYWxzbwogICAgIC8vIHJl
c3VsdCBpbiBub3RoaW5nIGJlaW5nIHJlbmRlcmVkLgpAQCAtODMsNyArODMsNyBAQCBDR1BhdHRl
cm5SZWYgUGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdXNlclNwYWNlVHJhbgogICAgIENHRmxvYXQgeVN0ZXAgPSBtX3JlcGVhdFkgPyB0aWxlUmVj
dC5oZWlnaHQoKSA6ICgxIDw8IDIyKTsKIAogICAgIC8vIFRoZSBwYXR0ZXJuIHdpbGwgcmVsZWFz
ZSB0aGUgQ0dJbWFnZVJlZiB3aGVuIGl0J3MgZG9uZSByZW5kZXJpbmcgaW4gcGF0dGVyblJlbGVh
c2VDYWxsYmFjawotICAgIENHSW1hZ2VSZWYgcGxhdGZvcm1JbWFnZSA9IENHSW1hZ2VSZXRhaW4o
dGlsZUltYWdlKCktPmdldENHSW1hZ2VSZWYoKSk7CisgICAgQ0dJbWFnZVJlZiBwbGF0Zm9ybUlt
YWdlID0gdGlsZUltYWdlKCktPm5hdGl2ZUltYWdlKCkubGVha1JlZigpOwogCiAgICAgY29uc3Qg
Q0dQYXR0ZXJuQ2FsbGJhY2tzIHBhdHRlcm5DYWxsYmFja3MgPSB7IDAsIHBhdHRlcm5DYWxsYmFj
aywgcGF0dGVyblJlbGVhc2VDYWxsYmFjayB9OwogICAgIHJldHVybiBDR1BhdHRlcm5DcmVhdGUo
cGxhdGZvcm1JbWFnZSwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHhTdGVwLCB5U3RlcCwg
a0NHUGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2luZywgVFJVRSwgJnBhdHRlcm5DYWxsYmFja3Mp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZv
cm1JbWFnZUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BsYXRm
b3JtSW1hZ2VDRy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWZiMmRlMGVhMTJkYTIxNGYxMDQ2YzM5NjJlOGVh
YjUzYzY0NDEyNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAi
Q29sb3IuaCIKKyNpbmNsdWRlICJDb3JlR3JhcGhpY3NTUEkuaCIKKyNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dENHLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlN1YmltYWdlQ2Fj
aGVXaXRoVGltZXIuaCIKKworI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDxXZWJLaXRTeXN0
ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworICAgIAordm9pZCBQbGF0Zm9ybUltYWdlOjpjbGVhclN1YkltYWdlcygpCit7
CisjaWYgQ0FDSEVfU1VCSU1BR0VTCisgICAgaWYgKCFpc05pbCgpKQorICAgICAgICBzdWJpbWFn
ZUNhY2hlKCkuY2xlYXJJbWFnZShjZ0ltYWdlUmVmKCkpOworI2VuZGlmCit9CisKK0ludFNpemUg
UGxhdGZvcm1JbWFnZTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzTmlsKCkgPyBJbnRT
aXplKCkgOiBJbnRTaXplKENHSW1hZ2VHZXRXaWR0aChjZ0ltYWdlUmVmKCkpLCBDR0ltYWdlR2V0
SGVpZ2h0KGNnSW1hZ2VSZWYoKSkpOworfQorCitib29sIFBsYXRmb3JtSW1hZ2U6Omhhc0FscGhh
KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogQW5zd2VyIGNvcnJlY3RseSB0aGUgcXVlc3Rpb246
IGRvZXMgdGhlIENHSW1hZ2VSZWYgaGF2ZSBhbHBoYSBjaGFubm5lbD8KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworQ29sb3IgUGxhdGZvcm1JbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29u
c3QKK3sKKyAgICBpZiAoaXNOaWwoKSB8fCBzaXplKCkgIT0gSW50U2l6ZSgxLCAxKSkKKyAgICAg
ICAgcmV0dXJuIENvbG9yKCk7CisgICAgCisgICAgdW5zaWduZWQgY2hhciBwaXhlbFs0XTsgLy8g
UkdCQQorICAgIGF1dG8gYml0bWFwQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3Jl
YXRlKHBpeGVsLCAxLCAxLCA4LCBzaXplb2YocGl4ZWwpLCBzUkdCQ29sb3JTcGFjZVJlZigpLAor
ICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QgfCBrQ0dCaXRtYXBCeXRlT3Jk
ZXIzMkJpZykpOworICAgIAorICAgIGlmICghYml0bWFwQ29udGV4dCkKKyAgICAgICAgcmV0dXJu
IENvbG9yKCk7CisgICAgCisgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGJpdG1hcENvbnRleHQu
Z2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOworICAgIENHQ29udGV4dERyYXdJbWFnZShiaXRtYXBD
b250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIDEsIDEpLCBjZ0ltYWdlUmVmKCkpOworICAg
IAorICAgIGlmICghcGl4ZWxbM10pCisgICAgICAgIHJldHVybiBDb2xvcigwLCAwLCAwLCAwKTsK
KyAgICAKKyAgICByZXR1cm4gQ29sb3IocGl4ZWxbMF0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxb
MV0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMl0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbM10p
OworfQorICAgIAorYm9vbCBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKSBjb25z
dAoreworICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBjZ0ltYWdlUmVmKCk7CisgICAgQVNTRVJUKENH
SW1hZ2VHZXRCaXRzUGVyQ29tcG9uZW50KGltYWdlKSA9PSA4KTsKKyAgICAKKyAgICBDR0JpdG1h
cEluZm8gaW1hZ2VJbmZvID0gQ0dJbWFnZUdldEJpdG1hcEluZm8oaW1hZ2UpOworICAgIGlmICgh
KGltYWdlSW5mbyAmIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlKSB8fCAoaW1hZ2VJbmZvICYg
a0NHQml0bWFwQWxwaGFJbmZvTWFzaykgIT0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJz
dCkgeworICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYmVpbmcgYWJsZSB0byBoYW5kbGUgb3Ro
ZXIgcGl4ZWwgZm9ybWF0cy4KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHdpZHRoID0gQ0dJbWFnZUdl
dFdpZHRoKGltYWdlKTsKKyAgICBzaXplX3QgaGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChpbWFn
ZSk7CisgICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0gQ0dJbWFnZUdldEJ5dGVzUGVyUm93KGltYWdl
KTsKKyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBwcm92aWRlciA9IGFkb3B0Q0YoQ0dE
YXRhUHJvdmlkZXJDb3B5RGF0YShDR0ltYWdlR2V0RGF0YVByb3ZpZGVyKGltYWdlKSkpOworICAg
IGNvbnN0IFVJbnQ4KiBkYXRhID0gQ0ZEYXRhR2V0Qnl0ZVB0cihwcm92aWRlci5nZXQoKSk7Cisg
ICAgCisgICAgLy8gT3ZlcmxheSBhIGdyaWQgb2Ygc2FtcGxpbmcgZG90cyBvbiB0b3Agb2YgYSBn
cmF5c2NhbGUgdmVyc2lvbiBvZiB0aGUgaW1hZ2UuCisgICAgLy8gRm9yIHRoZSBpbnRlcmlvciBw
b2ludHMsIGNhbGN1bGF0ZSB0aGUgZGlmZmVyZW5jZSBpbiBsdW1pbmFuY2UgYW1vbmcgdGhlIHNh
bXBsZSBwb2ludAorICAgIC8vIGFuZCBpdHMgc3Vycm91bmRzIHBvaW50cywgc2NhbGVkIGJ5IHRy
YW5zcGFyZW5jeS4KKyAgICBjb25zdCB1bnNpZ25lZCBzYW1wbGVSb3dzID0gNzsKKyAgICBjb25z
dCB1bnNpZ25lZCBzYW1wbGVDb2xzID0gNzsKKyAgICAvLyBGSVhNRTogUmVmaW5lIHRoZSBwcm9w
ZXIgbnVtYmVyIG9mIHNhbXBsZXMsIGFuZCBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgYXNwZWN0IHJh
dGlvcy4KKyAgICBpZiAod2lkdGggPCBzYW1wbGVDb2xzIHx8IGhlaWdodCA8IHNhbXBsZVJvd3Mp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBFbnN1cmUgdGhhdCB0aGUgbGFz
dCByb3cvY29sdW1uIGxhbmQgb24gdGhlIGltYWdlIHBlcmltZXRlci4KKyAgICBjb25zdCBmbG9h
dCBzdHJpZGVXaWR0aCA9IHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCAtIDEpIC8gKHNhbXBsZUNv
bHMgLSAxKTsKKyAgICBjb25zdCBmbG9hdCBzdHJpZGVIZWlnaHQgPSBzdGF0aWNfY2FzdDxmbG9h
dD4oaGVpZ2h0IC0gMSkgLyAoc2FtcGxlUm93cyAtIDEpOworICAgIGZsb2F0IHNhbXBsZXNbc2Ft
cGxlUm93c11bc2FtcGxlQ29sc107CisgICAgCisgICAgLy8gRmluZCB0aGUgbHVtaW5hbmNlIG9m
IHRoZSBzYW1wbGUgcG9pbnRzLgorICAgIGZsb2F0IHkgPSAwOworICAgIGNvbnN0IFVJbnQ4KiBy
b3cgPSBkYXRhOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzYW1wbGVSb3dzOyArK2kp
IHsKKyAgICAgICAgZmxvYXQgeCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGog
PCBzYW1wbGVDb2xzOyArK2opIHsKKyAgICAgICAgICAgIGNvbnN0IFVJbnQ4KiBwMCA9IHJvdyAr
IChzdGF0aWNfY2FzdDxpbnQ+KHggKyAuNSkpICogNDsKKyAgICAgICAgICAgIC8vIFIgRyBCIEEK
KyAgICAgICAgICAgIHNhbXBsZXNbaV1bal0gPSAoMC4yMTI1ICogKnAwICsgMC43MTU0ICogKihw
MCsxKSArIDAuMDcyMSAqICoocDArMikpICogKihwMCszKSAvIDI1NTsKKyAgICAgICAgICAgIHgg
Kz0gc3RyaWRlV2lkdGg7CisgICAgICAgIH0KKyAgICAgICAgeSArPSBzdHJpZGVIZWlnaHQ7Cisg
ICAgICAgIHJvdyA9IGRhdGEgKyAoc3RhdGljX2Nhc3Q8aW50Pih5ICsgLjUpKSAqIGJ5dGVzUGVy
Um93OworICAgIH0KKyAgICAKKyAgICAvLyBEZXRlcm1pbmUgdGhlIGltYWdlIHNjb3JlLgorICAg
IGZsb2F0IGFjY3VtU2NvcmUgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzYW1w
bGVSb3dzIC0gMTsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDE7IGogPCBzYW1w
bGVDb2xzIC0gMTsgKytqKSB7CisgICAgICAgICAgICBmbG9hdCBkaWZmID0gc2FtcGxlc1tpIC0g
MV1bal0gKyBzYW1wbGVzW2kgKyAxXVtqXSArIHNhbXBsZXNbaV1baiAtIDFdICsgc2FtcGxlc1tp
XVtqICsgMV0gLSA0ICogc2FtcGxlc1tpXVtqXTsKKyAgICAgICAgICAgIGFjY3VtU2NvcmUgKz0g
ZGlmZiAqIGRpZmY7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gVGhlIHNjb3JlIGZv
ciBhIGdpdmVuIHNhbXBsZSBjYW4gYmUgd2l0aGluIHRoZSByYW5nZSBvZiAwIGFuZCAyNTVeMi4K
KyAgICByZXR1cm4gYWNjdW1TY29yZSA8IDI1MDAgKiAoc2FtcGxlUm93cyAtIDIpICogKHNhbXBs
ZUNvbHMgLSAyKTsKK30KKworZmxvYXQgUGxhdGZvcm1JbWFnZTo6c3Vic2FtcGxpbmdTY2FsZShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCkKK3sKKyAgICAvLyBOZXZlciB1c2Ugc3Vic2FtcGxlZCBpbWFn
ZXMgZm9yIGRyYXdpbmcgaW50byBQREYgY29udGV4dHMuCisgICAgaWYgKHdrQ0dDb250ZXh0SXNQ
REZDb250ZXh0KGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpKQorICAgICAgICByZXR1cm4gMTsK
KyAgICAKKyAgICBDR1JlY3QgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3QgPSBDR1JlY3RBcHBs
eUFmZmluZVRyYW5zZm9ybShkZXN0UmVjdCwgQ0dDb250ZXh0R2V0Q1RNKGNvbnRleHQucGxhdGZv
cm1Db250ZXh0KCkpKTsKKyAgICByZXR1cm4gc3RkOjptaW48ZmxvYXQ+KDEsIHN0ZDo6bWF4KHRy
YW5zZm9ybWVkRGVzdGluYXRpb25SZWN0LnNpemUud2lkdGggLyBzcmNSZWN0LndpZHRoKCksIHRy
YW5zZm9ybWVkRGVzdGluYXRpb25SZWN0LnNpemUuaGVpZ2h0IC8gc3JjUmVjdC5oZWlnaHQoKSkp
OworfQorCit2b2lkIFBsYXRmb3JtSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEludFNpemUmIHNyY1NpemUsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9k
ZSwgY29uc3QgSW1hZ2VPcmllbnRhdGlvbiYgb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgLy8g
U3Vic2FtcGxpbmcgbWF5IGhhdmUgZ2l2ZW4gdXMgYW4gaW1hZ2UgdGhhdCBpcyBzbWFsbGVyIHRo
YW4gc2l6ZSgpLgorICAgIEludFNpemUgc3Vic2FtcGxlZEltYWdlU2l6ZSA9IHNpemUoKTsKKyAg
ICAKKyAgICAvLyBzcmNSZWN0IGlzIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgdW5zdWJzYW1w
bGVkIGltYWdlLCBzbyB3ZSBoYXZlIHRvIG1hcCBpdCB0byB0aGUgc3Vic2FtcGxlZCBpbWFnZS4K
KyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBpZiAoc3Vic2Ft
cGxlZEltYWdlU2l6ZSAhPSBzcmNTaXplKQorICAgICAgICBhZGp1c3RlZFNyY1JlY3QgPSBtYXBS
ZWN0KHNyY1JlY3QsIEZsb2F0UmVjdCh7IH0sIHNyY1NpemUpLCBGbG9hdFJlY3QoeyB9LCBzdWJz
YW1wbGVkSW1hZ2VTaXplKSk7CisgICAgCisgICAgY29udGV4dC5kcmF3TmF0aXZlSW1hZ2UobV9p
bWFnZSwgc3Vic2FtcGxlZEltYWdlU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3As
IG1vZGUsIG9yaWVudGF0aW9uKTsKK30KKyAgICAKK30KKworI2VuZGlmIC8vIFVTRShDRykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1RleHRUcmFj
a1JlcHJlc2VudGF0aW9uQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tCmluZGV4IDg5NzIwZDE3MzY1
ZGE3ZThiYTg0NjlkNTI5NDU0OGQ1MTg0N2E3ZmUuLjQ0NzZmYzVmODdjMzQ5ODhmNmQ5YWQ1NWVl
YmQ4ZDFiOWJiMDIyZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2Nv
YS5tbQpAQCAtMTI5LDcgKzEyOSw3IEBAIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2E6On5U
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hKCkKIHZvaWQgVGV4dFRyYWNrUmVwcmVzZW50YXRp
b25Db2NvYTo6dXBkYXRlKCkKIHsKICAgICBpZiAoYXV0byByZXByZXNlbnRhdGlvbiA9IG1fY2xp
ZW50LmNyZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2UoKSkKLSAgICAgICAgW21fbGF5
ZXIuZ2V0KCkgc2V0Q29udGVudHM6KGlkKXJlcHJlc2VudGF0aW9uLT5nZXRDR0ltYWdlUmVmKCld
OworICAgICAgICBbbV9sYXllci5nZXQoKSBzZXRDb250ZW50czooaWQpcmVwcmVzZW50YXRpb24t
Pm5hdGl2ZUltYWdlKCkuZ2V0KCldOwogfQogCiB2b2lkIFRleHRUcmFja1JlcHJlc2VudGF0aW9u
Q29jb2E6OnNldENvbnRlbnRTY2FsZShmbG9hdCBzY2FsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQppbmRleCAwMWViNmRkMzAwNDNhMjI1
MjkxNzZmZDkxMjExN2RjNTc3NmMxN2JhLi5kYzFjN2M3MDk1ZDk0NGM0YzYyZjFmZTA5MzU3MDJh
MTNjN2M3YTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvSW1hZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0ltYWdlTWFjLm1tCkBAIC04NSwzMSArODUsMjIgQEAgQ0ZEYXRhUmVmIEJpdG1hcEltYWdlOjpn
ZXRUSUZGUmVwcmVzZW50YXRpb24oKQogICAgIGlmIChtX3RpZmZSZXApCiAgICAgICAgIHJldHVy
biBtX3RpZmZSZXAuZ2V0KCk7CiAKLSAgICB1bnNpZ25lZCBudW1GcmFtZXMgPSBmcmFtZUNvdW50
KCk7CisgICAgYXV0byBuYXRpdmVJbWFnZXMgPSB0aGlzLT5mcmFtZXNOYXRpdmVJbWFnZXMoKTsK
IAotICAgIC8vIElmIG51bUZyYW1lcyBpcyB6ZXJvLCB3ZSBrbm93IGZvciBjZXJ0YWluIHRoaXMg
aW1hZ2UgZG9lc24ndCBoYXZlIHZhbGlkIGRhdGEKKyAgICAvLyBJZiBmcmFtZXNJbWFnZXMuc2l6
ZSgpIGlzIHplcm8sIHdlIGtub3cgZm9yIGNlcnRhaW4gdGhpcyBpbWFnZSBkb2Vzbid0IGhhdmUg
dmFsaWQgZGF0YQogICAgIC8vIEV2ZW4gdGhvdWdoIHRoZSBjYWxsIHRvIENHSW1hZ2VEZXN0aW5h
dGlvbkNyZWF0ZVdpdGhEYXRhIHdpbGwgZmFpbCBhbmQgd2UnbGwgaGFuZGxlIGl0IGdyYWNlZnVs
bHksCiAgICAgLy8gaW4gY2VydGFpbiBjaXJjdW1zdGFuY2VzIHRoYXQgY2FsbCB3aWxsIHNwYW0g
dGhlIGNvbnNvbGUgd2l0aCBhbiBlcnJvciBtZXNzYWdlCi0gICAgaWYgKCFudW1GcmFtZXMpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgVmVjdG9yPENHSW1hZ2VSZWY+IGltYWdlczsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRnJhbWVzOyArK2kgKSB7Ci0gICAgICAgIENHSW1h
Z2VSZWYgY2dJbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpOwotICAgICAgICBpZiAo
Y2dJbWFnZSkKLSAgICAgICAgICAgIGltYWdlcy5hcHBlbmQoY2dJbWFnZSk7Ci0gICAgfQotCi0g
ICAgdW5zaWduZWQgbnVtVmFsaWRGcmFtZXMgPSBpbWFnZXMuc2l6ZSgpOworICAgIGlmICghbmF0
aXZlSW1hZ2VzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZXRhaW5Q
dHI8Q0ZNdXRhYmxlRGF0YVJlZj4gZGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgw
LCAwKSk7Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VEZXN0aW5hdGlvblJlZj4gZGVzdGluYXRpb24g
PSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEuZ2V0KCksIGtV
VFR5cGVUSUZGLCBudW1WYWxpZEZyYW1lcywgMCkpOworICAgIFJldGFpblB0cjxDR0ltYWdlRGVz
dGluYXRpb25SZWY+IGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVh
dGVXaXRoRGF0YShkYXRhLmdldCgpLCBrVVRUeXBlVElGRiwgbmF0aXZlSW1hZ2VzLnNpemUoKSwg
MCkpOwogCiAgICAgaWYgKCFkZXN0aW5hdGlvbikKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVZhbGlk
RnJhbWVzOyArK2kpCi0gICAgICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0
aW9uLmdldCgpLCBpbWFnZXNbaV0sIDApOworICAgIGZvciAoYXV0byBuYXRpdmVJbWFnZSA6IG5h
dGl2ZUltYWdlcykKKyAgICAgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRp
b24uZ2V0KCksIG5hdGl2ZUltYWdlLmdldCgpLCAwKTsKIAogICAgIENHSW1hZ2VEZXN0aW5hdGlv
bkZpbmFsaXplKGRlc3RpbmF0aW9uLmdldCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAKaW5kZXggMjE3NTNi
ZDA3OGExYzU1YzMyNzE5YzE0ODQ2ZjBmNmI5OTc1ZjhmZC4uODYxMDI1MDhiZWQ3MjlmZmFmNDYw
NzdlYWI4MjA5NmU5ZWIxYWMzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCkBAIC0xNDIsNyArMTQyLDcgQEAg
SW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0IEltYWdlRnJhbWUmIG90aGVy
KQogICAgICAgICByZXR1cm4gKnRoaXM7CiAKICAgICBjb3B5Qml0bWFwRGF0YShvdGhlcik7Ci0g
ICAgc2V0T3JpZ2luYWxGcmFtZVJlY3Qob3RoZXIub3JpZ2luYWxGcmFtZVJlY3QoKSk7CisgICAg
c2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7CiAgICAgc2V0U3RhdHVzKG90aGVyLnN0YXR1
cygpKTsKICAgICBzZXREdXJhdGlvbihvdGhlci5kdXJhdGlvbigpKTsKICAgICBzZXREaXNwb3Nh
bE1ldGhvZChvdGhlci5kaXNwb3NhbE1ldGhvZCgpKTsKQEAgLTE1Miw4ICsxNTIsNyBAQCBJbWFn
ZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpCiAK
IHZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXJQaXhlbERhdGEoKQogewotICAgIG1fYmFja2luZ1N0b3Jl
LmNsZWFyKCk7Ci0gICAgbV9ieXRlcyA9IDA7CisgICAgbV9waXhlbHMgPSBudWxscHRyOwogICAg
IG1fc3RhdHVzID0gRnJhbWVFbXB0eTsKICAgICAvLyBOT1RFOiBEbyBub3QgcmVzZXQgb3RoZXIg
bWVtYmVycyBoZXJlOyBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoKSBjYWxscyB0aGlzCiAgICAgLy8g
dG8gZnJlZSB0aGUgYml0bWFwIGRhdGEsIGJ1dCBvdGhlciBmdW5jdGlvbnMgbGlrZSBpbml0RnJh
bWVCdWZmZXIoKSBhbmQKQEAgLTE2MywyNCArMTYyLDE2IEBAIHZvaWQgSW1hZ2VGcmFtZTo6Y2xl
YXJQaXhlbERhdGEoKQogCiB2b2lkIEltYWdlRnJhbWU6Onplcm9GaWxsUGl4ZWxEYXRhKCkKIHsK
LSAgICBtZW1zZXQobV9ieXRlcywgMCwgbV9zaXplLndpZHRoKCkgKiBtX3NpemUuaGVpZ2h0KCkg
KiBzaXplb2YoUGl4ZWxEYXRhKSk7CisgICAgbV9waXhlbHMtPmNsZWFyKCk7CiAgICAgbV9oYXNB
bHBoYSA9IHRydWU7CiB9CiAKIHZvaWQgSW1hZ2VGcmFtZTo6emVyb0ZpbGxGcmFtZVJlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBBU1NFUlQoSW50UmVjdChJbnRQb2ludCgpLCBtX3Np
emUpLmNvbnRhaW5zKHJlY3QpKTsKLQogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkgKiBz
aXplb2YoUGl4ZWxEYXRhKTsKLSAgICBQaXhlbERhdGEqIHN0YXJ0ID0gbV9ieXRlcyArIChyZWN0
LnkoKSAqIHdpZHRoKCkpICsgcmVjdC54KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0
LmhlaWdodCgpOyArK2kpIHsKLSAgICAgICAgbWVtc2V0KHN0YXJ0LCAwLCByZWN0V2lkdGhJbkJ5
dGVzKTsKLSAgICAgICAgc3RhcnQgKz0gd2lkdGgoKTsKLSAgICB9Ci0KKyAgICBtX3BpeGVscy0+
Y2xlYXJSZWN0KHJlY3QpOwogICAgIHNldEhhc0FscGhhKHRydWUpOwogfQogCkBAIC0xODksMjUg
KzE4MCwyMyBAQCBib29sIEltYWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKGNvbnN0IEltYWdlRnJh
bWUmIG90aGVyKQogICAgIGlmICh0aGlzID09ICZvdGhlcikKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICBtX2JhY2tpbmdTdG9yZSA9IG90aGVyLm1fYmFja2luZ1N0b3JlOwotICAgIG1fYnl0
ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7Ci0gICAgbV9zaXplID0gb3RoZXIubV9zaXplOwot
ICAgIHNldEhhc0FscGhhKG90aGVyLm1faGFzQWxwaGEpOworICAgIGlmIChvdGhlci5tX3BpeGVs
cykKKyAgICAgICAgbV9waXhlbHMgPSBCaXRtYXBQaXhlbHM6OmNyZWF0ZSgqb3RoZXIubV9waXhl
bHMuZ2V0KCkpOworICAgIGVsc2UKKyAgICAgICAgbV9waXhlbHMgPSBudWxscHRyOwogICAgIHJl
dHVybiB0cnVlOwogfQogCiBib29sIEltYWdlRnJhbWU6OnNldFNpemUoaW50IG5ld1dpZHRoLCBp
bnQgbmV3SGVpZ2h0KQogewotICAgIEFTU0VSVCghd2lkdGgoKSAmJiAhaGVpZ2h0KCkpOwotICAg
IHNpemVfdCBiYWNraW5nU3RvcmVTaXplID0gbmV3V2lkdGggKiBuZXdIZWlnaHQ7Ci0gICAgaWYg
KCFtX2JhY2tpbmdTdG9yZS50cnlSZXNlcnZlQ2FwYWNpdHkoYmFja2luZ1N0b3JlU2l6ZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2JhY2tpbmdTdG9yZS5yZXNpemUoYmFja2luZ1N0
b3JlU2l6ZSk7Ci0gICAgbV9ieXRlcyA9IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsKLSAgICBtX3Np
emUgPSBJbnRTaXplKG5ld1dpZHRoLCBuZXdIZWlnaHQpOworICAgIEFTU0VSVCghbV9waXhlbHMp
OworICAgIG1fcGl4ZWxzID0gQml0bWFwUGl4ZWxzOjpjcmVhdGUoSW50U2l6ZShuZXdXaWR0aCwg
bmV3SGVpZ2h0KSwgbV9wcmVtdWx0aXBseUFscGhhKTsKKyAgICByZXR1cm4gbV9waXhlbHMgIT0g
bnVsbHB0cjsKK30KIAotICAgIHplcm9GaWxsUGl4ZWxEYXRhKCk7Ci0gICAgcmV0dXJuIHRydWU7
Cit2b2lkIEltYWdlRnJhbWU6OmNvcHlSb3dOVGltZXMoaW50IHN0YXJ0WCwgaW50IGVuZFgsIGlu
dCBzdGFydFksIGludCBlbmRZKQoreworICAgIG1fcGl4ZWxzLT5yZXBlYXRGaXJzdFJvdyhJbnRS
ZWN0KHN0YXJ0WCwgc3RhcnRZLCBlbmRYIC1zdGFydFggLCBlbmRZIC0gc3RhcnRZKSk7CiB9CiAK
IGJvb2wgSW1hZ2VGcmFtZTo6aGFzQWxwaGEoKSBjb25zdApAQCAtMjkxLDcgKzI4MCw3IEBAIHVu
c2lnbmVkIEltYWdlRGVjb2Rlcjo6ZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25z
dAogICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpIDw9IGluZGV4KQogICAgICAgICBy
ZXR1cm4gMDsKICAgICAvLyBGSVhNRTogVXNlIHRoZSBkaW1lbnNpb24gb2YgdGhlIHJlcXVlc3Rl
ZCBmcmFtZS4KLSAgICByZXR1cm4gbV9zaXplLmFyZWEoKSAqIHNpemVvZihJbWFnZUZyYW1lOjpQ
aXhlbERhdGEpOworICAgIHJldHVybiBtX3NpemUuYXJlYSgpICogc2l6ZW9mKFJHQkEzMik7CiB9
CiAKIGZsb2F0IEltYWdlRGVjb2Rlcjo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaAppbmRleCAyZjhlZWUxNzgxZDE2MmQ4NmM0OWZlMWRhYzcyYTJlN2U0MGE1ZDZk
Li4zYmUzZmVlZTA5NGZhZjAzYmMwZTk2ZDgyMGExMWExN2Y0YTRjZmM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaApA
QCAtMjgsNiArMjgsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkJpdG1hcFBpeGVs
cy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCkBAIC01Nyw3ICs1OCw2IEBAIHVzaW5nIENvbG9yUHJv
ZmlsZSA9IFZlY3RvcjxjaGFyPjsKICAgICAgICAgICAgIERpc3Bvc2VPdmVyd3JpdGVQcmV2aW91
cyAgLy8gQ2xlYXIgZnJhbWUgdG8gcHJldmlvdXMgZnJhbWVidWZmZXIKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udGVudHMKICAgICAgICAgfTsKLSAgICAgICAg
dHlwZWRlZiB1bnNpZ25lZCBQaXhlbERhdGE7CiAKICAgICAgICAgSW1hZ2VGcmFtZSgpOwogCkBA
IC04MCwzMCArODAsMjQgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAg
ICAgICAvLyBDb3BpZXMgdGhlIHBpeGVsIGRhdGEgYXQgWyhzdGFydFgsIHN0YXJ0WSksIChlbmRY
LCBzdGFydFkpKSB0byB0aGUKICAgICAgICAgLy8gc2FtZSBYLWNvb3JkaW5hdGVzIG9uIGVhY2gg
c3Vic2VxdWVudCByb3cgdXAgdG8gYnV0IG5vdCBpbmNsdWRpbmcKICAgICAgICAgLy8gZW5kWS4K
LSAgICAgICAgdm9pZCBjb3B5Um93TlRpbWVzKGludCBzdGFydFgsIGludCBlbmRYLCBpbnQgc3Rh
cnRZLCBpbnQgZW5kWSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHN0YXJ0WCA8IHdp
ZHRoKCkpOwotICAgICAgICAgICAgQVNTRVJUKGVuZFggPD0gd2lkdGgoKSk7Ci0gICAgICAgICAg
ICBBU1NFUlQoc3RhcnRZIDwgaGVpZ2h0KCkpOwotICAgICAgICAgICAgQVNTRVJUKGVuZFkgPD0g
aGVpZ2h0KCkpOwotICAgICAgICAgICAgY29uc3QgaW50IHJvd0J5dGVzID0gKGVuZFggLSBzdGFy
dFgpICogc2l6ZW9mKFBpeGVsRGF0YSk7Ci0gICAgICAgICAgICBjb25zdCBQaXhlbERhdGEqIGNv
bnN0IHN0YXJ0QWRkciA9IGdldEFkZHIoc3RhcnRYLCBzdGFydFkpOwotICAgICAgICAgICAgZm9y
IChpbnQgZGVzdFkgPSBzdGFydFkgKyAxOyBkZXN0WSA8IGVuZFk7ICsrZGVzdFkpCi0gICAgICAg
ICAgICAgICAgbWVtY3B5KGdldEFkZHIoc3RhcnRYLCBkZXN0WSksIHN0YXJ0QWRkciwgcm93Qnl0
ZXMpOwotICAgICAgICB9CisgICAgICAgIHZvaWQgY29weVJvd05UaW1lcyhpbnQgc3RhcnRYLCBp
bnQgZW5kWCwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOwogCiAgICAgICAgIC8vIEFsbG9jYXRlcyBz
cGFjZSBmb3IgdGhlIHBpeGVsIGRhdGEuICBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IHBpeGVs
cwogICAgICAgICAvLyBhcmUgd3JpdHRlbi4gIE11c3Qgb25seSBiZSBjYWxsZWQgb25jZS4gIFJl
dHVybnMgd2hldGhlciBhbGxvY2F0aW9uCiAgICAgICAgIC8vIHN1Y2NlZWRlZC4KICAgICAgICAg
Ym9vbCBzZXRTaXplKGludCBuZXdXaWR0aCwgaW50IG5ld0hlaWdodCk7CisgICAgICAgIAorICAg
ICAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3BpeGVscy0+c2l6ZSgpOyB9CiAK
ICAgICAgICAgLy8gUmV0dXJucyBhIGNhbGxlci1vd25lZCBwb2ludGVyIHRvIHRoZSB1bmRlcmx5
aW5nIG5hdGl2ZSBpbWFnZSBkYXRhLgogICAgICAgICAvLyAoQWN0dWFsIHVzZTogVGhpcyBwb2lu
dGVyIHdpbGwgYmUgb3duZWQgYnkgQml0bWFwSW1hZ2UgYW5kIGZyZWVkIGluCiAgICAgICAgIC8v
IEZyYW1lRGF0YTo6Y2xlYXIoKSkuCi0gICAgICAgIE5hdGl2ZUltYWdlUHRyIGFzTmV3TmF0aXZl
SW1hZ2UoKSBjb25zdDsKKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIgYXNOZXdOYXRpdmVJbWFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxzLT5pbWFnZSgpOyB9CisKKyAgICAgICAgaW5saW5lIEJp
dG1hcFBpeGVscyogcGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gbV9waXhlbHMgPyBtX3BpeGVscy5n
ZXQoKSA6IG51bGxwdHI7IH0KKyAgICAgICAgaW5saW5lIGJvb2wgaGFzUGl4ZWxzKCkgY29uc3Qg
eyByZXR1cm4gcGl4ZWxzKCk7IH0KIAogICAgICAgICBib29sIGhhc0FscGhhKCkgY29uc3Q7Ci0g
ICAgICAgIGNvbnN0IEludFJlY3QmIG9yaWdpbmFsRnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9vcmlnaW5hbEZyYW1lUmVjdDsgfQogICAgICAgICBGcmFtZVN0YXR1cyBzdGF0dXMoKSBjb25z
dCB7IHJldHVybiBtX3N0YXR1czsgfQogICAgICAgICB1bnNpZ25lZCBkdXJhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KICAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNw
b3NhbE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcG9zYWxNZXRob2Q7IH0KQEAgLTExMSw3
ICsxMDUsNiBAQCB1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hhcj47CiAKICAgICAgICAg
dm9pZCBzZXRIYXNBbHBoYShib29sIGFscGhhKTsKICAgICAgICAgdm9pZCBzZXRDb2xvclByb2Zp
bGUoY29uc3QgQ29sb3JQcm9maWxlJik7Ci0gICAgICAgIHZvaWQgc2V0T3JpZ2luYWxGcmFtZVJl
Y3QoY29uc3QgSW50UmVjdCYgcikgeyBtX29yaWdpbmFsRnJhbWVSZWN0ID0gcjsgfQogICAgICAg
ICB2b2lkIHNldFN0YXR1cyhGcmFtZVN0YXR1cyBzdGF0dXMpOwogICAgICAgICB2b2lkIHNldER1
cmF0aW9uKHVuc2lnbmVkIGR1cmF0aW9uKSB7IG1fZHVyYXRpb24gPSBkdXJhdGlvbjsgfQogICAg
ICAgICB2b2lkIHNldERpc3Bvc2FsTWV0aG9kKEZyYW1lRGlzcG9zYWxNZXRob2QgbWV0aG9kKSB7
IG1fZGlzcG9zYWxNZXRob2QgPSBtZXRob2Q7IH0KQEAgLTExOSwxMDggKzExMiwzMiBAQCB1c2lu
ZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hhcj47CiAKICAgICAgICAgaW5saW5lIHZvaWQgc2V0
UkdCQShpbnQgeCwgaW50IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVu
c2lnbmVkIGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHNldFJHQkEoZ2V0QWRkcih4LCB5KSwg
ciwgZywgYiwgYSk7CisgICAgICAgICAgICBtX3BpeGVscy0+c2V0UkdCQSh4LCB5LCByLCBnLCBi
LCBhKTsKICAgICAgICAgfQogCi0gICAgICAgIGlubGluZSBQaXhlbERhdGEqIGdldEFkZHIoaW50
IHgsIGludCB5KQorICAgICAgICBpbmxpbmUgUkdCQTMyKiBnZXRBZGRyKGludCB4LCBpbnQgeSkK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXMgKyAoeSAqIHdpZHRoKCkpICsg
eDsKKyAgICAgICAgICAgIHJldHVybiBtX3BpeGVscy0+YXQoeCwgeSk7CiAgICAgICAgIH0KIAot
ICAgICAgICBpbmxpbmUgYm9vbCBoYXNQaXhlbERhdGEoKSBjb25zdAorICAgICAgICBpbmxpbmUg
dm9pZCBzZXRSR0JBKFJHQkEzMiogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWdu
ZWQgYiwgdW5zaWduZWQgYSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXM7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBVc2UgZml4IHBvaW50IG11bHRpcGxpZXIgaW5zdGVh
ZCBvZiBpbnRlZ2VyIGRpdmlzaW9uIG9yIGZsb2F0aW5nIHBvaW50IG1hdGguCi0gICAgICAgIC8v
IFRoaXMgbXVsdGlwbGVyIHByb2R1Y2VzIGV4YWN0bHkgdGhlIHNhbWUgcmVzdWx0IGZvciBhbGwg
dmFsdWVzIGluIHJhbmdlIDAgLSAyNTUuCi0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBm
aXhQb2ludFNoaWZ0ID0gMjQ7Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmaXhQb2lu
dE11bHQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oMS4wIC8gMjU1LjAgKiAoMSA8PCBmaXhQb2lu
dFNoaWZ0KSkgKyAxOwotICAgICAgICAvLyBNdWx0aXBsaWVzIHVuc2lnbmVkIHZhbHVlIGJ5IGZp
eHBvaW50IHZhbHVlIGFuZCBjb252ZXJ0cyBiYWNrIHRvIHVuc2lnbmVkLgotICAgICAgICBzdGF0
aWMgdW5zaWduZWQgZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KHVuc2lnbmVkIGZpeGVkLCB1bnNp
Z25lZCB2KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gIChmaXhlZCAqIHYpID4+IGZp
eFBvaW50U2hpZnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKFBp
eGVsRGF0YSogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWdu
ZWQgYSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAmJiBh
IDwgMjU1KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFhKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICpkZXN0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhTXVsdCA9IGEgKiBmaXhQb2ludE11
bHQ7Ci0gICAgICAgICAgICAgICAgciA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShyLCBhbHBo
YU11bHQpOwotICAgICAgICAgICAgICAgIGcgPSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkoZywg
YWxwaGFNdWx0KTsKLSAgICAgICAgICAgICAgICBiID0gZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5
KGIsIGFscGhhTXVsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqZGVzdCA9IChhIDw8
IDI0IHwgciA8PCAxNiB8IGcgPDwgOCB8IGIpOworICAgICAgICAgICAgbV9waXhlbHMtPnNldFJH
QkEoZGVzdCwgciwgZywgYiwgYSk7CiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShBUE5HKQotICAg
ICAgICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRpdmlkZTI1NSh1bnNpZ25lZCBhKQorICAgICAg
ICBpbmxpbmUgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVk
IGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biAoYSArIChhID4+IDgpICsgMSkgPj4gODsKLSAgICAgICAgfQotCi0gICAgICAgIGlubGluZSB2
b2lkIG92ZXJSR0JBKFBpeGVsRGF0YSogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5z
aWduZWQgYiwgdW5zaWduZWQgYSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFhKQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgaWYgKGEgPCAyNTUpIHsKLSAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBhRGVzdCA9ICgoKmRlc3QpID4+IDI0KSAmIDI1NTsKLSAgICAg
ICAgICAgICAgICBpZiAoYURlc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgckRl
c3QgPSAoKCpkZXN0KSA+PiAxNikgJiAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGdEZXN0ID0gKCgqZGVzdCkgPj4gOCkgJiAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGJEZXN0ID0gKCpkZXN0KSAmIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
YUF1eCA9IDI1NSAtIGE7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFs
cGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByRGVzdCA9IGRpdmlkZTI1NShyRGVzdCAq
IGFEZXN0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdEZXN0ID0gZGl2aWRlMjU1KGdEZXN0
ICogYURlc3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgYkRlc3QgPSBkaXZpZGUyNTUoYkRl
c3QgKiBhRGVzdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ciA9IGRpdmlkZTI1NShyICogYSArIHJEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAg
IGcgPSBkaXZpZGUyNTUoZyAqIGEgKyBnRGVzdCAqIGFBdXgpOwotICAgICAgICAgICAgICAgICAg
ICBiID0gZGl2aWRlMjU1KGIgKiBhICsgYkRlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAgICAg
ICAgYSArPSBkaXZpZGUyNTUoYURlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFtX3ByZW11bHRpcGx5QWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAociAq
IDI1NSArIGEgLSAxKSAvIGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnID0gKGcgKiAyNTUg
KyBhIC0gMSkgLyBhOwotICAgICAgICAgICAgICAgICAgICAgICAgYiA9IChiICogMjU1ICsgYSAt
IDEpIC8gYTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAobV9wcmVtdWx0aXBseUFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBkaXZpZGUy
NTUociAqIGEpOwotICAgICAgICAgICAgICAgICAgICBnID0gZGl2aWRlMjU1KGcgKiBhKTsKLSAg
ICAgICAgICAgICAgICAgICAgYiA9IGRpdmlkZTI1NShiICogYSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3QgPSAoYSA8PCAyNCB8IHIgPDwgMTYg
fCBnIDw8IDggfCBiKTsKKyAgICAgICAgICAgIG1fcGl4ZWxzLT5vdmVyUkdCQShkZXN0LCByLCBn
LCBiLCBhKTsKICAgICAgICAgfQogI2VuZGlmCiAKICAgICBwcml2YXRlOgotICAgICAgICBpbnQg
d2lkdGgoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9zaXplLndpZHRo
KCk7Ci0gICAgICAgIH0KKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gbV9w
aXhlbHM7CiAKLSAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBtX3NpemUuaGVpZ2h0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBWZWN0b3I8
UGl4ZWxEYXRhPiBtX2JhY2tpbmdTdG9yZTsKLSAgICAgICAgUGl4ZWxEYXRhKiBtX2J5dGVzOyAv
LyBUaGUgbWVtb3J5IGlzIGJhY2tlZCBieSBtX2JhY2tpbmdTdG9yZS4KLSAgICAgICAgSW50U2l6
ZSBtX3NpemU7CiAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIG1fY29sb3JQcm9maWxlIGFu
eW1vcmU/CiAgICAgICAgIENvbG9yUHJvZmlsZSBtX2NvbG9yUHJvZmlsZTsKICAgICAgICAgYm9v
bCBtX2hhc0FscGhhOwotICAgICAgICBJbnRSZWN0IG1fb3JpZ2luYWxGcmFtZVJlY3Q7IC8vIFRo
aXMgd2lsbCBhbHdheXMganVzdCBiZSB0aGUgZW50aXJlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gYnVmZmVyIGV4Y2VwdCBmb3IgR0lGIGZyYW1lcyB3aG9zZQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yaWdpbmFsIHJlY3Qgd2FzIHNt
YWxsZXIgdGhhbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBv
dmVyYWxsIGltYWdlIHNpemUuCiAgICAgICAgIEZyYW1lU3RhdHVzIG1fc3RhdHVzOwogICAgICAg
ICB1bnNpZ25lZCBtX2R1cmF0aW9uOwogICAgICAgICBGcmFtZURpc3Bvc2FsTWV0aG9kIG1fZGlz
cG9zYWxNZXRob2Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcAppbmRleCA1YzAwNTUzNGVjZDky
MTM0YTEzYjMyOTU4OTI3NzkwZjA3YWQwZjgxLi5mOTE4Y2YzMjQyOTY3ZjcyN2E3NTM3YTNiNGE2
NWYxMjk0OWM3NmMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAKQEAgLTg2LDkgKzg2LDYg
QEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6ZGVjb2RlQk1QKGJvb2wgb25seVNpemUpCiAgICAgICAg
IC8vIHRoZXNlIDBzIGNvdWxkIGFjdHVhbGx5IHNob3cgdGhyb3VnaC4KICAgICAgICAgbV9idWZm
ZXItPnNldEhhc0FscGhhKGZhbHNlKTsKIAotICAgICAgICAvLyBGb3IgQk1QcywgdGhlIGZyYW1l
IGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgotICAgICAgICBtX2J1ZmZlci0+c2V0T3Jp
Z2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBtX3BhcmVudC0+c2l6ZSgpKSk7Ci0K
ICAgICAgICAgaWYgKCFtX2lzVG9wRG93bikKICAgICAgICAgICAgIG1fY29vcmQuc2V0WShtX3Bh
cmVudC0+c2l6ZSgpLmhlaWdodCgpIC0gMSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vQml0bWFwUGl4ZWxzQ2Fpcm8uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vQml0bWFwUGl4
ZWxzQ2Fpcm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVhYWY4YTBhMzZiMThjYmY3Mjc3ZDJjMmUyNmViNDE3
MTI1NjAwZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHAKQEAgLTAsMCArMSw0MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkJpdG1hcFBpeGVscy5oIgorCisjaW5jbHVkZSA8Y2Fpcm8u
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBQaXhlbHM6
OmltYWdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9jcmVhdGVfZm9yX2RhdGEoCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hh
cio+KGNvbnN0X2Nhc3Q8UkdCQTMyKj4obV9waXhlbHMpKSwKKyAgICAgICAgQ0FJUk9fRk9STUFU
X0FSR0IzMiwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSwgc2l6ZSgpLndpZHRoKCkg
KiBzaXplb2YoUkdCQTMyKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURl
Y29kZXJDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9j
YWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDdiNDEyOTVmODU3MzU4ZmJiZjM1YzFiMDUyNWU4ZDZjYzM1MjBmNTguLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgot
Ci0jaW5jbHVkZSA8Y2Fpcm8uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1OYXRpdmVJbWFn
ZVB0ciBJbWFnZUZyYW1lOjphc05ld05hdGl2ZUltYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
YWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoCi0gICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGNvbnN0X2Nhc3Q8UGl4ZWxEYXRhKj4obV9i
eXRlcykpLAotICAgICAgICBDQUlST19GT1JNQVRfQVJHQjMyLCB3aWR0aCgpLCBoZWlnaHQoKSwg
d2lkdGgoKSAqIHNpemVvZihQaXhlbERhdGEpKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dp
Zi9HSUZJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKaW5kZXggOWY5OTJhN2JlMWQ2NjcyMjY3NWMy
ZTg1NGFkMTg5MWU2MGY4NTc3Yy4uMThjMzI0NTRlOWU2NjlkN2YxMzcxNzZjN2E3NThiYmJhOGFh
MTlmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Z2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKQEAgLTIxMywxMCArMjEzLDEwIEBA
IGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4
LCBjb25zdCBWZWN0b3I8dW5zaWduZWQKIAogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lIGlm
IG5lY2Vzc2FyeS4KICAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVb
ZnJhbWVJbmRleF07Ci0gICAgaWYgKCgoYnVmZmVyLnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZy
YW1lRW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkpIHx8ICFidWZmZXIuaGFz
UGl4ZWxEYXRhKCkpCisgICAgaWYgKCgoYnVmZmVyLnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZy
YW1lRW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkpIHx8ICFidWZmZXIuaGFz
UGl4ZWxzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEltYWdlRnJhbWU6OlBpeGVs
RGF0YSogY3VycmVudEFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcih4QmVnaW4sIHlCZWdpbik7Cisg
ICAgUkdCQTMyKiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHhCZWdpbiwgeUJlZ2lu
KTsKICAgICAvLyBXcml0ZSBvbmUgcm93J3Mgd29ydGggb2YgZGF0YSBpbnRvIHRoZSBmcmFtZS4g
IAogICAgIGZvciAoaW50IHggPSB4QmVnaW47IHggPCB4RW5kOyArK3gpIHsKICAgICAgICAgY29u
c3QgdW5zaWduZWQgY2hhciBzb3VyY2VWYWx1ZSA9IHJvd0J1ZmZlclsobV9zY2FsZWQgPyBtX3Nj
YWxlZENvbHVtbnNbeF0gOiB4KSAtIGZyYW1lQ29udGV4dC0+eE9mZnNldF07CkBAIC0yNjAsNyAr
MjYwLDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUodW5zaWduZWQgZnJh
bWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwKICAgICBpZiAoIW1fY3VycmVudEJ1ZmZl
clNhd0FscGhhKSB7CiAgICAgICAgIC8vIFRoZSB3aG9sZSBmcmFtZSB3YXMgbm9uLXRyYW5zcGFy
ZW50LCBzbyBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGVudGlyZQogICAgICAgICAvLyByZXN1bHRp
bmcgYnVmZmVyIHdhcyBub24tdHJhbnNwYXJlbnQsIGFuZCB3ZSBjYW4gc2V0SGFzQWxwaGEoZmFs
c2UpLgotICAgICAgICBpZiAoYnVmZmVyLm9yaWdpbmFsRnJhbWVSZWN0KCkuY29udGFpbnMoSW50
UmVjdChJbnRQb2ludCgpLCBzY2FsZWRTaXplKCkpKSkKKyAgICAgICAgaWYgKGJ1ZmZlci5waXhl
bHMoKS0+cmVjdCgpLmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkp
CiAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwogICAgICAgICBlbHNlIGlm
IChmcmFtZUluZGV4KSB7CiAgICAgICAgICAgICAvLyBUcmlja3kgY2FzZS4gIFRoaXMgZnJhbWUg
ZG9lcyBub3QgaGF2ZSBhbHBoYSBvbmx5IGlmIGV2ZXJ5d2hlcmUKQEAgLTI4Myw3ICsyODMsNyBA
QCBib29sIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpZ25lZCBmcmFtZUluZGV4
LCB1bnNpZ25lZCBmcmFtZUR1cmF0aW9uLAogICAgICAgICAgICAgLy8gVGhlIG9ubHkgcmVtYWlu
aW5nIGNhc2UgaXMgYSBEaXNwb3NlT3ZlcndyaXRlQmdjb2xvciBmcmFtZS4gIElmCiAgICAgICAg
ICAgICAvLyBpdCBoYWQgbm8gYWxwaGEsIGFuZCBpdHMgcmVjdCBpcyBjb250YWluZWQgaW4gdGhl
IGN1cnJlbnQgZnJhbWUncwogICAgICAgICAgICAgLy8gcmVjdCwgd2Uga25vdyB0aGUgY3VycmVu
dCBmcmFtZSBoYXMgbm8gYWxwaGEuCi0gICAgICAgICAgICBpZiAoKHByZXZCdWZmZXItPmRpc3Bv
c2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zZU92ZXJ3cml0ZUJnY29sb3IpICYmICFw
cmV2QnVmZmVyLT5oYXNBbHBoYSgpICYmIGJ1ZmZlci5vcmlnaW5hbEZyYW1lUmVjdCgpLmNvbnRh
aW5zKHByZXZCdWZmZXItPm9yaWdpbmFsRnJhbWVSZWN0KCkpKQorICAgICAgICAgICAgaWYgKChw
cmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3Jp
dGVCZ2NvbG9yKSAmJiAhcHJldkJ1ZmZlci0+aGFzQWxwaGEoKSAmJiBidWZmZXIucGl4ZWxzKCkt
PnJlY3QoKS5jb250YWlucyhwcmV2QnVmZmVyLT5waXhlbHMoKS0+cmVjdCgpKSkKICAgICAgICAg
ICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwogICAgICAgICB9CiAgICAgfQpAQCAt
MzUzLDExICszNTMsNiBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVu
c2lnbmVkIGZyYW1lSW5kZXgpCiAgICAgICAgIGZyYW1lUmVjdC5zZXRIZWlnaHQoc2l6ZSgpLmhl
aWdodCgpIC0gZnJhbWVDb250ZXh0LT55T2Zmc2V0KTsKIAogICAgIEltYWdlRnJhbWUqIGNvbnN0
IGJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07Ci0gICAgaW50IGxlZnQg
PSB1cHBlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QueCgpKTsKLSAgICBpbnQgcmlnaHQgPSBsb3dl
ckJvdW5kU2NhbGVkWChmcmFtZVJlY3QubWF4WCgpLCBsZWZ0KTsKLSAgICBpbnQgdG9wID0gdXBw
ZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWN0LnkoKSk7Ci0gICAgaW50IGJvdHRvbSA9IGxvd2VyQm91
bmRTY2FsZWRZKGZyYW1lUmVjdC5tYXhZKCksIHRvcCk7Ci0gICAgYnVmZmVyLT5zZXRPcmlnaW5h
bEZyYW1lUmVjdChJbnRSZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3Ap
KTsKIAogICAgIGlmICghZnJhbWVJbmRleCkgewogICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJz
dCBmcmFtZSwgc28gd2UncmUgbm90IHJlbHlpbmcgb24gYW55IHByZXZpb3VzIGRhdGEuCkBAIC0z
ODcsNyArMzgyLDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bnNp
Z25lZCBmcmFtZUluZGV4KQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gV2Ugd2Fu
dCB0byBjbGVhciB0aGUgcHJldmlvdXMgZnJhbWUgdG8gdHJhbnNwYXJlbnQsIHdpdGhvdXQKICAg
ICAgICAgICAgIC8vIGFmZmVjdGluZyBwaXhlbHMgaW4gdGhlIGltYWdlIG91dHNpZGUgb2YgdGhl
IGZyYW1lLgotICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcHJldlJlY3QgPSBwcmV2QnVmZmVy
LT5vcmlnaW5hbEZyYW1lUmVjdCgpOworICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcHJldlJl
Y3QgPSBwcmV2QnVmZmVyLT5waXhlbHMoKS0+cmVjdCgpOwogICAgICAgICAgICAgY29uc3QgSW50
U2l6ZSYgYnVmZmVyU2l6ZSA9IHNjYWxlZFNpemUoKTsKICAgICAgICAgICAgIGlmICghZnJhbWVJ
bmRleCB8fCBwcmV2UmVjdC5jb250YWlucyhJbnRSZWN0KEludFBvaW50KCksIHNjYWxlZFNpemUo
KSkpKSB7CiAgICAgICAgICAgICAgICAgLy8gQ2xlYXJpbmcgdGhlIGZpcnN0IGZyYW1lLCBvciBh
IGZyYW1lIHRoZSBzaXplIG9mIHRoZSB3aG9sZQpAQCAtNDAyLDYgKzM5NywxMiBAQCBib29sIEdJ
RkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuc2lnbmVkIGZyYW1lSW5kZXgpCiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgaW50IGxlZnQgPSB1cHBlckJv
dW5kU2NhbGVkWChmcmFtZVJlY3QueCgpKTsKKyAgICBpbnQgcmlnaHQgPSBsb3dlckJvdW5kU2Nh
bGVkWChmcmFtZVJlY3QubWF4WCgpLCBsZWZ0KTsKKyAgICBpbnQgdG9wID0gdXBwZXJCb3VuZFNj
YWxlZFkoZnJhbWVSZWN0LnkoKSk7CisgICAgaW50IGJvdHRvbSA9IGxvd2VyQm91bmRTY2FsZWRZ
KGZyYW1lUmVjdC5tYXhZKCksIHRvcCk7CisgICAgYnVmZmVyLT5waXhlbHMtPnNldFJlY3QoSW50
UmVjdChsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKSk7CiAKICAgICAvLyBV
cGRhdGUgb3VyIHN0YXR1cyB0byBiZSBwYXJ0aWFsbHkgY29tcGxldGUuCiAgICAgYnVmZmVyLT5z
ZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURl
Y29kZXIuY3BwCmluZGV4IGVlNjZhYzE0ZDRiZTA3Y2E5YWZmYjJhM2FmZjg5ZWJmYTYyZmIxMmUu
Ljk4ZmZlMDIwMjE1Y2M5MzY0NzBlMzEzYzcyZjNiNGE3NTZiNWZhMzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9K
UEVHSW1hZ2VEZWNvZGVyLmNwcApAQCAtNTg4LDcgKzU4OCw3IEBAIGJvb2wgSlBFR0ltYWdlRGVj
b2Rlcjo6c2V0RmFpbGVkKCkKIH0KIAogdGVtcGxhdGUgPEpfQ09MT1JfU1BBQ0UgY29sb3JTcGFj
ZT4KLXZvaWQgc2V0UGl4ZWwoSW1hZ2VGcmFtZSYgYnVmZmVyLCBJbWFnZUZyYW1lOjpQaXhlbERh
dGEqIGN1cnJlbnRBZGRyZXNzLCBKU0FNUEFSUkFZIHNhbXBsZXMsIGludCBjb2x1bW4pCit2b2lk
IHNldFBpeGVsKEltYWdlRnJhbWUmIGJ1ZmZlciwgUkdCQTMyKiBjdXJyZW50QWRkcmVzcywgSlNB
TVBBUlJBWSBzYW1wbGVzLCBpbnQgY29sdW1uKQogewogICAgIEpTQU1QTEUqIGpzYW1wbGUgPSAq
c2FtcGxlcyArIGNvbHVtbiAqIChjb2xvclNwYWNlID09IEpDU19SR0IgPyAzIDogNCk7CiAKQEAg
LTYzMSw3ICs2MzEsNyBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcyhJ
bWFnZUZyYW1lJiBidWZmZXIpCiAgICAgICAgIGlmIChkZXN0WSA8IDApCiAgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgICAgICBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGN1cnJlbnRBZGRyZXNz
ID0gYnVmZmVyLmdldEFkZHIoMCwgZGVzdFkpOworICAgICAgICBSR0JBMzIqIGN1cnJlbnRBZGRy
ZXNzID0gYnVmZmVyLmdldEFkZHIoMCwgZGVzdFkpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsg
eCA8IHdpZHRoOyArK3gpIHsKICAgICAgICAgICAgIHNldFBpeGVsPGNvbG9yU3BhY2U+KGJ1ZmZl
ciwgY3VycmVudEFkZHJlc3MsIHNhbXBsZXMsIGlzU2NhbGVkID8gbV9zY2FsZWRDb2x1bW5zW3hd
IDogeCk7CiAgICAgICAgICAgICArK2N1cnJlbnRBZGRyZXNzOwpAQCAtNjYxLDkgKzY2MSw2IEBA
IGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKCkKICAgICAgICAgLy8gbG9h
ZGluZy4gVGhlIGNvbXBsZXRlZCBpbWFnZSB3aWxsIGJlIG1hcmtlZCBmdWxseSBvcGFxdWUgaW4g
anBlZ0NvbXBsZXRlKCkuCiAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYSh0cnVlKTsKICAgICAg
ICAgYnVmZmVyLnNldENvbG9yUHJvZmlsZShtX2NvbG9yUHJvZmlsZSk7Ci0KLSAgICAgICAgLy8g
Rm9yIEpQRUdzLCB0aGUgZnJhbWUgYWx3YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2UuCi0gICAg
ICAgIGJ1ZmZlci5zZXRPcmlnaW5hbEZyYW1lUmVjdChJbnRSZWN0KEludFBvaW50KCksIHNpemUo
KSkpOwogICAgIH0KIAogICAgIGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QqIGluZm8gPSBtX3JlYWRl
ci0+aW5mbygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAppbmRleCBlNjQ0YTcxMTBlZmNi
NTQwZDg5Y2UxYmE4MTEwMGJjNDgyM2IxOGYyLi41OGYyOTBhMGI0YzJhOWIzMjQ0YmRiMDE4NTM3
MzYwM2RkZDFlOWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcApAQCAtNDUyLDE5ICs0
NTIsMTkgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmhlYWRlckF2YWlsYWJsZSgpCiAgICAgfQog
fQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxSR0IoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRh
KiBkZXN0LCBwbmdfYnl0ZXAgcGl4ZWwpCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxSR0Io
UkdCQTMyKiBkZXN0LCBwbmdfYnl0ZXAgcGl4ZWwpCiB7CiAgICAgKmRlc3QgPSAweEZGMDAwMDAw
VSB8IHBpeGVsWzBdIDw8IDE2IHwgcGl4ZWxbMV0gPDwgOCB8IHBpeGVsWzJdOwogfQogCi1zdGF0
aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxSR0JBKEltYWdlRnJhbWU6OlBpeGVsRGF0YSogZGVzdCwg
cG5nX2J5dGVwIHBpeGVsLCB1bnNpZ25lZCBjaGFyJiBub25Ucml2aWFsQWxwaGFNYXNrKQorc3Rh
dGljIGlubGluZSB2b2lkIHNldFBpeGVsUkdCQShSR0JBMzIqIGRlc3QsIHBuZ19ieXRlcCBwaXhl
bCwgdW5zaWduZWQgY2hhciYgbm9uVHJpdmlhbEFscGhhTWFzaykKIHsKICAgICB1bnNpZ25lZCBj
aGFyIGEgPSBwaXhlbFszXTsKICAgICAqZGVzdCA9IGEgPDwgMjQgfCBwaXhlbFswXSA8PCAxNiB8
IHBpeGVsWzFdIDw8IDggfCBwaXhlbFsyXTsKICAgICBub25Ucml2aWFsQWxwaGFNYXNrIHw9ICgy
NTUgLSBhKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldFBpeGVsUHJlbXVsdGlwbGllZFJH
QkEoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBkZXN0LCBwbmdfYnl0ZXAgcGl4ZWwsIHVuc2lnbmVk
IGNoYXImIG5vblRyaXZpYWxBbHBoYU1hc2spCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxQ
cmVtdWx0aXBsaWVkUkdCQShSR0JBMzIqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCwgdW5zaWduZWQg
Y2hhciYgbm9uVHJpdmlhbEFscGhhTWFzaykKIHsKICAgICB1bnNpZ25lZCBjaGFyIGEgPSBwaXhl
bFszXTsKICAgICB1bnNpZ25lZCBjaGFyIHIgPSBmYXN0RGl2aWRlQnkyNTUocGl4ZWxbMF0gKiBh
KTsKQEAgLTUxMyw4ICs1MTMsNiBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxl
KHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgcm93SW5kZXgsCiAgICAgICAgICAg
ICBpbml0RnJhbWVCdWZmZXIobV9jdXJyZW50RnJhbWUpOwogICAgICAgICBlbHNlCiAjZW5kaWYK
LSAgICAgICAgLy8gRm9yIFBOR3MsIHRoZSBmcmFtZSBhbHdheXMgZmlsbHMgdGhlIGVudGlyZSBp
bWFnZS4KLSAgICAgICAgYnVmZmVyLnNldE9yaWdpbmFsRnJhbWVSZWN0KEludFJlY3QoSW50UG9p
bnQoKSwgc2l6ZSgpKSk7CiAgICAgfQogCiAgICAgLyogbGlicG5nIGNvbW1lbnRzIChoZXJlIHRv
IGV4cGxhaW4gd2hhdCBmb2xsb3dzKS4KQEAgLTU3Myw3ICs1NzEsNyBAQCB2b2lkIFBOR0ltYWdl
RGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQg
cm93SW5kZXgsCiAgICAgfQogCiAgICAgLy8gV3JpdGUgdGhlIGRlY29kZWQgcm93IHBpeGVscyB0
byB0aGUgZnJhbWUgYnVmZmVyLgotICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogYWRkcmVzcyA9
IGJ1ZmZlci5nZXRBZGRyKDAsIHkpOworICAgIFJHQkEzMiogYWRkcmVzcyA9IGJ1ZmZlci5nZXRB
ZGRyKDAsIHkpOwogICAgIGludCB3aWR0aCA9IHNjYWxlZFNpemUoKS53aWR0aCgpOwogICAgIHVu
c2lnbmVkIGNoYXIgbm9uVHJpdmlhbEFscGhhTWFzayA9IDA7CiAKQEAgLTgzNCwxMSArODMyLDYg
QEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcihzaXplX3QgZnJhbWVJbmRl
eCkKICAgICAgICAgZnJhbWVSZWN0LnNldEhlaWdodChzaXplKCkuaGVpZ2h0KCkgLSBtX3lPZmZz
ZXQpOwogCiAgICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1l
SW5kZXhdOwotICAgIGludCBsZWZ0ID0gdXBwZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0LngoKSk7
Ci0gICAgaW50IHJpZ2h0ID0gbG93ZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0Lm1heFgoKSwgbGVm
dCk7Ci0gICAgaW50IHRvcCA9IHVwcGVyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC55KCkpOwotICAg
IGludCBib3R0b20gPSBsb3dlckJvdW5kU2NhbGVkWShmcmFtZVJlY3QubWF4WSgpLCB0b3ApOwot
ICAgIGJ1ZmZlci5zZXRPcmlnaW5hbEZyYW1lUmVjdChJbnRSZWN0KGxlZnQsIHRvcCwgcmlnaHQg
LSBsZWZ0LCBib3R0b20gLSB0b3ApKTsKIAogICAgIC8vIFRoZSBzdGFydGluZyBzdGF0ZSBmb3Ig
dGhpcyBmcmFtZSBkZXBlbmRzIG9uIHRoZSBwcmV2aW91cyBmcmFtZSdzCiAgICAgLy8gZGlzcG9z
YWwgbWV0aG9kLgpAQCAtODYyLDcgKzg1NSw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjppbml0
RnJhbWVCdWZmZXIoc2l6ZV90IGZyYW1lSW5kZXgpCiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8g
V2Ugd2FudCB0byBjbGVhciB0aGUgcHJldmlvdXMgZnJhbWUgdG8gdHJhbnNwYXJlbnQsIHdpdGhv
dXQKICAgICAgICAgLy8gYWZmZWN0aW5nIHBpeGVscyBpbiB0aGUgaW1hZ2Ugb3V0c2lkZSBvZiB0
aGUgZnJhbWUuCi0gICAgICAgIGNvbnN0IEludFJlY3QmIHByZXZSZWN0ID0gcHJldkJ1ZmZlci0+
b3JpZ2luYWxGcmFtZVJlY3QoKTsKKyAgICAgICAgY29uc3QgSW50UmVjdCYgcHJldlJlY3QgPSBw
cmV2QnVmZmVyLT5waXhlbHMoKS0+cmVjdCgpOwogICAgICAgICBpZiAoIWZyYW1lSW5kZXggfHwg
cHJldlJlY3QuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzY2FsZWRTaXplKCkpKSkgewog
ICAgICAgICAgICAgLy8gQ2xlYXJpbmcgdGhlIGZpcnN0IGZyYW1lLCBvciBhIGZyYW1lIHRoZSBz
aXplIG9mIHRoZSB3aG9sZQogICAgICAgICAgICAgLy8gaW1hZ2UsIHJlc3VsdHMgaW4gYSBjb21w
bGV0ZWx5IGVtcHR5IGltYWdlLgpAQCAtODczLDYgKzg2NiwxMiBAQCB2b2lkIFBOR0ltYWdlRGVj
b2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHNpemVfdCBmcmFtZUluZGV4KQogICAgICAgICAgICAgYnVm
ZmVyLnplcm9GaWxsRnJhbWVSZWN0KHByZXZSZWN0KTsKICAgICAgICAgfQogICAgIH0KKyAgICAK
KyAgICBpbnQgbGVmdCA9IHVwcGVyQm91bmRTY2FsZWRYKGZyYW1lUmVjdC54KCkpOworICAgIGlu
dCByaWdodCA9IGxvd2VyQm91bmRTY2FsZWRYKGZyYW1lUmVjdC5tYXhYKCksIGxlZnQpOworICAg
IGludCB0b3AgPSB1cHBlckJvdW5kU2NhbGVkWShmcmFtZVJlY3QueSgpKTsKKyAgICBpbnQgYm90
dG9tID0gbG93ZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWN0Lm1heFkoKSwgdG9wKTsKKyAgICBidWZm
ZXIucGl4ZWxzLT5zZXRSZWN0KEludFJlY3QobGVmdCwgdG9wLCByaWdodCAtIGxlZnQsIGJvdHRv
bSAtIHRvcCkpOwogfQogCiB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCkBA
IC04ODYsNyArODg1LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUoKQog
ICAgIHBuZ19ieXRlcCBpbnRlcmxhY2VCdWZmZXIgPSBtX3JlYWRlci0+aW50ZXJsYWNlQnVmZmVy
KCk7CiAKICAgICBpZiAobV9jdXJyZW50RnJhbWUgJiYgaW50ZXJsYWNlQnVmZmVyKSB7Ci0gICAg
ICAgIGNvbnN0IEludFJlY3QmIHJlY3QgPSBidWZmZXIub3JpZ2luYWxGcmFtZVJlY3QoKTsKKyAg
ICAgICAgY29uc3QgSW50UmVjdCYgcmVjdCA9IGJ1ZmZlci5waXhlbHMoKS0+cmVjdCgpOwogICAg
ICAgICBib29sIGhhc0FscGhhID0gbV9yZWFkZXItPmhhc0FscGhhKCk7CiAgICAgICAgIHVuc2ln
bmVkIGNvbG9yQ2hhbm5lbHMgPSBoYXNBbHBoYSA/IDQgOiAzOwogICAgICAgICBib29sIG5vblRy
aXZpYWxBbHBoYSA9IGZhbHNlOwpAQCAtODk2LDcgKzg5NSw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNv
ZGVyOjpmcmFtZUNvbXBsZXRlKCkKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBM
SU5HKQogICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHJlY3QubWF4WSgpIC0gcmVjdC55KCk7
ICsreSkgewogICAgICAgICAgICAgcG5nX2J5dGVwIHJvdyA9IGludGVybGFjZUJ1ZmZlciArICht
X3NjYWxlZCA/IG1fc2NhbGVkUm93c1t5XSA6IHkpICogY29sb3JDaGFubmVscyAqIHNpemUoKS53
aWR0aCgpOwotICAgICAgICAgICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBhZGRyZXNzID0gYnVm
ZmVyLmdldEFkZHIocmVjdC54KCksIHkgKyByZWN0LnkoKSk7CisgICAgICAgICAgICBSR0JBMzIq
IGFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcihyZWN0LngoKSwgeSArIHJlY3QueSgpKTsKICAgICAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgcmVjdC5tYXhYKCkgLSByZWN0LngoKTsgKyt4KSB7
CiAgICAgICAgICAgICAgICAgcG5nX2J5dGVwIHBpeGVsID0gcm93ICsgKG1fc2NhbGVkID8gbV9z
Y2FsZWRDb2x1bW5zW3hdIDogeCkgKiBjb2xvckNoYW5uZWxzOwogICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGFscGhhID0gaGFzQWxwaGEgPyBwaXhlbFszXSA6IDI1NTsKQEAgLTkxMiw3ICs5MTEs
NyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAgICAgICAgIHBuZ19i
eXRlcCByb3cgPSBpbnRlcmxhY2VCdWZmZXI7CiAgICAgICAgIGZvciAoaW50IHkgPSByZWN0Lnko
KTsgeSA8IHJlY3QubWF4WSgpOyArK3ksIHJvdyArPSBjb2xvckNoYW5uZWxzICogc2l6ZSgpLndp
ZHRoKCkpIHsKICAgICAgICAgICAgIHBuZ19ieXRlcCBwaXhlbCA9IHJvdzsKLSAgICAgICAgICAg
IEltYWdlRnJhbWU6OlBpeGVsRGF0YSogYWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHJlY3QueCgp
LCB5KTsKKyAgICAgICAgICAgIFJHQkEzMiogYWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHJlY3Qu
eCgpLCB5KTsKICAgICAgICAgICAgIGZvciAoaW50IHggPSByZWN0LngoKTsgeCA8IHJlY3QubWF4
WCgpOyArK3gsIHBpeGVsICs9IGNvbG9yQ2hhbm5lbHMpIHsKICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBhbHBoYSA9IGhhc0FscGhhID8gcGl4ZWxbM10gOiAyNTU7CiAgICAgICAgICAgICAgICAg
bm9uVHJpdmlhbEFscGhhIHw9IGFscGhhIDwgMjU1OwpAQCAtOTI1LDcgKzkyNCw3IEBAIHZvaWQg
UE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKCkKICNlbmRpZgogCiAgICAgICAgIGlmICgh
bm9uVHJpdmlhbEFscGhhKSB7Ci0gICAgICAgICAgICBpZiAoYnVmZmVyLm9yaWdpbmFsRnJhbWVS
ZWN0KCkuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzY2FsZWRTaXplKCkpKSkKKyAgICAg
ICAgICAgIGlmIChidWZmZXIucGl4ZWxzKCktPnJlY3QoKS5jb250YWlucyhJbnRSZWN0KEludFBv
aW50KCksIHNjYWxlZFNpemUoKSkpKQogICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBo
YShmYWxzZSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBzaXplX3QgZnJh
bWVJbmRleCA9IG1fY3VycmVudEZyYW1lOwpAQCAtOTMzLDcgKzkzMiw3IEBAIHZvaWQgUE5HSW1h
Z2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKCkKICAgICAgICAgICAgICAgICB3aGlsZSAoZnJhbWVJ
bmRleCAmJiAocHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNw
b3NlT3ZlcndyaXRlUHJldmlvdXMpKQogICAgICAgICAgICAgICAgICAgICBwcmV2QnVmZmVyID0g
Jm1fZnJhbWVCdWZmZXJDYWNoZVstLWZyYW1lSW5kZXhdOwogICAgICAgICAgICAgICAgIGlmICgo
cHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNwb3NlT3Zlcndy
aXRlQmdjb2xvcikKLSAgICAgICAgICAgICAgICAgICAgJiYgIXByZXZCdWZmZXItPmhhc0FscGhh
KCkgJiYgYnVmZmVyLm9yaWdpbmFsRnJhbWVSZWN0KCkuY29udGFpbnMocHJldkJ1ZmZlci0+b3Jp
Z2luYWxGcmFtZVJlY3QoKSkpCisgICAgICAgICAgICAgICAgICAgICYmICFwcmV2QnVmZmVyLT5o
YXNBbHBoYSgpICYmIGJ1ZmZlci5waXhlbHMoKS0+cmVjdCgpLmNvbnRhaW5zKHByZXZCdWZmZXIt
PnBpeGVscygpLT5yZWN0KCkpKQogICAgICAgICAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxw
aGEoZmFsc2UpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKCFtX2JsZW5kICYm
ICFidWZmZXIuaGFzQWxwaGEoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwCmluZGV4
IDEyNGExYjJmMTk5N2ZlNjc4YzYxYjUyZjMwNThkYjRkNmI4ODY3OWEuLjAyMmM2ZjBhYjI1ZTgx
YzBhY2RmNmQ1NDM5NDJhN2MxMjVjMDZiMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVy
LmNwcApAQCAtMTMyLDE0ICsxMzIsMTMgQEAgYm9vbCBXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUo
Ym9vbCBvbmx5U2l6ZSkKICAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKICAgICAgICAg
YnVmZmVyLnNldFN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZVBhcnRpYWwpOwogICAgICAgICBidWZm
ZXIuc2V0SGFzQWxwaGEobV9oYXNBbHBoYSk7Ci0gICAgICAgIGJ1ZmZlci5zZXRPcmlnaW5hbEZy
YW1lUmVjdChJbnRSZWN0KEludFBvaW50KCksIHNpemUoKSkpOwogICAgIH0KIAogICAgIGlmICgh
bV9kZWNvZGVyKSB7CiAgICAgICAgIFdFQlBfQ1NQX01PREUgbW9kZSA9IG91dHB1dE1vZGUobV9o
YXNBbHBoYSk7CiAgICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKQogICAgICAgICAgICAg
bW9kZSA9IG91dHB1dE1vZGUoZmFsc2UpOwotICAgICAgICBpbnQgcm93U3RyaWRlID0gc2l6ZSgp
LndpZHRoKCkgKiBzaXplb2YoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKTsKKyAgICAgICAgaW50IHJv
d1N0cmlkZSA9IHNpemUoKS53aWR0aCgpICogc2l6ZW9mKFJHQkEzMik7CiAgICAgICAgIHVpbnQ4
X3QqIG91dHB1dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlci5nZXRBZGRyKDAs
IDApKTsKICAgICAgICAgaW50IG91dHB1dFNpemUgPSBzaXplKCkuaGVpZ2h0KCkgKiByb3dTdHJp
ZGU7CiAgICAgICAgIG1fZGVjb2RlciA9IFdlYlBJTmV3UkdCKG1vZGUsIG91dHB1dCwgb3V0cHV0
U2l6ZSwgcm93U3RyaWRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5t
bQppbmRleCAyMTZjZDA5M2YyNjQ2N2NiYTg4YTQzZjY5M2FiZjRjZjUxZGQxYTRkLi5kMTE0NTRi
MDVlZjg4OTkzYTYyODkzODk2YmMwYzExNzI4YzVlZDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFs
dGltZVZpZGVvU291cmNlTWFjLm1tCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgTW9ja1JlYWx0aW1l
VmlkZW9Tb3VyY2VNYWM6OnVwZGF0ZVBsYXRmb3JtTGF5ZXIoKSBjb25zdAogICAgICAgICBpZiAo
IWltYWdlKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgbV9wcmV2aWV3SW1hZ2UgPSBp
bWFnZS0+Z2V0Q0dJbWFnZVJlZigpOworICAgICAgICBtX3ByZXZpZXdJbWFnZSA9IGltYWdlLT5u
YXRpdmVJbWFnZSgpOwogICAgICAgICBpZiAoIW1fcHJldmlld0ltYWdlKQogICAgICAgICAgICAg
YnJlYWs7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1h
Z2VDR1dpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4u
Y3BwCmluZGV4IDM2Y2Q2NTE2ZTgwZjE3NDhiZmVhYjc3YTkzMDI3MWMxMjFkZTgwMTkuLjRiNGUz
Nzc5ZTk2Zjc4YzY1NDBhNTNjNDQ3OGMzYmZkOTM1ZjUzZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcApAQCAtMTM2LDkgKzEzNiw5IEBAIERy
YWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW1hZ2UqIGltZywgSW1hZ2VPcmll
bnRhdGlvbkRlc2NyaXB0aW9uKQogICAgIENHQ29udGV4dFNjYWxlQ1RNKGRyYXdDb250ZXh0LCAx
LCAtMSk7CiAgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yKGRyYXdDb250ZXh0LCB3aGl0ZSk7CiAg
ICAgQ0dDb250ZXh0RmlsbFJlY3QoZHJhd0NvbnRleHQsIHJlY3QpOwotICAgIGlmIChhdXRvIHNy
Y0ltYWdlID0gaW1nLT5nZXRDR0ltYWdlUmVmKCkpIHsKKyAgICBpZiAoYXV0byBzcmNJbWFnZSA9
IGltZy0+bmF0aXZlSW1hZ2UoKSkgewogICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoZHJh
d0NvbnRleHQsIGtDR0JsZW5kTW9kZU5vcm1hbCk7Ci0gICAgICAgIENHQ29udGV4dERyYXdJbWFn
ZShkcmF3Q29udGV4dCwgcmVjdCwgc3JjSW1hZ2UpOworICAgICAgICBDR0NvbnRleHREcmF3SW1h
Z2UoZHJhd0NvbnRleHQsIHJlY3QsIHNyY0ltYWdlLmdldCgpKTsKICAgICB9CiAgICAgQ0dDb250
ZXh0UmVsZWFzZShkcmF3Q29udGV4dCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvbWFj
L01pc2MvV2ViQ2FjaGUubW0gYi9Tb3VyY2UvV2ViS2l0L21hYy9NaXNjL1dlYkNhY2hlLm1tCmlu
ZGV4IGI2NTlkNmRiZjlhZDY5OTljM2FjOTYyZGU5NTE1NzgwOTdlMWYzYjEuLjdjNWVkMjEwZGRi
MmEzMmE3NjY2NzRjMTIwZDk5NGMyZmE0N2U3ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
bWFjL01pc2MvV2ViQ2FjaGUubW0KKysrIGIvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDYWNo
ZS5tbQpAQCAtMjA0LDcgKzIwNCw3IEBAICsgKENHSW1hZ2VSZWYpaW1hZ2VGb3JVUkw6KE5TVVJM
ICopdXJsCiAgICAgV2ViQ29yZTo6Q2FjaGVkSW1hZ2UmIGNhY2hlZEltYWdlID0gZG93bmNhc3Q8
V2ViQ29yZTo6Q2FjaGVkSW1hZ2U+KCpjYWNoZWRSZXNvdXJjZSk7CiAgICAgaWYgKCFjYWNoZWRJ
bWFnZS5oYXNJbWFnZSgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gY2Fj
aGVkSW1hZ2UuaW1hZ2UoKS0+Z2V0Q0dJbWFnZVJlZigpOworICAgIHJldHVybiBjYWNoZWRJbWFn
ZS5pbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmdldCgpOwogfQogCiAjZW5kaWYgLy8gUExBVEZPUk0o
SU9TKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNv
bkRhdGFiYXNlQ0cuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNv
bkRhdGFiYXNlQ0cuY3BwCmluZGV4IDBmNmRlN2ExNDZhNjExYTUyYWExZTUzOTAxOWZhNmMxYzQ2
NzI1YWUuLjMwNTYzMzZjYjY2ZmU0YWYxOGJkYzUyOWFjYTJmOGZjODgxZGZlNTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9jZy9XS0ljb25EYXRhYmFzZUNHLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0YWJhc2VD
Ry5jcHAKQEAgLTM3LDEyICszNywyMyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIENHSW1h
Z2VSZWYgV0tJY29uRGF0YWJhc2VUcnlHZXRDR0ltYWdlRm9yVVJMKFdLSWNvbkRhdGFiYXNlUmVm
IGljb25EYXRhYmFzZVJlZiwgV0tVUkxSZWYgdXJsUmVmLCBXS1NpemUgc2l6ZSkKIHsKICAgICBJ
bWFnZSogaW1hZ2UgPSB0b0ltcGwoaWNvbkRhdGFiYXNlUmVmKS0+aW1hZ2VGb3JQYWdlVVJMKHRv
V1RGU3RyaW5nKHVybFJlZikpOwotICAgIHJldHVybiBpbWFnZSA/IGltYWdlLT5nZXRGaXJzdENH
SW1hZ2VSZWZPZlNpemUoSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHNpemUud2lkdGgpLCBzdGF0
aWNfY2FzdDxpbnQ+KHNpemUuaGVpZ2h0KSkpIDogMDsKKyAgICByZXR1cm4gaW1hZ2UgPyBpbWFn
ZS0+bmF0aXZlSW1hZ2VPZlNpemUoSW50U2l6ZShzdGF0aWNfY2FzdDxpbnQ+KHNpemUud2lkdGgp
LCBzdGF0aWNfY2FzdDxpbnQ+KHNpemUuaGVpZ2h0KSkpLmdldCgpIDogbnVsbHB0cjsKIH0KIAog
Q0ZBcnJheVJlZiBXS0ljb25EYXRhYmFzZVRyeUNvcHlDR0ltYWdlQXJyYXlGb3JVUkwoV0tJY29u
RGF0YWJhc2VSZWYgaWNvbkRhdGFiYXNlUmVmLCBXS1VSTFJlZiB1cmxSZWYpCiB7CiAgICAgSW1h
Z2UqIGltYWdlID0gdG9JbXBsKGljb25EYXRhYmFzZVJlZiktPmltYWdlRm9yUGFnZVVSTCh0b1dU
RlN0cmluZyh1cmxSZWYpKTsKLSAgICByZXR1cm4gaW1hZ2UgPyBpbWFnZS0+Z2V0Q0dJbWFnZUFy
cmF5KCkubGVha1JlZigpIDogMDsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIGF1dG8gbmF0aXZlSW1hZ2VzID0gaW1hZ2UtPmZyYW1lc05hdGl2ZUltYWdl
cygpOworICAgIGlmICghbmF0aXZlSW1hZ2VzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgCisgICAgQ0ZNdXRhYmxlQXJyYXlSZWYgYXJyYXkgPSBDRkFycmF5Q3JlYXRlTXV0
YWJsZShudWxscHRyLCBuYXRpdmVJbWFnZXMuc2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tz
KTsKKyAgICBmb3IgKGF1dG8gbmF0aXZlSW1hZ2UgOiBuYXRpdmVJbWFnZXMpCisgICAgICAgIENG
QXJyYXlBcHBlbmRWYWx1ZShhcnJheSwgbmF0aXZlSW1hZ2UuZ2V0KCkpOworICAgIAorICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxDRkFycmF5UmVmPihDRlJldGFpbihhcnJheSkpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFj
dGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVy
YWN0aW9uLm1tCmluZGV4IGRjNzk4M2FiOTg4YzJkMDRhMTczMGVlMTM3MzAzYzI0NDE2MTUxOTcu
LmZiYzNlNWQ0YzU0MzAxY2U5MjE3YTQwZjhkMDhiZDU4MzUyNzg3YzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9u
Lm1tCkBAIC00MDcxLDcgKzQwNzEsNyBAQCAtIChVSUltYWdlICopX3ByZXNlbnRhdGlvblNuYXBz
aG90Rm9yUHJldmlld0l0ZW1Db250cm9sbGVyOihVSVByZXZpZXdJdGVtQ29udHJvbAogewogICAg
IGlmICghX3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlua0luZGljYXRvci5jb250ZW50SW1hZ2UpCiAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBbW1tVSUltYWdlIGFsbG9jXSBpbml0
V2l0aENHSW1hZ2U6X3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlua0luZGljYXRvci5jb250ZW50SW1h
Z2UtPmdldENHSW1hZ2VSZWYoKV0gYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBbW1tVSUltYWdl
IGFsbG9jXSBpbml0V2l0aENHSW1hZ2U6X3Bvc2l0aW9uSW5mb3JtYXRpb24ubGlua0luZGljYXRv
ci5jb250ZW50SW1hZ2UtPm5hdGl2ZUltYWdlKCkuZ2V0KCldIGF1dG9yZWxlYXNlXTsKIH0KIAog
LSAoTlNBcnJheSAqKV9wcmVzZW50YXRpb25SZWN0c0ZvclByZXZpZXdJdGVtQ29udHJvbGxlcjoo
VUlQcmV2aWV3SXRlbUNvbnRyb2xsZXIgKiljb250cm9sbGVyCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2luVmlldy5jcHAKaW5kZXggOWEzM2Y3Y2M3ZGM3Yzdk
NzJmOWRhNzQzMDk4YjdkYmNhODI0MDljZi4uYTUzMjUxMDY3OGI5ZjUzNTE0NThhMzhhOWY0MjMz
NzQ3ZDAzNWY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5z
L1BsdWdpblZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9Q
bHVnaW5WaWV3LmNwcApAQCAtMTcyNyw2OSArMTcyNyw2IEBAIHZvaWQgUGx1Z2luVmlldzo6d2lu
ZG93ZWRQbHVnaW5WaXNpYmlsaXR5RGlkQ2hhbmdlKGJvb2wgaXNWaXNpYmxlLCB1aW50NjRfdCB3
aW5kCiB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKENPQ09BKQotc3RhdGljIGJvb2wgaXNBbG1v
c3RTb2xpZENvbG9yKEJpdG1hcEltYWdlKiBiaXRtYXApCi17Ci0gICAgQ0dJbWFnZVJlZiBpbWFn
ZSA9IGJpdG1hcC0+Z2V0Q0dJbWFnZVJlZigpOwotICAgIEFTU0VSVChDR0ltYWdlR2V0Qml0c1Bl
ckNvbXBvbmVudChpbWFnZSkgPT0gOCk7Ci0KLSAgICBDR0JpdG1hcEluZm8gaW1hZ2VJbmZvID0g
Q0dJbWFnZUdldEJpdG1hcEluZm8oaW1hZ2UpOwotICAgIGlmICghKGltYWdlSW5mbyAmIGtDR0Jp
dG1hcEJ5dGVPcmRlcjMyTGl0dGxlKSB8fCAoaW1hZ2VJbmZvICYga0NHQml0bWFwQWxwaGFJbmZv
TWFzaykgIT0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCkgewotICAgICAgICAvLyBG
SVhNRTogQ29uc2lkZXIgYmVpbmcgYWJsZSB0byBoYW5kbGUgb3RoZXIgcGl4ZWwgZm9ybWF0cy4K
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICBzaXplX3Qgd2lkdGggPSBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpOwotICAgIHNp
emVfdCBoZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKTsKLSAgICBzaXplX3QgYnl0ZXNQ
ZXJSb3cgPSBDR0ltYWdlR2V0Qnl0ZXNQZXJSb3coaW1hZ2UpOwotCi0gICAgUmV0YWluUHRyPENG
RGF0YVJlZj4gcHJvdmlkZXIgPSBhZG9wdENGKENHRGF0YVByb3ZpZGVyQ29weURhdGEoQ0dJbWFn
ZUdldERhdGFQcm92aWRlcihpbWFnZSkpKTsKLSAgICBjb25zdCBVSW50OCogZGF0YSA9IENGRGF0
YUdldEJ5dGVQdHIocHJvdmlkZXIuZ2V0KCkpOwotCi0gICAgLy8gT3ZlcmxheSBhIGdyaWQgb2Yg
c2FtcGxpbmcgZG90cyBvbiB0b3Agb2YgYSBncmF5c2NhbGUgdmVyc2lvbiBvZiB0aGUgaW1hZ2Uu
Ci0gICAgLy8gRm9yIHRoZSBpbnRlcmlvciBwb2ludHMsIGNhbGN1bGF0ZSB0aGUgZGlmZmVyZW5j
ZSBpbiBsdW1pbmFuY2UgYW1vbmcgdGhlIHNhbXBsZSBwb2ludAotICAgIC8vIGFuZCBpdHMgc3Vy
cm91bmRzIHBvaW50cywgc2NhbGVkIGJ5IHRyYW5zcGFyZW5jeS4KLSAgICBjb25zdCB1bnNpZ25l
ZCBzYW1wbGVSb3dzID0gNzsKLSAgICBjb25zdCB1bnNpZ25lZCBzYW1wbGVDb2xzID0gNzsKLSAg
ICAvLyBGSVhNRTogUmVmaW5lIHRoZSBwcm9wZXIgbnVtYmVyIG9mIHNhbXBsZXMsIGFuZCBhY2Nv
bW1vZGF0ZSBkaWZmZXJlbnQgYXNwZWN0IHJhdGlvcy4KLSAgICBpZiAod2lkdGggPCBzYW1wbGVD
b2xzIHx8IGhlaWdodCA8IHNhbXBsZVJvd3MpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IC8vIEVuc3VyZSB0aGF0IHRoZSBsYXN0IHJvdy9jb2x1bW4gbGFuZCBvbiB0aGUgaW1hZ2UgcGVy
aW1ldGVyLgotICAgIGNvbnN0IGZsb2F0IHN0cmlkZVdpZHRoID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHdpZHRoIC0gMSkgLyAoc2FtcGxlQ29scyAtIDEpOwotICAgIGNvbnN0IGZsb2F0IHN0cmlkZUhl
aWdodCA9IHN0YXRpY19jYXN0PGZsb2F0PihoZWlnaHQgLSAxKSAvIChzYW1wbGVSb3dzIC0gMSk7
Ci0gICAgZmxvYXQgc2FtcGxlc1tzYW1wbGVSb3dzXVtzYW1wbGVDb2xzXTsKLQotICAgIC8vIEZp
bmQgdGhlIGx1bWluYW5jZSBvZiB0aGUgc2FtcGxlIHBvaW50cy4KLSAgICBmbG9hdCB5ID0gMDsK
LSAgICBjb25zdCBVSW50OCogcm93ID0gZGF0YTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2FtcGxlUm93czsgKytpKSB7Ci0gICAgICAgIGZsb2F0IHggPSAwOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGogPSAwOyBqIDwgc2FtcGxlQ29sczsgKytqKSB7Ci0gICAgICAgICAgICBjb25z
dCBVSW50OCogcDAgPSByb3cgKyAoc3RhdGljX2Nhc3Q8aW50Pih4ICsgLjUpKSAqIDQ7Ci0gICAg
ICAgICAgICAvLyBSIEcgQiBBCi0gICAgICAgICAgICBzYW1wbGVzW2ldW2pdID0gKDAuMjEyNSAq
ICpwMCArIDAuNzE1NCAqICoocDArMSkgKyAwLjA3MjEgKiAqKHAwKzIpKSAqICoocDArMykgLyAy
NTU7Ci0gICAgICAgICAgICB4ICs9IHN0cmlkZVdpZHRoOwotICAgICAgICB9Ci0gICAgICAgIHkg
Kz0gc3RyaWRlSGVpZ2h0OwotICAgICAgICByb3cgPSBkYXRhICsgKHN0YXRpY19jYXN0PGludD4o
eSArIC41KSkgKiBieXRlc1BlclJvdzsKLSAgICB9Ci0KLSAgICAvLyBEZXRlcm1pbmUgdGhlIGlt
YWdlIHNjb3JlLgotICAgIGZsb2F0IGFjY3VtU2NvcmUgPSAwOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDE7IGkgPCBzYW1wbGVSb3dzIC0gMTsgKytpKSB7Ci0gICAgICAgIGZvciAodW5zaWduZWQg
aiA9IDE7IGogPCBzYW1wbGVDb2xzIC0gMTsgKytqKSB7Ci0gICAgICAgICAgICBmbG9hdCBkaWZm
ID0gc2FtcGxlc1tpIC0gMV1bal0gKyBzYW1wbGVzW2kgKyAxXVtqXSArIHNhbXBsZXNbaV1baiAt
IDFdICsgc2FtcGxlc1tpXVtqICsgMV0gLSA0ICogc2FtcGxlc1tpXVtqXTsKLSAgICAgICAgICAg
IGFjY3VtU2NvcmUgKz0gZGlmZiAqIGRpZmY7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBU
aGUgc2NvcmUgZm9yIGEgZ2l2ZW4gc2FtcGxlIGNhbiBiZSB3aXRoaW4gdGhlIHJhbmdlIG9mIDAg
YW5kIDI1NV4yLgotICAgIHJldHVybiBhY2N1bVNjb3JlIDwgMjUwMCAqIChzYW1wbGVSb3dzIC0g
MikgKiAoc2FtcGxlQ29scyAtIDIpOwotfQotI2VuZGlmCi0KIHZvaWQgUGx1Z2luVmlldzo6cGx1
Z2luU25hcHNob3RUaW1lckZpcmVkKCkKIHsKICNpZiBFTkFCTEUoUFJJTUFSWV9TTkFQU0hPVFRF
RF9QTFVHSU5fSEVVUklTVElDKQpAQCAtMTgwOSw3ICsxNzQ2LDcgQEAgdm9pZCBQbHVnaW5WaWV3
OjpwbHVnaW5TbmFwc2hvdFRpbWVyRmlyZWQoKQogCiAgICAgICAgIGlmIChzbmFwc2hvdEltYWdl
KSB7CiAjaWYgRU5BQkxFKFBSSU1BUllfU05BUFNIT1RURURfUExVR0lOX0hFVVJJU1RJQykKLSAg
ICAgICAgICAgIGJvb2wgc25hcHNob3RJc0FsbW9zdFNvbGlkQ29sb3IgPSBpc0FsbW9zdFNvbGlk
Q29sb3IoZG93bmNhc3Q8Qml0bWFwSW1hZ2U+KHNuYXBzaG90SW1hZ2UuZ2V0KCkpKTsKKyAgICAg
ICAgICAgIGJvb2wgc25hcHNob3RJc0FsbW9zdFNvbGlkQ29sb3IgPSBzdGF0aWNfcG9pbnRlcl9j
YXN0PEJpdG1hcEltYWdlPihzbmFwc2hvdEltYWdlKS0+aXNBbG1vc3RTb2xpZENvbG9yKCk7CiAg
ICAgICAgICAgICBzbmFwc2hvdEZvdW5kID0gIXNuYXBzaG90SXNBbG1vc3RTb2xpZENvbG9yOwog
I2VuZGlmCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283466</attachid>
            <date>2016-07-12 15:59:10 -0700</date>
            <delta_ts>2016-07-12 16:08:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159679-20160712155827.patch</filename>
            <type>text/plain</type>
            <size>145306</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzMTAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWM1YmQ5YmQwNmExOWJl
NWNhMDJjNTE3MmQ2ZWYyZWJiZmVjMWMxOS4uZmU4ZDJmNTExZmM2N2M2MzliMzQwY2RiOWM3MTZj
MDllOWU4ODFlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzMSBAQAorMjAxNi0wNy0xMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0
IHRoZSBwaXhlbCBkYXRhIG9mIEltYWdlRnJhbWUgdG8gYSBzZXBhcmF0ZSBjbGFzcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5Njc5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgcGl4ZWwg
ZGF0YSBtYW5pcHVsYXRpb24gcGFydCBpbiBJbWFnZUZyYW1lIGludG8gYSBzZXBhcmF0ZSBjbGFz
cworICAgICAgICBhbmQgdGhlbiBtYWtlIGl0IG9wdGlvbmFsIChhbGxvY2F0ZWQgb24gZGVtYW5k
KS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2lu
Q2Fpcm8uY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFBpeGVsczo6Qml0bWFwUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBp
eGVsczo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpoZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFBpeGVsczo6YXQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmNsZWFyUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OnJlcGVhdEZpcnN0Um93KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcFBpeGVsczo6c2V0UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQ
aXhlbHM6Om92ZXJSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6aW5Cb3Vu
ZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Om11bHRpcGx5MjU1KToKKyAgICAgICAgKFdlYkNvcmU6OmRpdmlkZTI1NSk6CisgICAg
ICAgIChXZWJDb3JlOjpkaXZpZGVDZWlsKToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxp
ZWRDaGFubmVsKToKKyAgICAgICAgKFdlYkNvcmU6OnVucHJlbXVsdGlwbGllZENoYW5uZWwpOgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZVByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VVblByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6cGl4ZWxzKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWVEYXRhOjpoYXNQaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y2xlYXJQaXhl
bERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGxQaXhlbERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGxGcmFtZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weUJpdG1hcERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojpjb3B5Um93TlRpbWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0UkdCQSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpnZXRBZGRyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6Omhhc1BpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpvdmVyUkdC
QSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjp3aWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
Y29weVJvd05UaW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpm
aXhQb2ludFVuc2lnbmVkTXVsdGlwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6ZGl2aWRlMjU1KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1h
Z2VSZWFkZXI6OmRlY29kZUJNUCk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Y2Fpcm8vQml0bWFwUGl4ZWxzQ2Fpcm8uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwLgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjppbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KToKKyAgICAgICAgKFdlYkNvcmU6OkdJ
RkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFn
ZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFBp
eGVsKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5l
cyk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhlbFJHQik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRQaXhlbFJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxQcmVtdWx0aXBsaWVk
UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorCisyMDE2LTA3LTEx
ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAg
UmVuYW1lIEZyYW1lRGF0YSB0byBJbWFnZUZyYW1lRGF0YSBhbmQgbW92ZSBpdCB0byBhIHNlcGFy
YXRlIGZpbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1NTQ0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1vdmUgSW1hZ2VGcmFtZURhdGEgdG8gYSBzZXBhcmF0ZSBmaWxlIHNvIGl0IGNhbiBiZSBjYWNo
ZWQgYnkgSW1hZ2VTb3VyY2UKKyAgICAgICAgYW5kIHdpbGwgc3RpbGwgYmUgY29uc3VtZWQgYnkg
Qml0bWFwSW1hZ2UuIE1ha2UgdGhlIGRhdGEgbWVtYmVycyBvZiBJbWFnZUZyYW1lRGF0YQorICAg
ICAgICBiZSBwcml2YXRlIGFuZCBhZGQgZ2V0dGVycyB0byByZXR1cm4gdGhlaXIgdmFsdWVzLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cyAtLSBDb2RlIHJlZmFjdG9yaW5nLCBubyBiZWhhdmlvciBj
aGFuZ2UuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpoYXZlRnJhbWVJbWFnZUF0SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3Nh
cnkpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjplbnN1cmVGcmFtZUlzQ2FjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJ
bWFnZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJ
bWFnZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpmcmFtZU9yaWVudGF0aW9uQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
Ojppc0FsbW9zdFNvbGlkQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1h
cEltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OkZyYW1lRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6On5GcmFtZURhdGEpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp1c2VkRnJhbWVCeXRlcyk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lRGF0YUF0SW5kZXgpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvaW1hZ2VGcmFtZURhdGEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWVEYXRhOjpJbWFnZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0
YTo6fkltYWdlRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpj
bGVhclN1YkltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6Y2xlYXIp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OnNpbmdsZVBpeGVsU29saWRDb2xv
cik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6aXNBbG1vc3RTb2xpZENvbG9y
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9pbWFnZUZyYW1lRGF0YS5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpzdGF0dXMpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZURhdGE6OmlzQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZURhdGE6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmZy
YW1lQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpvcmllbnRhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6c3Vic2FtcGxpbmdMZXZlbCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lRGF0YTo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZURhdGE6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpo
YXNJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6aGFzTWV0YWRhdGEp
OgorCisyMDE2LTA2LTI0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxj
b20+CisKKyAgICAgICAgSW50cm9kdWNlIFBsYXRmb3JtSW1hZ2UgYW5kIG1ha2UgaXQgaXMgYSB3
cmFwcGVyIGZvciBOYXRpdmVJbWFnZVB0cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhlIG1haW4gcHVycG9zZSBvZiB0aGlzIHJlZmFjdG9yaW5nIGlz
IHRvIG1vdmUgdGhlIHBsYXRmb3JtIGltYWdlIGRlcGVuZGVudAorICAgICAgICBjb2RlIGZyb20g
Qml0bWFwSW1hZ2UgdG8gUGxhdGZvcm1JbWFnZS4gUGxhdGZvcm1JbWFnZSBpcyByZXNwb25zaWJs
ZSBvZiAKKyAgICAgICAgZHJhd2luZyB0aGUgaW1hZ2UgYW5kIGFuc3dlcmluZyBOYXRpdmVJbWFn
ZVB0ciBxdWVzdGlvbnMgd2hlbiBhbiBJbWFnZURlY29kZXIKKyAgICAgICAgaXMgbm90IGF2YWls
YWJsZS4gQXBhcnQgZnJvbSBkcmF3aW5nIHRoZSBpbWFnZSwgdGhlIHF1ZXJ5IGZ1bmN0aW9ucyB3
aWxsIGJlCisgICAgICAgIGNhbGxlZCBvbmx5IHdoZW4gY29uc3RydWN0aW5nIGEgRnJhbWVEYXRh
IHNvIHdlIHdpbGwga2VlcCBldmVyeXRoaW5nIGFzIGEKKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIu
IEJ1dCB3ZSB3aWxsIGNhc3QgdGhlIE5hdGl2ZUltYWdlUHRyIHRvIFBsYXRmb3JtSW1hZ2Ugd2hl
bgorICAgICAgICBhIHBsYXRmb3JtIGRlcGVuZGVudCBmdW5jdGlvbiBpcyBuZWVkZWQuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzIC0tIENvZGUgcmVmYWN0b3JpbmcsIG5vIGJlaGF2aW9yIGNoYW5n
ZS4KKworICAgICAgICAqIFBsYXRmb3JtQXBwbGVXaW4uY21ha2U6CisgICAgICAgICogUGxhdGZv
cm1FZmwuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogUGxh
dGZvcm1NYWMuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1XaW5DYWlyby5jbWFrZToKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGlu
Z3Mvb2JqYy9ET00ubW06CisgICAgICAgICgtW0RPTU5vZGUgZ2V0UHJldmlld1NuYXBzaG90SW1h
Z2U6YW5kUmVjdHM6XSk6CisgICAgICAgICogcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5t
bToKKyAgICAgICAgKC1bV2ViVGV4dEluZGljYXRvclZpZXcgaW5pdFdpdGhGcmFtZTp0ZXh0SW5k
aWNhdG9yOm1hcmdpbjpvZmZzZXQ6XSk6CisgICAgICAgIChjcmVhdGVDb250ZW50Q3Jvc3NmYWRl
QW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3NhcnkpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBJbWFnZTo6bmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5h
dGl2ZUltYWdlT2ZTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJh
bWVzTmF0aXZlSW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpzaW5nbGVQ
aXhlbFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmlzQWxtb3N0
U29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lRGF0YTo6RnJhbWVEYXRhKToKKyAgICAgICAgbV9oYXNBbHBoYSBjYW4gYmUgaW5pdGlh
bGl6ZWQgd2l0aCBmYWxzZSBiZWNhdXNlIGl0IGlzIGFjY2Vzc2VkIG9ubHkgaW4KKyAgICAgICAg
Qml0bWFwSW1hZ2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KCkgYW5kIGl0IGlzIGd1YXJkZWQgYnkg
bV9oYXZlTWV0YWRhdGEuCisgICAgICAgIEJvdGggbV9oYXZlTWV0YWRhdGEgYW5kIG1faGFzQWxw
aGEgYXJlIHNldCBpbiBCaXRtYXBJbWFnZSBjb25zdHJ1Y3RvcgorICAgICAgICBhbmQgaW4gQml0
bWFwSW1hZ2U6OmNhY2hlRnJhbWUoKS4KKworICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp+
RnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6Y2xlYXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6
bmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2U6OmdldENHSW1hZ2VSZWYpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2U6OmdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZTo6Z2V0Q0dJbWFnZUFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1JbWFnZTo6UGxhdGZvcm1JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUltYWdlOjppc05pbCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpjZ0lt
YWdlUmVmKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9N
ZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW06CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnVwZGF0ZURpc3BsYXlNb2Rl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8u
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Qml0bWFwSW1hZ2VDYWlyby5jcHAuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpj
bGVhclN1YkltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1JbWFnZTo6c3Vic2FtcGxpbmdTY2FsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUltYWdlOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9C
aXRtYXBJbWFnZUNHLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QYXR0ZXJuQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0dGVybjo6Y3JlYXRlUGxhdGZv
cm1QYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdl
Q0cuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OmNsZWFyU3Vi
SW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6aGFzQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1JbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtSW1hZ2U6OmlzQWxtb3N0U29saWRDb2xvcik6IE1vdmVkIGZyb20gUGx1Z2luVmll
dy5jcHAgc2luY2UgUGxhdGZvcm1JbWFnZSBpcyB3aGF0IHRoaXMgZnVuY3Rpb24gYmVsb25ncyB0
by4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUpOiBS
ZXR1cm5zIHRoZSBzdWItc2FtcGxpbmcgc2NhbGUgYmFzZWQgb24gdGhlIGNvbnRleHQgc2NhbGlu
Zy4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW06Cisg
ICAgICAgIChUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hOjp1cGRhdGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjpnZXRUSUZGUmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjp1cGRhdGVQbGF0Zm9ybUxheWVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKToKKwogMjAxNi0wNy0xMSAgU2FtIFdlaW5p
ZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFNwZWVjaCBTeW50aGVzaXM6IGdldHRpbmcg
bGlzdCBvZiB2b2ljZXMgbm8gbG9uZ2VyIHdvcmtzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggYzFiYzBi
YmRlMzYxMjVjNDYyYmY0ODFkZGFkNWRkMmY4MjdkNTIzOS4uMThkMWViZWJlZTkyMGIyZjI5ZWYz
Mjg3N2RlZDJlMWVjZmY5N2Q0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisy
MDE2LTA3LTExICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisK
KyAgICAgICAgSW50cm9kdWNlIFBsYXRmb3JtSW1hZ2UgYW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVy
IGZvciBOYXRpdmVJbWFnZVB0cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBNaXNjL1dlYkNhY2hlLm1tOgorICAgICAgICAoK1tXZWJDYWNoZSBpbWFn
ZUZvclVSTDpdKToKKwogMjAxNi0wNy0xMSAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUu
Y29tPgogCiAgICAgICAgIEFkZCBzeW50aGV0aWMgY2xpY2sgb3JpZ2luIHRvIFdLTmF2aWdhdGlv
bkFjdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwppbmRleCBiNDdlMmNlYTc5YThkZDdjNTMzNWQyY2Q1OGU3OTYxNTMz
NWM1MDJjLi5mMWYxNjcyNTg0YzBlZTgxODU4YTdlOTY1NTNhY2Q5Y2QwYWM2ZmVkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTYtMDctMTEgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fi
b3VoYWxsYXdhQGFwcGxlLGNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgUGxhdGZvcm1JbWFnZSBh
bmQgbWFrZSBpdCBpcyBhIHdyYXBwZXIgZm9yIE5hdGl2ZUltYWdlUHRyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTg2ODQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9jZy9X
S0ljb25EYXRhYmFzZUNHLmNwcDoKKyAgICAgICAgKFdLSWNvbkRhdGFiYXNlVHJ5R2V0Q0dJbWFn
ZUZvclVSTCk6CisgICAgICAgIChXS0ljb25EYXRhYmFzZVRyeUNvcHlDR0ltYWdlQXJyYXlGb3JV
UkwpOgorICAgICAgICBJdCB3YXMgdGhlIG9ubHkgcGxhY2UgaW4gdGhlIGNvZGUgd2hpY2ggdXNl
cyBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZUFycmF5KCkuCisgICAgICAgIENhbGwgQml0bWFwSW1h
Z2U6OmZyYW1lc05hdGl2ZUltYWdlcygpIGluc3RlYWQgYW5kIGZvcm0gdGhlIHJldHVybmVkCisg
ICAgICAgIFZlY3RvcjxOYXRpdmVJbWFnZVB0cj4gYnVpbGQgdGhlIENGQXJyYXlSZWYuCisgICAg
ICAgIAorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1t
OgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9wcmVzZW50YXRpb25TbmFwc2hvdEZvclByZXZp
ZXdJdGVtQ29udHJvbGxlcjpdKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
Vmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OnBsdWdpblNuYXBzaG90VGlt
ZXJGaXJlZCk6CisgICAgICAgIAorICAgICAgICAoV2ViS2l0Ojppc0FsbW9zdFNvbGlkQ29sb3Ip
OiBEZWxldGVkLgorICAgICAgICBNb3ZlIHRoZSBzdGF0aWMgZnVuY3Rpb24gaXNBbG1vc3RTb2xp
ZENvbG9yIHRvIFBsYXRmb3JtSW1hZ2U6OmlzQWxtb3N0U29saWRDb2xvcigpLgorCiAyMDE2LTA3
LTExICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgW1dLMl1baU9T
XSBJbnRlcm1pdHRlbnQgY3Jhc2ggaW4gW1VJQXBwbGljYXRpb24gYmVnaW5CYWNrZ3JvdW5kVGFz
a1dpdGhOYW1lXSBleHBpcmF0aW9uIGhhbmRsZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZTc4
YjA0MmIxMDQwMWUxZjRlZTNhMmFiMWEwNTJjMjE4YzNhMTFlMy4uMjI2ZWM5Yjg0ZTcyMmZmZjNl
MmYwNGRjZTdkYjcwZTNkZDRiODNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIyMjYsNiAr
MjIyNiw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JU09W
VFRDdWUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFt
ZURhdGEuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPcmllbnRhdGlvbi5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9JbnRQb2ludC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVX
aW4uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCmluZGV4IDVm
Zjk5MWZmN2RhMzA4YmI5MTgyZWNlM2JmMTIxNzMwYTU0OGQyODcuLmJhZTMxZWFmODZlN2ZjYTkw
NTgyNTA5MmFhMzhhNzhjMTFlNDIyMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtQXBwbGVXaW4uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5j
bWFrZQpAQCAtNTUsNyArNTUsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dLQ0FDRlZpZXdMYXllclRyZWVIb3N0LmNwcAogCi0g
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9Db2xvckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9p
bnRDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAKQEAgLTc1
LDYgKzc0LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Q
YXRoQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UK
aW5kZXggNTE0NTA0ZTZlYzI1YWE1ZTQzYjk5Mzk4ZDVlMzVjZWVlYTc2NmFhNC4uNjRhZTE3MTA4
OWRjYmYwY2Q0NWI3MGE5YjhmNzBlZmE5ZmZkZWRiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21h
a2UKQEAgLTEyMiw3ICsxMjIsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9JbXBsLmNwcAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Rm9udENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZi
dXp6TkcuY3BwCkBAIC0xMzQsNiArMTMzLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxh
dGZvcm1QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fp
cm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3JtYXRpb25NYXRyaXhD
YWlyby5jcHAKQEAgLTE3OSw5ICsxNzksOSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3gxMS9YVW5pcXVlUmVzb3VyY2UuY3BwCiAKLSAgICBwbGF0Zm9ybS9p
bWFnZS1lbmNvZGVycy9KUEVHSW1hZ2VFbmNvZGVyLmNwcAorICAgIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcAogCi0gICAgcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vaW1hZ2Ut
ZW5jb2RlcnMvSlBFR0ltYWdlRW5jb2Rlci5jcHAKIAogICAgIHBsYXRmb3JtL25ldHdvcmsvZWZs
L05ldHdvcmtTdGF0ZU5vdGlmaWVyRWZsLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmlu
ZGV4IDY0NWFkZDFjZTM4ODg4YjA0ZDRhMmQ4OWFkYTBhN2M2ZGUxOTk4NmIuLmQzMWY1NzA2YTY5
NTliMjMxYjViZmIyMmYwN2QxODQzYWU4NjFhMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtl
CkBAIC0xMDEsNyArMTAxLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9JbXBsLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JhY2tpbmdTdG9yZUJhY2tlbmRDYWlyb1gxMS5j
cHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0Zsb2F0UmVjdENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ZvbnRDYWlyby5jcHAKQEAgLTExNSw2ICsxMTQsNyBAQCBsaXN0KEFQUEVORCBXZWJD
b3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9QbGF0Zm9ybVBhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9SZWZQdHJDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1h
dGlvbk1hdHJpeENhaXJvLmNwcApAQCAtMTQ5LDcgKzE0OSw3IEBAIGxpc3QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCiAgICAg
cGxhdGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5jcHAKIAotICAgIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcAogCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3RrL1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlR3RrLmNwcAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
TWFjLmNtYWtlCmluZGV4IDlmNmY0OTZiNmNjNGVmNmU0Yjc0ZDg0YWMwYWE5ZGVhNTVhMDIzN2Iu
LjRkZGVkMzA4OGY0ZjM5NmZlZjQ0NGU3ZWU2NWM2NDEwNjU4ZjU4NDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtTWFjLmNtYWtlCkBAIC0zOTcsNyArMzk3LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvV2ViU3lzdGVtQmFja2Ryb3BMYXll
ci5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1dlYlRpbGVkQmFja2luZ0xheWVy
Lm1tCiAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
RmxvYXRQb2ludENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UmVjdENHLmNw
cApAQCAtNDE3LDYgKzQxNiw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvUGF0aENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1XaW5DYWlyby5jbWFrZQppbmRleCAyYzU1M2IwNTUxZGFkNjlhYTE5OWQ5NjBmNTUyMzQz
ZDkyMGYwN2IzLi4zNDJhYTkyNzMyZmQ4ZjkyZTg1Y2ZhNjI2ZDU1NTcwZWY2NmI2YTY4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKQEAgLTIxLDcgKzIxLDYgQEAgbGlzdChB
UFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAKIAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vRmxvYXRSZWN0Q2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENh
aXJvLmNwcApAQCAtMzQsNiArMzMsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L1BsYXRmb3JtQ29udGV4dENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Bs
YXRmb3JtSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9y
bVBhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQdHJDYWlyby5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1hdHJpeENhaXJv
LmNwcApAQCAtNDYsNyArNDYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAog
Ci0gICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3Bw
CisgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vQml0bWFwUGl4ZWxzQ2Fpcm8uY3Bw
CiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvblN0dWIuY3BwCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBjMTFiYzQ3ZTVjYWQ2MzBhMzY1N2NkZTFhZDlmN2I3NmEwYTU1YzY2Li5mZjJhNDk4YmE5
NmI4MWRhMDNmODFhMzAxYTg1YmUzNzRkMGVjNjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDg0LDcgKzE0ODQsNyBAQAog
CQkzNzVDRDIzMjExOUQ0M0M4MDBBMkE4NTkgLyogSHlwaGVuYXRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NUNEMjMxMTE5RDQzQzgwMEEyQTg1
OSAvKiBIeXBoZW5hdGlvbi5oICovOyB9OwogCQkzNzZEQ0NFMTEzQjRGOTY2MDAyRUJFRkMgLyog
VGV4dFJ1bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzNzZEQ0NFMDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5jcHAgKi87IH07CiAJCTM3NzRB
QkE1MEZBMjFFQjQwMEFEN0RFOSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NzRBQkEzMEZBMjFFQjQw
MEFEN0RFOSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkzNzdBM0E5MDE1RUZDRTlCMDA1OUY1Qzcg
LyogQml0bWFwSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogQml0bWFwSW1hZ2VDRy5jcHAg
Ki87IH07CisJCTM3N0EzQTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc3QTNBOEYx
NUVGQ0U5QTAwNTlGNUM3IC8qIFBsYXRmb3JtSW1hZ2VDRy5jcHAgKi87IH07CiAJCTM3OTE5QzIz
MEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3OTE5QzIxMEI3RDE4ODYwMEE1Njk5OCAv
KiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCAqLzsgfTsKIAkJMzc5MTlDMjQwQjdEMTg4NjAwQTU2OTk4
IC8qIFBvc2l0aW9uSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDM3OTE5QzIyMEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9y
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMzc5MjkxN0ExOTg1
RUYzOTAwRjRCNjYxIC8qIENyZWRlbnRpYWxCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzkyOTE3ODE5ODVFRjM5MDBGNEI2NjEgLyogQ3JlZGVu
dGlhbEJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMjMyNSwxMCArMjMyNSwxNCBAQAogCQk1M0VEM0ZERjE2N0E4OEU3MDA2NzYyRTYgLyog
SlNJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0VEM0ZERDE2N0E4OEU3MDA2NzYyRTYgLyogSlNJbnRlcm5h
bFNldHRpbmdzR2VuZXJhdGVkLmggKi87IH07CiAJCTUzRUY3NjZCMTY1MzBBNjEwMDRDQkU0OSAv
KiBTZXR0aW5nc01hY3Jvcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTNFRjc2NkExNjUzMEE2MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi87
IH07CiAJCTUzRUY3NjZDMTY1MzE5OTQwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oIGluIENv
cHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTNFRjc2NkExNjUzMEE2MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi87IH07CisJCTU1
MDRFNENCMUQzNTU3QjIwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MDRFNENBMUQzNTUzMkQwMEZFNTA4OCAv
KiBCaXRtYXBQaXhlbHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk1NTBBMEJDOTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDNzA4
NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgKi87IH07CiAJCTU1MEEwQkNBMDg1
RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlm
aWVkTmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTU1NUI4N0VDMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTVCODdFQTFDQUFGMEFC
MDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovOyB9OwogCQk1NTVCODdFRDFDQUFGMEFC
MDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU1NUI4N0VCMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29k
ZXJDRy5oICovOyB9OworCQk1NTc0RjA4NzFEMDI3OTA5MDBCOUYxNEMgLyogUGxhdGZvcm1JbWFn
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU3NEYw
ODUxRDAyNzQ0NDAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1NUNCQTZBMTFEMURGMkUxMDA0NTE4NjAg
LyogSW1hZ2VGcmFtZURhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTVDQkE2OUYxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmNw
cCAqLzsgfTsKKwkJNTVDQkE2QTIxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUNCQTZBMDFE
MURGMkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NzJBN0YyMTFDNkU1NzE5MDA5QzYxNDkgLyog
U2ltdWxhdGVkQ2xpY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU3MkE3RjIwMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5oICovOyB9
OwogCQk1NzJBN0YyMzFDNkU1QTY2MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcyQTdGMjIxQzZFNUE2
NjAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCAqLzsgfTsKIAkJNTdFRjVFNjAxRDIwQzgz
OTAwMTcxRTYwIC8qIFRleHRDb2RlY1JlcGxhY2VtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0VGNUU1RjFEMjBDODM5MDAxNzFFNjAgLyogVGV4
dENvZGVjUmVwbGFjZW1lbnQuaCAqLzsgfTsKQEAgLTkwNjEsNyArOTA2NSw3IEBACiAJCTM3NkRD
Q0UwMTNCNEY5NjYwMDJFQkVGQyAvKiBUZXh0UnVuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFRleHRSdW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzNzcyQjA5NTE2NTM1ODU2MDAwQTQ5Q0EgLyogUG9wdXBPcGVuaW5nT2JzZXJ2ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9wdXBPcGVuaW5nT2JzZXJ2ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc3NEFCQTMwRkEyMUVCNDAwQUQ3REU5IC8qIE92
ZXJsYXBUZXN0UmVxdWVzdENsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQml0bWFwSW1hZ2VDRy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBQbGF0Zm9y
bUltYWdlQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGxhdGZv
cm1JbWFnZUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc5MTlDMjEwQjdE
MTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFBvc2l0aW9uSXRlcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkzNzkxOUMyMjBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9zaXRpb25JdGVyYXRvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzkyOTE3ODE5ODVFRjM5MDBGNEI2NjEg
LyogQ3JlZGVudGlhbEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3Jl
ZGVudGlhbEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk5ODksMTAgKzk5
OTMsMTQgQEAKIAkJNTNFRDNGREMxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJuYWxTZXR0aW5n
c0dlbmVyYXRlZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0lu
dGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1M0VEM0ZERDE2N0E4OEU3MDA2NzYyRTYgLyogSlNJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVk
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50ZXJuYWxTZXR0aW5nc0dl
bmVyYXRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0VGNzY2QTE2NTMwQTYx
MDA0Q0JFNDkgLyogU2V0dGluZ3NNYWNyb3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2V0dGluZ3NNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTUw
NEU0Q0ExRDM1NTMyRDAwRkU1MDg4IC8qIEJpdG1hcFBpeGVscy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBC
aXRtYXBQaXhlbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTUwQTBCQzcwODVG
NjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1NTBB
MEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZWROYW1lLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1NTVC
ODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VEZWNvZGVyQ0cuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVy
Q0cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VEZWNvZGVyQ0cuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTU3NEYwODUxRDAyNzQ0NDAwQjlGMTRDIC8q
IFBsYXRmb3JtSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1NUNCQTY5RjFEMURGMkUxMDA0NTE4NjAgLyogSW1hZ2VG
cmFtZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VG
cmFtZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NUNCQTZBMDFEMURG
MkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW1hZ2VGcmFtZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTVENDA4RjcxQTdDNjMxODAwQzc4NDUwIC8qIFNWR0ltYWdlQ2xpZW50cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdJbWFnZUNsaWVudHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTcyQTdGMjAxQzZFNTcxOTAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNr
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXVsYXRlZENsaWNrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MkE3RjIyMUM2RTVBNjYwMDlDNjE0OSAvKiBT
aW11bGF0ZWRDbGljay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
aW11bGF0ZWRDbGljay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjAyNCw3
ICsyMjAzMiw2IEBACiAJCUIyNzUzNTI5MEIwNTM4MTQwMDJDRTY0RiAvKiBjZyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMzc3QTNBOEYxNUVGQ0U5QTAw
NTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovLAogCQkJCTBGQ0YzMzIzMEYyQjk3MTUwMDRC
Njc5NSAvKiBDb2xvckNHLmNwcCAqLywKIAkJCQlCMjc1MzUyQjBCMDUzODE0MDAyQ0U2NEYgLyog
RmxvYXRQb2ludENHLmNwcCAqLywKIAkJCQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxv
YXRSZWN0Q0cuY3BwICovLApAQCAtMjIwNTEsNiArMjIwNTgsNyBAQAogCQkJCUE4MEEzOEZEMEU1
MENDODIwMEEyNUVCQyAvKiBQYXR0ZXJuQ0cuY3BwICovLAogCQkJCUIyNzUzNTM2MEIwNTM4MTQw
MDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmNwcCAqLywKIAkJCQlCMjc1MzUzNzBCMDUzODE0
MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5oICovLAorCQkJCTM3N0EzQThGMTVFRkNFOUEw
MDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwICovLAogCQkJCTFGQzQwRkI4MTY1NUM1OTEw
MDQwRjI5RSAvKiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcCAqLywKIAkJCQkxRkM0MEZCNzE2
NTVDNTkxMDA0MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5oICovLAogCQkJCUIyNzUz
NTJBMEIwNTM4MTQwMDJDRTY0RiAvKiBUcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcCAqLywKQEAg
LTIyMTE4LDYgKzIyMTI2LDcgQEAKIAkJCQlCRUYyOUVFOTE3MTVERDA5MDBDNEI0QzkgLyogQXVk
aW9UcmFja1ByaXZhdGUuaCAqLywKIAkJCQlBODk5NDMyNzBCNDIzMzg3MDBEN0M4MDIgLyogQml0
bWFwSW1hZ2UuY3BwICovLAogCQkJCUE4OTk0MzI2MEI0MjMzODcwMEQ3QzgwMiAvKiBCaXRtYXBJ
bWFnZS5oICovLAorCQkJCTU1MDRFNENBMUQzNTUzMkQwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMu
aCAqLywKIAkJCQlDRERFMDJFOTE4QjNERkM3MDBDRjdGRjEgLyogQ0RNU2Vzc2lvbi5oICovLAog
CQkJCUIyNzUzNTM4MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5jcHAgKi8sCiAJCQkJQjI3NTM1
MzkwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmggKi8sCkBAIC0yMjIwMiw2ICsyMjIxMSw4IEBA
CiAJCQkJNDNEMjU5NzYxM0M4MTZGNDAwNjA4NTU5IC8qIEltYWdlQnVmZmVyLmNwcCAqLywKIAkJ
CQlCMkExMEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLywKIAkJCQkyMkJE
OUY3RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi8sCisJCQkJNTVDQkE2
OUYxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmNwcCAqLywKKwkJCQk1NUNCQTZB
MDFEMURGMkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCAqLywKIAkJCQlCQzdGNDRBNzBC
OUUzMjRFMDBBOUQwODEgLyogSW1hZ2VPYnNlcnZlci5oICovLAogCQkJCUE4NzQ4RDc0MTJDQzNG
ODkwMDFGQkE0MSAvKiBJbWFnZU9yaWVudGF0aW9uLmNwcCAqLywKIAkJCQlBODc0OEQ2NjEyQ0Mz
NzYzMDAxRkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5oICovLApAQCAtMjIyNTEsNiArMjIyNjIs
NyBAQAogCQkJCTJENTAwMkZBMUI1NkQ3OTkwMDIwQUFGNyAvKiBQYXRoVXRpbGl0aWVzLmggKi8s
CiAJCQkJQThGQTZFNUMwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwICovLAogCQkJCUE4
RkE2RTVCMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggKi8sCisJCQkJNTU3NEYwODUxRDAy
NzQ0NDAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCAqLywKIAkJCQkwNTYyRjk2MDE1NzNGODhG
MDAzMUNBMTYgLyogUGxhdGZvcm1MYXllci5oICovLAogCQkJCUNFRUZDRDdCMTlEQjMzREMwMDM4
NzZENyAvKiBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQkwNzI4NDdFMjE2
RUJDNUIwMDA0M0NGQTQgLyogUGxhdGZvcm1UZXh0VHJhY2suaCAqLywKQEAgLTI2MDE4LDYgKzI2
MDMwLDcgQEAKIAkJCQk4NUU3MTFCOTBBQzVENTM1MDA1MzI3MEYgLyogRE9NSFRNTE1hcEVsZW1l
bnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1MTU3OUYwQzAzQkJEMzAwOEJCMEVF
IC8qIERPTUhUTUxNYXJxdWVlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1MTU2RUEw
QzAzQjc0MTAwOEJCMEVFIC8qIERPTUhUTUxNYXJxdWVlRWxlbWVudEludGVybmFsLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1NTc0RjA4NzFEMDI3OTA5MDBCOUYxNEMgLyogUGxhdGZvcm1JbWFnZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkRFQzY2NTUxQzgyRDA0MTAwOTk4NDZBIC8qIERPTUhUTUxN
ZWRpYUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERUM2NjUxMUM4MkQwMTYwMDk5ODQ2
QSAvKiBET01IVE1MTWVkaWFFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1
QkE0RDEzMEFBNjg4NjgwMDg4MDUyRCAvKiBET01IVE1MTWVudUVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjY0NTksNiArMjY0NzIsNyBAQAogCQkJCUQzNTlENzhBMTI5Q0EyNzEwMDA2RTVE
MiAvKiBIVE1MRGV0YWlsc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE3OUZBMEEx
OTE2REYwMEE4RUY1RiAvKiBIVE1MRGlyZWN0b3J5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThFQTdDQjcwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxEaXZFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk1NUNCQTZBMjFEMURGMkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4RUE3OUY3MEExOTE2REYwMEE4RUY1RiAvKiBIVE1MRExpc3RF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOThFNTA4MjQ1RTU5MDAxRTlBQkMgLyog
SFRNTERvY3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdCMzg2NzEyMjg4M0U5MDBCODFG
RjggLyogSFRNTERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTI4MzU5LDYgKzI4
MzczLDcgQEAKIAkJCQlCMjIyNzk5MzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OTk1MEQwMEJGMjIwMDcxQjc4MiAv
KiBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5
OTgwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0FuaW1hdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTU1MDRFNENCMUQzNTU3QjIwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQzOUQzMzQ1MTNBNjkxMUMwMEMyMEY0RiAvKiBTVkdBbmltYXRvckZhY3Rv
cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4RkIzRjg0MTNCQzc1NEMwMDk5RkMxOCAvKiBTVkdB
dHRyaWJ1dGVUb1Byb3BlcnR5TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk5QzBEMDBC
RjIyMDA3MUI3ODIgLyogU1ZHQ2lyY2xlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTQx
MSw3ICsyOTQyNiw3IEBACiAJCQkJRkRDNTRGMDQxMzk5QjBEQTAwOEQ5MTE3IC8qIEJpcXVhZEZp
bHRlck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTYwMjYxMkIwMjY3NjAwQzFBMzU5
IC8qIEJpcXVhZFByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODk5NDMyOTBCNDIz
Mzg4MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzc3QTNB
OTAxNUVGQ0U5QjAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3IC8qIFBsYXRmb3JtSW1hZ2VDRy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5NzZENkM3ODEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkyRURFRjFGMzEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYkRhdGEuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRTFEMzFDREMxOTE5NjAyMDAwMTAwNUEzIC8qIEJsb2JEYXRhRmls
ZVJlZmVyZW5jZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5Nzc0LDYgKzI5Nzg5LDcgQEAKIAkJ
CQkyRTJEOTlFODEwRTJCQzFDMDA0OTYzMzcgLyogRE9NQmxvYi5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTg1MDg5Q0Q4MEE5OEM0MjgwMEEyNzVBQSAvKiBET01DREFUQVNlY3Rpb24ubW0gaW4gU291
cmNlcyAqLywKIAkJCQk4NUFDQTk4NzBBOUI1MjAzMDA2NzFFOTAgLyogRE9NQ2hhcmFjdGVyRGF0
YS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTU1Q0JBNkExMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFn
ZUZyYW1lRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTA4OUNEQTBBOThDNDI4MDBBMjc1
QUEgLyogRE9NQ29tbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTk3OEQwN0JFMTQ1QTBGNkMw
MDk2OTA4RCAvKiBET01Db3JlRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1OEMz
OEE2MEFBOEYyMDQwMEIxODdBNCAvKiBET01Db3VudGVyLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbSBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCmluZGV4IDQwMTFlYTNmZDhjMDQ2OTc0YzU1ZDQ4ZTM5
NmYxYjgzYjgxZjMzNWQuLmE1YWM0ZjA1YWUzMzlhOGQ2NDcwNmMxMGZjMGY3YWY0MDQyNTYyM2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCkBAIC02MDYsNyArNjA2LDcgQEAgLSAo
dm9pZClnZXRQcmV2aWV3U25hcHNob3RJbWFnZTooQ0dJbWFnZVJlZiopY2dJbWFnZSBhbmRSZWN0
czooTlNBcnJheSAqKilyZWN0cwogCiAgICAgaWYgKHRleHRJbmRpY2F0b3IpIHsKICAgICAgICAg
aWYgKEltYWdlKiBpbWFnZSA9IHRleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpKQotICAgICAg
ICAgICAgKmNnSW1hZ2UgPSAoQ0dJbWFnZVJlZilDRkF1dG9yZWxlYXNlKENHSW1hZ2VSZXRhaW4o
aW1hZ2UtPmdldENHSW1hZ2VSZWYoKSkpOworICAgICAgICAgICAgKmNnSW1hZ2UgPSBpbWFnZS0+
bmF0aXZlSW1hZ2UoKS5hdXRvcmVsZWFzZSgpOwogICAgIH0KIAogICAgIFJldGFpblB0cjxOU011
dGFibGVBcnJheT4gcmVjdEFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0XSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9y
V2luZG93Lm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5t
bQppbmRleCAzNjRhOWE4N2NlNmYwNjYzOTQ4Yjg4NDZlOGUyY2U2ZDE5MGYyNDg5Li5hNzRkYTg1
YWNlY2EzYzY2OThkZDE1NmFiMzFhNmM5NzFhMzU0ZTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cubW0KQEAgLTE2Miw5ICsxNjIsOSBAQCAtIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIHRleHRJbmRpY2F0b3I6KFBh
c3NSZWZQdHI8VGV4dEluZGljYQogICAgIGNvbnRlbnRzSW1hZ2VMb2dpY2FsU2l6ZS5zY2FsZSgx
IC8gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yKCkpOwogICAgIFJldGFp
blB0cjxDR0ltYWdlUmVmPiBjb250ZW50c0ltYWdlOwogICAgIGlmIChpbmRpY2F0b3JXYW50c0Nv
bnRlbnRDcm9zc2ZhZGUoKl90ZXh0SW5kaWNhdG9yKSkKLSAgICAgICAgY29udGVudHNJbWFnZSA9
IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0KCktPmdldENHSW1hZ2VS
ZWYoKTsKKyAgICAgICAgY29udGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1h
Z2VXaXRoSGlnaGxpZ2h0KCktPm5hdGl2ZUltYWdlKCk7CiAgICAgZWxzZQotICAgICAgICBjb250
ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpLT5nZXRDR0ltYWdlUmVm
KCk7CisgICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdl
KCktPm5hdGl2ZUltYWdlKCk7CiAKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGJvdW5j
ZUxheWVycyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwogCkBAIC0y
NjUsNyArMjY1LDcgQEAgc3RhdGljIFJldGFpblB0cjxDQUtleWZyYW1lQW5pbWF0aW9uPiBjcmVh
dGVCb3VuY2VBbmltYXRpb24oQ0ZUaW1lSW50ZXJ2YWwgZHVyYXQKIHN0YXRpYyBSZXRhaW5QdHI8
Q0FCYXNpY0FuaW1hdGlvbj4gY3JlYXRlQ29udGVudENyb3NzZmFkZUFuaW1hdGlvbihDRlRpbWVJ
bnRlcnZhbCBkdXJhdGlvbiwgVGV4dEluZGljYXRvciYgdGV4dEluZGljYXRvcikKIHsKICAgICBS
ZXRhaW5QdHI8Q0FCYXNpY0FuaW1hdGlvbj4gY3Jvc3NmYWRlQW5pbWF0aW9uID0gW0NBQmFzaWNB
bmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6QCJjb250ZW50cyJdOwotICAgIFJldGFpblB0
cjxDR0ltYWdlUmVmPiBjb250ZW50c0ltYWdlID0gdGV4dEluZGljYXRvci5jb250ZW50SW1hZ2Uo
KS0+Z2V0Q0dJbWFnZVJlZigpOworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb250ZW50c0lt
YWdlID0gdGV4dEluZGljYXRvci5jb250ZW50SW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKTsKICAgICBb
Y3Jvc3NmYWRlQW5pbWF0aW9uIHNldFRvVmFsdWU6KGlkKWNvbnRlbnRzSW1hZ2UuZ2V0KCldOwog
ICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0RmlsbE1vZGU6a0NBRmlsbE1vZGVGb3J3YXJkc107
CiAgICAgW2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRSZW1vdmVkT25Db21wbGV0aW9uOk5PXTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAppbmRl
eCA0NjBkMWI4NTZiNzdiN2NmNGVjNjg5NjU4MWI4MzNkM2U3Zjk3MDE0Li5mYzY0OWQxMGFhYjlj
MTNmZmYyOTMwNTVhNzA3Y2I3NDUzNzQ2OTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCkBAIC02OCwxNSArNjgsMTMgQEAgQml0bWFw
SW1hZ2U6OkJpdG1hcEltYWdlKE5hdGl2ZUltYWdlUHRyJiYgaW1hZ2UsIEltYWdlT2JzZXJ2ZXIq
IG9ic2VydmVyKQogICAgICwgbV9oYXZlRnJhbWVDb3VudCh0cnVlKQogICAgICwgbV9hbmltYXRp
b25GaW5pc2hlZFdoZW5DYXRjaGluZ1VwKGZhbHNlKQogeworICAgIG1fZnJhbWVzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoMSk7CisgICAgbV9mcmFtZXMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUo
aW1hZ2UpKTsKKyAgICAKICAgICAvLyBTaW5jZSB3ZSBkb24ndCBoYXZlIGEgZGVjb2Rlciwgd2Ug
Y2FuJ3QgZmlndXJlIG91dCB0aGUgaW1hZ2Ugb3JpZW50YXRpb24uCiAgICAgLy8gU2V0IG1fc2l6
ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiB0byBiZSB0aGUgc2FtZSBhcyBtX3NpemUgc28gaXQncyBu
b3QgMHgwLgotICAgIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiA9IG1fc2l6ZSA9IE5hdGl2
ZUltYWdlOjpzaXplKGltYWdlKTsKKyAgICBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBt
X3NpemUgPSBtX2ZyYW1lc1swXS5zaXplKCk7CiAgICAgbV9kZWNvZGVkU2l6ZSA9IG1fc2l6ZS5h
cmVhKCkgKiA0OwotICAgIAotICAgIG1fZnJhbWVzLmdyb3coMSk7Ci0gICAgbV9mcmFtZXNbMF0u
bV9oYXNBbHBoYSA9IE5hdGl2ZUltYWdlOjpoYXNBbHBoYShpbWFnZSk7Ci0gICAgbV9mcmFtZXNb
MF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOwotICAgIG1fZnJhbWVzWzBdLm1faW1hZ2UgPSBXVEZN
b3ZlKGltYWdlKTsKIH0KIAogQml0bWFwSW1hZ2U6On5CaXRtYXBJbWFnZSgpCkBAIC0xMDUsNyAr
MTAzLDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6aGF2ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBp
bmRleCkKICAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2U7CisgICAgcmV0dXJu
IG1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpOwogfQogCiBib29sIEJpdG1hcEltYWdlOjpoYXNT
aW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0CkBAIC0xMjUsOSArMTIzLDcgQEAgdm9pZCBCaXRt
YXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKGJvb2wgZGVzdHJveUFsbCkKICAgICAgICAgLy8g
VGhlIHVuZGVybHlpbmcgZnJhbWUgaXNuJ3QgYWN0dWFsbHkgY2hhbmdpbmcgKHdlJ3JlIGp1c3Qg
dHJ5aW5nIHRvCiAgICAgICAgIC8vIHNhdmUgdGhlIG1lbW9yeSBmb3IgdGhlIGZyYW1lYnVmZmVy
IGRhdGEpLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNsZWFyCiAgICAgICAgIC8vIHRoZSBtZXRhZGF0
YS4KLSAgICAgICAgdW5zaWduZWQgZnJhbWVCeXRlcyA9IG1fZnJhbWVzW2ldLm1fZnJhbWVCeXRl
czsKLSAgICAgICAgaWYgKG1fZnJhbWVzW2ldLmNsZWFyKGZhbHNlKSkKLSAgICAgICAgICAgIGZy
YW1lQnl0ZXNDbGVhcmVkICs9IGZyYW1lQnl0ZXM7CisgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVk
ICs9IG1fZnJhbWVzW2ldLmNsZWFyKEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRhZGF0YSk7
CiAgICAgfQogCiAgICAgbV9zb3VyY2UuY2xlYXIoZGVzdHJveUFsbCwgY2xlYXJCZWZvcmVGcmFt
ZSwgZGF0YSgpLCBtX2FsbERhdGFSZWNlaXZlZCk7CkBAIC0xNTAsOCArMTQ2LDggQEAgdm9pZCBC
aXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3NhcnkoYm9vbCBkZXN0cm95QWxs
KQogICAgICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBhbGxGcmFtZUJ5dGVzID0gMDsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVzLnNpemUoKTsgKytpKQotICAgICAgICBh
bGxGcmFtZUJ5dGVzICs9IG1fZnJhbWVzW2ldLnVzZWRGcmFtZUJ5dGVzKCk7CisgICAgZm9yIChh
dXRvJiBmcmFtZSA6IG1fZnJhbWVzKQorICAgICAgICBhbGxGcmFtZUJ5dGVzICs9IGZyYW1lLmZy
YW1lQnl0ZXMoKTsKIAogICAgIGlmIChhbGxGcmFtZUJ5dGVzID4gbGFyZ2VBbmltYXRpb25DdXRv
ZmYpIHsKICAgICAgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdlICVwIGRlc3Ryb3lEZWNvZGVk
RGF0YUlmTmVjZXNzYXJ5IGRlc3Ryb3lpbmdEYXRhOiBhbGxGcmFtZUJ5dGVzPSV1IGN1dG9mZj0l
dSIsIHRoaXMsIGFsbEZyYW1lQnl0ZXMsIGxhcmdlQW5pbWF0aW9uQ3V0b2ZmKTsKQEAgLTE3Nyw3
ICsxNzMsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkZXN0cm95TWV0YWRhdGFBbmROb3RpZnkodW5z
aWduZWQgZnJhbWVCeXRlc0NsZWFyZWQsIENsZWFyZWRTbwogICAgICAgICBpbWFnZU9ic2VydmVy
KCktPmRlY29kZWRTaXplQ2hhbmdlZCh0aGlzLCAtc2FmZUNhc3Q8aW50PihmcmFtZUJ5dGVzQ2xl
YXJlZCkpOwogfQogCi12b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwg
U3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lQ2FjaGluZyBmcmFt
ZUNhY2hpbmcpCit2b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vi
c2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyBj
YWNoaW5nKQogewogICAgIHNpemVfdCBudW1GcmFtZXMgPSBmcmFtZUNvdW50KCk7CiAgICAgQVNT
RVJUKG1fZGVjb2RlZFNpemUgPT0gMCB8fCBudW1GcmFtZXMgPiAxKTsKQEAgLTE4NSwyNSArMTgx
LDEyIEBAIHZvaWQgQml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUoc2l6ZV90IGluZGV4LCBTdWJzYW1w
bGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIEltCiAgICAgaWYgKG1fZnJhbWVzLnNpemUoKSA8
IG51bUZyYW1lcykKICAgICAgICAgbV9mcmFtZXMuZ3JvdyhudW1GcmFtZXMpOwogCi0gICAgaWYg
KGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhQW5kRnJhbWUpIHsKLSAgICAgICAgbV9mcmFt
ZXNbaW5kZXhdLm1faW1hZ2UgPSBtX3NvdXJjZS5jcmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRl
eCwgc3Vic2FtcGxpbmdMZXZlbCk7Ci0gICAgICAgIG1fZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBs
aW5nTGV2ZWwgPSBzdWJzYW1wbGluZ0xldmVsOwotICAgIH0KLQotICAgIG1fZnJhbWVzW2luZGV4
XS5tX29yaWVudGF0aW9uID0gbV9zb3VyY2Uub3JpZW50YXRpb25BdEluZGV4KGluZGV4KTsKLSAg
ICBtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOwotICAgIG1fZnJhbWVzW2lu
ZGV4XS5tX2lzQ29tcGxldGUgPSBtX3NvdXJjZS5mcmFtZUlzQ29tcGxldGVBdEluZGV4KGluZGV4
KTsKKyAgICBtX2ZyYW1lc1tpbmRleF0gPSBtX3NvdXJjZS5jcmVhdGVGcmFtZURhdGFBdEluZGV4
KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsLCBjYWNoaW5nKTsKIAotICAgIGlmIChyZXBldGl0aW9u
Q291bnQoZmFsc2UpICE9IGNBbmltYXRpb25Ob25lKQotICAgICAgICBtX2ZyYW1lc1tpbmRleF0u
bV9kdXJhdGlvbiA9IG1fc291cmNlLmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KTsKKyAgICBM
T0coSW1hZ2VzLCAiQml0bWFwSW1hZ2UgJXAgY2FjaGVGcmFtZSAlbHUgKCVzJXUgYnl0ZXMsIGNv
bXBsZXRlICVkKSIsIHRoaXMsIGluZGV4LCBjYWNoaW5nID09IEltYWdlRnJhbWVEYXRhOjpDYWNo
aW5nOjpNZXRhZGF0YSA/ICJtZXRhZGF0YSBvbmx5LCAiIDogIiIsIG1fZnJhbWVzW2luZGV4XS5m
cmFtZUJ5dGVzKCksIG1fZnJhbWVzW2luZGV4XS5pc0NvbXBsZXRlKCkpOwogCi0gICAgbV9mcmFt
ZXNbaW5kZXhdLm1faGFzQWxwaGEgPSBtX3NvdXJjZS5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRl
eCk7Ci0gICAgbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWVCeXRlcyA9IG1fc291cmNlLmZyYW1lQnl0
ZXNBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsKLQotICAgIExPRyhJbWFnZXMsICJC
aXRtYXBJbWFnZSAlcCBjYWNoZUZyYW1lICVsdSAoJXMldSBieXRlcywgY29tcGxldGUgJWQpIiwg
dGhpcywgaW5kZXgsIGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhT25seSA/ICJtZXRhZGF0
YSBvbmx5LCAiIDogIiIsIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXMsIG1fZnJhbWVzW2lu
ZGV4XS5tX2lzQ29tcGxldGUpOwotCi0gICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKSB7
Ci0gICAgICAgIGludCBkZWx0YUJ5dGVzID0gc2FmZUNhc3Q8aW50PihtX2ZyYW1lc1tpbmRleF0u
bV9mcmFtZUJ5dGVzKTsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhdLmhhc0ltYWdlKCkpIHsKKyAg
ICAgICAgaW50IGRlbHRhQnl0ZXMgPSBzYWZlQ2FzdDxpbnQ+KG1fZnJhbWVzW2luZGV4XS5mcmFt
ZUJ5dGVzKCkpOwogICAgICAgICBtX2RlY29kZWRTaXplICs9IGRlbHRhQnl0ZXM7CiAgICAgICAg
IC8vIFRoZSBmdWxseS1kZWNvZGVkIGZyYW1lIHdpbGwgc3Vic3VtZSB0aGUgcGFydGlhbGx5IGRl
Y29kZWQgZGF0YSB1c2VkCiAgICAgICAgIC8vIHRvIGRldGVybWluZSBpbWFnZSBwcm9wZXJ0aWVz
LgpAQCAtMjg4LDIxICsyNzEsMTkgQEAgYm9vbCBCaXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQoYm9v
bCBhbGxEYXRhUmVjZWl2ZWQpCiAgICAgLy8gZnJhbWUgYWZmZWN0ZWQgYnkgYXBwZW5kaW5nIG5l
dyBkYXRhIGhlcmUuIFRodXMgd2UgaGF2ZSB0byBjbGVhciBhbGwgdGhlCiAgICAgLy8gaW5jb21w
bGV0ZSBmcmFtZXMgdG8gYmUgc2FmZS4KICAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQ2xlYXJlZCA9
IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lcy5zaXplKCk7ICsraSkgewor
ICAgIGZvciAoYXV0byYgZnJhbWUgOiBtX2ZyYW1lcykgewogICAgICAgICAvLyBOT1RFOiBEb24n
dCBjYWxsIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoKSBoZXJlLCB0aGF0IHdpbGwgdHJ5IHRvCiAg
ICAgICAgIC8vIGRlY29kZSBhbnkgdW5jYWNoZWQgKGkuZS4gbmV2ZXItZGVjb2RlZCBvcgogICAg
ICAgICAvLyBjbGVhcmVkLW9uLWEtcHJldmlvdXMtcGFzcykgZnJhbWVzIQotICAgICAgICB1bnNp
Z25lZCBmcmFtZUJ5dGVzID0gbV9mcmFtZXNbaV0ubV9mcmFtZUJ5dGVzOwotICAgICAgICBpZiAo
bV9mcmFtZXNbaV0ubV9oYXZlTWV0YWRhdGEgJiYgIW1fZnJhbWVzW2ldLm1faXNDb21wbGV0ZSkK
LSAgICAgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IChtX2ZyYW1lc1tpXS5jbGVhcih0cnVl
KSA/IGZyYW1lQnl0ZXMgOiAwKTsKKyAgICAgICAgaWYgKGZyYW1lLmhhc01ldGFkYXRhKCkgJiYg
IWZyYW1lLmlzQ29tcGxldGUoKSkKKyAgICAgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IGZy
YW1lLmNsZWFyKEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpFbXB0eSk7CiAgICAgfQogICAgIGRl
c3Ryb3lNZXRhZGF0YUFuZE5vdGlmeShmcmFtZUJ5dGVzQ2xlYXJlZCwgQ2xlYXJlZFNvdXJjZTo6
Tm8pOwogI2Vsc2UKICAgICAvLyBGSVhNRTogd2h5IGlzIHRoaXMgZGlmZmVyZW50IGZvciBpT1M/
CiAgICAgaW50IGRlbHRhQnl0ZXMgPSAwOwogICAgIGlmICghbV9mcmFtZXMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGludCBieXRlcyA9IG1fZnJhbWVzW21fZnJhbWVzLnNpemUoKSAtIDFdLm1fZnJh
bWVCeXRlczsKLSAgICAgICAgaWYgKG1fZnJhbWVzW21fZnJhbWVzLnNpemUoKSAtIDFdLmNsZWFy
KHRydWUpKSB7CisgICAgICAgIGlmIChpbnQgYnl0ZXMgPSBtX2ZyYW1lc1ttX2ZyYW1lcy5zaXpl
KCkgLSAxXS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6RW1wdHkpKSB7CiAgICAgICAg
ICAgICBkZWx0YUJ5dGVzICs9IGJ5dGVzOwogICAgICAgICAgICAgZGVsdGFCeXRlcyArPSBtX2Rl
Y29kZWRQcm9wZXJ0aWVzU2l6ZTsKICAgICAgICAgICAgIG1fZGVjb2RlZFByb3BlcnRpZXNTaXpl
ID0gMDsKQEAgLTM2NiwxNSArMzQ3LDE1IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmlzU2l6ZUF2YWls
YWJsZSgpCiAgICAgcmV0dXJuIG1fc2l6ZUF2YWlsYWJsZTsKIH0KIAotYm9vbCBCaXRtYXBJbWFn
ZTo6ZW5zdXJlRnJhbWVJc0NhY2hlZChzaXplX3QgaW5kZXgsIEltYWdlRnJhbWVDYWNoaW5nIGZy
YW1lQ2FjaGluZykKK2Jvb2wgQml0bWFwSW1hZ2U6OmVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90
IGluZGV4LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyBjYWNoaW5nKQogewogICAgIGlmIChpbmRl
eCA+PSBmcmFtZUNvdW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChpbmRl
eCA+PSBtX2ZyYW1lcy5zaXplKCkKLSAgICAgICAgfHwgKGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1l
dGFkYXRhQW5kRnJhbWUgJiYgIW1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKQotICAgICAgICB8fCAo
ZnJhbWVDYWNoaW5nID09IENhY2hlTWV0YWRhdGFPbmx5ICYmICFtX2ZyYW1lc1tpbmRleF0ubV9o
YXZlTWV0YWRhdGEpKQotICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwLCBmcmFtZUNhY2hpbmcp
OworICAgICAgICB8fCAoY2FjaGluZyA9PSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRh
dGFBbmRJbWFnZSAmJiAhbV9mcmFtZXNbaW5kZXhdLmhhc0ltYWdlKCkpCisgICAgICAgIHx8IChj
YWNoaW5nID09IEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRhZGF0YSAmJiAhbV9mcmFtZXNb
aW5kZXhdLmhhc01ldGFkYXRhKCkpKQorICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwLCBjYWNo
aW5nKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMzg4LDEwICszNjksOSBAQCBOYXRpdmVJ
bWFnZVB0ciBCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBmbG9h
dCBwcmVzZW50YXRpb25TYwogCiAgICAgLy8gV2UgbWF5IGhhdmUgY2FjaGVkIGEgZnJhbWUgd2l0
aCBhIGhpZ2hlciBzdWJzYW1wbGluZyBsZXZlbCwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkIHRvCiAg
ICAgLy8gcmUtZGVjb2RlIHdpdGggYSBsb3dlciBsZXZlbC4KLSAgICBpZiAoaW5kZXggPCBtX2Zy
YW1lcy5zaXplKCkgJiYgbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2UgJiYgc3Vic2FtcGxpbmdMZXZl
bCA8IG1fZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBsaW5nTGV2ZWwpIHsKKyAgICBpZiAoaW5kZXgg
PCBtX2ZyYW1lcy5zaXplKCkgJiYgbV9mcmFtZXNbaW5kZXhdLmhhc0ltYWdlKCkgJiYgc3Vic2Ft
cGxpbmdMZXZlbCA8IG1fZnJhbWVzW2luZGV4XS5zdWJzYW1wbGluZ0xldmVsKCkpIHsKICAgICAg
ICAgLy8gSWYgdGhlIGltYWdlIGlzIGFscmVhZHkgY2FjaGVkLCBidXQgYXQgdG9vIHNtYWxsIGEg
c2l6ZSwgcmUtZGVjb2RlIGEgbGFyZ2VyIHZlcnNpb24uCi0gICAgICAgIGludCBzaXplQ2hhbmdl
ID0gLW1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIG1fZnJhbWVzW2luZGV4
XS5jbGVhcih0cnVlKTsKKyAgICAgICAgaW50IHNpemVDaGFuZ2UgPSAtbV9mcmFtZXNbaW5kZXhd
LmNsZWFyKEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpFbXB0eSk7CiAgICAgICAgIGludmFsaWRh
dGVQbGF0Zm9ybURhdGEoKTsKICAgICAgICAgbV9kZWNvZGVkU2l6ZSArPSBzaXplQ2hhbmdlOwog
ICAgICAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQpAQCAtMzk5LDQwICszNzksNzIgQEAgTmF0aXZl
SW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgZmxv
YXQgcHJlc2VudGF0aW9uU2MKICAgICB9CiAKICAgICAvLyBJZiB3ZSBoYXZlbid0IGZldGNoZWQg
YSBmcmFtZSB5ZXQsIGRvIHNvLgotICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkgfHwg
IW1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKQotICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCBzdWJz
YW1wbGluZ0xldmVsLCBDYWNoZU1ldGFkYXRhQW5kRnJhbWUpOworICAgIGlmIChpbmRleCA+PSBt
X2ZyYW1lcy5zaXplKCkgfHwgIW1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpKQorICAgICAgICBj
YWNoZUZyYW1lKGluZGV4LCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGlu
Zzo6TWV0YWRhdGFBbmRJbWFnZSk7CisKKyAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLmltYWdl
KCk7Cit9CisgICAgCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2UoKQor
eworICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKTsKK30KKyAgICAKK05hdGl2ZUltYWdl
UHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQor
eworICAgIHNpemVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKKyAgICAKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1h
Z2VBdEluZGV4KGkpOworICAgICAgICBpZiAoaW1hZ2UgJiYgUGxhdGZvcm1JbWFnZShpbWFnZSku
c2l6ZSgpID09IHNpemUpCisgICAgICAgICAgICByZXR1cm4gaW1hZ2U7CisgICAgfQorICAgIAor
ICAgIC8vIEZhbGxiYWNrIHRvIHRoZSBmaXJzdCBmcmFtZSBpbWFnZSBpZiB3ZSBjYW4ndCBmaW5k
IHRoZSByaWdodCBzaXplCisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KDApOworfQorICAg
IAorTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCkKK3sKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOworfQog
Ci0gICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOworVmVjdG9yPE5hdGl2ZUltYWdl
UHRyPiBCaXRtYXBJbWFnZTo6ZnJhbWVzTmF0aXZlSW1hZ2VzKCkKK3sKKyAgICBWZWN0b3I8TmF0
aXZlSW1hZ2VQdHI+IGltYWdlczsKKyAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7Cisg
ICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGlm
IChhdXRvIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkpCisgICAgICAgICAgICBpbWFnZXMu
YXBwZW5kKGltYWdlKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGltYWdlczsKIH0KIAogYm9v
bCBCaXRtYXBJbWFnZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCiB7Ci0g
ICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBDYWNoZU1ldGFkYXRhT25seSkpCisg
ICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGlu
Zzo6TWV0YWRhdGEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbV9mcmFt
ZXNbaW5kZXhdLm1faXNDb21wbGV0ZTsKKyAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLmlzQ29t
cGxldGUoKTsKIH0KIAogZmxvYXQgQml0bWFwSW1hZ2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNp
emVfdCBpbmRleCkKIHsKLSAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQoaW5kZXgsIENhY2hl
TWV0YWRhdGFPbmx5KSkKKyAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQoaW5kZXgsIEltYWdl
RnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRhZGF0YSkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAg
cmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2R1cmF0aW9uOwotfQotCi1OYXRpdmVJbWFnZVB0ciBC
aXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKQotewotICAgIHJldHVybiBm
cmFtZUltYWdlQXRJbmRleChjdXJyZW50RnJhbWUoKSk7CisgICAgcmV0dXJuIG1fZnJhbWVzW2lu
ZGV4XS5kdXJhdGlvbigpOwogfQogCiBib29sIEJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJ
bmRleChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4
LCBDYWNoZU1ldGFkYXRhT25seSkpCisgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4
LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEpCi0gICAgICAgIHJl
dHVybiBtX2ZyYW1lc1tpbmRleF0ubV9oYXNBbHBoYTsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhd
Lmhhc01ldGFkYXRhKCkpCisgICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0uaGFzQWxwaGEo
KTsKIAogICAgIHJldHVybiBtX3NvdXJjZS5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRleCk7CiB9
CkBAIC00NDQsMTEgKzQ1NiwxMSBAQCBib29sIEJpdG1hcEltYWdlOjpjdXJyZW50RnJhbWVLbm93
blRvQmVPcGFxdWUoKQogCiBJbWFnZU9yaWVudGF0aW9uIEJpdG1hcEltYWdlOjpmcmFtZU9yaWVu
dGF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2Fj
aGVkKGluZGV4LCBDYWNoZU1ldGFkYXRhT25seSkpCisgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2Fj
aGVkKGluZGV4LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEpKQogICAgICAgICBy
ZXR1cm4gSW1hZ2VPcmllbnRhdGlvbigpOwogCi0gICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX2hh
dmVNZXRhZGF0YSkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX29yaWVudGF0aW9u
OworICAgIGlmIChtX2ZyYW1lc1tpbmRleF0uaGFzTWV0YWRhdGEoKSkKKyAgICAgICAgcmV0dXJu
IG1fZnJhbWVzW2luZGV4XS5vcmllbnRhdGlvbigpOwogCiAgICAgcmV0dXJuIG1fc291cmNlLm9y
aWVudGF0aW9uQXRJbmRleChpbmRleCk7CiB9CkBAIC03MDAsMTcgKzcxMiw1NiBAQCBDb2xvciBC
aXRtYXBJbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkKICAgICAgICAgcmV0dXJuIENvbG9y
KCk7CiAgICAgCiAgICAgQVNTRVJUKG1fZnJhbWVzLnNpemUoKSk7Ci0gICAgbV9zb2xpZENvbG9y
ID0gTmF0aXZlSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcihtX2ZyYW1lc1swXS5tX2ltYWdl
LmdldCgpKTsKKyAgICBtX3NvbGlkQ29sb3IgPSBtX2ZyYW1lc1swXS5zaW5nbGVQaXhlbFNvbGlk
Q29sb3IoKTsKICAgICAKICAgICBBU1NFUlQobV9zb2xpZENvbG9yKTsKICAgICByZXR1cm4gbV9z
b2xpZENvbG9yLnZhbHVlKCk7CiB9CiAgICAgCitib29sIEJpdG1hcEltYWdlOjppc0FsbW9zdFNv
bGlkQ29sb3IoKQoreworICAgIGlmIChmcmFtZUNvdW50KCkgIT0gMSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcmV0dXJuIGVuc3VyZUZyYW1lSXNDYWNoZWQoMCkgJiYgbV9mcmFtZXNb
MF0uaXNBbG1vc3RTb2xpZENvbG9yKCk7Cit9CisgICAgCiBib29sIEJpdG1hcEltYWdlOjpjYW5B
bmltYXRlKCkKIHsKICAgICByZXR1cm4gc2hvdWxkQW5pbWF0ZSgpICYmIGZyYW1lQ291bnQoKSA+
IDE7CiB9CiAKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2Ny
aXB0aW9uIGRlc2NyaXB0aW9uKQoreworICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5KCkgfHwgc3Jj
UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworI2lmIFBMQVRGT1JNKElPUykKKyAg
ICBzdGFydEFuaW1hdGlvbihEb05vdENhdGNoVXApOworI2Vsc2UKKyAgICBzdGFydEFuaW1hdGlv
bigpOworI2VuZGlmCisgICAgCisgICAgQ29sb3IgY29sb3IgPSBzaW5nbGVQaXhlbFNvbGlkQ29s
b3IoKTsKKyAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7CisgICAgICAgIGZpbGxXaXRoU29saWRD
b2xvcihjb250ZXh0LCBkZXN0UmVjdCwgY29sb3IsIG9wKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBhdXRvIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJh
bWUsIFBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUoY29udGV4dCwgZGVzdFJlY3QsIHNy
Y1JlY3QpKTsKKyAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBo
YXZlIGFuIGltYWdlIHlldC4KKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEltYWdlT3JpZW50
YXRpb24gb3JpZW50YXRpb24oZGVzY3JpcHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKTsKKyAgICBp
ZiAoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VP
cmllbnRhdGlvbikKKyAgICAgICAgb3JpZW50YXRpb24gPSBmcmFtZU9yaWVudGF0aW9uQXRJbmRl
eChtX2N1cnJlbnRGcmFtZSk7CisgICAgCisgICAgUGxhdGZvcm1JbWFnZShpbWFnZSkuZHJhdyhj
b250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgbV9zaXplLCBvcCwgbW9kZSwgb3JpZW50YXRpb24p
OworICAgIAorICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCisgICAgICAgIGltYWdlT2JzZXJ2ZXIo
KS0+ZGlkRHJhdyh0aGlzKTsKK30KKyAgICAKIHZvaWQgQml0bWFwSW1hZ2U6OmR1bXAoVGV4dFN0
cmVhbSYgdHMpIGNvbnN0CiB7CiAgICAgSW1hZ2U6OmR1bXAodHMpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKaW5kZXggMDc1ODkyOWNkODdmYWRh
Y2YwMmI2ZWQ4ZWVhZmU3ZGVmZDY2ZjBjNS4uMjIxOGM4MjRiNTI4ZmQ2MzliYWIxMzhkZWNjOThi
OTgxNmExNjgxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Qml0bWFwSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRt
YXBJbWFnZS5oCkBAIC0yOCwxMSArMjgsMTMgQEAKICNpZm5kZWYgQml0bWFwSW1hZ2VfaAogI2Rl
ZmluZSBCaXRtYXBJbWFnZV9oCiAKLSNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkNvbG9y
LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lRGF0YS5oIgogI2lu
Y2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgogI2lu
Y2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCiAKICNpZiBVU0Uo
Q0cpIHx8IFVTRShBUFBLSVQpCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtNDcsNjMg
KzQ5LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgSEJJVE1BUF9fICpIQklUTUFQOwogI2VuZGlmCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKLSAgICBzdHJ1Y3QgRnJhbWVEYXRhOwotfQotCi1uYW1lc3BhY2Ug
V1RGIHsKLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBWZWN0b3JUcmFpdHM8V2ViQ29yZTo6RnJhbWVE
YXRhPiA6IHB1YmxpYyBTaW1wbGVDbGFzc1ZlY3RvclRyYWl0cyB7Ci0gICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGNhbkluaXRpYWxpemVXaXRoTWVtc2V0ID0gZmFsc2U7IC8vIE5vdCBhbGwgRnJh
bWVEYXRhIG1lbWJlcnMgaW5pdGlhbGl6ZSB0byAwLgotICAgIH07Ci19Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgVGltZXI7CiAKLW5hbWVzcGFjZSBOYXRpdmVJbWFnZSB7Ci0gICAg
SW50U2l6ZSBzaXplKGNvbnN0IE5hdGl2ZUltYWdlUHRyJik7Ci0gICAgYm9vbCBoYXNBbHBoYShj
b25zdCBOYXRpdmVJbWFnZVB0ciYpOwotICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcihj
b25zdCBOYXRpdmVJbWFnZVB0ciYpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIEZyYW1lRGF0YSBDbGFzcwotLy8gPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXN0cnVjdCBGcmFtZURh
dGEgewotcHVibGljOgotICAgIEZyYW1lRGF0YSgpCi0gICAgICAgIDogbV9oYXZlTWV0YWRhdGEo
ZmFsc2UpCi0gICAgICAgICwgbV9pc0NvbXBsZXRlKGZhbHNlKQotICAgICAgICAsIG1faGFzQWxw
aGEodHJ1ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgfkZyYW1lRGF0YSgpCi0gICAgeyAKLSAgICAg
ICAgY2xlYXIodHJ1ZSk7Ci0gICAgfQotCi0gICAgLy8gQ2xlYXIgdGhlIGNhY2hlZCBpbWFnZSBk
YXRhIG9uIHRoZSBmcmFtZSwgYW5kIChvcHRpb25hbGx5KSB0aGUgbWV0YWRhdGEuCi0gICAgLy8g
UmV0dXJucyB3aGV0aGVyIHRoZXJlIHdhcyBjYWNoZWQgaW1hZ2UgZGF0YSB0byBjbGVhci4KLSAg
ICBib29sIGNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSk7Ci0gICAgCi0gICAgdW5zaWduZWQgdXNl
ZEZyYW1lQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlID8gbV9mcmFtZUJ5dGVzIDogMDsg
fQotCi0gICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsKLSAgICBJbWFnZU9yaWVudGF0aW9uIG1f
b3JpZW50YXRpb24geyBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbiB9OwotICAgIFN1YnNhbXBsaW5n
TGV2ZWwgbV9zdWJzYW1wbGluZ0xldmVsIHsgMCB9OwotICAgIGZsb2F0IG1fZHVyYXRpb24geyAw
IH07Ci0gICAgYm9vbCBtX2hhdmVNZXRhZGF0YSA6IDE7Ci0gICAgYm9vbCBtX2lzQ29tcGxldGUg
OiAxOwotICAgIGJvb2wgbV9oYXNBbHBoYSA6IDE7Ci0gICAgdW5zaWduZWQgbV9mcmFtZUJ5dGVz
IHsgMCB9OwotfTsKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLy8gQml0bWFwSW1hZ2UgQ2xhc3MKLS8vID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQogY2xhc3MgQml0bWFwSW1hZ2UgZmluYWwg
OiBwdWJsaWMgSW1hZ2UgewogICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFnZTsKICAgICBm
cmllbmQgY2xhc3MgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U7CkBAIC0xNTUsMTIgKzEwMyw2IEBA
IHB1YmxpYzoKICAgICBDRkRhdGFSZWYgZ2V0VElGRlJlcHJlc2VudGF0aW9uKCkgb3ZlcnJpZGU7
CiAjZW5kaWYKIAotI2lmIFVTRShDRykKLSAgICBXRUJDT1JFX0VYUE9SVCBDR0ltYWdlUmVmIGdl
dENHSW1hZ2VSZWYoKSBvdmVycmlkZTsKLSAgICBDR0ltYWdlUmVmIGdldEZpcnN0Q0dJbWFnZVJl
Zk9mU2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7Ci0gICAgUmV0YWluUHRyPENGQXJyYXlS
ZWY+IGdldENHSW1hZ2VBcnJheSgpIG92ZXJyaWRlOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShX
SU4pCiAgICAgYm9vbCBnZXRIQklUTUFQKEhCSVRNQVApIG92ZXJyaWRlOwogICAgIGJvb2wgZ2V0
SEJJVE1BUE9mU2l6ZShIQklUTUFQLCBjb25zdCBJbnRTaXplKikgb3ZlcnJpZGU7CkBAIC0xNzQs
OCArMTE2LDEzIEBAIHB1YmxpYzoKICAgICBFdmFzX09iamVjdCogZ2V0RXZhc09iamVjdChFdmFz
Kikgb3ZlcnJpZGU7CiAjZW5kaWYKIAorICAgIFdFQkNPUkVfRVhQT1JUIE5hdGl2ZUltYWdlUHRy
IG5hdGl2ZUltYWdlKCkgb3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VP
ZlNpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwogICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgb3ZlcnJpZGU7CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBv
cmllbnRhdGlvbkZvckN1cnJlbnRGcmFtZSgpIG92ZXJyaWRlIHsgcmV0dXJuIGZyYW1lT3JpZW50
YXRpb25BdEluZGV4KGN1cnJlbnRGcmFtZSgpKTsgfQorICAgIFZlY3RvcjxOYXRpdmVJbWFnZVB0
cj4gZnJhbWVzTmF0aXZlSW1hZ2VzKCkgb3ZlcnJpZGU7CisgICAgCisgICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBpc0FsbW9zdFNvbGlkQ29sb3IoKTsKIAogICAgIGJvb2wgY3VycmVudEZyYW1lS25v
d25Ub0JlT3BhcXVlKCkgb3ZlcnJpZGU7CiAKQEAgLTIxNSw3ICsxNjIsNiBAQCBwcm90ZWN0ZWQ6
CiAgICAgc2l6ZV90IGZyYW1lQ291bnQoKTsKIAogICAgIE5hdGl2ZUltYWdlUHRyIGZyYW1lSW1h
Z2VBdEluZGV4KHNpemVfdCwgZmxvYXQgcHJlc2VudGF0aW9uU2NhbGVIaW50ID0gMSk7Ci0gICAg
TmF0aXZlSW1hZ2VQdHIgY29weVVuc2NhbGVkRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90KTsKIAog
ICAgIGJvb2wgaGF2ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCk7CiAKQEAgLTIyNSwxMSArMTcx
LDEwIEBAIHByb3RlY3RlZDoKICAgICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3JpZW50YXRpb25B
dEluZGV4KHNpemVfdCk7CiAKICAgICAvLyBEZWNvZGVzIGFuZCBjYWNoZXMgYSBmcmFtZS4gTmV2
ZXIgYWNjZXNzZWQgZXhjZXB0IGludGVybmFsbHkuCi0gICAgZW51bSBJbWFnZUZyYW1lQ2FjaGlu
ZyB7IENhY2hlTWV0YWRhdGFPbmx5LCBDYWNoZU1ldGFkYXRhQW5kRnJhbWUgfTsKLSAgICB2b2lk
IGNhY2hlRnJhbWUoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lQ2Fj
aGluZyA9IENhY2hlTWV0YWRhdGFBbmRGcmFtZSk7CisgICAgdm9pZCBjYWNoZUZyYW1lKHNpemVf
dCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgPSBJbWFn
ZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSk7CiAKICAgICAvLyBDYWxsZWQg
YmVmb3JlIGFjY2Vzc2luZyBtX2ZyYW1lc1tpbmRleF0gZm9yIGluZm8gd2l0aG91dCBkZWNvZGlu
Zy4gUmV0dXJucyBmYWxzZSBvbiBpbmRleCBvdXQgb2YgYm91bmRzLgotICAgIGJvb2wgZW5zdXJl
RnJhbWVJc0NhY2hlZChzaXplX3QgaW5kZXgsIEltYWdlRnJhbWVDYWNoaW5nID0gQ2FjaGVNZXRh
ZGF0YUFuZEZyYW1lKTsKKyAgICBib29sIGVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4
LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyA9IEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRh
ZGF0YUFuZEltYWdlKTsKIAogICAgIC8vIENhbGxlZCB0byBpbnZhbGlkYXRlIGNhY2hlZCBkYXRh
LiBXaGVuIHxkZXN0cm95QWxsfCBpcyB0cnVlLCB3ZSB3aXBlIG91dAogICAgIC8vIHRoZSBlbnRp
cmUgZnJhbWUgYnVmZmVyIGNhY2hlIGFuZCB0ZWxsIHRoZSBpbWFnZSBzb3VyY2UgdG8gZGVzdHJv
eQpAQCAtMjkyLDcgKzIzNyw3IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBJbnRTaXplIG1fc2l6
ZVJlc3BlY3RpbmdPcmllbnRhdGlvbjsKIAogICAgIHNpemVfdCBtX2N1cnJlbnRGcmFtZSB7IDAg
fTsgLy8gVGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGZyYW1lIG9mIGFuaW1hdGlvbi4KLSAgICBW
ZWN0b3I8RnJhbWVEYXRhLCAxPiBtX2ZyYW1lczsgLy8gQW4gYXJyYXkgb2YgdGhlIGNhY2hlZCBm
cmFtZXMgb2YgdGhlIGFuaW1hdGlvbi4gV2UgaGF2ZSB0byByZWYgZnJhbWVzIHRvIHBpbiB0aGVt
IGluIHRoZSBjYWNoZS4KKyAgICBWZWN0b3I8SW1hZ2VGcmFtZURhdGEsIDE+IG1fZnJhbWVzOyAv
LyBBbiBhcnJheSBvZiB0aGUgY2FjaGVkIGZyYW1lcyBvZiB0aGUgYW5pbWF0aW9uLiBXZSBoYXZl
IHRvIHJlZiBmcmFtZXMgdG8gcGluIHRoZW0gaW4gdGhlIGNhY2hlLgogCiAgICAgc3RkOjp1bmlx
dWVfcHRyPFRpbWVyPiBtX2ZyYW1lVGltZXI7CiAgICAgaW50IG1fcmVwZXRpdGlvbkNvdW50IHsg
Y0FuaW1hdGlvbk5vbmUgfTsgLy8gSG93IG1hbnkgdG90YWwgYW5pbWF0aW9uIGxvb3BzIHdlIHNo
b3VsZCBkby4gVGhpcyB3aWxsIGJlIGNBbmltYXRpb25Ob25lIGlmIHRoaXMgaW1hZ2UgdHlwZSBp
cyBpbmNhcGFibGUgb2YgYW5pbWF0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwUGl4ZWxzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBQaXhlbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZmFlM2QyZTQwY2NmMWQ4MWY2YmE1
N2RiNjgyZDkyZDQ2OWJiYWMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwUGl4ZWxzLmgKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXpl
LmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCaXRtYXBQaXhlbHMgeworcHVibGlj
OgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Qml0bWFwUGl4ZWxzPiBjcmVhdGUoY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bWFrZV91bmlxdWU8Qml0bWFwUGl4ZWxzPihzaXplLCBwcmVtdWx0aXBseUFscGhh
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gY3Jl
YXRlKGNvbnN0IEJpdG1hcFBpeGVscyYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX3VuaXF1ZTxCaXRtYXBQaXhlbHM+KG90aGVyKTsKKyAgICB9CisKKyAgICBCaXRtYXBQ
aXhlbHMoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhID0gdHJ1ZSkK
KyAgICAgICAgOiBtX3ByZW11bHRpcGx5QWxwaGEocHJlbXVsdGlwbHlBbHBoYSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCghc2l6ZS5pc0VtcHR5KCkpOworICAgICAgICBzZXRTaXplKHNpemUpOwor
ICAgIH0KKworICAgIEJpdG1hcFBpeGVscyhjb25zdCBCaXRtYXBQaXhlbHMmIG90aGVyKQorICAg
IHsKKyAgICAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBvdGhlci5tX2JhY2tpbmdTdG9yZTsKKyAg
ICAgICAgbV9waXhlbHMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7CisgICAgICAgIG1fc2l6ZSA9
IG90aGVyLm1fc2l6ZTsKKyAgICAgICAgbV9yZWN0ID0gb3RoZXIubV9yZWN0OworICAgICAgICBt
X3ByZW11bHRpcGx5QWxwaGEgPSBvdGhlci5tX3ByZW11bHRpcGx5QWxwaGE7CisgICAgfQorCisg
ICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2UoKSBjb25zdDsKKworICAgIGJvb2wgc2V0U2l6ZShjb25z
dCBJbnRTaXplJiBzaXplKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS50cnlS
ZXNlcnZlQ2FwYWNpdHkoc2l6ZS5hcmVhKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgbV9iYWNraW5nU3RvcmUucmVzaXplKHNpemUuYXJlYSgpKTsKKyAg
ICAgICAgbV9waXhlbHMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7CisgICAgICAgIG1fc2l6ZSA9
IHNpemU7CisgICAgICAgIG1fcmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXplKTsKKyAg
ICAgICAgY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZv
aWQgc2V0UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFt
X3NpemUuaXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKGluQm91bmRzKHJlY3QpKTsKKyAgICAg
ICAgbV9yZWN0ID0gcmVjdDsKKyAgICB9CisgICAgCisgICAgSW50U2l6ZSBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplOyB9CisgICAgSW50UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9y
ZWN0OyB9CisKKyAgICBSR0JBMzIqIGF0KGludCB4LCBpbnQgeSkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3BpeGVscyArIHkgKiBtX3NpemUud2lkdGgoKSArIHg7CisgICAgfQorCisg
ICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtZW1zZXQobV9waXhlbHMsIDAsIG1fc2l6
ZS5hcmVhKCkgKiBzaXplb2YoUkdCQTMyKSk7CisgICAgfQorCisgICAgdm9pZCBjbGVhclJlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSB8
fCBpbkJvdW5kcyhyZWN0KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAg
IHNpemVfdCByZWN0V2lkdGhJbkJ5dGVzID0gcmVjdC53aWR0aCgpICogc2l6ZW9mKFJHQkEzMik7
CisgICAgICAgIFJHQkEzMiogc3RhcnQgPSBhdChyZWN0LngoKSwgcmVjdC55KCkpOworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QuaGVpZ2h0KCk7ICsraSkgeworICAgICAgICAgICAg
bWVtc2V0KHN0YXJ0LCAwLCByZWN0V2lkdGhJbkJ5dGVzKTsKKyAgICAgICAgICAgIHN0YXJ0ICs9
IG1fc2l6ZS53aWR0aCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCByZXBlYXRGaXJz
dFJvdyhjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHJlY3QuaXNFbXB0
eSgpIHx8IGluQm91bmRzKHJlY3QpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICAgICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkgKiBzaXplb2YoUkdC
QTMyKTsKKyAgICAgICAgUkdCQTMyKiBzcmMgPSBhdChyZWN0LngoKSwgcmVjdC55KCkpOworICAg
ICAgICBSR0JBMzIqIGRlc3QgPSBzcmMgKyBtX3NpemUud2lkdGgoKTsKKyAgICAgICAgZm9yIChp
bnQgaSA9IDE7IGkgPCByZWN0LmhlaWdodCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1lbWNweShk
ZXN0LCBzcmMsIHJlY3RXaWR0aEluQnl0ZXMpOworICAgICAgICAgICAgZGVzdCArPSBtX3NpemUu
d2lkdGgoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgc2V0UkdCQShpbnQgeCwgaW50
IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAg
eworICAgICAgICBzZXRSR0JBKGF0KHgsIHkpLCByLCBnLCBiLCBhKTsKKyAgICB9CisKKyAgICB2
b2lkIHNldFJHQkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25l
ZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEg
fHwgYSA+PSAyNTUpCisgICAgICAgICAgICAqZGVzdCA9IG1ha2VSR0JBKHIsIGcsIGIsIGEpOwor
ICAgICAgICBlbHNlIGlmICghYSkKKyAgICAgICAgICAgICpkZXN0ID0gMDsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgKmRlc3QgPSBtYWtlUHJlbXVsdGlwbGllZFJHQkEociwgZywgYiwgYSk7
CisgICAgfQorCisgICAgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIsIHVu
c2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAgeworICAgICAgICBpZiAoIWEp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoYSA+PSAyNTUgfHwg
IWFscGhhQ2hhbm5lbCgqZGVzdCkpIHsKKyAgICAgICAgICAgIHNldFJHQkEoZGVzdCwgciwgZywg
YiwgYSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmICghbV9wcmVtdWx0aXBseUFscGhhKQorICAgICAgICAgICAgKmRlc3QgPSBtYWtlUHJlbXVs
dGlwbGllZFJHQkEocmVkQ2hhbm5lbCgqZGVzdCksIGdyZWVuQ2hhbm5lbCgqZGVzdCksIGJsdWVD
aGFubmVsKCpkZXN0KSwgYWxwaGFDaGFubmVsKCpkZXN0KSk7CisgICAgICAgIAorICAgICAgICBS
R0JBMzIgc3JjID0gbWFrZVJHQkEociwgZywgYiwgYSk7CisgICAgICAgICpkZXN0ID0gQ29sb3Io
KmRlc3QpLmJsZW5kKHNyYykucmdiKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIW1fcHJlbXVs
dGlwbHlBbHBoYSkKKyAgICAgICAgICAgICpkZXN0ID0gbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEo
cmVkQ2hhbm5lbCgqZGVzdCksIGdyZWVuQ2hhbm5lbCgqZGVzdCksIGJsdWVDaGFubmVsKCpkZXN0
KSwgYWxwaGFDaGFubmVsKCpkZXN0KSk7CisgICAgfQorCisgICAgYm9vbCBpbkJvdW5kcyhjb25z
dCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSW50UmVjdChJ
bnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHBvaW50KTsKKyAgICB9CisKKyAgICBib29sIGlu
Qm91bmRzKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
SW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHJlY3QpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBWZWN0b3I8UkdCQTMyPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBSR0JBMzIqIG1f
cGl4ZWxzIHsgbnVsbHB0ciB9OworICAgIEludFNpemUgbV9zaXplOworICAgIEludFJlY3QgbV9y
ZWN0OyAvLyBUaGlzIHdpbGwgYWx3YXlzIGp1c3QgYmUgdGhlIGVudGlyZSBidWZmZXIgZXhjZXB0
IGZvciBHSUYgYW5kIFBORyBmcmFtZXMKKyAgICBib29sIG1fcHJlbXVsdGlwbHlBbHBoYSB7IHRy
dWUgfTsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cAppbmRleCA0ZTI1YWE2ZmQ3NGQxZTQ2YzU0MTYxNDk4YmMxNzJiZjYwMDg3NWQxLi40MzlmNWE2
M2M3YmViZTU2MDQyYjI0ZTdkNzJlY2NlY2YzNmM0MGM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCkBAIC00OSw2ICs0OSw0MCBAQCBjb25zdCBSR0JBMzIg
Q29sb3I6OnRyYW5zcGFyZW50Owogc3RhdGljIGNvbnN0IFJHQkEzMiBsaWdodGVuZWRCbGFjayA9
IDB4RkY1NDU0NTQ7CiBzdGF0aWMgY29uc3QgUkdCQTMyIGRhcmtlbmVkV2hpdGUgPSAweEZGQUJB
QkFCOwogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG11bHRpcGx5MjU1KHVuc2lnbmVkIGMpCit7
CisgICAgLy8gYyAqIDI1NQorICAgIC8vICAgPSBjICogKDI1NiAtIDEpCisgICAgLy8gICA9IGMg
KiAyNTYgLSBjCisgICAgcmV0dXJuIChjIDw8IDgpIC0gYzsKK30KKworc3RhdGljIGlubGluZSB1
bnNpZ25lZCBkaXZpZGUyNTUodW5zaWduZWQgYykKK3sKKyAgICAvLyBjIC8gMjU1CisgICAgLy8g
ICA9IGMgLyAyNTYgKiAoMSArIDEgLyAyNTUpCisgICAgLy8gICA9IChjICsgYyAvIDI1NSkgLyAy
NTYKKyAgICAvLyAgID0gKGMgKyAoYyArIGMgLyAyNTUpIC8gMjU2KSAvIDI1NgorICAgIC8vICAg
PSAoYyArIGMgLyAyNTYgKyBjIC8gKDI1NSB4IDI1NikpIC8gMjU2CisgICAgLy8gIH49IChjICsg
YyAvIDI1NiArIDEpIC8gMjU2CisgICAgcmV0dXJuIChjICsgKGMgPj4gOCkgKyAxKSA+PiA4Owor
fQorICAgIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBkaXZpZGVDZWlsKHVuc2lnbmVkIGMsIHVu
c2lnbmVkIGQpCit7CisgICAgcmV0dXJuIChjICsgZCAtIDEpIC8gZDsKK30KKyAgICAKK3N0YXRp
YyBpbmxpbmUgdW5zaWduZWQgcHJlbXVsdGlwbGllZENoYW5uZWwodW5zaWduZWQgYywgdW5zaWdu
ZWQgYSkKK3sKKyAgICByZXR1cm4gZGl2aWRlMjU1KGMgKiBhKTsKK30KKworc3RhdGljIGlubGlu
ZSB1bnNpZ25lZCB1bnByZW11bHRpcGxpZWRDaGFubmVsKHVuc2lnbmVkIGMsIHVuc2lnbmVkIGEp
Cit7CisgICAgcmV0dXJuIGRpdmlkZUNlaWwobXVsdGlwbHkyNTUoYyksIGEpOworfQorICAgIAog
UkdCQTMyIG1ha2VSR0IoaW50IHIsIGludCBnLCBpbnQgYikKIHsKICAgICByZXR1cm4gMHhGRjAw
MDAwMCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKHIsIDI1NSkpIDw8IDE2IHwgc3RkOjptYXgoMCwg
c3RkOjptaW4oZywgMjU1KSkgPDwgOCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGIsIDI1NSkpOwpA
QCAtNTksNiArOTMsMTYgQEAgUkdCQTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGlu
dCBhKQogICAgIHJldHVybiBzdGQ6Om1heCgwLCBzdGQ6Om1pbihhLCAyNTUpKSA8PCAyNCB8IHN0
ZDo6bWF4KDAsIHN0ZDo6bWluKHIsIDI1NSkpIDw8IDE2IHwgc3RkOjptYXgoMCwgc3RkOjptaW4o
ZywgMjU1KSkgPDwgOCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGIsIDI1NSkpOwogfQogCitSR0JB
MzIgbWFrZVByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQorewor
ICAgIHJldHVybiBtYWtlUkdCQShwcmVtdWx0aXBsaWVkQ2hhbm5lbChyLCBhKSwgcHJlbXVsdGlw
bGllZENoYW5uZWwoZywgYSksIHByZW11bHRpcGxpZWRDaGFubmVsKGIsIGEpLCBhKTsKK30KKyAg
ICAKK1JHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBp
bnQgYSkKK3sKKyAgICByZXR1cm4gbWFrZVJHQkEodW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChyLCBh
KSwgdW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBhKSwgdW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChi
LCBhKSwgYSk7Cit9CisgICAgCiBzdGF0aWMgaW50IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGZsb2F0
IGYpCiB7CiAgICAgLy8gV2UgdXNlIGxyb3VuZGYgYW5kIDI1NSBpbnN0ZWFkIG9mIG5leHRhZnRl
cmYoMjU2LCAwKSB0byBtYXRjaCBDRydzIHJvdW5kaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuaAppbmRleCBkZDI2MjcwYmI0NjYwYjMzYWUwNzBlOGM5NDQ1MjBkNzI4
NDU0YjhhLi5hNTQ1MzJjNzc1NWE3Yzg3NjkzNjI0MGNhZTRlYzM3YTRkYTBkMDQzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKQEAgLTU0LDYgKzU0LDggQEAgdHlw
ZWRlZiB1bnNpZ25lZCBSR0JBMzI7IC8vIERlcHJlY2F0ZWQ6IFR5cGUgZm9yIGFuIFJHQkEgcXVh
ZHJ1cGxldC4gVXNlIFJHQkEgY2wKIAogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VSR0IoaW50
IHIsIGludCBnLCBpbnQgYik7CiBXRUJDT1JFX0VYUE9SVCBSR0JBMzIgbWFrZVJHQkEoaW50IHIs
IGludCBnLCBpbnQgYiwgaW50IGEpOworV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VQcmVtdWx0
aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7CitXRUJDT1JFX0VYUE9SVCBS
R0JBMzIgbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEp
OwogCiBXRUJDT1JFX0VYUE9SVCBSR0JBMzIgY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShSR0JBMzIg
Y29sb3IsIGZsb2F0IG92ZXJyaWRlQWxwaGEpOwogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIGNvbG9y
V2l0aE92ZXJyaWRlQWxwaGEoUkdCQTMyIGNvbG9yLCBPcHRpb25hbDxmbG9hdD4gb3ZlcnJpZGVB
bHBoYSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAppbmRleCA3YTI5
OTkyZjc3MTg4ZTAzODI4ZDgwYTY1YjhiZTJjZDhkYzJkZTc2Li44ZTdiNTJiMWY0ZjMxYzc0YTNj
YjJhMTMyMTVkYTc3YTJiMThjMDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlLmgKQEAgLTEzNyw4ICsxMzcsMTEgQEAgcHVibGljOgogCiAgICAgZW51bSBUaWxlUnVs
ZSB7IFN0cmV0Y2hUaWxlLCBSb3VuZFRpbGUsIFNwYWNlVGlsZSwgUmVwZWF0VGlsZSB9OwogCisg
ICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSgpIHsgcmV0dXJuIG51bGxwdHI7
IH0KKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlT2ZTaXplKGNvbnN0IElu
dFNpemUmKSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBu
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICB2aXJ0
dWFsIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb25Gb3JDdXJyZW50RnJhbWUoKSB7IHJldHVy
biBJbWFnZU9yaWVudGF0aW9uKCk7IH0KKyAgICB2aXJ0dWFsIFZlY3RvcjxOYXRpdmVJbWFnZVB0
cj4gZnJhbWVzTmF0aXZlSW1hZ2VzKCkgeyByZXR1cm4geyB9OyB9CiAKICAgICAvLyBBY2Nlc3Nv
cnMgZm9yIG5hdGl2ZSBpbWFnZSBmb3JtYXRzLgogCkBAIC0xNTAsMTIgKzE1Myw2IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIENGRGF0YVJlZiBnZXRUSUZGUmVwcmVzZW50YXRpb24oKSB7IHJldHVy
biBudWxscHRyOyB9CiAjZW5kaWYKIAotI2lmIFVTRShDRykKLSAgICB2aXJ0dWFsIENHSW1hZ2VS
ZWYgZ2V0Q0dJbWFnZVJlZigpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIENHSW1h
Z2VSZWYgZ2V0Rmlyc3RDR0ltYWdlUmVmT2ZTaXplKGNvbnN0IEludFNpemUmKSB7IHJldHVybiBu
dWxscHRyOyB9Ci0gICAgdmlydHVhbCBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gZ2V0Q0dJbWFnZUFy
cmF5KCkgeyByZXR1cm4gbnVsbHB0cjsgfQotI2VuZGlmCi0KICNpZiBQTEFURk9STShXSU4pCiAg
ICAgdmlydHVhbCBib29sIGdldEhCSVRNQVAoSEJJVE1BUCkgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0SEJJVE1BUE9mU2l6ZShIQklUTUFQLCBjb25zdCBJbnRTaXplKikg
eyByZXR1cm4gZmFsc2U7IH0KQEAgLTE3OSw2ICsxNzYsOCBAQCBwdWJsaWM6CiAjaWYgIUFTU0VS
VF9ESVNBQkxFRAogICAgIHZpcnR1YWwgYm9vbCBub3RTb2xpZENvbG9yKCkgeyByZXR1cm4gdHJ1
ZTsgfQogI2VuZGlmCisgICAgCisgICAgdmlydHVhbCB2b2lkIGxheW91dElmTmVlZGVkKCkgeyB9
CiAKICAgICB2aXJ0dWFsIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3Q7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iZmQyMGNmOGU2MWY0YjFhMWZlMDhlYjMzMmI3MTY1N2YwMTQ4YzE1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURh
dGEuY3BwCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1l
RGF0YS5oIgorCisjaW5jbHVkZSAiQ29sb3IuaCIKKworI2lmIFVTRShDRykKKyNpbmNsdWRlICJJ
bWFnZURlY29kZXJDRy5oIgorI2Vsc2UKKyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKKyNlbmRp
ZgorCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0ltYWdlRnJhbWVEYXRhOjpJbWFnZUZyYW1lRGF0YSgpCit7Cit9CisKK0ltYWdlRnJhbWVEYXRh
OjpJbWFnZUZyYW1lRGF0YShOYXRpdmVJbWFnZVB0ciYmIGltYWdlKQorICAgIDogbV9zdGF0dXMo
RGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlKQorICAgICwgbV9pbWFnZShXVEZNb3ZlKGltYWdlKSkK
K3sKKyAgICBtX3NpemUgPSBQbGF0Zm9ybUltYWdlKG1faW1hZ2UpLnNpemUoKTsKKyAgICBtX2hh
c0FscGhhID0gUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5oYXNBbHBoYSgpOworfQorCitJbWFnZUZy
YW1lRGF0YTo6SW1hZ2VGcmFtZURhdGEoSW1hZ2VEZWNvZGVyJiBkZWNvZGVyLCBzaXplX3QgaW5k
ZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgQ2FjaGluZyBmcmFtZUNhY2hp
bmcpCit7CisgICAgQVNTRVJUKGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YSB8fCBm
cmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSk7CisgICAgCisgICAgaWYg
KGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpJbWFnZSB8fCBmcmFtZUNhY2hpbmcgPT0gQ2FjaGlu
Zzo6TWV0YWRhdGFBbmRJbWFnZSkgeworICAgICAgICBtX2ltYWdlID0gZGVjb2Rlci5jcmVhdGVG
cmFtZUltYWdlQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7CisgICAgICAgIG1fc3Vi
c2FtcGxpbmdMZXZlbCA9IHN1YnNhbXBsaW5nTGV2ZWw7CisgICAgfQorICAgIAorICAgIGlmIChm
cmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGEgfHwgZnJhbWVDYWNoaW5nID09IENhY2hp
bmc6Ok1ldGFkYXRhQW5kSW1hZ2UpIHsKKyAgICAgICAgbV9vcmllbnRhdGlvbiA9IGRlY29kZXIu
b3JpZW50YXRpb25BdEluZGV4KGluZGV4KTsKKyAgICAgICAgbV9zdGF0dXMgPSBkZWNvZGVyLmZy
YW1lSXNDb21wbGV0ZUF0SW5kZXgoaW5kZXgpID8gRGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlIDog
RGVjb2RpbmdTdGF0dXM6OlBhcnRpYWw7CisgICAgICAgIAorICAgICAgICBpZiAoZGVjb2Rlci5y
ZXBldGl0aW9uQ291bnQoKSAhPSBjQW5pbWF0aW9uTm9uZSkKKyAgICAgICAgICAgIG1fZHVyYXRp
b24gPSBkZWNvZGVyLmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KTsKKyAgICAgICAgCisgICAg
ICAgIG1faGFzQWxwaGEgPSBkZWNvZGVyLmZyYW1lSGFzQWxwaGFBdEluZGV4KGluZGV4KTsKKyAg
ICAgICAgbV9zaXplID0gZGVjb2Rlci5mcmFtZVNpemVBdEluZGV4KGluZGV4LCBzdWJzYW1wbGlu
Z0xldmVsKTsKKyAgICB9Cit9CisKK0ltYWdlRnJhbWVEYXRhOjp+SW1hZ2VGcmFtZURhdGEoKQor
eworICAgIGNsZWFyU3ViSW1hZ2VzKCk7Cit9CisgICAgCitJbWFnZUZyYW1lRGF0YSYgSW1hZ2VG
cmFtZURhdGE6Om9wZXJhdG9yPShjb25zdCBJbWFnZUZyYW1lRGF0YSYgb3RoZXIpCit7CisgICAg
aWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBtX3N0YXR1
cyA9IG90aGVyLm1fc3RhdHVzOworICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKKyAgICBtX2lt
YWdlID0gb3RoZXIubV9pbWFnZTsKKyAgICAKKyAgICBtX3BpeGVscyA9IG90aGVyLnBpeGVscygp
ID8gQml0bWFwUGl4ZWxzOjpjcmVhdGUoKm90aGVyLnBpeGVscygpKSA6IG51bGxwdHI7CisgICAg
CisgICAgbV9vcmllbnRhdGlvbiA9IG90aGVyLm1fb3JpZW50YXRpb247CisgICAgbV9zdWJzYW1w
bGluZ0xldmVsID0gb3RoZXIubV9zdWJzYW1wbGluZ0xldmVsOworICAgIG1fZHVyYXRpb24gPSBv
dGhlci5tX2R1cmF0aW9uOworICAgIG1faGFzQWxwaGEgPSBvdGhlci5tX2hhc0FscGhhOworICAg
IHJldHVybiAqdGhpczsKK30KKwordm9pZCBJbWFnZUZyYW1lRGF0YTo6Y2xlYXJTdWJJbWFnZXMo
KQoreworICAgIGlmICghbV9pbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFBsYXRm
b3JtSW1hZ2UobV9pbWFnZSkuY2xlYXJTdWJJbWFnZXMoKTsKK30KKwordW5zaWduZWQgSW1hZ2VG
cmFtZURhdGE6OmNsZWFyKENhY2hpbmcgZnJhbWVDYWNoaW5nKQoreworICAgIEFTU0VSVChmcmFt
ZUNhY2hpbmcgPT0gQ2FjaGluZzo6RW1wdHkgfHwgZnJhbWVDYWNoaW5nID09IENhY2hpbmc6Ok1l
dGFkYXRhKTsKKyAgICAKKyAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzID0gdGhpcy0+ZnJhbWVCeXRl
cygpOworICAgIAorICAgIGNsZWFyU3ViSW1hZ2VzKCk7CisgICAgCisgICAgaWYgKGZyYW1lQ2Fj
aGluZyA9PSBDYWNoaW5nOjpFbXB0eSkKKyAgICAgICAgKnRoaXMgPSBJbWFnZUZyYW1lRGF0YSgp
OworICAgIGVsc2UKKyAgICAgICAgbV9pbWFnZSA9IG51bGxwdHI7CisgICAgCisgICAgcmV0dXJu
IGZyYW1lQnl0ZXM7Cit9CisKK0NvbG9yIEltYWdlRnJhbWVEYXRhOjpzaW5nbGVQaXhlbFNvbGlk
Q29sb3IoKSBjb25zdAoreworICAgIGlmICghaGFzSW1hZ2UoKSB8fCBtX3NpemUgIT0gSW50U2l6
ZSgxLCAxKSkKKyAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgCisgICAgcmV0dXJuIFBsYXRm
b3JtSW1hZ2UobV9pbWFnZSkuc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCk7Cit9CisKK2Jvb2wgSW1h
Z2VGcmFtZURhdGE6OmlzQWxtb3N0U29saWRDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKCFoYXNJ
bWFnZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIFBsYXRmb3Jt
SW1hZ2UobV9pbWFnZSkuaXNBbG1vc3RTb2xpZENvbG9yKCk7Cit9CisgICAgCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mNmZiNzU4ZWYzYTQyNThjYmRiM2FlMmY0NmU4NDQwZjczMGVmNDdjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEu
aApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkJpdG1hcFBpeGVscy5oIgorI2lu
Y2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVk
ZSAiTmF0aXZlSW1hZ2VQdHIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb2xv
cjsKK2NsYXNzIEltYWdlRGVjb2RlcjsKKworLy8gU3Vic2FtcGxpbmdMZXZlbC4gMCBpcyBubyBz
dWJzYW1wbGluZywgMSBpcyBoYWxmIGRpbWVuc2lvbnMgb24gZWFjaCBheGlzIGV0Yy4KK3VzaW5n
IFN1YnNhbXBsaW5nTGV2ZWwgPSB1aW50OF90OworCitlbnVtIDogU3Vic2FtcGxpbmdMZXZlbCB7
CisgICAgTWluU3Vic2FtcGxpbmdMZXZlbCA9IDAsCisgICAgTWF4U3Vic2FtcGxpbmdMZXZlbCA9
IDMsCisgICAgRGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwgPSBNaW5TdWJzYW1wbGluZ0xldmVsCit9
OworCitjbGFzcyBJbWFnZUZyYW1lRGF0YSB7CisgICAgZnJpZW5kIGNsYXNzIEltYWdlRGVjb2Rl
cjsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIENhY2hpbmcgeyBFbXB0eSwgTWV0YWRhdGEsIElt
YWdlLCBNZXRhZGF0YUFuZEltYWdlIH07CisgICAgZW51bSBjbGFzcyBEZWNvZGluZ1N0YXR1cyB7
IEVtcHR5LCBQYXJ0aWFsLCBDb21wbGV0ZSB9OworICAgIAorICAgIEltYWdlRnJhbWVEYXRhKCk7
CisgICAgSW1hZ2VGcmFtZURhdGEoTmF0aXZlSW1hZ2VQdHImJik7CisgICAgSW1hZ2VGcmFtZURh
dGEoSW1hZ2VEZWNvZGVyJiwgc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsID0gRGVmYXVs
dFN1YnNhbXBsaW5nTGV2ZWwsIENhY2hpbmcgPSBDYWNoaW5nOjpNZXRhZGF0YUFuZEltYWdlKTsK
KyAgICBJbWFnZUZyYW1lRGF0YShjb25zdCBJbWFnZUZyYW1lRGF0YSYgb3RoZXIpIHsgb3BlcmF0
b3I9KG90aGVyKTsgfQorCisgICAgfkltYWdlRnJhbWVEYXRhKCk7CisKKyAgICBJbWFnZUZyYW1l
RGF0YSYgb3BlcmF0b3I9KGNvbnN0IEltYWdlRnJhbWVEYXRhJiBvdGhlcik7CisgICAgCisgICAg
dW5zaWduZWQgY2xlYXIoQ2FjaGluZyk7CisgICAgQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9y
KCkgY29uc3Q7CisgICAgYm9vbCBpc0FsbW9zdFNvbGlkQ29sb3IoKSBjb25zdDsKKyAgICAKKyAg
ICBEZWNvZGluZ1N0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQorICAg
IGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzID09IERlY29kaW5nU3Rh
dHVzOjpDb21wbGV0ZTsgfQorICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGhhc1Bp
eGVscygpID8gcGl4ZWxzKCktPnNpemUoKSA6IG1fc2l6ZTsgfQorICAgIHVuc2lnbmVkIGZyYW1l
Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBoYXNJbWFnZSgpID8gbV9zaXplLmFyZWEoKSAqIHNpemVv
ZihSR0JBMzIpIDogMDsgfQorICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlKCkgY29uc3QgeyByZXR1
cm4gbV9pbWFnZTsgfQorICAgIEJpdG1hcFBpeGVscyogcGl4ZWxzKCkgY29uc3QgeyByZXR1cm4g
bV9waXhlbHMgPyBtX3BpeGVscy5nZXQoKSA6IG51bGxwdHI7IH0KKyAgICAKKyAgICBJbWFnZU9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9vcmllbnRhdGlvbjsgfQor
ICAgIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3Vic2FtcGxpbmdMZXZlbDsgfQorICAgIGZsb2F0IGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9kdXJhdGlvbjsgfQorICAgIAorICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiBt
X2hhc0FscGhhOyB9CisgICAgYm9vbCBoYXNJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7
IH0KKyAgICBib29sIGhhc01ldGFkYXRhKCkgY29uc3QgeyByZXR1cm4gIW1fc2l6ZS5pc0VtcHR5
KCk7IH0KKyAgICBib29sIGhhc1BpeGVscygpIGNvbnN0IHsgcmV0dXJuIHBpeGVscygpOyB9Cisg
ICAgCitwcml2YXRlOgorICAgIHZvaWQgY2xlYXJTdWJJbWFnZXMoKTsKKworICAgIHZvaWQgc2V0
U3RhdHVzKERlY29kaW5nU3RhdHVzIHN0YXR1cykgeyBtX3N0YXR1cyA9IHN0YXR1czsgfQorICAg
IHZvaWQgc2V0T3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgeyBtX29y
aWVudGF0aW9uID0gb3JpZW50YXRpb247IH07CisgICAgdm9pZCBzZXREdXJhdGlvbih1bnNpZ25l
ZCBkdXJhdGlvbikgeyBtX2R1cmF0aW9uID0gZHVyYXRpb247IH0KKyAgICB2b2lkIHNldEhhc0Fs
cGhhKGJvb2wgaGFzQWxwaGEpIHsgbV9oYXNBbHBoYSA9IGhhc0FscGhhOyB9CisgICAgCisgICAg
RGVjb2RpbmdTdGF0dXMgbV9zdGF0dXMgeyBEZWNvZGluZ1N0YXR1czo6RW1wdHkgfTsKKyAgICBJ
bnRTaXplIG1fc2l6ZTsKKyAgICBOYXRpdmVJbWFnZVB0ciBtX2ltYWdlOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxCaXRtYXBQaXhlbHM+IG1fcGl4ZWxzOworICAgIAorICAgIEltYWdlT3JpZW50YXRp
b24gbV9vcmllbnRhdGlvbiB7IERlZmF1bHRJbWFnZU9yaWVudGF0aW9uIH07CisgICAgU3Vic2Ft
cGxpbmdMZXZlbCBtX3N1YnNhbXBsaW5nTGV2ZWwgeyAwIH07CisgICAgZmxvYXQgbV9kdXJhdGlv
biB7IDAgfTsKKyAgICBib29sIG1faGFzQWxwaGEgeyB0cnVlIH07Cit9OworICAgIAorfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCmluZGV4
IGRkZDhhNTViYTA5MDZjNTg2NmExOTJjZjhlNDE0ZWE3MDdiNzI4YWMuLjgyZjZlMmQ2ZTQ1NDMz
ZGExYTdkNTZiMzcwZGZhNjFhNGM0MTkxMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKQEAgLTIyNCw2ICsyMjQsMTEgQEAgTmF0aXZl
SW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRl
eCwgU3Vic2FtcGxpbmdMZXYKICAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSA/IG1fZGVjb2Rlci0+
Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpIDogbnVsbHB0
cjsKIH0KIAorSW1hZ2VGcmFtZURhdGEgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lRGF0YUF0SW5k
ZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIEltYWdl
RnJhbWVEYXRhOjpDYWNoaW5nIGNhY2hpbmcpCit7CisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkg
PyBJbWFnZUZyYW1lRGF0YSgqbV9kZWNvZGVyLCBpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgY2Fj
aGluZykgOiBJbWFnZUZyYW1lRGF0YSgpOworfQorICAgIAogdm9pZCBJbWFnZVNvdXJjZTo6ZHVt
cChUZXh0U3RyZWFtJiB0cykgY29uc3QKIHsKICAgICBpZiAobV9hbGxvd1N1YnNhbXBsaW5nKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKaW5kZXgg
NjAzNTczOWI3ZThiMDk2ZGM4ZGZlOWM1MzBhNDJjNmYyOTFiZGEwMC4uYTQwYzdjZTkzMDdjZGFk
ZjA3OWFiNzAxYTgyNzk5YjY5MDUyOWQ0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaWZuZGVmIEltYWdl
U291cmNlX2gKICNkZWZpbmUgSW1hZ2VTb3VyY2VfaAogCisjaW5jbHVkZSAiSW1hZ2VGcmFtZURh
dGEuaCIKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW50UG9pbnQu
aCIKICNpbmNsdWRlICJOYXRpdmVJbWFnZVB0ci5oIgpAQCAtNjMsOSArNjQsNiBAQCBjb25zdCBp
bnQgY0FuaW1hdGlvbkxvb3BPbmNlID0gMDsKIGNvbnN0IGludCBjQW5pbWF0aW9uTG9vcEluZmlu
aXRlID0gLTE7CiBjb25zdCBpbnQgY0FuaW1hdGlvbk5vbmUgPSAtMjsKIAotLy8gU3Vic2FtcGxp
bmdMZXZlbC4gMCBpcyBubyBzdWJzYW1wbGluZywgMSBpcyBoYWxmIGRpbWVuc2lvbnMgb24gZWFj
aCBheGlzIGV0Yy4KLXR5cGVkZWYgc2hvcnQgU3Vic2FtcGxpbmdMZXZlbDsKLQogY2xhc3MgSW1h
Z2VTb3VyY2UgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlU291cmNlKTsKICAgICBm
cmllbmQgY2xhc3MgQml0bWFwSW1hZ2U7CkBAIC0xMzIsMTggKzEzMCwxOSBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBhbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoc2l6ZV90KSBjb25zdDsKICAg
ICAKICAgICAvLyBTaXplIG9mIG9wdGlvbmFsbHkgc3Vic2FtcGxlZCBmcmFtZS4KLSAgICBJbnRT
aXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gMCwgUmVzcGVj
dEltYWdlT3JpZW50YXRpb25FbnVtID0gRG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikgY29u
c3Q7CisgICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZl
bCA9IERlZmF1bHRTdWJzYW1wbGluZ0xldmVsLCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0g
PSBEb05vdFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKSBjb25zdDsKICAgICAKICAgICAvLyBSZXR1
cm4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgZGVjb2RlZCBmcmFtZS4gSWYgdGhlIGZyYW1l
IGlzIG5vdCB5ZXQKICAgICAvLyBkZWNvZGVkIHRoZW4gcmV0dXJuIDAuCi0gICAgdW5zaWduZWQg
ZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gMCkgY29uc3Q7Cisg
ICAgdW5zaWduZWQgZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0g
RGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0OwogICAgIAogICAgIGZsb2F0IGZyYW1lRHVy
YXRpb25BdEluZGV4KHNpemVfdCk7CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkF0
SW5kZXgoc2l6ZV90KSBjb25zdDsgLy8gRVhJRiBpbWFnZSBvcmllbnRhdGlvbgogICAgIAogICAg
IC8vIENhbGxlcnMgc2hvdWxkIG5vdCBjYWxsIHRoaXMgYWZ0ZXIgY2FsbGluZyBjbGVhcigpIHdp
dGggYSBoaWdoZXIgaW5kZXg7CiAgICAgLy8gc2VlIGNvbW1lbnRzIG9uIGNsZWFyKCkgYWJvdmUu
Ci0gICAgTmF0aXZlSW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90LCBTdWJz
YW1wbGluZ0xldmVsID0gMCk7CisgICAgTmF0aXZlSW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0
SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gRGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwp
OworICAgIEltYWdlRnJhbWVEYXRhIGNyZWF0ZUZyYW1lRGF0YUF0SW5kZXgoc2l6ZV90LCBTdWJz
YW1wbGluZ0xldmVsID0gRGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlRnJhbWVEYXRhOjpD
YWNoaW5nID0gSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOwogICAg
IAogcHJpdmF0ZToKICAgICB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmFiN2FlYTQ4OWYzZWIyYTgyODc3MWMyMTAzZThkNGQwYmUxN2JlNWQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdl
LmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKyNp
bmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb2xvcjsKK2NsYXNzIEZsb2F0UmVjdDsK
K2NsYXNzIEludFNpemU7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CisKK2NsYXNzIFBsYXRmb3Jt
SW1hZ2UgeworcHVibGljOgorICAgIFBsYXRmb3JtSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHIm
IGltYWdlKQorICAgICAgICA6IG1faW1hZ2UoaW1hZ2UpCisgICAgeworICAgIH0KKworICAgIGJv
b2wgaXNOaWwoKSBjb25zdCB7IHJldHVybiAhbV9pbWFnZTsgfQorICAgIHZvaWQgY2xlYXJTdWJJ
bWFnZXMoKTsKKworICAgIEludFNpemUgc2l6ZSgpIGNvbnN0OworICAgIGJvb2wgaGFzQWxwaGEo
KSBjb25zdDsKKyAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdDsKKyAgICBi
b29sIGlzQWxtb3N0U29saWRDb2xvcigpIGNvbnN0OworICAgIHZvaWQgZHJhdyhHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUs
IGNvbnN0IEltYWdlT3JpZW50YXRpb24mKSBjb25zdDsKKworICAgIHN0YXRpYyBmbG9hdCBzdWJz
YW1wbGluZ1NjYWxlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCk7CisKK3ByaXZhdGU6CisjaWYgVVNFKENHKQorICAg
IENHSW1hZ2VSZWYgY2dJbWFnZVJlZigpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UgPyBtX2ltYWdl
LmdldCgpIDogbnVsbHB0cjsgfQorI2VuZGlmCisgICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsK
K307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbQppbmRleCBmNGMxNDU3YmJiMjU1NzU0
ZjAwYTA2MjVlZTgzZTA0ZGE3YzZlZmNmLi5kNTIwZjVkNTg1YWM2MGRiYWVlMjU1ZTFiODNjMjRk
YzY4NzIxMGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCkBAIC0yMTIsNyArMjEyLDcg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnVwZGF0ZURpc3Bs
YXlNb2RlKCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgbV9wYXVzZWRJbWFnZSA9IGltYWdlLT5nZXRDR0ltYWdlUmVm
KCk7CisgICAgICAgICAgICAgICAgbV9wYXVzZWRJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgpOwogICAgICAgICAgICAgICAgIGlmICghbV9wYXVzZWRJbWFnZSkgewog
ICAgICAgICAgICAgICAgICAgICBtX2Rpc3BsYXlNb2RlID0gUGFpbnRJdEJsYWNrOwogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDE3NzIyYmVjNTNhYjhhMDhhOGRhODUyOGI5ZTBkN2M0ZDBjZDQx
MzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCaXRt
YXBJbWFnZS5oIgotCi0jaWYgVVNFKENBSVJPKQotCi0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMu
aCIKLSNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0
Q2Fpcm8uaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIE5hdGl2ZUltYWdlIHsKLQotSW50U2l6ZSBzaXpl
KGNvbnN0IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiBpbWFnZSkKLXsKLSAgICByZXR1cm4gY2Fp
cm9TdXJmYWNlU2l6ZShpbWFnZS5nZXQoKSk7Ci19Ci0KLWJvb2wgaGFzQWxwaGEoY29uc3QgUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4mIGltYWdlKQotewotICAgIHJldHVybiBjYWlyb19zdXJmYWNl
X2dldF9jb250ZW50KGltYWdlLmdldCgpKSAhPSBDQUlST19DT05URU5UX0NPTE9SOwotfQotCi1D
b2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoY29uc3QgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4m
IGltYWdlKQotewotICAgIEFTU0VSVChpbWFnZSk7Ci0gICAgCi0gICAgaWYgKE5hdGl2ZUltYWdl
OjpzaXplKGltYWdlKSAhPSBJbnRTaXplKDEsIDEpKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsK
LQotICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKGltYWdlLmdldCgpKSAhPSBDQUlST19T
VVJGQUNFX1RZUEVfSU1BR0UpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotCi0gICAgUkdCQTMy
KiBwaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFJHQkEzMio+KGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X2RhdGEoaW1hZ2UuZ2V0KCkpKTsKLSAgICByZXR1cm4gY29sb3JGcm9tUHJlbXVsdGlw
bGllZEFSR0IoKnBpeGVsKTsKLX0KLQotfQotCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCwKLSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJ
bWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pCi17Ci0gICAgaWYgKCFkc3Qu
d2lkdGgoKSB8fCAhZHN0LmhlaWdodCgpIHx8ICFzcmMud2lkdGgoKSB8fCAhc3JjLmhlaWdodCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGFydEFuaW1hdGlvbigpOwotCi0gICAgYXV0byBz
dXJmYWNlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwotICAgIGlmICghc3Vy
ZmFjZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCi0g
ICAgICAgIHJldHVybjsKLQotICAgIENvbG9yIGNvbG9yID0gc2luZ2xlUGl4ZWxTb2xpZENvbG9y
KCk7Ci0gICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBmaWxsV2l0aFNvbGlkQ29s
b3IoY29udGV4dCwgZHN0LCBjb2xvciwgb3ApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgY29udGV4dC5zYXZlKCk7Ci0KLSAgICAvLyBTZXQgdGhlIGNvbXBvc2l0aW5nIG9wZXJhdGlv
bi4KLSAgICBpZiAob3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciAmJiBibGVuZE1vZGUgPT0gQmxl
bmRNb2RlTm9ybWFsICYmICFmcmFtZUhhc0FscGhhQXRJbmRleChtX2N1cnJlbnRGcmFtZSkpCi0g
ICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOwotICAg
IGVsc2UKLSAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3AsIGJsZW5kTW9k
ZSk7Ci0KLSNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQotICAgIEludFNp
emUgc2NhbGVkU2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUoc3VyZmFjZS5nZXQoKSk7Ci0gICAgRmxv
YXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGxpbmco
c3JjLCBzY2FsZWRTaXplKTsKLSNlbHNlCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdChz
cmMpOwotI2VuZGlmCi0KLSAgICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3JpZW50YXRpb24oZGVz
Y3JpcHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKTsKLSAgICBpZiAoZGVzY3JpcHRpb24ucmVzcGVj
dEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikKLSAgICAgICAg
ZnJhbWVPcmllbnRhdGlvbiA9IGZyYW1lT3JpZW50YXRpb25BdEluZGV4KG1fY3VycmVudEZyYW1l
KTsKLQotICAgIEZsb2F0UmVjdCBkc3RSZWN0ID0gZHN0OwotCi0gICAgaWYgKGZyYW1lT3JpZW50
YXRpb24gIT0gRGVmYXVsdEltYWdlT3JpZW50YXRpb24pIHsKLSAgICAgICAgLy8gSW1hZ2VPcmll
bnRhdGlvbiBleHBlY3RzIHRoZSBvcmlnaW4gdG8gYmUgYXQgKDAsIDApLgotICAgICAgICBjb250
ZXh0LnRyYW5zbGF0ZShkc3RSZWN0LngoKSwgZHN0UmVjdC55KCkpOwotICAgICAgICBkc3RSZWN0
LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoKSk7Ci0gICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKGZy
YW1lT3JpZW50YXRpb24udHJhbnNmb3JtRnJvbURlZmF1bHQoZHN0UmVjdC5zaXplKCkpKTsKLSAg
ICAgICAgaWYgKGZyYW1lT3JpZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSkgewotICAgICAg
ICAgICAgLy8gVGhlIGRlc3RpbmF0aW9uIHJlY3RhbmdsZSB3aWxsIGhhdmUgaXQncyB3aWR0aCBh
bmQgaGVpZ2h0IGFscmVhZHkgcmV2ZXJzZWQgZm9yIHRoZSBvcmllbnRhdGlvbiBvZgotICAgICAg
ICAgICAgLy8gdGhlIGltYWdlLCBhcyBpdCB3YXMgbmVlZGVkIGZvciBwYWdlIGxheW91dCwgc28g
d2UgbmVlZCB0byByZXZlcnNlIGl0IGJhY2sgaGVyZS4KLSAgICAgICAgICAgIGRzdFJlY3QgPSBG
bG9hdFJlY3QoZHN0UmVjdC54KCksIGRzdFJlY3QueSgpLCBkc3RSZWN0LmhlaWdodCgpLCBkc3RS
ZWN0LndpZHRoKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29udGV4dC5wbGF0Zm9ybUNv
bnRleHQoKS0+ZHJhd1N1cmZhY2VUb0NvbnRleHQoc3VyZmFjZS5nZXQoKSwgZHN0UmVjdCwgYWRq
dXN0ZWRTcmNSZWN0LCBjb250ZXh0KTsKLQotICAgIGNvbnRleHQucmVzdG9yZSgpOwotCi0gICAg
aWYgKGltYWdlT2JzZXJ2ZXIoKSkKLSAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRo
aXMpOwotfQotCi1ib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQotewot
ICAgIGlmIChjbGVhck1ldGFkYXRhKQotICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOwot
Ci0gICAgaWYgKG1faW1hZ2UpIHsKLSAgICAgICAgbV9pbWFnZSA9IG51bGxwdHI7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjcwYWRhZWMyNzBlMzFiMDU0YWZjNWY2NmQ0ODI4OGFlYmYwNjFlM2EK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJD
YWlyb1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCisjaW5j
bHVkZSA8Y2Fpcm8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFBsYXRmb3JtSW1h
Z2U6OmNsZWFyU3ViSW1hZ2VzKCkKK3sKK30KKworSW50U2l6ZSBQbGF0Zm9ybUltYWdlOjpzaXpl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNOaWwoKSA/IEludFNpemUoKSA6IGNhaXJvU3VyZmFj
ZVNpemUobV9pbWFnZS5nZXQoKSk7Cit9CisKK2Jvb2wgUGxhdGZvcm1JbWFnZTo6aGFzQWxwaGEo
KSBjb25zdAoreworICAgIHJldHVybiBpc05pbCgpIHx8IGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRl
bnQobV9pbWFnZS5nZXQoKSkgIT0gQ0FJUk9fQ09OVEVOVF9DT0xPUjsKK30KKworQ29sb3IgUGxh
dGZvcm1JbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3QKK3sKKyAgICBpZiAoaXNO
aWwoKSB8fCBzaXplKCkgIT0gSW50U2l6ZSgxLCAxKSkKKyAgICAgICAgcmV0dXJuIENvbG9yKCk7
CisKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShtX2ltYWdlLmdldCgpKSAhPSBDQUlS
T19TVVJGQUNFX1RZUEVfSU1BR0UpCisgICAgICAgIHJldHVybiBDb2xvcigpOworCisgICAgUkdC
QTMyKiBwaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFJHQkEzMio+KGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2RhdGEobV9pbWFnZS5nZXQoKSkpOworICAgIHJldHVybiBjb2xvckZyb21QcmVt
dWx0aXBsaWVkQVJHQigqcGl4ZWwpOworfQorCitib29sIFBsYXRmb3JtSW1hZ2U6OmlzQWxtb3N0
U29saWRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitmbG9hdCBQbGF0
Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYpCit7CisgICAgcmV0dXJuIDE7Cit9CisKK3ZvaWQgUGxh
dGZvcm1JbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50U2l6ZSYsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSwgY29uc3QgSW1hZ2VPcmllbnRhdGlv
biYgb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgY29udGV4dC5zYXZlKCk7CisgICAgCisgICAg
Ly8gU2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCisgICAgaWYgKG9wID09IENvbXBvc2l0
ZVNvdXJjZU92ZXIgJiYgbW9kZSA9PSBCbGVuZE1vZGVOb3JtYWwgJiYgIWhhc0FscGhhKCkpCisg
ICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOworICAg
IGVsc2UKKyAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3AsIG1vZGUpOwor
ICAgICAgICAKKyNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQorICAgIElu
dFNpemUgc2NhbGVkU2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUobV9pbWFnZS5nZXQoKSk7CisgICAg
RmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGxp
bmcoc3JjUmVjdCwgc2NhbGVkU2l6ZSk7CisjZWxzZQorICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNy
Y1JlY3Qoc3JjUmVjdCk7CisjZW5kaWYKKyAgICAgICAgCisgICAgRmxvYXRSZWN0IGFkanVzdGVk
RGVzdFJlY3QgPSBkZXN0UmVjdDsKKyAgICAgICAgCisgICAgaWYgKG9yaWVudGF0aW9uICE9IERl
ZmF1bHRJbWFnZU9yaWVudGF0aW9uKSB7CisgICAgICAgIC8vIEltYWdlT3JpZW50YXRpb24gZXhw
ZWN0cyB0aGUgb3JpZ2luIHRvIGJlIGF0ICgwLCAwKS4KKyAgICAgICAgY29udGV4dC50cmFuc2xh
dGUoZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCkpOworICAgICAgICBhZGp1c3RlZERlc3RSZWN0
LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoKSk7CisgICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKG9y
aWVudGF0aW9uLnRyYW5zZm9ybUZyb21EZWZhdWx0KGFkanVzdGVkRGVzdFJlY3Quc2l6ZSgpKSk7
CisgICAgICAgIGlmIChvcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpKSB7CisgICAgICAg
ICAgICAvLyBUaGUgZGVzdGluYXRpb24gcmVjdGFuZ2xlIHdpbGwgaGF2ZSBpdCdzIHdpZHRoIGFu
ZCBoZWlnaHQgYWxyZWFkeSByZXZlcnNlZCBmb3IgdGhlIG9yaWVudGF0aW9uIG9mCisgICAgICAg
ICAgICAvLyB0aGUgaW1hZ2UsIGFzIGl0IHdhcyBuZWVkZWQgZm9yIHBhZ2UgbGF5b3V0LCBzbyB3
ZSBuZWVkIHRvIHJldmVyc2UgaXQgYmFjayBoZXJlLgorICAgICAgICAgICAgYWRqdXN0ZWREZXN0
UmVjdC5zZXRTaXplKGFkanVzdGVkRGVzdFJlY3Quc2l6ZSgpLnRyYW5zcG9zZWRTaXplKCkpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1N1
cmZhY2VUb0NvbnRleHQobV9pbWFnZS5nZXQoKSwgYWRqdXN0ZWREZXN0UmVjdCwgYWRqdXN0ZWRT
cmNSZWN0LCBjb250ZXh0KTsKKworICAgIGNvbnRleHQucmVzdG9yZSgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2M4MWExNzBiZTc5YWU2YmU2Y2FjZGM5OWY0YzM5OGNh
YWY0MjZkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMjA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkJpdG1hcEltYWdlLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJDb3JlR3JhcGhp
Y3NTUEkuaCIKLSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJHZW9tZXRy
eVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVkZSAi
SW1hZ2VPYnNlcnZlci5oIgotI2luY2x1ZGUgIlN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCIKLSNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLSNpZiBVU0UoQVBQS0lUKQotI2luY2x1ZGUgPEFw
cGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgotI2VuZGlmCi0KLSNpZiBQ
TEFURk9STShDT0NPQSkKLSNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0jZW5k
aWYKLQotI2lmIFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2Uv
V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1uYW1lc3BhY2UgTmF0aXZlSW1hZ2UgewotCi1JbnRTaXplIHNpemUoY29uc3QgUmV0YWluUHRy
PENHSW1hZ2VSZWY+JiBpbWFnZSkKLXsKLSAgICBBU1NFUlQoaW1hZ2UpOwotICAgIHJldHVybiBJ
bnRTaXplKENHSW1hZ2VHZXRXaWR0aChpbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQoaW1h
Z2UuZ2V0KCkpKTsKLX0KLQotYm9vbCBoYXNBbHBoYShjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4mKQotewotICAgIC8vIEZJWE1FOiBBbnN3ZXIgY29ycmVjdGx5IHRoZSBxdWVzdGlvbjogZG9l
cyB0aGUgQ0dJbWFnZVJlZiBoYXZlIGFscGhhIGNoYW5ubmVsPwotICAgIHJldHVybiB0cnVlOwot
fQotICAgIAotQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKGNvbnN0IFJldGFpblB0cjxDR0lt
YWdlUmVmPiYgaW1hZ2UpCi17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICAKLSAgICBpZiAoTmF0
aXZlSW1hZ2U6OnNpemUoaW1hZ2UpICE9IEludFNpemUoMSwgMSkpCi0gICAgICAgIHJldHVybiBD
b2xvcigpOwotICAgIAotICAgIHVuc2lnbmVkIGNoYXIgcGl4ZWxbNF07IC8vIFJHQkEKLSAgICBh
dXRvIGJpdG1hcENvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShwaXhlbCwg
MSwgMSwgOCwgc2l6ZW9mKHBpeGVsKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwKLSAgICAgICAga0NH
SW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcpKTsK
LQotICAgIGlmICghYml0bWFwQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0gICAg
Ci0gICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGJpdG1hcENvbnRleHQuZ2V0KCksIGtDR0JsZW5k
TW9kZUNvcHkpOwotICAgIENHQ29udGV4dERyYXdJbWFnZShiaXRtYXBDb250ZXh0LmdldCgpLCBD
R1JlY3RNYWtlKDAsIDAsIDEsIDEpLCBpbWFnZS5nZXQoKSk7Ci0gICAgCi0gICAgaWYgKCFwaXhl
bFszXSkKLSAgICAgICAgcmV0dXJuIENvbG9yKDAsIDAsIDAsIDApOwotCi0gICAgcmV0dXJuIENv
bG9yKHBpeGVsWzBdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICogMjU1IC8gcGl4ZWxbM10s
IHBpeGVsWzJdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKLX0KLQotfQotCi1ib29sIEZy
YW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQotewotICAgIGlmIChjbGVhck1ldGFk
YXRhKQotICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOwotCi0gICAgbV9zdWJzYW1wbGlu
Z0xldmVsID0gMDsKLQotICAgIGlmIChtX2ltYWdlKSB7Ci0jaWYgQ0FDSEVfU1VCSU1BR0VTCi0g
ICAgICAgIHN1YmltYWdlQ2FjaGUoKS5jbGVhckltYWdlKG1faW1hZ2UuZ2V0KCkpOwotI2VuZGlm
Ci0gICAgICAgIG1faW1hZ2UgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1DR0ltYWdlUmVmIEJpdG1hcEltYWdlOjpnZXRDR0lt
YWdlUmVmKCkKLXsKLSAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCkuZ2V0KCk7Ci19Ci0K
LUNHSW1hZ2VSZWYgQml0bWFwSW1hZ2U6OmdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6ZShjb25zdCBJ
bnRTaXplJiBzaXplKQotewotICAgIHNpemVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgQ0dJbWFnZVJlZiBj
Z0ltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkuZ2V0KCk7Ci0gICAgICAgIGlmIChjZ0ltYWdl
ICYmIEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGNnSW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGNn
SW1hZ2UpKSA9PSBzaXplKQotICAgICAgICAgICAgcmV0dXJuIGNnSW1hZ2U7Ci0gICAgfQotCi0g
ICAgLy8gRmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgQ0dJbWFnZVJlZiBpZiB3ZSBjYW4ndCBmaW5k
IHRoZSByaWdodCBzaXplCi0gICAgcmV0dXJuIGdldENHSW1hZ2VSZWYoKTsKLX0KLQotUmV0YWlu
UHRyPENGQXJyYXlSZWY+IEJpdG1hcEltYWdlOjpnZXRDR0ltYWdlQXJyYXkoKQotewotICAgIHNp
emVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKLSAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICAKLSAgICBDRk11dGFibGVBcnJheVJlZiBhcnJheSA9IENGQXJyYXlD
cmVhdGVNdXRhYmxlKE5VTEwsIGNvdW50LCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKENHSW1hZ2VS
ZWYgY3VyckZyYW1lID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkuZ2V0KCkpCi0gICAgICAgICAgICBD
RkFycmF5QXBwZW5kVmFsdWUoYXJyYXksIGN1cnJGcmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBh
ZG9wdENGKGFycmF5KTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQmIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3AsIEJsZW5kTW9kZSBibGVuZE1vZGUs
IEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikKLXsKLSNpZiBQTEFURk9S
TShJT1MpCi0gICAgc3RhcnRBbmltYXRpb24oRG9Ob3RDYXRjaFVwKTsKLSNlbHNlCi0gICAgc3Rh
cnRBbmltYXRpb24oKTsKLSNlbmRpZgotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdl
OwotICAgIC8vIE5ldmVyIHVzZSBzdWJzYW1wbGVkIGltYWdlcyBmb3IgZHJhd2luZyBpbnRvIFBE
RiBjb250ZXh0cy4KLSAgICBpZiAod2tDR0NvbnRleHRJc1BERkNvbnRleHQoY3R4dC5wbGF0Zm9y
bUNvbnRleHQoKSkpCi0gICAgICAgIGltYWdlID0gY29weVVuc2NhbGVkRnJhbWVJbWFnZUF0SW5k
ZXgobV9jdXJyZW50RnJhbWUpOwotICAgIGVsc2UgewotICAgICAgICBDR1JlY3QgdHJhbnNmb3Jt
ZWREZXN0aW5hdGlvblJlY3QgPSBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShkZXN0UmVjdCwg
Q0dDb250ZXh0R2V0Q1RNKGN0eHQucGxhdGZvcm1Db250ZXh0KCkpKTsKLSAgICAgICAgZmxvYXQg
c3Vic2FtcGxpbmdTY2FsZSA9IHN0ZDo6bWluPGZsb2F0PigxLCBzdGQ6Om1heCh0cmFuc2Zvcm1l
ZERlc3RpbmF0aW9uUmVjdC5zaXplLndpZHRoIC8gc3JjUmVjdC53aWR0aCgpLCB0cmFuc2Zvcm1l
ZERlc3RpbmF0aW9uUmVjdC5zaXplLmhlaWdodCAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsKLQotICAg
ICAgICBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lLCBzdWJzYW1wbGlu
Z1NjYWxlKTsKLSAgICB9Ci0KLSAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3
ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIENv
bG9yIGNvbG9yID0gc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCk7Ci0gICAgaWYgKGNvbG9yLmlzVmFs
aWQoKSkgewotICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwgZGVzdFJlY3QsIGNvbG9y
LCBjb21wb3NpdGVPcCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBTdWJzYW1w
bGluZyBtYXkgaGF2ZSBnaXZlbiB1cyBhbiBpbWFnZSB0aGF0IGlzIHNtYWxsZXIgdGhhbiBzaXpl
KCkuCi0gICAgSW50U2l6ZSBpbWFnZVNpemUoQ0dJbWFnZUdldFdpZHRoKGltYWdlLmdldCgpKSwg
Q0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSkpOwotICAgIAotICAgIC8vIHNyY1JlY3QgaXMg
aW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB1bnN1YnNhbXBsZWQgaW1hZ2UsIHNvIHdlIGhhdmUg
dG8gbWFwIGl0IHRvIHRoZSBzdWJzYW1wbGVkIGltYWdlLgotICAgIEZsb2F0UmVjdCBzY2FsZWRT
cmNSZWN0ID0gc3JjUmVjdDsKLSAgICBpZiAoaW1hZ2VTaXplICE9IG1fc2l6ZSkgewotICAgICAg
ICBGbG9hdFJlY3Qgb3JpZ2luYWxJbWFnZUJvdW5kcyhGbG9hdFBvaW50KCksIG1fc2l6ZSk7Ci0g
ICAgICAgIEZsb2F0UmVjdCBzdWJzYW1wbGVkSW1hZ2VCb3VuZHMoRmxvYXRQb2ludCgpLCBpbWFn
ZVNpemUpOwotICAgICAgICBzY2FsZWRTcmNSZWN0ID0gbWFwUmVjdChzcmNSZWN0LCBvcmlnaW5h
bEltYWdlQm91bmRzLCBzdWJzYW1wbGVkSW1hZ2VCb3VuZHMpOwotICAgIH0KLSAgICAKLSAgICBJ
bWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uOwotICAgIGlmIChkZXNjcmlwdGlvbi5yZXNwZWN0
SW1hZ2VPcmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQotICAgICAgICBv
cmllbnRhdGlvbiA9IGZyYW1lT3JpZW50YXRpb25BdEluZGV4KG1fY3VycmVudEZyYW1lKTsKLQot
ICAgIGN0eHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzY2Fs
ZWRTcmNSZWN0LCBjb21wb3NpdGVPcCwgYmxlbmRNb2RlLCBvcmllbnRhdGlvbik7Ci0KLSAgICBp
ZiAoaW1hZ2VPYnNlcnZlcigpKQotICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhp
cyk7Ci19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBCaXRtYXBJbWFnZTo6Y29weVVuc2NhbGVk
RnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4KQotewotICAgIGlmIChpbmRleCA+PSBmcmFt
ZUNvdW50KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGluZGV4ID49IG1f
ZnJhbWVzLnNpemUoKSB8fCAhbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2UpCi0gICAgICAgIGNhY2hl
RnJhbWUoaW5kZXgsIDApOwotCi0gICAgaWYgKCFtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1wbGlu
Z0xldmVsKQotICAgICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2U7Ci0KLSAgICBy
ZXR1cm4gbV9zb3VyY2UuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgpOwotfQotCi19Ci0K
LSNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUGF0dGVybkNHLmNwcAppbmRleCBiNDI4ZDUwZDk0YmY5MjQyODAzMjg3ZDJlZWMxNmJk
NjljNTI4ZDkyLi4zZGFhMTM5YWI3ZWE1YjQyMTU3Nzg4MzVkMzUzZDhhZGI1ZjBjNzVlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAK
QEAgLTcyLDcgKzcyLDcgQEAgQ0dQYXR0ZXJuUmVmIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0
dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRyYW4KICAgICAvLyBJZiB3ZSdy
ZSByZXBlYXRpbmcgaW4gYm90aCBkaXJlY3Rpb25zLCB3ZSBjYW4gdXNlIGltYWdlLWJhY2tlZCBw
YXR0ZXJucwogICAgIC8vIGluc3RlYWQgb2YgY3VzdG9tIHBhdHRlcm5zLCBhbmQgYXZvaWQgdGls
aW5nLWVkZ2UgcGl4ZWwgY3JhY2tzLgogICAgIGlmIChtX3JlcGVhdFggJiYgbV9yZXBlYXRZKQot
ICAgICAgICByZXR1cm4gd2tDR1BhdHRlcm5DcmVhdGVXaXRoSW1hZ2VBbmRUcmFuc2Zvcm0odGls
ZUltYWdlKCktPmdldENHSW1hZ2VSZWYoKSwgcGF0dGVyblRyYW5zZm9ybSwgd2tQYXR0ZXJuVGls
aW5nQ29uc3RhbnRTcGFjaW5nKTsKKyAgICAgICAgcmV0dXJuIHdrQ0dQYXR0ZXJuQ3JlYXRlV2l0
aEltYWdlQW5kVHJhbnNmb3JtKHRpbGVJbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmdldCgpLCBwYXR0
ZXJuVHJhbnNmb3JtLCB3a1BhdHRlcm5UaWxpbmdDb25zdGFudFNwYWNpbmcpOwogCiAgICAgLy8g
SWYgRkxUX01BWCBzaG91bGQgYWxzbyBiZSB1c2VkIGZvciB4U3RlcCBvciB5U3RlcCwgbm90aGlu
ZyBpcyByZW5kZXJlZC4gVXNpbmcgZnJhY3Rpb25zIG9mIEZMVF9NQVggYWxzbwogICAgIC8vIHJl
c3VsdCBpbiBub3RoaW5nIGJlaW5nIHJlbmRlcmVkLgpAQCAtODMsNyArODMsNyBAQCBDR1BhdHRl
cm5SZWYgUGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdXNlclNwYWNlVHJhbgogICAgIENHRmxvYXQgeVN0ZXAgPSBtX3JlcGVhdFkgPyB0aWxlUmVj
dC5oZWlnaHQoKSA6ICgxIDw8IDIyKTsKIAogICAgIC8vIFRoZSBwYXR0ZXJuIHdpbGwgcmVsZWFz
ZSB0aGUgQ0dJbWFnZVJlZiB3aGVuIGl0J3MgZG9uZSByZW5kZXJpbmcgaW4gcGF0dGVyblJlbGVh
c2VDYWxsYmFjawotICAgIENHSW1hZ2VSZWYgcGxhdGZvcm1JbWFnZSA9IENHSW1hZ2VSZXRhaW4o
dGlsZUltYWdlKCktPmdldENHSW1hZ2VSZWYoKSk7CisgICAgQ0dJbWFnZVJlZiBwbGF0Zm9ybUlt
YWdlID0gdGlsZUltYWdlKCktPm5hdGl2ZUltYWdlKCkubGVha1JlZigpOwogCiAgICAgY29uc3Qg
Q0dQYXR0ZXJuQ2FsbGJhY2tzIHBhdHRlcm5DYWxsYmFja3MgPSB7IDAsIHBhdHRlcm5DYWxsYmFj
aywgcGF0dGVyblJlbGVhc2VDYWxsYmFjayB9OwogICAgIHJldHVybiBDR1BhdHRlcm5DcmVhdGUo
cGxhdGZvcm1JbWFnZSwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHhTdGVwLCB5U3RlcCwg
a0NHUGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2luZywgVFJVRSwgJnBhdHRlcm5DYWxsYmFja3Mp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZv
cm1JbWFnZUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BsYXRm
b3JtSW1hZ2VDRy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWZiMmRlMGVhMTJkYTIxNGYxMDQ2YzM5NjJlOGVh
YjUzYzY0NDEyNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAi
Q29sb3IuaCIKKyNpbmNsdWRlICJDb3JlR3JhcGhpY3NTUEkuaCIKKyNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dENHLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlN1YmltYWdlQ2Fj
aGVXaXRoVGltZXIuaCIKKworI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDxXZWJLaXRTeXN0
ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworICAgIAordm9pZCBQbGF0Zm9ybUltYWdlOjpjbGVhclN1YkltYWdlcygpCit7
CisjaWYgQ0FDSEVfU1VCSU1BR0VTCisgICAgaWYgKCFpc05pbCgpKQorICAgICAgICBzdWJpbWFn
ZUNhY2hlKCkuY2xlYXJJbWFnZShjZ0ltYWdlUmVmKCkpOworI2VuZGlmCit9CisKK0ludFNpemUg
UGxhdGZvcm1JbWFnZTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzTmlsKCkgPyBJbnRT
aXplKCkgOiBJbnRTaXplKENHSW1hZ2VHZXRXaWR0aChjZ0ltYWdlUmVmKCkpLCBDR0ltYWdlR2V0
SGVpZ2h0KGNnSW1hZ2VSZWYoKSkpOworfQorCitib29sIFBsYXRmb3JtSW1hZ2U6Omhhc0FscGhh
KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogQW5zd2VyIGNvcnJlY3RseSB0aGUgcXVlc3Rpb246
IGRvZXMgdGhlIENHSW1hZ2VSZWYgaGF2ZSBhbHBoYSBjaGFubm5lbD8KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworQ29sb3IgUGxhdGZvcm1JbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29u
c3QKK3sKKyAgICBpZiAoaXNOaWwoKSB8fCBzaXplKCkgIT0gSW50U2l6ZSgxLCAxKSkKKyAgICAg
ICAgcmV0dXJuIENvbG9yKCk7CisgICAgCisgICAgdW5zaWduZWQgY2hhciBwaXhlbFs0XTsgLy8g
UkdCQQorICAgIGF1dG8gYml0bWFwQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3Jl
YXRlKHBpeGVsLCAxLCAxLCA4LCBzaXplb2YocGl4ZWwpLCBzUkdCQ29sb3JTcGFjZVJlZigpLAor
ICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QgfCBrQ0dCaXRtYXBCeXRlT3Jk
ZXIzMkJpZykpOworICAgIAorICAgIGlmICghYml0bWFwQ29udGV4dCkKKyAgICAgICAgcmV0dXJu
IENvbG9yKCk7CisgICAgCisgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGJpdG1hcENvbnRleHQu
Z2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOworICAgIENHQ29udGV4dERyYXdJbWFnZShiaXRtYXBD
b250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIDEsIDEpLCBjZ0ltYWdlUmVmKCkpOworICAg
IAorICAgIGlmICghcGl4ZWxbM10pCisgICAgICAgIHJldHVybiBDb2xvcigwLCAwLCAwLCAwKTsK
KyAgICAKKyAgICByZXR1cm4gQ29sb3IocGl4ZWxbMF0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxb
MV0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMl0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbM10p
OworfQorICAgIAorYm9vbCBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKSBjb25z
dAoreworICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBjZ0ltYWdlUmVmKCk7CisgICAgQVNTRVJUKENH
SW1hZ2VHZXRCaXRzUGVyQ29tcG9uZW50KGltYWdlKSA9PSA4KTsKKyAgICAKKyAgICBDR0JpdG1h
cEluZm8gaW1hZ2VJbmZvID0gQ0dJbWFnZUdldEJpdG1hcEluZm8oaW1hZ2UpOworICAgIGlmICgh
KGltYWdlSW5mbyAmIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlKSB8fCAoaW1hZ2VJbmZvICYg
a0NHQml0bWFwQWxwaGFJbmZvTWFzaykgIT0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJz
dCkgeworICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYmVpbmcgYWJsZSB0byBoYW5kbGUgb3Ro
ZXIgcGl4ZWwgZm9ybWF0cy4KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHdpZHRoID0gQ0dJbWFnZUdl
dFdpZHRoKGltYWdlKTsKKyAgICBzaXplX3QgaGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChpbWFn
ZSk7CisgICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0gQ0dJbWFnZUdldEJ5dGVzUGVyUm93KGltYWdl
KTsKKyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBwcm92aWRlciA9IGFkb3B0Q0YoQ0dE
YXRhUHJvdmlkZXJDb3B5RGF0YShDR0ltYWdlR2V0RGF0YVByb3ZpZGVyKGltYWdlKSkpOworICAg
IGNvbnN0IFVJbnQ4KiBkYXRhID0gQ0ZEYXRhR2V0Qnl0ZVB0cihwcm92aWRlci5nZXQoKSk7Cisg
ICAgCisgICAgLy8gT3ZlcmxheSBhIGdyaWQgb2Ygc2FtcGxpbmcgZG90cyBvbiB0b3Agb2YgYSBn
cmF5c2NhbGUgdmVyc2lvbiBvZiB0aGUgaW1hZ2UuCisgICAgLy8gRm9yIHRoZSBpbnRlcmlvciBw
b2ludHMsIGNhbGN1bGF0ZSB0aGUgZGlmZmVyZW5jZSBpbiBsdW1pbmFuY2UgYW1vbmcgdGhlIHNh
bXBsZSBwb2ludAorICAgIC8vIGFuZCBpdHMgc3Vycm91bmRzIHBvaW50cywgc2NhbGVkIGJ5IHRy
YW5zcGFyZW5jeS4KKyAgICBjb25zdCB1bnNpZ25lZCBzYW1wbGVSb3dzID0gNzsKKyAgICBjb25z
dCB1bnNpZ25lZCBzYW1wbGVDb2xzID0gNzsKKyAgICAvLyBGSVhNRTogUmVmaW5lIHRoZSBwcm9w
ZXIgbnVtYmVyIG9mIHNhbXBsZXMsIGFuZCBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgYXNwZWN0IHJh
dGlvcy4KKyAgICBpZiAod2lkdGggPCBzYW1wbGVDb2xzIHx8IGhlaWdodCA8IHNhbXBsZVJvd3Mp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBFbnN1cmUgdGhhdCB0aGUgbGFz
dCByb3cvY29sdW1uIGxhbmQgb24gdGhlIGltYWdlIHBlcmltZXRlci4KKyAgICBjb25zdCBmbG9h
dCBzdHJpZGVXaWR0aCA9IHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCAtIDEpIC8gKHNhbXBsZUNv
bHMgLSAxKTsKKyAgICBjb25zdCBmbG9hdCBzdHJpZGVIZWlnaHQgPSBzdGF0aWNfY2FzdDxmbG9h
dD4oaGVpZ2h0IC0gMSkgLyAoc2FtcGxlUm93cyAtIDEpOworICAgIGZsb2F0IHNhbXBsZXNbc2Ft
cGxlUm93c11bc2FtcGxlQ29sc107CisgICAgCisgICAgLy8gRmluZCB0aGUgbHVtaW5hbmNlIG9m
IHRoZSBzYW1wbGUgcG9pbnRzLgorICAgIGZsb2F0IHkgPSAwOworICAgIGNvbnN0IFVJbnQ4KiBy
b3cgPSBkYXRhOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzYW1wbGVSb3dzOyArK2kp
IHsKKyAgICAgICAgZmxvYXQgeCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGog
PCBzYW1wbGVDb2xzOyArK2opIHsKKyAgICAgICAgICAgIGNvbnN0IFVJbnQ4KiBwMCA9IHJvdyAr
IChzdGF0aWNfY2FzdDxpbnQ+KHggKyAuNSkpICogNDsKKyAgICAgICAgICAgIC8vIFIgRyBCIEEK
KyAgICAgICAgICAgIHNhbXBsZXNbaV1bal0gPSAoMC4yMTI1ICogKnAwICsgMC43MTU0ICogKihw
MCsxKSArIDAuMDcyMSAqICoocDArMikpICogKihwMCszKSAvIDI1NTsKKyAgICAgICAgICAgIHgg
Kz0gc3RyaWRlV2lkdGg7CisgICAgICAgIH0KKyAgICAgICAgeSArPSBzdHJpZGVIZWlnaHQ7Cisg
ICAgICAgIHJvdyA9IGRhdGEgKyAoc3RhdGljX2Nhc3Q8aW50Pih5ICsgLjUpKSAqIGJ5dGVzUGVy
Um93OworICAgIH0KKyAgICAKKyAgICAvLyBEZXRlcm1pbmUgdGhlIGltYWdlIHNjb3JlLgorICAg
IGZsb2F0IGFjY3VtU2NvcmUgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzYW1w
bGVSb3dzIC0gMTsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDE7IGogPCBzYW1w
bGVDb2xzIC0gMTsgKytqKSB7CisgICAgICAgICAgICBmbG9hdCBkaWZmID0gc2FtcGxlc1tpIC0g
MV1bal0gKyBzYW1wbGVzW2kgKyAxXVtqXSArIHNhbXBsZXNbaV1baiAtIDFdICsgc2FtcGxlc1tp
XVtqICsgMV0gLSA0ICogc2FtcGxlc1tpXVtqXTsKKyAgICAgICAgICAgIGFjY3VtU2NvcmUgKz0g
ZGlmZiAqIGRpZmY7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gVGhlIHNjb3JlIGZv
ciBhIGdpdmVuIHNhbXBsZSBjYW4gYmUgd2l0aGluIHRoZSByYW5nZSBvZiAwIGFuZCAyNTVeMi4K
KyAgICByZXR1cm4gYWNjdW1TY29yZSA8IDI1MDAgKiAoc2FtcGxlUm93cyAtIDIpICogKHNhbXBs
ZUNvbHMgLSAyKTsKK30KKworZmxvYXQgUGxhdGZvcm1JbWFnZTo6c3Vic2FtcGxpbmdTY2FsZShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCkKK3sKKyAgICAvLyBOZXZlciB1c2Ugc3Vic2FtcGxlZCBpbWFn
ZXMgZm9yIGRyYXdpbmcgaW50byBQREYgY29udGV4dHMuCisgICAgaWYgKHdrQ0dDb250ZXh0SXNQ
REZDb250ZXh0KGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpKQorICAgICAgICByZXR1cm4gMTsK
KyAgICAKKyAgICBDR1JlY3QgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3QgPSBDR1JlY3RBcHBs
eUFmZmluZVRyYW5zZm9ybShkZXN0UmVjdCwgQ0dDb250ZXh0R2V0Q1RNKGNvbnRleHQucGxhdGZv
cm1Db250ZXh0KCkpKTsKKyAgICByZXR1cm4gc3RkOjptaW48ZmxvYXQ+KDEsIHN0ZDo6bWF4KHRy
YW5zZm9ybWVkRGVzdGluYXRpb25SZWN0LnNpemUud2lkdGggLyBzcmNSZWN0LndpZHRoKCksIHRy
YW5zZm9ybWVkRGVzdGluYXRpb25SZWN0LnNpemUuaGVpZ2h0IC8gc3JjUmVjdC5oZWlnaHQoKSkp
OworfQorCit2b2lkIFBsYXRmb3JtSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEludFNpemUmIHNyY1NpemUsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9k
ZSwgY29uc3QgSW1hZ2VPcmllbnRhdGlvbiYgb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgLy8g
U3Vic2FtcGxpbmcgbWF5IGhhdmUgZ2l2ZW4gdXMgYW4gaW1hZ2UgdGhhdCBpcyBzbWFsbGVyIHRo
YW4gc2l6ZSgpLgorICAgIEludFNpemUgc3Vic2FtcGxlZEltYWdlU2l6ZSA9IHNpemUoKTsKKyAg
ICAKKyAgICAvLyBzcmNSZWN0IGlzIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgdW5zdWJzYW1w
bGVkIGltYWdlLCBzbyB3ZSBoYXZlIHRvIG1hcCBpdCB0byB0aGUgc3Vic2FtcGxlZCBpbWFnZS4K
KyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBpZiAoc3Vic2Ft
cGxlZEltYWdlU2l6ZSAhPSBzcmNTaXplKQorICAgICAgICBhZGp1c3RlZFNyY1JlY3QgPSBtYXBS
ZWN0KHNyY1JlY3QsIEZsb2F0UmVjdCh7IH0sIHNyY1NpemUpLCBGbG9hdFJlY3QoeyB9LCBzdWJz
YW1wbGVkSW1hZ2VTaXplKSk7CisgICAgCisgICAgY29udGV4dC5kcmF3TmF0aXZlSW1hZ2UobV9p
bWFnZSwgc3Vic2FtcGxlZEltYWdlU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3As
IG1vZGUsIG9yaWVudGF0aW9uKTsKK30KKyAgICAKK30KKworI2VuZGlmIC8vIFVTRShDRykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1RleHRUcmFj
a1JlcHJlc2VudGF0aW9uQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tCmluZGV4IDg5NzIwZDE3MzY1
ZGE3ZThiYTg0NjlkNTI5NDU0OGQ1MTg0N2E3ZmUuLjQ0NzZmYzVmODdjMzQ5ODhmNmQ5YWQ1NWVl
YmQ4ZDFiOWJiMDIyZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2Nv
YS5tbQpAQCAtMTI5LDcgKzEyOSw3IEBAIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2E6On5U
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hKCkKIHZvaWQgVGV4dFRyYWNrUmVwcmVzZW50YXRp
b25Db2NvYTo6dXBkYXRlKCkKIHsKICAgICBpZiAoYXV0byByZXByZXNlbnRhdGlvbiA9IG1fY2xp
ZW50LmNyZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2UoKSkKLSAgICAgICAgW21fbGF5
ZXIuZ2V0KCkgc2V0Q29udGVudHM6KGlkKXJlcHJlc2VudGF0aW9uLT5nZXRDR0ltYWdlUmVmKCld
OworICAgICAgICBbbV9sYXllci5nZXQoKSBzZXRDb250ZW50czooaWQpcmVwcmVzZW50YXRpb24t
Pm5hdGl2ZUltYWdlKCkuZ2V0KCldOwogfQogCiB2b2lkIFRleHRUcmFja1JlcHJlc2VudGF0aW9u
Q29jb2E6OnNldENvbnRlbnRTY2FsZShmbG9hdCBzY2FsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQppbmRleCAwMWViNmRkMzAwNDNhMjI1
MjkxNzZmZDkxMjExN2RjNTc3NmMxN2JhLi5kYzFjN2M3MDk1ZDk0NGM0YzYyZjFmZTA5MzU3MDJh
MTNjN2M3YTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvSW1hZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0ltYWdlTWFjLm1tCkBAIC04NSwzMSArODUsMjIgQEAgQ0ZEYXRhUmVmIEJpdG1hcEltYWdlOjpn
ZXRUSUZGUmVwcmVzZW50YXRpb24oKQogICAgIGlmIChtX3RpZmZSZXApCiAgICAgICAgIHJldHVy
biBtX3RpZmZSZXAuZ2V0KCk7CiAKLSAgICB1bnNpZ25lZCBudW1GcmFtZXMgPSBmcmFtZUNvdW50
KCk7CisgICAgYXV0byBuYXRpdmVJbWFnZXMgPSB0aGlzLT5mcmFtZXNOYXRpdmVJbWFnZXMoKTsK
IAotICAgIC8vIElmIG51bUZyYW1lcyBpcyB6ZXJvLCB3ZSBrbm93IGZvciBjZXJ0YWluIHRoaXMg
aW1hZ2UgZG9lc24ndCBoYXZlIHZhbGlkIGRhdGEKKyAgICAvLyBJZiBmcmFtZXNJbWFnZXMuc2l6
ZSgpIGlzIHplcm8sIHdlIGtub3cgZm9yIGNlcnRhaW4gdGhpcyBpbWFnZSBkb2Vzbid0IGhhdmUg
dmFsaWQgZGF0YQogICAgIC8vIEV2ZW4gdGhvdWdoIHRoZSBjYWxsIHRvIENHSW1hZ2VEZXN0aW5h
dGlvbkNyZWF0ZVdpdGhEYXRhIHdpbGwgZmFpbCBhbmQgd2UnbGwgaGFuZGxlIGl0IGdyYWNlZnVs
bHksCiAgICAgLy8gaW4gY2VydGFpbiBjaXJjdW1zdGFuY2VzIHRoYXQgY2FsbCB3aWxsIHNwYW0g
dGhlIGNvbnNvbGUgd2l0aCBhbiBlcnJvciBtZXNzYWdlCi0gICAgaWYgKCFudW1GcmFtZXMpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgVmVjdG9yPENHSW1hZ2VSZWY+IGltYWdlczsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRnJhbWVzOyArK2kgKSB7Ci0gICAgICAgIENHSW1h
Z2VSZWYgY2dJbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpOwotICAgICAgICBpZiAo
Y2dJbWFnZSkKLSAgICAgICAgICAgIGltYWdlcy5hcHBlbmQoY2dJbWFnZSk7Ci0gICAgfQotCi0g
ICAgdW5zaWduZWQgbnVtVmFsaWRGcmFtZXMgPSBpbWFnZXMuc2l6ZSgpOworICAgIGlmICghbmF0
aXZlSW1hZ2VzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZXRhaW5Q
dHI8Q0ZNdXRhYmxlRGF0YVJlZj4gZGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgw
LCAwKSk7Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VEZXN0aW5hdGlvblJlZj4gZGVzdGluYXRpb24g
PSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEuZ2V0KCksIGtV
VFR5cGVUSUZGLCBudW1WYWxpZEZyYW1lcywgMCkpOworICAgIFJldGFpblB0cjxDR0ltYWdlRGVz
dGluYXRpb25SZWY+IGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVh
dGVXaXRoRGF0YShkYXRhLmdldCgpLCBrVVRUeXBlVElGRiwgbmF0aXZlSW1hZ2VzLnNpemUoKSwg
MCkpOwogCiAgICAgaWYgKCFkZXN0aW5hdGlvbikKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVZhbGlk
RnJhbWVzOyArK2kpCi0gICAgICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0
aW9uLmdldCgpLCBpbWFnZXNbaV0sIDApOworICAgIGZvciAoYXV0byBuYXRpdmVJbWFnZSA6IG5h
dGl2ZUltYWdlcykKKyAgICAgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRp
b24uZ2V0KCksIG5hdGl2ZUltYWdlLmdldCgpLCAwKTsKIAogICAgIENHSW1hZ2VEZXN0aW5hdGlv
bkZpbmFsaXplKGRlc3RpbmF0aW9uLmdldCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAKaW5kZXggMjE3NTNi
ZDA3OGExYzU1YzMyNzE5YzE0ODQ2ZjBmNmI5OTc1ZjhmZC4uODYxMDI1MDhiZWQ3MjlmZmFmNDYw
NzdlYWI4MjA5NmU5ZWIxYWMzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCkBAIC0xNDIsNyArMTQyLDcgQEAg
SW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0IEltYWdlRnJhbWUmIG90aGVy
KQogICAgICAgICByZXR1cm4gKnRoaXM7CiAKICAgICBjb3B5Qml0bWFwRGF0YShvdGhlcik7Ci0g
ICAgc2V0T3JpZ2luYWxGcmFtZVJlY3Qob3RoZXIub3JpZ2luYWxGcmFtZVJlY3QoKSk7CisgICAg
c2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7CiAgICAgc2V0U3RhdHVzKG90aGVyLnN0YXR1
cygpKTsKICAgICBzZXREdXJhdGlvbihvdGhlci5kdXJhdGlvbigpKTsKICAgICBzZXREaXNwb3Nh
bE1ldGhvZChvdGhlci5kaXNwb3NhbE1ldGhvZCgpKTsKQEAgLTE1Miw4ICsxNTIsNyBAQCBJbWFn
ZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpCiAK
IHZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXJQaXhlbERhdGEoKQogewotICAgIG1fYmFja2luZ1N0b3Jl
LmNsZWFyKCk7Ci0gICAgbV9ieXRlcyA9IDA7CisgICAgbV9waXhlbHMgPSBudWxscHRyOwogICAg
IG1fc3RhdHVzID0gRnJhbWVFbXB0eTsKICAgICAvLyBOT1RFOiBEbyBub3QgcmVzZXQgb3RoZXIg
bWVtYmVycyBoZXJlOyBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoKSBjYWxscyB0aGlzCiAgICAgLy8g
dG8gZnJlZSB0aGUgYml0bWFwIGRhdGEsIGJ1dCBvdGhlciBmdW5jdGlvbnMgbGlrZSBpbml0RnJh
bWVCdWZmZXIoKSBhbmQKQEAgLTE2MywyNCArMTYyLDE2IEBAIHZvaWQgSW1hZ2VGcmFtZTo6Y2xl
YXJQaXhlbERhdGEoKQogCiB2b2lkIEltYWdlRnJhbWU6Onplcm9GaWxsUGl4ZWxEYXRhKCkKIHsK
LSAgICBtZW1zZXQobV9ieXRlcywgMCwgbV9zaXplLndpZHRoKCkgKiBtX3NpemUuaGVpZ2h0KCkg
KiBzaXplb2YoUGl4ZWxEYXRhKSk7CisgICAgbV9waXhlbHMtPmNsZWFyKCk7CiAgICAgbV9oYXNB
bHBoYSA9IHRydWU7CiB9CiAKIHZvaWQgSW1hZ2VGcmFtZTo6emVyb0ZpbGxGcmFtZVJlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBBU1NFUlQoSW50UmVjdChJbnRQb2ludCgpLCBtX3Np
emUpLmNvbnRhaW5zKHJlY3QpKTsKLQogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkgKiBz
aXplb2YoUGl4ZWxEYXRhKTsKLSAgICBQaXhlbERhdGEqIHN0YXJ0ID0gbV9ieXRlcyArIChyZWN0
LnkoKSAqIHdpZHRoKCkpICsgcmVjdC54KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0
LmhlaWdodCgpOyArK2kpIHsKLSAgICAgICAgbWVtc2V0KHN0YXJ0LCAwLCByZWN0V2lkdGhJbkJ5
dGVzKTsKLSAgICAgICAgc3RhcnQgKz0gd2lkdGgoKTsKLSAgICB9Ci0KKyAgICBtX3BpeGVscy0+
Y2xlYXJSZWN0KHJlY3QpOwogICAgIHNldEhhc0FscGhhKHRydWUpOwogfQogCkBAIC0xODksMjUg
KzE4MCwyMyBAQCBib29sIEltYWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKGNvbnN0IEltYWdlRnJh
bWUmIG90aGVyKQogICAgIGlmICh0aGlzID09ICZvdGhlcikKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICBtX2JhY2tpbmdTdG9yZSA9IG90aGVyLm1fYmFja2luZ1N0b3JlOwotICAgIG1fYnl0
ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7Ci0gICAgbV9zaXplID0gb3RoZXIubV9zaXplOwot
ICAgIHNldEhhc0FscGhhKG90aGVyLm1faGFzQWxwaGEpOworICAgIGlmIChvdGhlci5tX3BpeGVs
cykKKyAgICAgICAgbV9waXhlbHMgPSBCaXRtYXBQaXhlbHM6OmNyZWF0ZSgqb3RoZXIubV9waXhl
bHMuZ2V0KCkpOworICAgIGVsc2UKKyAgICAgICAgbV9waXhlbHMgPSBudWxscHRyOwogICAgIHJl
dHVybiB0cnVlOwogfQogCiBib29sIEltYWdlRnJhbWU6OnNldFNpemUoaW50IG5ld1dpZHRoLCBp
bnQgbmV3SGVpZ2h0KQogewotICAgIEFTU0VSVCghd2lkdGgoKSAmJiAhaGVpZ2h0KCkpOwotICAg
IHNpemVfdCBiYWNraW5nU3RvcmVTaXplID0gbmV3V2lkdGggKiBuZXdIZWlnaHQ7Ci0gICAgaWYg
KCFtX2JhY2tpbmdTdG9yZS50cnlSZXNlcnZlQ2FwYWNpdHkoYmFja2luZ1N0b3JlU2l6ZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2JhY2tpbmdTdG9yZS5yZXNpemUoYmFja2luZ1N0
b3JlU2l6ZSk7Ci0gICAgbV9ieXRlcyA9IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsKLSAgICBtX3Np
emUgPSBJbnRTaXplKG5ld1dpZHRoLCBuZXdIZWlnaHQpOworICAgIEFTU0VSVCghbV9waXhlbHMp
OworICAgIG1fcGl4ZWxzID0gQml0bWFwUGl4ZWxzOjpjcmVhdGUoSW50U2l6ZShuZXdXaWR0aCwg
bmV3SGVpZ2h0KSwgbV9wcmVtdWx0aXBseUFscGhhKTsKKyAgICByZXR1cm4gbV9waXhlbHMgIT0g
bnVsbHB0cjsKK30KIAotICAgIHplcm9GaWxsUGl4ZWxEYXRhKCk7Ci0gICAgcmV0dXJuIHRydWU7
Cit2b2lkIEltYWdlRnJhbWU6OmNvcHlSb3dOVGltZXMoaW50IHN0YXJ0WCwgaW50IGVuZFgsIGlu
dCBzdGFydFksIGludCBlbmRZKQoreworICAgIG1fcGl4ZWxzLT5yZXBlYXRGaXJzdFJvdyhJbnRS
ZWN0KHN0YXJ0WCwgc3RhcnRZLCBlbmRYIC1zdGFydFggLCBlbmRZIC0gc3RhcnRZKSk7CiB9CiAK
IGJvb2wgSW1hZ2VGcmFtZTo6aGFzQWxwaGEoKSBjb25zdApAQCAtMjkxLDcgKzI4MCw3IEBAIHVu
c2lnbmVkIEltYWdlRGVjb2Rlcjo6ZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25z
dAogICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpIDw9IGluZGV4KQogICAgICAgICBy
ZXR1cm4gMDsKICAgICAvLyBGSVhNRTogVXNlIHRoZSBkaW1lbnNpb24gb2YgdGhlIHJlcXVlc3Rl
ZCBmcmFtZS4KLSAgICByZXR1cm4gbV9zaXplLmFyZWEoKSAqIHNpemVvZihJbWFnZUZyYW1lOjpQ
aXhlbERhdGEpOworICAgIHJldHVybiBtX3NpemUuYXJlYSgpICogc2l6ZW9mKFJHQkEzMik7CiB9
CiAKIGZsb2F0IEltYWdlRGVjb2Rlcjo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaAppbmRleCAyZjhlZWUxNzgxZDE2MmQ4NmM0OWZlMWRhYzcyYTJlN2U0MGE1ZDZk
Li4zYmUzZmVlZTA5NGZhZjAzYmMwZTk2ZDgyMGExMWExN2Y0YTRjZmM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaApA
QCAtMjgsNiArMjgsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkJpdG1hcFBpeGVs
cy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCkBAIC01Nyw3ICs1OCw2IEBAIHVzaW5nIENvbG9yUHJv
ZmlsZSA9IFZlY3RvcjxjaGFyPjsKICAgICAgICAgICAgIERpc3Bvc2VPdmVyd3JpdGVQcmV2aW91
cyAgLy8gQ2xlYXIgZnJhbWUgdG8gcHJldmlvdXMgZnJhbWVidWZmZXIKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udGVudHMKICAgICAgICAgfTsKLSAgICAgICAg
dHlwZWRlZiB1bnNpZ25lZCBQaXhlbERhdGE7CiAKICAgICAgICAgSW1hZ2VGcmFtZSgpOwogCkBA
IC04MCwzMCArODAsMjQgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAg
ICAgICAvLyBDb3BpZXMgdGhlIHBpeGVsIGRhdGEgYXQgWyhzdGFydFgsIHN0YXJ0WSksIChlbmRY
LCBzdGFydFkpKSB0byB0aGUKICAgICAgICAgLy8gc2FtZSBYLWNvb3JkaW5hdGVzIG9uIGVhY2gg
c3Vic2VxdWVudCByb3cgdXAgdG8gYnV0IG5vdCBpbmNsdWRpbmcKICAgICAgICAgLy8gZW5kWS4K
LSAgICAgICAgdm9pZCBjb3B5Um93TlRpbWVzKGludCBzdGFydFgsIGludCBlbmRYLCBpbnQgc3Rh
cnRZLCBpbnQgZW5kWSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHN0YXJ0WCA8IHdp
ZHRoKCkpOwotICAgICAgICAgICAgQVNTRVJUKGVuZFggPD0gd2lkdGgoKSk7Ci0gICAgICAgICAg
ICBBU1NFUlQoc3RhcnRZIDwgaGVpZ2h0KCkpOwotICAgICAgICAgICAgQVNTRVJUKGVuZFkgPD0g
aGVpZ2h0KCkpOwotICAgICAgICAgICAgY29uc3QgaW50IHJvd0J5dGVzID0gKGVuZFggLSBzdGFy
dFgpICogc2l6ZW9mKFBpeGVsRGF0YSk7Ci0gICAgICAgICAgICBjb25zdCBQaXhlbERhdGEqIGNv
bnN0IHN0YXJ0QWRkciA9IGdldEFkZHIoc3RhcnRYLCBzdGFydFkpOwotICAgICAgICAgICAgZm9y
IChpbnQgZGVzdFkgPSBzdGFydFkgKyAxOyBkZXN0WSA8IGVuZFk7ICsrZGVzdFkpCi0gICAgICAg
ICAgICAgICAgbWVtY3B5KGdldEFkZHIoc3RhcnRYLCBkZXN0WSksIHN0YXJ0QWRkciwgcm93Qnl0
ZXMpOwotICAgICAgICB9CisgICAgICAgIHZvaWQgY29weVJvd05UaW1lcyhpbnQgc3RhcnRYLCBp
bnQgZW5kWCwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOwogCiAgICAgICAgIC8vIEFsbG9jYXRlcyBz
cGFjZSBmb3IgdGhlIHBpeGVsIGRhdGEuICBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IHBpeGVs
cwogICAgICAgICAvLyBhcmUgd3JpdHRlbi4gIE11c3Qgb25seSBiZSBjYWxsZWQgb25jZS4gIFJl
dHVybnMgd2hldGhlciBhbGxvY2F0aW9uCiAgICAgICAgIC8vIHN1Y2NlZWRlZC4KICAgICAgICAg
Ym9vbCBzZXRTaXplKGludCBuZXdXaWR0aCwgaW50IG5ld0hlaWdodCk7CisgICAgICAgIAorICAg
ICAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3BpeGVscy0+c2l6ZSgpOyB9CiAK
ICAgICAgICAgLy8gUmV0dXJucyBhIGNhbGxlci1vd25lZCBwb2ludGVyIHRvIHRoZSB1bmRlcmx5
aW5nIG5hdGl2ZSBpbWFnZSBkYXRhLgogICAgICAgICAvLyAoQWN0dWFsIHVzZTogVGhpcyBwb2lu
dGVyIHdpbGwgYmUgb3duZWQgYnkgQml0bWFwSW1hZ2UgYW5kIGZyZWVkIGluCiAgICAgICAgIC8v
IEZyYW1lRGF0YTo6Y2xlYXIoKSkuCi0gICAgICAgIE5hdGl2ZUltYWdlUHRyIGFzTmV3TmF0aXZl
SW1hZ2UoKSBjb25zdDsKKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIgYXNOZXdOYXRpdmVJbWFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxzLT5pbWFnZSgpOyB9CisKKyAgICAgICAgaW5saW5lIEJp
dG1hcFBpeGVscyogcGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gbV9waXhlbHMgPyBtX3BpeGVscy5n
ZXQoKSA6IG51bGxwdHI7IH0KKyAgICAgICAgaW5saW5lIGJvb2wgaGFzUGl4ZWxzKCkgY29uc3Qg
eyByZXR1cm4gcGl4ZWxzKCk7IH0KIAogICAgICAgICBib29sIGhhc0FscGhhKCkgY29uc3Q7Ci0g
ICAgICAgIGNvbnN0IEludFJlY3QmIG9yaWdpbmFsRnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9vcmlnaW5hbEZyYW1lUmVjdDsgfQogICAgICAgICBGcmFtZVN0YXR1cyBzdGF0dXMoKSBjb25z
dCB7IHJldHVybiBtX3N0YXR1czsgfQogICAgICAgICB1bnNpZ25lZCBkdXJhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KICAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNw
b3NhbE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcG9zYWxNZXRob2Q7IH0KQEAgLTExMSw3
ICsxMDUsNiBAQCB1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hhcj47CiAKICAgICAgICAg
dm9pZCBzZXRIYXNBbHBoYShib29sIGFscGhhKTsKICAgICAgICAgdm9pZCBzZXRDb2xvclByb2Zp
bGUoY29uc3QgQ29sb3JQcm9maWxlJik7Ci0gICAgICAgIHZvaWQgc2V0T3JpZ2luYWxGcmFtZVJl
Y3QoY29uc3QgSW50UmVjdCYgcikgeyBtX29yaWdpbmFsRnJhbWVSZWN0ID0gcjsgfQogICAgICAg
ICB2b2lkIHNldFN0YXR1cyhGcmFtZVN0YXR1cyBzdGF0dXMpOwogICAgICAgICB2b2lkIHNldER1
cmF0aW9uKHVuc2lnbmVkIGR1cmF0aW9uKSB7IG1fZHVyYXRpb24gPSBkdXJhdGlvbjsgfQogICAg
ICAgICB2b2lkIHNldERpc3Bvc2FsTWV0aG9kKEZyYW1lRGlzcG9zYWxNZXRob2QgbWV0aG9kKSB7
IG1fZGlzcG9zYWxNZXRob2QgPSBtZXRob2Q7IH0KQEAgLTExOSwxMDggKzExMiwzMiBAQCB1c2lu
ZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hhcj47CiAKICAgICAgICAgaW5saW5lIHZvaWQgc2V0
UkdCQShpbnQgeCwgaW50IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVu
c2lnbmVkIGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHNldFJHQkEoZ2V0QWRkcih4LCB5KSwg
ciwgZywgYiwgYSk7CisgICAgICAgICAgICBtX3BpeGVscy0+c2V0UkdCQSh4LCB5LCByLCBnLCBi
LCBhKTsKICAgICAgICAgfQogCi0gICAgICAgIGlubGluZSBQaXhlbERhdGEqIGdldEFkZHIoaW50
IHgsIGludCB5KQorICAgICAgICBpbmxpbmUgUkdCQTMyKiBnZXRBZGRyKGludCB4LCBpbnQgeSkK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXMgKyAoeSAqIHdpZHRoKCkpICsg
eDsKKyAgICAgICAgICAgIHJldHVybiBtX3BpeGVscy0+YXQoeCwgeSk7CiAgICAgICAgIH0KIAot
ICAgICAgICBpbmxpbmUgYm9vbCBoYXNQaXhlbERhdGEoKSBjb25zdAorICAgICAgICBpbmxpbmUg
dm9pZCBzZXRSR0JBKFJHQkEzMiogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWdu
ZWQgYiwgdW5zaWduZWQgYSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXM7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBVc2UgZml4IHBvaW50IG11bHRpcGxpZXIgaW5zdGVh
ZCBvZiBpbnRlZ2VyIGRpdmlzaW9uIG9yIGZsb2F0aW5nIHBvaW50IG1hdGguCi0gICAgICAgIC8v
IFRoaXMgbXVsdGlwbGVyIHByb2R1Y2VzIGV4YWN0bHkgdGhlIHNhbWUgcmVzdWx0IGZvciBhbGwg
dmFsdWVzIGluIHJhbmdlIDAgLSAyNTUuCi0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBm
aXhQb2ludFNoaWZ0ID0gMjQ7Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmaXhQb2lu
dE11bHQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oMS4wIC8gMjU1LjAgKiAoMSA8PCBmaXhQb2lu
dFNoaWZ0KSkgKyAxOwotICAgICAgICAvLyBNdWx0aXBsaWVzIHVuc2lnbmVkIHZhbHVlIGJ5IGZp
eHBvaW50IHZhbHVlIGFuZCBjb252ZXJ0cyBiYWNrIHRvIHVuc2lnbmVkLgotICAgICAgICBzdGF0
aWMgdW5zaWduZWQgZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KHVuc2lnbmVkIGZpeGVkLCB1bnNp
Z25lZCB2KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gIChmaXhlZCAqIHYpID4+IGZp
eFBvaW50U2hpZnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKFBp
eGVsRGF0YSogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWdu
ZWQgYSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAmJiBh
IDwgMjU1KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFhKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICpkZXN0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhTXVsdCA9IGEgKiBmaXhQb2ludE11
bHQ7Ci0gICAgICAgICAgICAgICAgciA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShyLCBhbHBo
YU11bHQpOwotICAgICAgICAgICAgICAgIGcgPSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkoZywg
YWxwaGFNdWx0KTsKLSAgICAgICAgICAgICAgICBiID0gZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5
KGIsIGFscGhhTXVsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqZGVzdCA9IChhIDw8
IDI0IHwgciA8PCAxNiB8IGcgPDwgOCB8IGIpOworICAgICAgICAgICAgbV9waXhlbHMtPnNldFJH
QkEoZGVzdCwgciwgZywgYiwgYSk7CiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShBUE5HKQotICAg
ICAgICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRpdmlkZTI1NSh1bnNpZ25lZCBhKQorICAgICAg
ICBpbmxpbmUgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVk
IGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biAoYSArIChhID4+IDgpICsgMSkgPj4gODsKLSAgICAgICAgfQotCi0gICAgICAgIGlubGluZSB2
b2lkIG92ZXJSR0JBKFBpeGVsRGF0YSogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5z
aWduZWQgYiwgdW5zaWduZWQgYSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFhKQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgaWYgKGEgPCAyNTUpIHsKLSAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBhRGVzdCA9ICgoKmRlc3QpID4+IDI0KSAmIDI1NTsKLSAgICAg
ICAgICAgICAgICBpZiAoYURlc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgckRl
c3QgPSAoKCpkZXN0KSA+PiAxNikgJiAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGdEZXN0ID0gKCgqZGVzdCkgPj4gOCkgJiAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGJEZXN0ID0gKCpkZXN0KSAmIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
YUF1eCA9IDI1NSAtIGE7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFs
cGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByRGVzdCA9IGRpdmlkZTI1NShyRGVzdCAq
IGFEZXN0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdEZXN0ID0gZGl2aWRlMjU1KGdEZXN0
ICogYURlc3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgYkRlc3QgPSBkaXZpZGUyNTUoYkRl
c3QgKiBhRGVzdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ciA9IGRpdmlkZTI1NShyICogYSArIHJEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAg
IGcgPSBkaXZpZGUyNTUoZyAqIGEgKyBnRGVzdCAqIGFBdXgpOwotICAgICAgICAgICAgICAgICAg
ICBiID0gZGl2aWRlMjU1KGIgKiBhICsgYkRlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAgICAg
ICAgYSArPSBkaXZpZGUyNTUoYURlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFtX3ByZW11bHRpcGx5QWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAociAq
IDI1NSArIGEgLSAxKSAvIGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnID0gKGcgKiAyNTUg
KyBhIC0gMSkgLyBhOwotICAgICAgICAgICAgICAgICAgICAgICAgYiA9IChiICogMjU1ICsgYSAt
IDEpIC8gYTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAobV9wcmVtdWx0aXBseUFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBkaXZpZGUy
NTUociAqIGEpOwotICAgICAgICAgICAgICAgICAgICBnID0gZGl2aWRlMjU1KGcgKiBhKTsKLSAg
ICAgICAgICAgICAgICAgICAgYiA9IGRpdmlkZTI1NShiICogYSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3QgPSAoYSA8PCAyNCB8IHIgPDwgMTYg
fCBnIDw8IDggfCBiKTsKKyAgICAgICAgICAgIG1fcGl4ZWxzLT5vdmVyUkdCQShkZXN0LCByLCBn
LCBiLCBhKTsKICAgICAgICAgfQogI2VuZGlmCiAKICAgICBwcml2YXRlOgotICAgICAgICBpbnQg
d2lkdGgoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9zaXplLndpZHRo
KCk7Ci0gICAgICAgIH0KKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gbV9w
aXhlbHM7CiAKLSAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBtX3NpemUuaGVpZ2h0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBWZWN0b3I8
UGl4ZWxEYXRhPiBtX2JhY2tpbmdTdG9yZTsKLSAgICAgICAgUGl4ZWxEYXRhKiBtX2J5dGVzOyAv
LyBUaGUgbWVtb3J5IGlzIGJhY2tlZCBieSBtX2JhY2tpbmdTdG9yZS4KLSAgICAgICAgSW50U2l6
ZSBtX3NpemU7CiAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIG1fY29sb3JQcm9maWxlIGFu
eW1vcmU/CiAgICAgICAgIENvbG9yUHJvZmlsZSBtX2NvbG9yUHJvZmlsZTsKICAgICAgICAgYm9v
bCBtX2hhc0FscGhhOwotICAgICAgICBJbnRSZWN0IG1fb3JpZ2luYWxGcmFtZVJlY3Q7IC8vIFRo
aXMgd2lsbCBhbHdheXMganVzdCBiZSB0aGUgZW50aXJlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gYnVmZmVyIGV4Y2VwdCBmb3IgR0lGIGZyYW1lcyB3aG9zZQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yaWdpbmFsIHJlY3Qgd2FzIHNt
YWxsZXIgdGhhbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBv
dmVyYWxsIGltYWdlIHNpemUuCiAgICAgICAgIEZyYW1lU3RhdHVzIG1fc3RhdHVzOwogICAgICAg
ICB1bnNpZ25lZCBtX2R1cmF0aW9uOwogICAgICAgICBGcmFtZURpc3Bvc2FsTWV0aG9kIG1fZGlz
cG9zYWxNZXRob2Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcAppbmRleCA1YzAwNTUzNGVjZDky
MTM0YTEzYjMyOTU4OTI3NzkwZjA3YWQwZjgxLi5mOTE4Y2YzMjQyOTY3ZjcyN2E3NTM3YTNiNGE2
NWYxMjk0OWM3NmMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAKQEAgLTg2LDkgKzg2LDYg
QEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6ZGVjb2RlQk1QKGJvb2wgb25seVNpemUpCiAgICAgICAg
IC8vIHRoZXNlIDBzIGNvdWxkIGFjdHVhbGx5IHNob3cgdGhyb3VnaC4KICAgICAgICAgbV9idWZm
ZXItPnNldEhhc0FscGhhKGZhbHNlKTsKIAotICAgICAgICAvLyBGb3IgQk1QcywgdGhlIGZyYW1l
IGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgotICAgICAgICBtX2J1ZmZlci0+c2V0T3Jp
Z2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBtX3BhcmVudC0+c2l6ZSgpKSk7Ci0K
ICAgICAgICAgaWYgKCFtX2lzVG9wRG93bikKICAgICAgICAgICAgIG1fY29vcmQuc2V0WShtX3Bh
cmVudC0+c2l6ZSgpLmhlaWdodCgpIC0gMSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vQml0bWFwUGl4ZWxzQ2Fpcm8uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vQml0bWFwUGl4
ZWxzQ2Fpcm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVhYWY4YTBhMzZiMThjYmY3Mjc3ZDJjMmUyNmViNDE3
MTI1NjAwZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHAKQEAgLTAsMCArMSw0MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkJpdG1hcFBpeGVscy5oIgorCisjaW5jbHVkZSA8Y2Fpcm8u
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBQaXhlbHM6
OmltYWdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9jcmVhdGVfZm9yX2RhdGEoCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hh
cio+KGNvbnN0X2Nhc3Q8UkdCQTMyKj4obV9waXhlbHMpKSwKKyAgICAgICAgQ0FJUk9fRk9STUFU
X0FSR0IzMiwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSwgc2l6ZSgpLndpZHRoKCkg
KiBzaXplb2YoUkdCQTMyKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURl
Y29kZXJDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9j
YWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDdiNDEyOTVmODU3MzU4ZmJiZjM1YzFiMDUyNWU4ZDZjYzM1MjBmNTguLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgot
Ci0jaW5jbHVkZSA8Y2Fpcm8uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1OYXRpdmVJbWFn
ZVB0ciBJbWFnZUZyYW1lOjphc05ld05hdGl2ZUltYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
YWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoCi0gICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGNvbnN0X2Nhc3Q8UGl4ZWxEYXRhKj4obV9i
eXRlcykpLAotICAgICAgICBDQUlST19GT1JNQVRfQVJHQjMyLCB3aWR0aCgpLCBoZWlnaHQoKSwg
d2lkdGgoKSAqIHNpemVvZihQaXhlbERhdGEpKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dp
Zi9HSUZJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKaW5kZXggOWY5OTJhN2JlMWQ2NjcyMjY3NWMy
ZTg1NGFkMTg5MWU2MGY4NTc3Yy4uYmQ0NDQ1M2QxZDc3MDQ3YWE1ZmM5M2U4ZjIxNzczNDA5Yzgx
Yzg0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Z2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKQEAgLTIxMywxMCArMjEzLDEwIEBA
IGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4
LCBjb25zdCBWZWN0b3I8dW5zaWduZWQKIAogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lIGlm
IG5lY2Vzc2FyeS4KICAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVb
ZnJhbWVJbmRleF07Ci0gICAgaWYgKCgoYnVmZmVyLnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZy
YW1lRW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkpIHx8ICFidWZmZXIuaGFz
UGl4ZWxEYXRhKCkpCisgICAgaWYgKCgoYnVmZmVyLnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZy
YW1lRW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkpIHx8ICFidWZmZXIuaGFz
UGl4ZWxzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEltYWdlRnJhbWU6OlBpeGVs
RGF0YSogY3VycmVudEFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcih4QmVnaW4sIHlCZWdpbik7Cisg
ICAgUkdCQTMyKiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHhCZWdpbiwgeUJlZ2lu
KTsKICAgICAvLyBXcml0ZSBvbmUgcm93J3Mgd29ydGggb2YgZGF0YSBpbnRvIHRoZSBmcmFtZS4g
IAogICAgIGZvciAoaW50IHggPSB4QmVnaW47IHggPCB4RW5kOyArK3gpIHsKICAgICAgICAgY29u
c3QgdW5zaWduZWQgY2hhciBzb3VyY2VWYWx1ZSA9IHJvd0J1ZmZlclsobV9zY2FsZWQgPyBtX3Nj
YWxlZENvbHVtbnNbeF0gOiB4KSAtIGZyYW1lQ29udGV4dC0+eE9mZnNldF07CkBAIC0yNjAsNyAr
MjYwLDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUodW5zaWduZWQgZnJh
bWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwKICAgICBpZiAoIW1fY3VycmVudEJ1ZmZl
clNhd0FscGhhKSB7CiAgICAgICAgIC8vIFRoZSB3aG9sZSBmcmFtZSB3YXMgbm9uLXRyYW5zcGFy
ZW50LCBzbyBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGVudGlyZQogICAgICAgICAvLyByZXN1bHRp
bmcgYnVmZmVyIHdhcyBub24tdHJhbnNwYXJlbnQsIGFuZCB3ZSBjYW4gc2V0SGFzQWxwaGEoZmFs
c2UpLgotICAgICAgICBpZiAoYnVmZmVyLm9yaWdpbmFsRnJhbWVSZWN0KCkuY29udGFpbnMoSW50
UmVjdChJbnRQb2ludCgpLCBzY2FsZWRTaXplKCkpKSkKKyAgICAgICAgaWYgKGJ1ZmZlci5waXhl
bHMoKS0+cmVjdCgpLmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkp
CiAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwogICAgICAgICBlbHNlIGlm
IChmcmFtZUluZGV4KSB7CiAgICAgICAgICAgICAvLyBUcmlja3kgY2FzZS4gIFRoaXMgZnJhbWUg
ZG9lcyBub3QgaGF2ZSBhbHBoYSBvbmx5IGlmIGV2ZXJ5d2hlcmUKQEAgLTI4Myw3ICsyODMsNyBA
QCBib29sIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpZ25lZCBmcmFtZUluZGV4
LCB1bnNpZ25lZCBmcmFtZUR1cmF0aW9uLAogICAgICAgICAgICAgLy8gVGhlIG9ubHkgcmVtYWlu
aW5nIGNhc2UgaXMgYSBEaXNwb3NlT3ZlcndyaXRlQmdjb2xvciBmcmFtZS4gIElmCiAgICAgICAg
ICAgICAvLyBpdCBoYWQgbm8gYWxwaGEsIGFuZCBpdHMgcmVjdCBpcyBjb250YWluZWQgaW4gdGhl
IGN1cnJlbnQgZnJhbWUncwogICAgICAgICAgICAgLy8gcmVjdCwgd2Uga25vdyB0aGUgY3VycmVu
dCBmcmFtZSBoYXMgbm8gYWxwaGEuCi0gICAgICAgICAgICBpZiAoKHByZXZCdWZmZXItPmRpc3Bv
c2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zZU92ZXJ3cml0ZUJnY29sb3IpICYmICFw
cmV2QnVmZmVyLT5oYXNBbHBoYSgpICYmIGJ1ZmZlci5vcmlnaW5hbEZyYW1lUmVjdCgpLmNvbnRh
aW5zKHByZXZCdWZmZXItPm9yaWdpbmFsRnJhbWVSZWN0KCkpKQorICAgICAgICAgICAgaWYgKChw
cmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3Jp
dGVCZ2NvbG9yKSAmJiAhcHJldkJ1ZmZlci0+aGFzQWxwaGEoKSAmJiBidWZmZXIucGl4ZWxzKCkt
PnJlY3QoKS5jb250YWlucyhwcmV2QnVmZmVyLT5waXhlbHMoKS0+cmVjdCgpKSkKICAgICAgICAg
ICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwogICAgICAgICB9CiAgICAgfQpAQCAt
MzUzLDExICszNTMsNiBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVu
c2lnbmVkIGZyYW1lSW5kZXgpCiAgICAgICAgIGZyYW1lUmVjdC5zZXRIZWlnaHQoc2l6ZSgpLmhl
aWdodCgpIC0gZnJhbWVDb250ZXh0LT55T2Zmc2V0KTsKIAogICAgIEltYWdlRnJhbWUqIGNvbnN0
IGJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07Ci0gICAgaW50IGxlZnQg
PSB1cHBlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QueCgpKTsKLSAgICBpbnQgcmlnaHQgPSBsb3dl
ckJvdW5kU2NhbGVkWChmcmFtZVJlY3QubWF4WCgpLCBsZWZ0KTsKLSAgICBpbnQgdG9wID0gdXBw
ZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWN0LnkoKSk7Ci0gICAgaW50IGJvdHRvbSA9IGxvd2VyQm91
bmRTY2FsZWRZKGZyYW1lUmVjdC5tYXhZKCksIHRvcCk7Ci0gICAgYnVmZmVyLT5zZXRPcmlnaW5h
bEZyYW1lUmVjdChJbnRSZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3Ap
KTsKIAogICAgIGlmICghZnJhbWVJbmRleCkgewogICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJz
dCBmcmFtZSwgc28gd2UncmUgbm90IHJlbHlpbmcgb24gYW55IHByZXZpb3VzIGRhdGEuCkBAIC0z
ODcsNyArMzgyLDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bnNp
Z25lZCBmcmFtZUluZGV4KQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gV2Ugd2Fu
dCB0byBjbGVhciB0aGUgcHJldmlvdXMgZnJhbWUgdG8gdHJhbnNwYXJlbnQsIHdpdGhvdXQKICAg
ICAgICAgICAgIC8vIGFmZmVjdGluZyBwaXhlbHMgaW4gdGhlIGltYWdlIG91dHNpZGUgb2YgdGhl
IGZyYW1lLgotICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcHJldlJlY3QgPSBwcmV2QnVmZmVy
LT5vcmlnaW5hbEZyYW1lUmVjdCgpOworICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcHJldlJl
Y3QgPSBwcmV2QnVmZmVyLT5waXhlbHMoKS0+cmVjdCgpOwogICAgICAgICAgICAgY29uc3QgSW50
U2l6ZSYgYnVmZmVyU2l6ZSA9IHNjYWxlZFNpemUoKTsKICAgICAgICAgICAgIGlmICghZnJhbWVJ
bmRleCB8fCBwcmV2UmVjdC5jb250YWlucyhJbnRSZWN0KEludFBvaW50KCksIHNjYWxlZFNpemUo
KSkpKSB7CiAgICAgICAgICAgICAgICAgLy8gQ2xlYXJpbmcgdGhlIGZpcnN0IGZyYW1lLCBvciBh
IGZyYW1lIHRoZSBzaXplIG9mIHRoZSB3aG9sZQpAQCAtNDAyLDYgKzM5NywxMiBAQCBib29sIEdJ
RkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuc2lnbmVkIGZyYW1lSW5kZXgpCiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgaW50IGxlZnQgPSB1cHBlckJv
dW5kU2NhbGVkWChmcmFtZVJlY3QueCgpKTsKKyAgICBpbnQgcmlnaHQgPSBsb3dlckJvdW5kU2Nh
bGVkWChmcmFtZVJlY3QubWF4WCgpLCBsZWZ0KTsKKyAgICBpbnQgdG9wID0gdXBwZXJCb3VuZFNj
YWxlZFkoZnJhbWVSZWN0LnkoKSk7CisgICAgaW50IGJvdHRvbSA9IGxvd2VyQm91bmRTY2FsZWRZ
KGZyYW1lUmVjdC5tYXhZKCksIHRvcCk7CisgICAgYnVmZmVyLT5waXhlbHMoKS0+c2V0UmVjdChJ
bnRSZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3ApKTsKIAogICAgIC8v
IFVwZGF0ZSBvdXIgc3RhdHVzIHRvIGJlIHBhcnRpYWxseSBjb21wbGV0ZS4KICAgICBidWZmZXIt
PnNldFN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZVBhcnRpYWwpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdl
RGVjb2Rlci5jcHAKaW5kZXggZWU2NmFjMTRkNGJlMDdjYTlhZmZiMmEzYWZmODllYmZhNjJmYjEy
ZS4uOThmZmUwMjAyMTVjYzkzNjQ3MGUzMTNjNzJmM2I0YTc1NmI1ZmEzNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNv
ZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVn
L0pQRUdJbWFnZURlY29kZXIuY3BwCkBAIC01ODgsNyArNTg4LDcgQEAgYm9vbCBKUEVHSW1hZ2VE
ZWNvZGVyOjpzZXRGYWlsZWQoKQogfQogCiB0ZW1wbGF0ZSA8Sl9DT0xPUl9TUEFDRSBjb2xvclNw
YWNlPgotdm9pZCBzZXRQaXhlbChJbWFnZUZyYW1lJiBidWZmZXIsIEltYWdlRnJhbWU6OlBpeGVs
RGF0YSogY3VycmVudEFkZHJlc3MsIEpTQU1QQVJSQVkgc2FtcGxlcywgaW50IGNvbHVtbikKK3Zv
aWQgc2V0UGl4ZWwoSW1hZ2VGcmFtZSYgYnVmZmVyLCBSR0JBMzIqIGN1cnJlbnRBZGRyZXNzLCBK
U0FNUEFSUkFZIHNhbXBsZXMsIGludCBjb2x1bW4pCiB7CiAgICAgSlNBTVBMRSoganNhbXBsZSA9
ICpzYW1wbGVzICsgY29sdW1uICogKGNvbG9yU3BhY2UgPT0gSkNTX1JHQiA/IDMgOiA0KTsKIApA
QCAtNjMxLDcgKzYzMSw3IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVz
KEltYWdlRnJhbWUmIGJ1ZmZlcikKICAgICAgICAgaWYgKGRlc3RZIDwgMCkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogY3VycmVudEFkZHJl
c3MgPSBidWZmZXIuZ2V0QWRkcigwLCBkZXN0WSk7CisgICAgICAgIFJHQkEzMiogY3VycmVudEFk
ZHJlc3MgPSBidWZmZXIuZ2V0QWRkcigwLCBkZXN0WSk7CiAgICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgd2lkdGg7ICsreCkgewogICAgICAgICAgICAgc2V0UGl4ZWw8Y29sb3JTcGFjZT4oYnVm
ZmVyLCBjdXJyZW50QWRkcmVzcywgc2FtcGxlcywgaXNTY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNb
eF0gOiB4KTsKICAgICAgICAgICAgICsrY3VycmVudEFkZHJlc3M7CkBAIC02NjEsOSArNjYxLDYg
QEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoKQogICAgICAgICAvLyBs
b2FkaW5nLiBUaGUgY29tcGxldGVkIGltYWdlIHdpbGwgYmUgbWFya2VkIGZ1bGx5IG9wYXF1ZSBp
biBqcGVnQ29tcGxldGUoKS4KICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKHRydWUpOwogICAg
ICAgICBidWZmZXIuc2V0Q29sb3JQcm9maWxlKG1fY29sb3JQcm9maWxlKTsKLQotICAgICAgICAv
LyBGb3IgSlBFR3MsIHRoZSBmcmFtZSBhbHdheXMgZmlsbHMgdGhlIGVudGlyZSBpbWFnZS4KLSAg
ICAgICAgYnVmZmVyLnNldE9yaWdpbmFsRnJhbWVSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgc2l6
ZSgpKSk7CiAgICAgfQogCiAgICAganBlZ19kZWNvbXByZXNzX3N0cnVjdCogaW5mbyA9IG1fcmVh
ZGVyLT5pbmZvKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCmluZGV4IGU2NDRhNzExMGVm
Y2I1NDBkODljZTFiYTgxMTAwYmM0ODIzYjE4ZjIuLjk2MTEzMmVkOTE3ZWM4NDRhNGI5NTcyZmY0
NzE0MDQ4MjljNDAwMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCkBAIC00NTIsMTkg
KzQ1MiwxOSBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKICAgICB9
CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJHQihJbWFnZUZyYW1lOjpQaXhlbERh
dGEqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJH
QihSR0JBMzIqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCkKIHsKICAgICAqZGVzdCA9IDB4RkYwMDAw
MDBVIHwgcGl4ZWxbMF0gPDwgMTYgfCBwaXhlbFsxXSA8PCA4IHwgcGl4ZWxbMl07CiB9CiAKLXN0
YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJHQkEoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBkZXN0
LCBwbmdfYnl0ZXAgcGl4ZWwsIHVuc2lnbmVkIGNoYXImIG5vblRyaXZpYWxBbHBoYU1hc2spCitz
dGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxSR0JBKFJHQkEzMiogZGVzdCwgcG5nX2J5dGVwIHBp
eGVsLCB1bnNpZ25lZCBjaGFyJiBub25Ucml2aWFsQWxwaGFNYXNrKQogewogICAgIHVuc2lnbmVk
IGNoYXIgYSA9IHBpeGVsWzNdOwogICAgICpkZXN0ID0gYSA8PCAyNCB8IHBpeGVsWzBdIDw8IDE2
IHwgcGl4ZWxbMV0gPDwgOCB8IHBpeGVsWzJdOwogICAgIG5vblRyaXZpYWxBbHBoYU1hc2sgfD0g
KDI1NSAtIGEpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxQcmVtdWx0aXBsaWVk
UkdCQShJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCwgdW5zaWdu
ZWQgY2hhciYgbm9uVHJpdmlhbEFscGhhTWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhl
bFByZW11bHRpcGxpZWRSR0JBKFJHQkEzMiogZGVzdCwgcG5nX2J5dGVwIHBpeGVsLCB1bnNpZ25l
ZCBjaGFyJiBub25Ucml2aWFsQWxwaGFNYXNrKQogewogICAgIHVuc2lnbmVkIGNoYXIgYSA9IHBp
eGVsWzNdOwogICAgIHVuc2lnbmVkIGNoYXIgciA9IGZhc3REaXZpZGVCeTI1NShwaXhlbFswXSAq
IGEpOwpAQCAtNTEzLDggKzUxMyw2IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFi
bGUodW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRleCwKICAgICAgICAg
ICAgIGluaXRGcmFtZUJ1ZmZlcihtX2N1cnJlbnRGcmFtZSk7CiAgICAgICAgIGVsc2UKICNlbmRp
ZgotICAgICAgICAvLyBGb3IgUE5HcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJl
IGltYWdlLgotICAgICAgICBidWZmZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQ
b2ludCgpLCBzaXplKCkpKTsKICAgICB9CiAKICAgICAvKiBsaWJwbmcgY29tbWVudHMgKGhlcmUg
dG8gZXhwbGFpbiB3aGF0IGZvbGxvd3MpLgpAQCAtNTczLDcgKzU3MSw3IEBAIHZvaWQgUE5HSW1h
Z2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25l
ZCByb3dJbmRleCwKICAgICB9CiAKICAgICAvLyBXcml0ZSB0aGUgZGVjb2RlZCByb3cgcGl4ZWxz
IHRvIHRoZSBmcmFtZSBidWZmZXIuCi0gICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBhZGRyZXNz
ID0gYnVmZmVyLmdldEFkZHIoMCwgeSk7CisgICAgUkdCQTMyKiBhZGRyZXNzID0gYnVmZmVyLmdl
dEFkZHIoMCwgeSk7CiAgICAgaW50IHdpZHRoID0gc2NhbGVkU2l6ZSgpLndpZHRoKCk7CiAgICAg
dW5zaWduZWQgY2hhciBub25Ucml2aWFsQWxwaGFNYXNrID0gMDsKIApAQCAtODM0LDExICs4MzIs
NiBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHNpemVfdCBmcmFtZUlu
ZGV4KQogICAgICAgICBmcmFtZVJlY3Quc2V0SGVpZ2h0KHNpemUoKS5oZWlnaHQoKSAtIG1feU9m
ZnNldCk7CiAKICAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJh
bWVJbmRleF07Ci0gICAgaW50IGxlZnQgPSB1cHBlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QueCgp
KTsKLSAgICBpbnQgcmlnaHQgPSBsb3dlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QubWF4WCgpLCBs
ZWZ0KTsKLSAgICBpbnQgdG9wID0gdXBwZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWN0LnkoKSk7Ci0g
ICAgaW50IGJvdHRvbSA9IGxvd2VyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC5tYXhZKCksIHRvcCk7
Ci0gICAgYnVmZmVyLnNldE9yaWdpbmFsRnJhbWVSZWN0KEludFJlY3QobGVmdCwgdG9wLCByaWdo
dCAtIGxlZnQsIGJvdHRvbSAtIHRvcCkpOwogCiAgICAgLy8gVGhlIHN0YXJ0aW5nIHN0YXRlIGZv
ciB0aGlzIGZyYW1lIGRlcGVuZHMgb24gdGhlIHByZXZpb3VzIGZyYW1lJ3MKICAgICAvLyBkaXNw
b3NhbCBtZXRob2QuCkBAIC04NjIsNyArODU1LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6Omlu
aXRGcmFtZUJ1ZmZlcihzaXplX3QgZnJhbWVJbmRleCkKICAgICB9IGVsc2UgewogICAgICAgICAv
LyBXZSB3YW50IHRvIGNsZWFyIHRoZSBwcmV2aW91cyBmcmFtZSB0byB0cmFuc3BhcmVudCwgd2l0
aG91dAogICAgICAgICAvLyBhZmZlY3RpbmcgcGl4ZWxzIGluIHRoZSBpbWFnZSBvdXRzaWRlIG9m
IHRoZSBmcmFtZS4KLSAgICAgICAgY29uc3QgSW50UmVjdCYgcHJldlJlY3QgPSBwcmV2QnVmZmVy
LT5vcmlnaW5hbEZyYW1lUmVjdCgpOworICAgICAgICBjb25zdCBJbnRSZWN0JiBwcmV2UmVjdCA9
IHByZXZCdWZmZXItPnBpeGVscygpLT5yZWN0KCk7CiAgICAgICAgIGlmICghZnJhbWVJbmRleCB8
fCBwcmV2UmVjdC5jb250YWlucyhJbnRSZWN0KEludFBvaW50KCksIHNjYWxlZFNpemUoKSkpKSB7
CiAgICAgICAgICAgICAvLyBDbGVhcmluZyB0aGUgZmlyc3QgZnJhbWUsIG9yIGEgZnJhbWUgdGhl
IHNpemUgb2YgdGhlIHdob2xlCiAgICAgICAgICAgICAvLyBpbWFnZSwgcmVzdWx0cyBpbiBhIGNv
bXBsZXRlbHkgZW1wdHkgaW1hZ2UuCkBAIC04NzMsNiArODY2LDEyIEBAIHZvaWQgUE5HSW1hZ2VE
ZWNvZGVyOjppbml0RnJhbWVCdWZmZXIoc2l6ZV90IGZyYW1lSW5kZXgpCiAgICAgICAgICAgICBi
dWZmZXIuemVyb0ZpbGxGcmFtZVJlY3QocHJldlJlY3QpOwogICAgICAgICB9CiAgICAgfQorICAg
IAorICAgIGludCBsZWZ0ID0gdXBwZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0LngoKSk7CisgICAg
aW50IHJpZ2h0ID0gbG93ZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0Lm1heFgoKSwgbGVmdCk7Cisg
ICAgaW50IHRvcCA9IHVwcGVyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC55KCkpOworICAgIGludCBi
b3R0b20gPSBsb3dlckJvdW5kU2NhbGVkWShmcmFtZVJlY3QubWF4WSgpLCB0b3ApOworICAgIGJ1
ZmZlci5waXhlbHMoKS0+c2V0UmVjdChJbnRSZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBi
b3R0b20gLSB0b3ApKTsKIH0KIAogdm9pZCBQTkdJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUo
KQpAQCAtODg2LDcgKzg4NSw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRl
KCkKICAgICBwbmdfYnl0ZXAgaW50ZXJsYWNlQnVmZmVyID0gbV9yZWFkZXItPmludGVybGFjZUJ1
ZmZlcigpOwogCiAgICAgaWYgKG1fY3VycmVudEZyYW1lICYmIGludGVybGFjZUJ1ZmZlcikgewot
ICAgICAgICBjb25zdCBJbnRSZWN0JiByZWN0ID0gYnVmZmVyLm9yaWdpbmFsRnJhbWVSZWN0KCk7
CisgICAgICAgIGNvbnN0IEludFJlY3QmIHJlY3QgPSBidWZmZXIucGl4ZWxzKCktPnJlY3QoKTsK
ICAgICAgICAgYm9vbCBoYXNBbHBoYSA9IG1fcmVhZGVyLT5oYXNBbHBoYSgpOwogICAgICAgICB1
bnNpZ25lZCBjb2xvckNoYW5uZWxzID0gaGFzQWxwaGEgPyA0IDogMzsKICAgICAgICAgYm9vbCBu
b25Ucml2aWFsQWxwaGEgPSBmYWxzZTsKQEAgLTg5Niw3ICs4OTUsNyBAQCB2b2lkIFBOR0ltYWdl
RGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9T
QU1QTElORykKICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCByZWN0Lm1heFkoKSAtIHJlY3Qu
eSgpOyArK3kpIHsKICAgICAgICAgICAgIHBuZ19ieXRlcCByb3cgPSBpbnRlcmxhY2VCdWZmZXIg
KyAobV9zY2FsZWQgPyBtX3NjYWxlZFJvd3NbeV0gOiB5KSAqIGNvbG9yQ2hhbm5lbHMgKiBzaXpl
KCkud2lkdGgoKTsKLSAgICAgICAgICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogYWRkcmVzcyA9
IGJ1ZmZlci5nZXRBZGRyKHJlY3QueCgpLCB5ICsgcmVjdC55KCkpOworICAgICAgICAgICAgUkdC
QTMyKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIocmVjdC54KCksIHkgKyByZWN0LnkoKSk7CiAg
ICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHJlY3QubWF4WCgpIC0gcmVjdC54KCk7ICsr
eCkgewogICAgICAgICAgICAgICAgIHBuZ19ieXRlcCBwaXhlbCA9IHJvdyArIChtX3NjYWxlZCA/
IG1fc2NhbGVkQ29sdW1uc1t4XSA6IHgpICogY29sb3JDaGFubmVsczsKICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBhbHBoYSA9IGhhc0FscGhhID8gcGl4ZWxbM10gOiAyNTU7CkBAIC05MTIsNyAr
OTExLDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUoKQogICAgICAgICBw
bmdfYnl0ZXAgcm93ID0gaW50ZXJsYWNlQnVmZmVyOwogICAgICAgICBmb3IgKGludCB5ID0gcmVj
dC55KCk7IHkgPCByZWN0Lm1heFkoKTsgKyt5LCByb3cgKz0gY29sb3JDaGFubmVscyAqIHNpemUo
KS53aWR0aCgpKSB7CiAgICAgICAgICAgICBwbmdfYnl0ZXAgcGl4ZWwgPSByb3c7Ci0gICAgICAg
ICAgICBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcihyZWN0
LngoKSwgeSk7CisgICAgICAgICAgICBSR0JBMzIqIGFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcihy
ZWN0LngoKSwgeSk7CiAgICAgICAgICAgICBmb3IgKGludCB4ID0gcmVjdC54KCk7IHggPCByZWN0
Lm1heFgoKTsgKyt4LCBwaXhlbCArPSBjb2xvckNoYW5uZWxzKSB7CiAgICAgICAgICAgICAgICAg
dW5zaWduZWQgYWxwaGEgPSBoYXNBbHBoYSA/IHBpeGVsWzNdIDogMjU1OwogICAgICAgICAgICAg
ICAgIG5vblRyaXZpYWxBbHBoYSB8PSBhbHBoYSA8IDI1NTsKQEAgLTkyNSw3ICs5MjQsNyBAQCB2
b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAjZW5kaWYKIAogICAgICAgICBp
ZiAoIW5vblRyaXZpYWxBbHBoYSkgewotICAgICAgICAgICAgaWYgKGJ1ZmZlci5vcmlnaW5hbEZy
YW1lUmVjdCgpLmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpCisg
ICAgICAgICAgICBpZiAoYnVmZmVyLnBpeGVscygpLT5yZWN0KCkuY29udGFpbnMoSW50UmVjdChJ
bnRQb2ludCgpLCBzY2FsZWRTaXplKCkpKSkKICAgICAgICAgICAgICAgICBidWZmZXIuc2V0SGFz
QWxwaGEoZmFsc2UpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgc2l6ZV90
IGZyYW1lSW5kZXggPSBtX2N1cnJlbnRGcmFtZTsKQEAgLTkzMyw3ICs5MzIsNyBAQCB2b2lkIFBO
R0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAgICAgICAgICAgICAgICAgd2hpbGUgKGZy
YW1lSW5kZXggJiYgKHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6
RGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzKSkKICAgICAgICAgICAgICAgICAgICAgcHJldkJ1ZmZl
ciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKICAgICAgICAgICAgICAgICBp
ZiAoKHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zZU92
ZXJ3cml0ZUJnY29sb3IpCi0gICAgICAgICAgICAgICAgICAgICYmICFwcmV2QnVmZmVyLT5oYXNB
bHBoYSgpICYmIGJ1ZmZlci5vcmlnaW5hbEZyYW1lUmVjdCgpLmNvbnRhaW5zKHByZXZCdWZmZXIt
Pm9yaWdpbmFsRnJhbWVSZWN0KCkpKQorICAgICAgICAgICAgICAgICAgICAmJiAhcHJldkJ1ZmZl
ci0+aGFzQWxwaGEoKSAmJiBidWZmZXIucGl4ZWxzKCktPnJlY3QoKS5jb250YWlucyhwcmV2QnVm
ZmVyLT5waXhlbHMoKS0+cmVjdCgpKSkKICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLnNldEhh
c0FscGhhKGZhbHNlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmICghbV9ibGVu
ZCAmJiAhYnVmZmVyLmhhc0FscGhhKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcApp
bmRleCAxMjRhMWIyZjE5OTdmZTY3OGM2MWI1MmYzMDU4ZGI0ZDZiODg2NzlhLi4wMjJjNmYwYWIy
NWU4MWMwYWNkZjZkNTQzOTQyYTdjMTI1YzA2YjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVj
b2Rlci5jcHAKQEAgLTEzMiwxNCArMTMyLDEzIEBAIGJvb2wgV0VCUEltYWdlRGVjb2Rlcjo6ZGVj
b2RlKGJvb2wgb25seVNpemUpCiAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAg
ICAgIGJ1ZmZlci5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKICAgICAgICAg
YnVmZmVyLnNldEhhc0FscGhhKG1faGFzQWxwaGEpOwotICAgICAgICBidWZmZXIuc2V0T3JpZ2lu
YWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKTsKICAgICB9CiAKICAgICBp
ZiAoIW1fZGVjb2RlcikgewogICAgICAgICBXRUJQX0NTUF9NT0RFIG1vZGUgPSBvdXRwdXRNb2Rl
KG1faGFzQWxwaGEpOwogICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkKICAgICAgICAg
ICAgIG1vZGUgPSBvdXRwdXRNb2RlKGZhbHNlKTsKLSAgICAgICAgaW50IHJvd1N0cmlkZSA9IHNp
emUoKS53aWR0aCgpICogc2l6ZW9mKEltYWdlRnJhbWU6OlBpeGVsRGF0YSk7CisgICAgICAgIGlu
dCByb3dTdHJpZGUgPSBzaXplKCkud2lkdGgoKSAqIHNpemVvZihSR0JBMzIpOwogICAgICAgICB1
aW50OF90KiBvdXRwdXQgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIuZ2V0QWRk
cigwLCAwKSk7CiAgICAgICAgIGludCBvdXRwdXRTaXplID0gc2l6ZSgpLmhlaWdodCgpICogcm93
U3RyaWRlOwogICAgICAgICBtX2RlY29kZXIgPSBXZWJQSU5ld1JHQihtb2RlLCBvdXRwdXQsIG91
dHB1dFNpemUsIHJvd1N0cmlkZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VN
YWMubW0KaW5kZXggMjE2Y2QwOTNmMjY0NjdjYmE4OGE0M2Y2OTNhYmY0Y2Y1MWRkMWE0ZC4uZDEx
NDU0YjA1ZWY4ODk5M2E2Mjg5Mzg5NmJjMGMxMTcyOGM1ZWQ1MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNl
TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2Nr
UmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbQpAQCAtODcsNyArODcsNyBAQCB2b2lkIE1vY2tSZWFs
dGltZVZpZGVvU291cmNlTWFjOjp1cGRhdGVQbGF0Zm9ybUxheWVyKCkgY29uc3QKICAgICAgICAg
aWYgKCFpbWFnZSkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIG1fcHJldmlld0ltYWdl
ID0gaW1hZ2UtPmdldENHSW1hZ2VSZWYoKTsKKyAgICAgICAgbV9wcmV2aWV3SW1hZ2UgPSBpbWFn
ZS0+bmF0aXZlSW1hZ2UoKTsKICAgICAgICAgaWYgKCFtX3ByZXZpZXdJbWFnZSkKICAgICAgICAg
ICAgIGJyZWFrOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJh
Z0ltYWdlQ0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNH
V2luLmNwcAppbmRleCAzNmNkNjUxNmU4MGYxNzQ4YmZlYWI3N2E5MzAyNzFjMTIxZGU4MDE5Li40
YjRlMzc3OWU5NmY3OGM2NTQwYTUzYzQ0NzhjM2JmZDkzNWY1M2U5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAKQEAgLTEzNiw5ICsxMzYsOSBA
QCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiBpbWcsIEltYWdl
T3JpZW50YXRpb25EZXNjcmlwdGlvbikKICAgICBDR0NvbnRleHRTY2FsZUNUTShkcmF3Q29udGV4
dCwgMSwgLTEpOwogICAgIENHQ29udGV4dFNldEZpbGxDb2xvcihkcmF3Q29udGV4dCwgd2hpdGUp
OwogICAgIENHQ29udGV4dEZpbGxSZWN0KGRyYXdDb250ZXh0LCByZWN0KTsKLSAgICBpZiAoYXV0
byBzcmNJbWFnZSA9IGltZy0+Z2V0Q0dJbWFnZVJlZigpKSB7CisgICAgaWYgKGF1dG8gc3JjSW1h
Z2UgPSBpbWctPm5hdGl2ZUltYWdlKCkpIHsKICAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2Rl
KGRyYXdDb250ZXh0LCBrQ0dCbGVuZE1vZGVOb3JtYWwpOwotICAgICAgICBDR0NvbnRleHREcmF3
SW1hZ2UoZHJhd0NvbnRleHQsIHJlY3QsIHNyY0ltYWdlKTsKKyAgICAgICAgQ0dDb250ZXh0RHJh
d0ltYWdlKGRyYXdDb250ZXh0LCByZWN0LCBzcmNJbWFnZS5nZXQoKSk7CiAgICAgfQogICAgIENH
Q29udGV4dFJlbGVhc2UoZHJhd0NvbnRleHQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L21hYy9NaXNjL1dlYkNhY2hlLm1tIGIvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDYWNoZS5t
bQppbmRleCBiNjU5ZDZkYmY5YWQ2OTk5YzNhYzk2MmRlOTUxNTc4MDk3ZTFmM2IxLi43YzVlZDIx
MGRkYjJhMzJhNzY2Njc0YzEyMGQ5OTRjMmZhNDdlN2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L21hYy9NaXNjL1dlYkNhY2hlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2Vi
Q2FjaGUubW0KQEAgLTIwNCw3ICsyMDQsNyBAQCArIChDR0ltYWdlUmVmKWltYWdlRm9yVVJMOihO
U1VSTCAqKXVybAogICAgIFdlYkNvcmU6OkNhY2hlZEltYWdlJiBjYWNoZWRJbWFnZSA9IGRvd25j
YXN0PFdlYkNvcmU6OkNhY2hlZEltYWdlPigqY2FjaGVkUmVzb3VyY2UpOwogICAgIGlmICghY2Fj
aGVkSW1hZ2UuaGFzSW1hZ2UoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJu
IGNhY2hlZEltYWdlLmltYWdlKCktPmdldENHSW1hZ2VSZWYoKTsKKyAgICByZXR1cm4gY2FjaGVk
SW1hZ2UuaW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKS5nZXQoKTsKIH0KIAogI2VuZGlmIC8vIFBMQVRG
T1JNKElPUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9jZy9X
S0ljb25EYXRhYmFzZUNHLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9jZy9X
S0ljb25EYXRhYmFzZUNHLmNwcAppbmRleCAwZjZkZTdhMTQ2YTYxMWE1MmFhMWU1MzkwMTlmYTZj
MWM0NjcyNWFlLi4zMDU2MzM2Y2I2NmZlNGFmMThiZGM1MjlhY2EyZjhmYzg4MWRmZTU2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0YWJhc2VD
Ry5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFi
YXNlQ0cuY3BwCkBAIC0zNywxMiArMzcsMjMgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiBD
R0ltYWdlUmVmIFdLSWNvbkRhdGFiYXNlVHJ5R2V0Q0dJbWFnZUZvclVSTChXS0ljb25EYXRhYmFz
ZVJlZiBpY29uRGF0YWJhc2VSZWYsIFdLVVJMUmVmIHVybFJlZiwgV0tTaXplIHNpemUpCiB7CiAg
ICAgSW1hZ2UqIGltYWdlID0gdG9JbXBsKGljb25EYXRhYmFzZVJlZiktPmltYWdlRm9yUGFnZVVS
TCh0b1dURlN0cmluZyh1cmxSZWYpKTsKLSAgICByZXR1cm4gaW1hZ2UgPyBpbWFnZS0+Z2V0Rmly
c3RDR0ltYWdlUmVmT2ZTaXplKEludFNpemUoc3RhdGljX2Nhc3Q8aW50PihzaXplLndpZHRoKSwg
c3RhdGljX2Nhc3Q8aW50PihzaXplLmhlaWdodCkpKSA6IDA7CisgICAgcmV0dXJuIGltYWdlID8g
aW1hZ2UtPm5hdGl2ZUltYWdlT2ZTaXplKEludFNpemUoc3RhdGljX2Nhc3Q8aW50PihzaXplLndp
ZHRoKSwgc3RhdGljX2Nhc3Q8aW50PihzaXplLmhlaWdodCkpKS5nZXQoKSA6IG51bGxwdHI7CiB9
CiAKIENGQXJyYXlSZWYgV0tJY29uRGF0YWJhc2VUcnlDb3B5Q0dJbWFnZUFycmF5Rm9yVVJMKFdL
SWNvbkRhdGFiYXNlUmVmIGljb25EYXRhYmFzZVJlZiwgV0tVUkxSZWYgdXJsUmVmKQogewogICAg
IEltYWdlKiBpbWFnZSA9IHRvSW1wbChpY29uRGF0YWJhc2VSZWYpLT5pbWFnZUZvclBhZ2VVUkwo
dG9XVEZTdHJpbmcodXJsUmVmKSk7Ci0gICAgcmV0dXJuIGltYWdlID8gaW1hZ2UtPmdldENHSW1h
Z2VBcnJheSgpLmxlYWtSZWYoKSA6IDA7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBhdXRvIG5hdGl2ZUltYWdlcyA9IGltYWdlLT5mcmFtZXNOYXRpdmVJ
bWFnZXMoKTsKKyAgICBpZiAoIW5hdGl2ZUltYWdlcy5zaXplKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIAorICAgIENGTXV0YWJsZUFycmF5UmVmIGFycmF5ID0gQ0ZBcnJheUNyZWF0
ZU11dGFibGUobnVsbHB0ciwgbmF0aXZlSW1hZ2VzLnNpemUoKSwgJmtDRlR5cGVBcnJheUNhbGxC
YWNrcyk7CisgICAgZm9yIChhdXRvIG5hdGl2ZUltYWdlIDogbmF0aXZlSW1hZ2VzKQorICAgICAg
ICBDRkFycmF5QXBwZW5kVmFsdWUoYXJyYXksIG5hdGl2ZUltYWdlLmdldCgpKTsKKyAgICAKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4oQ0ZSZXRhaW4oYXJyYXkpKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50
ZXJhY3Rpb24ubW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJ
bnRlcmFjdGlvbi5tbQppbmRleCBkYzc5ODNhYjk4OGMyZDA0YTE3MzBlZTEzNzMwM2MyNDQxNjE1
MTk3Li5mYmMzZTVkNGM1NDMwMWNlOTIxN2E0MGY4ZDA4YmQ1ODM1Mjc4N2M2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFj
dGlvbi5tbQpAQCAtNDA3MSw3ICs0MDcxLDcgQEAgLSAoVUlJbWFnZSAqKV9wcmVzZW50YXRpb25T
bmFwc2hvdEZvclByZXZpZXdJdGVtQ29udHJvbGxlcjooVUlQcmV2aWV3SXRlbUNvbnRyb2wKIHsK
ICAgICBpZiAoIV9wb3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRpY2F0b3IuY29udGVudEltYWdl
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gW1tbVUlJbWFnZSBhbGxvY10g
aW5pdFdpdGhDR0ltYWdlOl9wb3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRpY2F0b3IuY29udGVu
dEltYWdlLT5nZXRDR0ltYWdlUmVmKCldIGF1dG9yZWxlYXNlXTsKKyAgICByZXR1cm4gW1tbVUlJ
bWFnZSBhbGxvY10gaW5pdFdpdGhDR0ltYWdlOl9wb3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRp
Y2F0b3IuY29udGVudEltYWdlLT5uYXRpdmVJbWFnZSgpLmdldCgpXSBhdXRvcmVsZWFzZV07CiB9
CiAKIC0gKE5TQXJyYXkgKilfcHJlc2VudGF0aW9uUmVjdHNGb3JQcmV2aWV3SXRlbUNvbnRyb2xs
ZXI6KFVJUHJldmlld0l0ZW1Db250cm9sbGVyICopY29udHJvbGxlcgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IDlhMzNmN2NjN2Rj
N2M3ZDcyZjlkYTc0MzA5OGI3ZGJjYTgyNDA5Y2YuLmE1MzI1MTA2NzhiOWY1MzUxNDU4YTM4YTlm
NDIzMzc0N2QwMzVmNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1
Z2lucy9QbHVnaW5WaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdp
bnMvUGx1Z2luVmlldy5jcHAKQEAgLTE3MjcsNjkgKzE3MjcsNiBAQCB2b2lkIFBsdWdpblZpZXc6
OndpbmRvd2VkUGx1Z2luVmlzaWJpbGl0eURpZENoYW5nZShib29sIGlzVmlzaWJsZSwgdWludDY0
X3Qgd2luZAogfQogI2VuZGlmCiAKLSNpZiBQTEFURk9STShDT0NPQSkKLXN0YXRpYyBib29sIGlz
QWxtb3N0U29saWRDb2xvcihCaXRtYXBJbWFnZSogYml0bWFwKQotewotICAgIENHSW1hZ2VSZWYg
aW1hZ2UgPSBiaXRtYXAtPmdldENHSW1hZ2VSZWYoKTsKLSAgICBBU1NFUlQoQ0dJbWFnZUdldEJp
dHNQZXJDb21wb25lbnQoaW1hZ2UpID09IDgpOwotCi0gICAgQ0dCaXRtYXBJbmZvIGltYWdlSW5m
byA9IENHSW1hZ2VHZXRCaXRtYXBJbmZvKGltYWdlKTsKLSAgICBpZiAoIShpbWFnZUluZm8gJiBr
Q0dCaXRtYXBCeXRlT3JkZXIzMkxpdHRsZSkgfHwgKGltYWdlSW5mbyAmIGtDR0JpdG1hcEFscGhh
SW5mb01hc2spICE9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QpIHsKLSAgICAgICAg
Ly8gRklYTUU6IENvbnNpZGVyIGJlaW5nIGFibGUgdG8gaGFuZGxlIG90aGVyIHBpeGVsIGZvcm1h
dHMuCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgc2l6ZV90IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKGltYWdlKTsKLSAg
ICBzaXplX3QgaGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChpbWFnZSk7Ci0gICAgc2l6ZV90IGJ5
dGVzUGVyUm93ID0gQ0dJbWFnZUdldEJ5dGVzUGVyUm93KGltYWdlKTsKLQotICAgIFJldGFpblB0
cjxDRkRhdGFSZWY+IHByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNvcHlEYXRhKENH
SW1hZ2VHZXREYXRhUHJvdmlkZXIoaW1hZ2UpKSk7Ci0gICAgY29uc3QgVUludDgqIGRhdGEgPSBD
RkRhdGFHZXRCeXRlUHRyKHByb3ZpZGVyLmdldCgpKTsKLQotICAgIC8vIE92ZXJsYXkgYSBncmlk
IG9mIHNhbXBsaW5nIGRvdHMgb24gdG9wIG9mIGEgZ3JheXNjYWxlIHZlcnNpb24gb2YgdGhlIGlt
YWdlLgotICAgIC8vIEZvciB0aGUgaW50ZXJpb3IgcG9pbnRzLCBjYWxjdWxhdGUgdGhlIGRpZmZl
cmVuY2UgaW4gbHVtaW5hbmNlIGFtb25nIHRoZSBzYW1wbGUgcG9pbnQKLSAgICAvLyBhbmQgaXRz
IHN1cnJvdW5kcyBwb2ludHMsIHNjYWxlZCBieSB0cmFuc3BhcmVuY3kuCi0gICAgY29uc3QgdW5z
aWduZWQgc2FtcGxlUm93cyA9IDc7Ci0gICAgY29uc3QgdW5zaWduZWQgc2FtcGxlQ29scyA9IDc7
Ci0gICAgLy8gRklYTUU6IFJlZmluZSB0aGUgcHJvcGVyIG51bWJlciBvZiBzYW1wbGVzLCBhbmQg
YWNjb21tb2RhdGUgZGlmZmVyZW50IGFzcGVjdCByYXRpb3MuCi0gICAgaWYgKHdpZHRoIDwgc2Ft
cGxlQ29scyB8fCBoZWlnaHQgPCBzYW1wbGVSb3dzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAvLyBFbnN1cmUgdGhhdCB0aGUgbGFzdCByb3cvY29sdW1uIGxhbmQgb24gdGhlIGltYWdl
IHBlcmltZXRlci4KLSAgICBjb25zdCBmbG9hdCBzdHJpZGVXaWR0aCA9IHN0YXRpY19jYXN0PGZs
b2F0Pih3aWR0aCAtIDEpIC8gKHNhbXBsZUNvbHMgLSAxKTsKLSAgICBjb25zdCBmbG9hdCBzdHJp
ZGVIZWlnaHQgPSBzdGF0aWNfY2FzdDxmbG9hdD4oaGVpZ2h0IC0gMSkgLyAoc2FtcGxlUm93cyAt
IDEpOwotICAgIGZsb2F0IHNhbXBsZXNbc2FtcGxlUm93c11bc2FtcGxlQ29sc107Ci0KLSAgICAv
LyBGaW5kIHRoZSBsdW1pbmFuY2Ugb2YgdGhlIHNhbXBsZSBwb2ludHMuCi0gICAgZmxvYXQgeSA9
IDA7Ci0gICAgY29uc3QgVUludDgqIHJvdyA9IGRhdGE7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNhbXBsZVJvd3M7ICsraSkgewotICAgICAgICBmbG9hdCB4ID0gMDsKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHNhbXBsZUNvbHM7ICsraikgewotICAgICAgICAgICAg
Y29uc3QgVUludDgqIHAwID0gcm93ICsgKHN0YXRpY19jYXN0PGludD4oeCArIC41KSkgKiA0Owot
ICAgICAgICAgICAgLy8gUiBHIEIgQQotICAgICAgICAgICAgc2FtcGxlc1tpXVtqXSA9ICgwLjIx
MjUgKiAqcDAgKyAwLjcxNTQgKiAqKHAwKzEpICsgMC4wNzIxICogKihwMCsyKSkgKiAqKHAwKzMp
IC8gMjU1OwotICAgICAgICAgICAgeCArPSBzdHJpZGVXaWR0aDsKLSAgICAgICAgfQotICAgICAg
ICB5ICs9IHN0cmlkZUhlaWdodDsKLSAgICAgICAgcm93ID0gZGF0YSArIChzdGF0aWNfY2FzdDxp
bnQ+KHkgKyAuNSkpICogYnl0ZXNQZXJSb3c7Ci0gICAgfQotCi0gICAgLy8gRGV0ZXJtaW5lIHRo
ZSBpbWFnZSBzY29yZS4KLSAgICBmbG9hdCBhY2N1bVNjb3JlID0gMDsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAxOyBpIDwgc2FtcGxlUm93cyAtIDE7ICsraSkgewotICAgICAgICBmb3IgKHVuc2ln
bmVkIGogPSAxOyBqIDwgc2FtcGxlQ29scyAtIDE7ICsraikgewotICAgICAgICAgICAgZmxvYXQg
ZGlmZiA9IHNhbXBsZXNbaSAtIDFdW2pdICsgc2FtcGxlc1tpICsgMV1bal0gKyBzYW1wbGVzW2ld
W2ogLSAxXSArIHNhbXBsZXNbaV1baiArIDFdIC0gNCAqIHNhbXBsZXNbaV1bal07Ci0gICAgICAg
ICAgICBhY2N1bVNjb3JlICs9IGRpZmYgKiBkaWZmOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Ly8gVGhlIHNjb3JlIGZvciBhIGdpdmVuIHNhbXBsZSBjYW4gYmUgd2l0aGluIHRoZSByYW5nZSBv
ZiAwIGFuZCAyNTVeMi4KLSAgICByZXR1cm4gYWNjdW1TY29yZSA8IDI1MDAgKiAoc2FtcGxlUm93
cyAtIDIpICogKHNhbXBsZUNvbHMgLSAyKTsKLX0KLSNlbmRpZgotCiB2b2lkIFBsdWdpblZpZXc6
OnBsdWdpblNuYXBzaG90VGltZXJGaXJlZCgpCiB7CiAjaWYgRU5BQkxFKFBSSU1BUllfU05BUFNI
T1RURURfUExVR0lOX0hFVVJJU1RJQykKQEAgLTE4MDksNyArMTc0Niw3IEBAIHZvaWQgUGx1Z2lu
Vmlldzo6cGx1Z2luU25hcHNob3RUaW1lckZpcmVkKCkKIAogICAgICAgICBpZiAoc25hcHNob3RJ
bWFnZSkgewogI2lmIEVOQUJMRShQUklNQVJZX1NOQVBTSE9UVEVEX1BMVUdJTl9IRVVSSVNUSUMp
Ci0gICAgICAgICAgICBib29sIHNuYXBzaG90SXNBbG1vc3RTb2xpZENvbG9yID0gaXNBbG1vc3RT
b2xpZENvbG9yKGRvd25jYXN0PEJpdG1hcEltYWdlPihzbmFwc2hvdEltYWdlLmdldCgpKSk7Cisg
ICAgICAgICAgICBib29sIHNuYXBzaG90SXNBbG1vc3RTb2xpZENvbG9yID0gc3RhdGljX3BvaW50
ZXJfY2FzdDxCaXRtYXBJbWFnZT4oc25hcHNob3RJbWFnZSktPmlzQWxtb3N0U29saWRDb2xvcigp
OwogICAgICAgICAgICAgc25hcHNob3RGb3VuZCA9ICFzbmFwc2hvdElzQWxtb3N0U29saWRDb2xv
cjsKICNlbmRpZgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283467</attachid>
            <date>2016-07-12 16:08:59 -0700</date>
            <delta_ts>2016-09-09 12:03:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159679-20160712160815.patch</filename>
            <type>text/plain</type>
            <size>145354</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzMTAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWM1YmQ5YmQwNmExOWJl
NWNhMDJjNTE3MmQ2ZWYyZWJiZmVjMWMxOS4uZmU4ZDJmNTExZmM2N2M2MzliMzQwY2RiOWM3MTZj
MDllOWU4ODFlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzMSBAQAorMjAxNi0wNy0xMiAgU2Fp
ZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0
IHRoZSBwaXhlbCBkYXRhIG9mIEltYWdlRnJhbWUgdG8gYSBzZXBhcmF0ZSBjbGFzcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5Njc5CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTW92ZSB0aGUgcGl4ZWwg
ZGF0YSBtYW5pcHVsYXRpb24gcGFydCBpbiBJbWFnZUZyYW1lIGludG8gYSBzZXBhcmF0ZSBjbGFz
cworICAgICAgICBhbmQgdGhlbiBtYWtlIGl0IG9wdGlvbmFsIChhbGxvY2F0ZWQgb24gZGVtYW5k
KS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFBsYXRmb3JtRWZsLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtV2lu
Q2Fpcm8uY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcFBpeGVscy5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcFBpeGVsczo6Qml0bWFwUGl4ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBp
eGVsczo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpoZWlnaHQpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFBpeGVsczo6YXQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmNsZWFyUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OnJlcGVhdEZpcnN0Um93KToKKyAgICAgICAgKFdl
YkNvcmU6OkJpdG1hcFBpeGVsczo6c2V0UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQ
aXhlbHM6Om92ZXJSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6aW5Cb3Vu
ZHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Om11bHRpcGx5MjU1KToKKyAgICAgICAgKFdlYkNvcmU6OmRpdmlkZTI1NSk6CisgICAg
ICAgIChXZWJDb3JlOjpkaXZpZGVDZWlsKToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxp
ZWRDaGFubmVsKToKKyAgICAgICAgKFdlYkNvcmU6OnVucHJlbXVsdGlwbGllZENoYW5uZWwpOgor
ICAgICAgICAoV2ViQ29yZTo6bWFrZVByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VVblByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmg6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6cGl4ZWxzKToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWVEYXRhOjpoYXNQaXhlbHMpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y2xlYXJQaXhl
bERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGxQaXhlbERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGxGcmFtZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weUJpdG1hcERhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojpjb3B5Um93TlRpbWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0UkdCQSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpnZXRBZGRyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6Omhhc1BpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpvdmVyUkdC
QSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjp3aWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpoZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
Y29weVJvd05UaW1lcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpm
aXhQb2ludFVuc2lnbmVkTXVsdGlwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6ZGl2aWRlMjU1KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1h
Z2VSZWFkZXI6OmRlY29kZUJNUCk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Y2Fpcm8vQml0bWFwUGl4ZWxzQ2Fpcm8uY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwLgorICAg
ICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjppbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KToKKyAgICAgICAgKFdlYkNvcmU6OkdJ
RkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFn
ZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFBp
eGVsKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5l
cyk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhlbFJHQik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRQaXhlbFJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxQcmVtdWx0aXBsaWVk
UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSk6
CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorCisyMDE2LTA3LTEx
ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisKKyAgICAgICAg
UmVuYW1lIEZyYW1lRGF0YSB0byBJbWFnZUZyYW1lRGF0YSBhbmQgbW92ZSBpdCB0byBhIHNlcGFy
YXRlIGZpbGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1NTQ0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1vdmUgSW1hZ2VGcmFtZURhdGEgdG8gYSBzZXBhcmF0ZSBmaWxlIHNvIGl0IGNhbiBiZSBjYWNo
ZWQgYnkgSW1hZ2VTb3VyY2UKKyAgICAgICAgYW5kIHdpbGwgc3RpbGwgYmUgY29uc3VtZWQgYnkg
Qml0bWFwSW1hZ2UuIE1ha2UgdGhlIGRhdGEgbWVtYmVycyBvZiBJbWFnZUZyYW1lRGF0YQorICAg
ICAgICBiZSBwcml2YXRlIGFuZCBhZGQgZ2V0dGVycyB0byByZXR1cm4gdGhlaXIgdmFsdWVzLgor
CisgICAgICAgIE5vIG5ldyB0ZXN0cyAtLSBDb2RlIHJlZmFjdG9yaW5nLCBubyBiZWhhdmlvciBj
aGFuZ2UuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0
bWFwSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OkJpdG1hcEltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpoYXZlRnJhbWVJbWFnZUF0SW5kZXgp
OgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3Nh
cnkpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjplbnN1cmVGcmFtZUlzQ2FjaGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJ
bWFnZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJ
bWFnZTo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1h
Z2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
OjpmcmFtZU9yaWVudGF0aW9uQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdl
Ojppc0FsbW9zdFNvbGlkQ29sb3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1h
cEltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6OkZyYW1lRGF0YSk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZURhdGE6On5GcmFtZURhdGEpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp1c2VkRnJhbWVCeXRlcyk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lRGF0YUF0SW5kZXgpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvaW1hZ2VGcmFtZURhdGEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWVEYXRhOjpJbWFnZUZyYW1lRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0
YTo6fkltYWdlRnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpj
bGVhclN1YkltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6Y2xlYXIp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OnNpbmdsZVBpeGVsU29saWRDb2xv
cik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6aXNBbG1vc3RTb2xpZENvbG9y
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9pbWFnZUZyYW1lRGF0YS5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpzdGF0dXMpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZURhdGE6OmlzQ29tcGxldGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZURhdGE6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmZy
YW1lQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OmltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpvcmllbnRhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6c3Vic2FtcGxpbmdMZXZlbCk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lRGF0YTo6ZHVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZURhdGE6Omhhc0FscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWVEYXRhOjpo
YXNJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6aGFzTWV0YWRhdGEp
OgorCisyMDE2LTA2LTI0ICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxj
b20+CisKKyAgICAgICAgSW50cm9kdWNlIFBsYXRmb3JtSW1hZ2UgYW5kIG1ha2UgaXQgaXMgYSB3
cmFwcGVyIGZvciBOYXRpdmVJbWFnZVB0cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhlIG1haW4gcHVycG9zZSBvZiB0aGlzIHJlZmFjdG9yaW5nIGlz
IHRvIG1vdmUgdGhlIHBsYXRmb3JtIGltYWdlIGRlcGVuZGVudAorICAgICAgICBjb2RlIGZyb20g
Qml0bWFwSW1hZ2UgdG8gUGxhdGZvcm1JbWFnZS4gUGxhdGZvcm1JbWFnZSBpcyByZXNwb25zaWJs
ZSBvZiAKKyAgICAgICAgZHJhd2luZyB0aGUgaW1hZ2UgYW5kIGFuc3dlcmluZyBOYXRpdmVJbWFn
ZVB0ciBxdWVzdGlvbnMgd2hlbiBhbiBJbWFnZURlY29kZXIKKyAgICAgICAgaXMgbm90IGF2YWls
YWJsZS4gQXBhcnQgZnJvbSBkcmF3aW5nIHRoZSBpbWFnZSwgdGhlIHF1ZXJ5IGZ1bmN0aW9ucyB3
aWxsIGJlCisgICAgICAgIGNhbGxlZCBvbmx5IHdoZW4gY29uc3RydWN0aW5nIGEgRnJhbWVEYXRh
IHNvIHdlIHdpbGwga2VlcCBldmVyeXRoaW5nIGFzIGEKKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIu
IEJ1dCB3ZSB3aWxsIGNhc3QgdGhlIE5hdGl2ZUltYWdlUHRyIHRvIFBsYXRmb3JtSW1hZ2Ugd2hl
bgorICAgICAgICBhIHBsYXRmb3JtIGRlcGVuZGVudCBmdW5jdGlvbiBpcyBuZWVkZWQuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzIC0tIENvZGUgcmVmYWN0b3JpbmcsIG5vIGJlaGF2aW9yIGNoYW5n
ZS4KKworICAgICAgICAqIFBsYXRmb3JtQXBwbGVXaW4uY21ha2U6CisgICAgICAgICogUGxhdGZv
cm1FZmwuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogUGxh
dGZvcm1NYWMuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1XaW5DYWlyby5jbWFrZToKKyAgICAg
ICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmluZGlu
Z3Mvb2JqYy9ET00ubW06CisgICAgICAgICgtW0RPTU5vZGUgZ2V0UHJldmlld1NuYXBzaG90SW1h
Z2U6YW5kUmVjdHM6XSk6CisgICAgICAgICogcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5t
bToKKyAgICAgICAgKC1bV2ViVGV4dEluZGljYXRvclZpZXcgaW5pdFdpdGhGcmFtZTp0ZXh0SW5k
aWNhdG9yOm1hcmdpbjpvZmZzZXQ6XSk6CisgICAgICAgIChjcmVhdGVDb250ZW50Q3Jvc3NmYWRl
QW5pbWF0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRlc3Ryb3lEZWNvZGVkRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpCaXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3NhcnkpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmRhdGFDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
OkJpdG1hcEltYWdlOjpmcmFtZUltYWdlQXRJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBJbWFnZTo6bmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6Om5h
dGl2ZUltYWdlT2ZTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpuYXRpdmVJ
bWFnZUZvckN1cnJlbnRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZnJh
bWVzTmF0aXZlSW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpzaW5nbGVQ
aXhlbFNvbGlkQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwSW1hZ2U6OmlzQWxtb3N0
U29saWRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaDoKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lRGF0YTo6RnJhbWVEYXRhKToKKyAgICAgICAgbV9oYXNBbHBoYSBjYW4gYmUgaW5pdGlh
bGl6ZWQgd2l0aCBmYWxzZSBiZWNhdXNlIGl0IGlzIGFjY2Vzc2VkIG9ubHkgaW4KKyAgICAgICAg
Qml0bWFwSW1hZ2U6OmZyYW1lSGFzQWxwaGFBdEluZGV4KCkgYW5kIGl0IGlzIGd1YXJkZWQgYnkg
bV9oYXZlTWV0YWRhdGEuCisgICAgICAgIEJvdGggbV9oYXZlTWV0YWRhdGEgYW5kIG1faGFzQWxw
aGEgYXJlIHNldCBpbiBCaXRtYXBJbWFnZSBjb25zdHJ1Y3RvcgorICAgICAgICBhbmQgaW4gQml0
bWFwSW1hZ2U6OmNhY2hlRnJhbWUoKS4KKworICAgICAgICAoV2ViQ29yZTo6RnJhbWVEYXRhOjp+
RnJhbWVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lRGF0YTo6Y2xlYXIpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6
bmF0aXZlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6Om5hdGl2ZUltYWdlT2ZTaXpl
KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpmcmFtZXNOYXRpdmVJbWFnZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2U6OmdldENHSW1hZ2VSZWYpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2U6OmdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6ZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpJbWFnZTo6Z2V0Q0dJbWFnZUFycmF5KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1JbWFnZTo6UGxhdGZvcm1JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUltYWdlOjppc05pbCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpjZ0lt
YWdlUmVmKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9N
ZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW06CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnVwZGF0ZURpc3BsYXlNb2Rl
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8u
Y3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Qml0bWFwSW1hZ2VDYWlyby5jcHAuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpj
bGVhclN1YkltYWdlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjpzaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6Omhhc0FscGhhKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1JbWFnZTo6c3Vic2FtcGxpbmdTY2FsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUltYWdlOjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9C
aXRtYXBJbWFnZUNHLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
Zy9QYXR0ZXJuQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGF0dGVybjo6Y3JlYXRlUGxhdGZv
cm1QYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdl
Q0cuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OmNsZWFyU3Vi
SW1hZ2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1JbWFnZTo6aGFzQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1JbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtSW1hZ2U6OmlzQWxtb3N0U29saWRDb2xvcik6IE1vdmVkIGZyb20gUGx1Z2luVmll
dy5jcHAgc2luY2UgUGxhdGZvcm1JbWFnZSBpcyB3aGF0IHRoaXMgZnVuY3Rpb24gYmVsb25ncyB0
by4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUpOiBS
ZXR1cm5zIHRoZSBzdWItc2FtcGxpbmcgc2NhbGUgYmFzZWQgb24gdGhlIGNvbnRleHQgc2NhbGlu
Zy4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW06Cisg
ICAgICAgIChUZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hOjp1cGRhdGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkJp
dG1hcEltYWdlOjpnZXRUSUZGUmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZU1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6Ok1vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjOjp1cGRhdGVQbGF0Zm9ybUxheWVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKToKKwogMjAxNi0wNy0xMSAgU2FtIFdlaW5p
ZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFNwZWVjaCBTeW50aGVzaXM6IGdldHRpbmcg
bGlzdCBvZiB2b2ljZXMgbm8gbG9uZ2VyIHdvcmtzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKaW5kZXggYzFiYzBi
YmRlMzYxMjVjNDYyYmY0ODFkZGFkNWRkMmY4MjdkNTIzOS4uMThkMWViZWJlZTkyMGIyZjI5ZWYz
Mjg3N2RlZDJlMWVjZmY5N2Q0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9tYWMvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisy
MDE2LTA3LTExICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZSxjb20+CisK
KyAgICAgICAgSW50cm9kdWNlIFBsYXRmb3JtSW1hZ2UgYW5kIG1ha2UgaXQgaXMgYSB3cmFwcGVy
IGZvciBOYXRpdmVJbWFnZVB0cgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTU4Njg0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBNaXNjL1dlYkNhY2hlLm1tOgorICAgICAgICAoK1tXZWJDYWNoZSBpbWFn
ZUZvclVSTDpdKToKKwogMjAxNi0wNy0xMSAgRW5yaWNhIENhc3VjY2kgIDxlbnJpY2FAYXBwbGUu
Y29tPgogCiAgICAgICAgIEFkZCBzeW50aGV0aWMgY2xpY2sgb3JpZ2luIHRvIFdLTmF2aWdhdGlv
bkFjdGlvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwppbmRleCBiNDdlMmNlYTc5YThkZDdjNTMzNWQyY2Q1OGU3OTYxNTMz
NWM1MDJjLi5mMWYxNjcyNTg0YzBlZTgxODU4YTdlOTY1NTNhY2Q5Y2QwYWM2ZmVkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTYtMDctMTEgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fi
b3VoYWxsYXdhQGFwcGxlLGNvbT4KKworICAgICAgICBJbnRyb2R1Y2UgUGxhdGZvcm1JbWFnZSBh
bmQgbWFrZSBpdCBpcyBhIHdyYXBwZXIgZm9yIE5hdGl2ZUltYWdlUHRyCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTg2ODQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9jZy9X
S0ljb25EYXRhYmFzZUNHLmNwcDoKKyAgICAgICAgKFdLSWNvbkRhdGFiYXNlVHJ5R2V0Q0dJbWFn
ZUZvclVSTCk6CisgICAgICAgIChXS0ljb25EYXRhYmFzZVRyeUNvcHlDR0ltYWdlQXJyYXlGb3JV
UkwpOgorICAgICAgICBJdCB3YXMgdGhlIG9ubHkgcGxhY2UgaW4gdGhlIGNvZGUgd2hpY2ggdXNl
cyBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZUFycmF5KCkuCisgICAgICAgIENhbGwgQml0bWFwSW1h
Z2U6OmZyYW1lc05hdGl2ZUltYWdlcygpIGluc3RlYWQgYW5kIGZvcm0gdGhlIHJldHVybmVkCisg
ICAgICAgIFZlY3RvcjxOYXRpdmVJbWFnZVB0cj4gYnVpbGQgdGhlIENGQXJyYXlSZWYuCisgICAg
ICAgIAorICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvV0tDb250ZW50Vmlld0ludGVyYWN0aW9uLm1t
OgorICAgICAgICAoLVtXS0NvbnRlbnRWaWV3IF9wcmVzZW50YXRpb25TbmFwc2hvdEZvclByZXZp
ZXdJdGVtQ29udHJvbGxlcjpdKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
Vmlldy5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblZpZXc6OnBsdWdpblNuYXBzaG90VGlt
ZXJGaXJlZCk6CisgICAgICAgIAorICAgICAgICAoV2ViS2l0Ojppc0FsbW9zdFNvbGlkQ29sb3Ip
OiBEZWxldGVkLgorICAgICAgICBNb3ZlIHRoZSBzdGF0aWMgZnVuY3Rpb24gaXNBbG1vc3RTb2xp
ZENvbG9yIHRvIFBsYXRmb3JtSW1hZ2U6OmlzQWxtb3N0U29saWRDb2xvcigpLgorCiAyMDE2LTA3
LTExICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgW1dLMl1baU9T
XSBJbnRlcm1pdHRlbnQgY3Jhc2ggaW4gW1VJQXBwbGljYXRpb24gYmVnaW5CYWNrZ3JvdW5kVGFz
a1dpdGhOYW1lXSBleHBpcmF0aW9uIGhhbmRsZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZTc4
YjA0MmIxMDQwMWUxZjRlZTNhMmFiMWEwNTJjMjE4YzNhMTFlMy4uMjI2ZWM5Yjg0ZTcyMmZmZjNl
MmYwNGRjZTdkYjcwZTNkZDRiODNiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTIyMjYsNiAr
MjIyNiw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9JU09W
VFRDdWUuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCdWZmZXIuY3BwCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFt
ZURhdGEuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VPcmllbnRhdGlvbi5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9JbnRQb2ludC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtQXBwbGVX
aW4uY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUFwcGxlV2luLmNtYWtlCmluZGV4IDVm
Zjk5MWZmN2RhMzA4YmI5MTgyZWNlM2JmMTIxNzMwYTU0OGQyODcuLmJhZTMxZWFmODZlN2ZjYTkw
NTgyNTA5MmFhMzhhNzhjMTFlNDIyMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtQXBwbGVXaW4uY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1BcHBsZVdpbi5j
bWFrZQpAQCAtNTUsNyArNTUsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vV2ViVGlsZWRCYWNraW5nTGF5ZXJXaW4uY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1dLQ0FDRlZpZXdMYXllclRyZWVIb3N0LmNwcAogCi0g
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9Db2xvckNHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UG9p
bnRDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9GbG9hdFJlY3RDRy5jcHAKQEAgLTc1
LDYgKzc0LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvUERGRG9jdW1lbnRJbWFnZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9Q
YXRoQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGF0dGVybkNHLmNwcAorICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jZy9TdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL1RyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1BsYXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UK
aW5kZXggNTE0NTA0ZTZlYzI1YWE1ZTQzYjk5Mzk4ZDVlMzVjZWVlYTc2NmFhNC4uNjRhZTE3MTA4
OWRjYmYwY2Q0NWI3MGE5YjhmNzBlZmE5ZmZkZWRiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvUGxhdGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21h
a2UKQEAgLTEyMiw3ICsxMjIsNiBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybURpc3BsYXkuY3BwCiAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9JbXBsLmNwcAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
Rm9udENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZi
dXp6TkcuY3BwCkBAIC0xMzQsNiArMTMzLDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0aENhaXJvLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1BhdHRlcm5DYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9QbGF0Zm9ybUNvbnRleHRDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGxh
dGZvcm1QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUmVmUHRyQ2Fp
cm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vVHJhbnNmb3JtYXRpb25NYXRyaXhD
YWlyby5jcHAKQEAgLTE3OSw5ICsxNzksOSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3gxMS9YVW5pcXVlUmVzb3VyY2UuY3BwCiAKLSAgICBwbGF0Zm9ybS9p
bWFnZS1lbmNvZGVycy9KUEVHSW1hZ2VFbmNvZGVyLmNwcAorICAgIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcAogCi0gICAgcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCisgICAgcGxhdGZvcm0vaW1hZ2Ut
ZW5jb2RlcnMvSlBFR0ltYWdlRW5jb2Rlci5jcHAKIAogICAgIHBsYXRmb3JtL25ldHdvcmsvZWZs
L05ldHdvcmtTdGF0ZU5vdGlmaWVyRWZsLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUdUSy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCmlu
ZGV4IDY0NWFkZDFjZTM4ODg4YjA0ZDRhMmQ4OWFkYTBhN2M2ZGUxOTk4NmIuLmQzMWY1NzA2YTY5
NTliMjMxYjViZmIyMmYwN2QxODQzYWU4NjFhMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtl
CkBAIC0xMDEsNyArMTAxLDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CYWNraW5nU3RvcmVCYWNrZW5kQ2Fpcm9JbXBsLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0JhY2tpbmdTdG9yZUJhY2tlbmRDYWlyb1gxMS5j
cHAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9CaXRtYXBJbWFnZUNhaXJvLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0NhaXJvVXRpbGl0aWVzLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0Zsb2F0UmVjdENhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2NhaXJvL0ZvbnRDYWlyby5jcHAKQEAgLTExNSw2ICsxMTQsNyBAQCBsaXN0KEFQUEVORCBXZWJD
b3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtQ29udGV4dENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9QbGF0Zm9ybVBhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9SZWZQdHJDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1h
dGlvbk1hdHJpeENhaXJvLmNwcApAQCAtMTQ5LDcgKzE0OSw3IEBAIGxpc3QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCiAgICAg
cGxhdGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5jcHAKIAotICAgIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcAogCiAgICAgcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3RrL1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlR3RrLmNwcAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybU1hYy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
TWFjLmNtYWtlCmluZGV4IDlmNmY0OTZiNmNjNGVmNmU0Yjc0ZDg0YWMwYWE5ZGVhNTVhMDIzN2Iu
LjRkZGVkMzA4OGY0ZjM5NmZlZjQ0NGU3ZWU2NWM2NDEwNjU4ZjU4NDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1BsYXRmb3JtTWFjLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtTWFjLmNtYWtlCkBAIC0zOTcsNyArMzk3LDYgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VS
Q0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvV2ViU3lzdGVtQmFja2Ryb3BMYXll
ci5tbQogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1dlYlRpbGVkQmFja2luZ0xheWVy
Lm1tCiAKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0NvbG9yQ0cuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
RmxvYXRQb2ludENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UmVjdENHLmNw
cApAQCAtNDE3LDYgKzQxNiw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL1BERkRvY3VtZW50SW1hZ2UuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvUGF0aENHLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5j
cHAKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5jcHAKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9jZy9UcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1XaW5DYWlyby5jbWFrZQppbmRleCAyYzU1M2IwNTUxZGFkNjlhYTE5OWQ5NjBmNTUyMzQz
ZDkyMGYwN2IzLi4zNDJhYTkyNzMyZmQ4ZjkyZTg1Y2ZhNjI2ZDU1NTcwZWY2NmI2YTY4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKQEAgLTIxLDcgKzIxLDYgQEAgbGlzdChB
UFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR0xDb250ZXh0LmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAKIAotICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vQ2Fpcm9VdGlsaXRpZXMuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vRmxvYXRSZWN0Q2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENh
aXJvLmNwcApAQCAtMzQsNiArMzMsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QYXRoQ2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vUGF0dGVybkNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L1BsYXRmb3JtQ29udGV4dENhaXJvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Bs
YXRmb3JtSW1hZ2VDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9y
bVBhdGhDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9SZWZQdHJDYWlyby5j
cHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9UcmFuc2Zvcm1hdGlvbk1hdHJpeENhaXJv
LmNwcApAQCAtNDYsNyArNDYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAog
Ci0gICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3Bw
CisgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vQml0bWFwUGl4ZWxzQ2Fpcm8uY3Bw
CiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvblN0dWIuY3BwCiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCBjMTFiYzQ3ZTVjYWQ2MzBhMzY1N2NkZTFhZDlmN2I3NmEwYTU1YzY2Li5mZjJhNDk4YmE5
NmI4MWRhMDNmODFhMzAxYTg1YmUzNzRkMGVjNjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDg0LDcgKzE0ODQsNyBAQAog
CQkzNzVDRDIzMjExOUQ0M0M4MDBBMkE4NTkgLyogSHlwaGVuYXRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NUNEMjMxMTE5RDQzQzgwMEEyQTg1
OSAvKiBIeXBoZW5hdGlvbi5oICovOyB9OwogCQkzNzZEQ0NFMTEzQjRGOTY2MDAyRUJFRkMgLyog
VGV4dFJ1bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzNzZEQ0NFMDEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5jcHAgKi87IH07CiAJCTM3NzRB
QkE1MEZBMjFFQjQwMEFEN0RFOSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NzRBQkEzMEZBMjFFQjQw
MEFEN0RFOSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkzNzdBM0E5MDE1RUZDRTlCMDA1OUY1Qzcg
LyogQml0bWFwSW1hZ2VDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAzNzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogQml0bWFwSW1hZ2VDRy5jcHAg
Ki87IH07CisJCTM3N0EzQTkwMTVFRkNFOUIwMDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc3QTNBOEYx
NUVGQ0U5QTAwNTlGNUM3IC8qIFBsYXRmb3JtSW1hZ2VDRy5jcHAgKi87IH07CiAJCTM3OTE5QzIz
MEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3OTE5QzIxMEI3RDE4ODYwMEE1Njk5OCAv
KiBQb3NpdGlvbkl0ZXJhdG9yLmNwcCAqLzsgfTsKIAkJMzc5MTlDMjQwQjdEMTg4NjAwQTU2OTk4
IC8qIFBvc2l0aW9uSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDM3OTE5QzIyMEI3RDE4ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9y
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMzc5MjkxN0ExOTg1
RUYzOTAwRjRCNjYxIC8qIENyZWRlbnRpYWxCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzkyOTE3ODE5ODVFRjM5MDBGNEI2NjEgLyogQ3JlZGVu
dGlhbEJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwpAQCAtMjMyNSwxMCArMjMyNSwxNCBAQAogCQk1M0VEM0ZERjE2N0E4OEU3MDA2NzYyRTYgLyog
SlNJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVkLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1M0VEM0ZERDE2N0E4OEU3MDA2NzYyRTYgLyogSlNJbnRlcm5h
bFNldHRpbmdzR2VuZXJhdGVkLmggKi87IH07CiAJCTUzRUY3NjZCMTY1MzBBNjEwMDRDQkU0OSAv
KiBTZXR0aW5nc01hY3Jvcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTNFRjc2NkExNjUzMEE2MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi87
IH07CiAJCTUzRUY3NjZDMTY1MzE5OTQwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oIGluIENv
cHkgR2VuZXJhdGVkIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTNFRjc2NkExNjUzMEE2MTAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggKi87IH07CisJCTU1
MDRFNENCMUQzNTU3QjIwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1MDRFNENBMUQzNTUzMkQwMEZFNTA4OCAv
KiBCaXRtYXBQaXhlbHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk1NTBBMEJDOTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDNzA4
NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5jcHAgKi87IH07CiAJCTU1MEEwQkNBMDg1
RjYwMzkwMDczNTNENiAvKiBRdWFsaWZpZWROYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTBBMEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlm
aWVkTmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTU1NUI4N0VDMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTVCODdFQTFDQUFGMEFC
MDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovOyB9OwogCQk1NTVCODdFRDFDQUFGMEFC
MDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU1NUI4N0VCMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29k
ZXJDRy5oICovOyB9OworCQk1NTc0RjA4NzFEMDI3OTA5MDBCOUYxNEMgLyogUGxhdGZvcm1JbWFn
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU3NEYw
ODUxRDAyNzQ0NDAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1NUNCQTZBMTFEMURGMkUxMDA0NTE4NjAg
LyogSW1hZ2VGcmFtZURhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTVDQkE2OUYxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmNw
cCAqLzsgfTsKKwkJNTVDQkE2QTIxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUNCQTZBMDFE
MURGMkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NzJBN0YyMTFDNkU1NzE5MDA5QzYxNDkgLyog
U2ltdWxhdGVkQ2xpY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU3MkE3RjIwMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5oICovOyB9
OwogCQk1NzJBN0YyMzFDNkU1QTY2MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcyQTdGMjIxQzZFNUE2
NjAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmNwcCAqLzsgfTsKIAkJNTdFRjVFNjAxRDIwQzgz
OTAwMTcxRTYwIC8qIFRleHRDb2RlY1JlcGxhY2VtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0VGNUU1RjFEMjBDODM5MDAxNzFFNjAgLyogVGV4
dENvZGVjUmVwbGFjZW1lbnQuaCAqLzsgfTsKQEAgLTkwNjEsNyArOTA2NSw3IEBACiAJCTM3NkRD
Q0UwMTNCNEY5NjYwMDJFQkVGQyAvKiBUZXh0UnVuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFRleHRSdW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkzNzcyQjA5NTE2NTM1ODU2MDAwQTQ5Q0EgLyogUG9wdXBPcGVuaW5nT2JzZXJ2ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9wdXBPcGVuaW5nT2JzZXJ2ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc3NEFCQTMwRkEyMUVCNDAwQUQ3REU5IC8qIE92
ZXJsYXBUZXN0UmVxdWVzdENsaWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQml0bWFwSW1hZ2VDRy5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBQbGF0Zm9y
bUltYWdlQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGxhdGZv
cm1JbWFnZUNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc5MTlDMjEwQjdE
MTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFBvc2l0aW9uSXRlcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkzNzkxOUMyMjBCN0QxODg2MDBBNTY5OTggLyogUG9zaXRpb25JdGVyYXRv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9zaXRpb25JdGVyYXRvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzkyOTE3ODE5ODVFRjM5MDBGNEI2NjEg
LyogQ3JlZGVudGlhbEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ3Jl
ZGVudGlhbEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk5ODksMTAgKzk5
OTMsMTQgQEAKIAkJNTNFRDNGREMxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJuYWxTZXR0aW5n
c0dlbmVyYXRlZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0lu
dGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1M0VEM0ZERDE2N0E4OEU3MDA2NzYyRTYgLyogSlNJbnRlcm5hbFNldHRpbmdzR2VuZXJhdGVk
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSW50ZXJuYWxTZXR0aW5nc0dl
bmVyYXRlZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1M0VGNzY2QTE2NTMwQTYx
MDA0Q0JFNDkgLyogU2V0dGluZ3NNYWNyb3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2V0dGluZ3NNYWNyb3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTUw
NEU0Q0ExRDM1NTMyRDAwRkU1MDg4IC8qIEJpdG1hcFBpeGVscy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBC
aXRtYXBQaXhlbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTUwQTBCQzcwODVG
NjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1NTBB
MEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFsaWZpZWROYW1lLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk1NTVC
ODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VEZWNvZGVyQ0cuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVy
Q0cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VEZWNvZGVyQ0cuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTU3NEYwODUxRDAyNzQ0NDAwQjlGMTRDIC8q
IFBsYXRmb3JtSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1JbWFnZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1NUNCQTY5RjFEMURGMkUxMDA0NTE4NjAgLyogSW1hZ2VG
cmFtZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VG
cmFtZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NUNCQTZBMDFEMURG
MkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW1hZ2VGcmFtZURhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTVENDA4RjcxQTdDNjMxODAwQzc4NDUwIC8qIFNWR0ltYWdlQ2xpZW50cy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdJbWFnZUNsaWVudHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTcyQTdGMjAxQzZFNTcxOTAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNr
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXVsYXRlZENsaWNrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MkE3RjIyMUM2RTVBNjYwMDlDNjE0OSAvKiBT
aW11bGF0ZWRDbGljay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
aW11bGF0ZWRDbGljay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjAyNCw3
ICsyMjAzMiw2IEBACiAJCUIyNzUzNTI5MEIwNTM4MTQwMDJDRTY0RiAvKiBjZyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMzc3QTNBOEYxNUVGQ0U5QTAw
NTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovLAogCQkJCTBGQ0YzMzIzMEYyQjk3MTUwMDRC
Njc5NSAvKiBDb2xvckNHLmNwcCAqLywKIAkJCQlCMjc1MzUyQjBCMDUzODE0MDAyQ0U2NEYgLyog
RmxvYXRQb2ludENHLmNwcCAqLywKIAkJCQlCMjc1MzUyQzBCMDUzODE0MDAyQ0U2NEYgLyogRmxv
YXRSZWN0Q0cuY3BwICovLApAQCAtMjIwNTEsNiArMjIwNTgsNyBAQAogCQkJCUE4MEEzOEZEMEU1
MENDODIwMEEyNUVCQyAvKiBQYXR0ZXJuQ0cuY3BwICovLAogCQkJCUIyNzUzNTM2MEIwNTM4MTQw
MDJDRTY0RiAvKiBQREZEb2N1bWVudEltYWdlLmNwcCAqLywKIAkJCQlCMjc1MzUzNzBCMDUzODE0
MDAyQ0U2NEYgLyogUERGRG9jdW1lbnRJbWFnZS5oICovLAorCQkJCTM3N0EzQThGMTVFRkNFOUEw
MDU5RjVDNyAvKiBQbGF0Zm9ybUltYWdlQ0cuY3BwICovLAogCQkJCTFGQzQwRkI4MTY1NUM1OTEw
MDQwRjI5RSAvKiBTdWJpbWFnZUNhY2hlV2l0aFRpbWVyLmNwcCAqLywKIAkJCQkxRkM0MEZCNzE2
NTVDNTkxMDA0MEYyOUUgLyogU3ViaW1hZ2VDYWNoZVdpdGhUaW1lci5oICovLAogCQkJCUIyNzUz
NTJBMEIwNTM4MTQwMDJDRTY0RiAvKiBUcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcCAqLywKQEAg
LTIyMTE4LDYgKzIyMTI2LDcgQEAKIAkJCQlCRUYyOUVFOTE3MTVERDA5MDBDNEI0QzkgLyogQXVk
aW9UcmFja1ByaXZhdGUuaCAqLywKIAkJCQlBODk5NDMyNzBCNDIzMzg3MDBEN0M4MDIgLyogQml0
bWFwSW1hZ2UuY3BwICovLAogCQkJCUE4OTk0MzI2MEI0MjMzODcwMEQ3QzgwMiAvKiBCaXRtYXBJ
bWFnZS5oICovLAorCQkJCTU1MDRFNENBMUQzNTUzMkQwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMu
aCAqLywKIAkJCQlDRERFMDJFOTE4QjNERkM3MDBDRjdGRjEgLyogQ0RNU2Vzc2lvbi5oICovLAog
CQkJCUIyNzUzNTM4MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5jcHAgKi8sCiAJCQkJQjI3NTM1
MzkwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmggKi8sCkBAIC0yMjIwMiw2ICsyMjIxMSw4IEBA
CiAJCQkJNDNEMjU5NzYxM0M4MTZGNDAwNjA4NTU5IC8qIEltYWdlQnVmZmVyLmNwcCAqLywKIAkJ
CQlCMkExMEI5MTBCMzgxOEJEMDAwOTlBQTQgLyogSW1hZ2VCdWZmZXIuaCAqLywKIAkJCQkyMkJE
OUY3RDEzNTM2MjVDMDA5QkQxMDIgLyogSW1hZ2VCdWZmZXJEYXRhLmggKi8sCisJCQkJNTVDQkE2
OUYxRDFERjJFMTAwNDUxODYwIC8qIEltYWdlRnJhbWVEYXRhLmNwcCAqLywKKwkJCQk1NUNCQTZB
MDFEMURGMkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCAqLywKIAkJCQlCQzdGNDRBNzBC
OUUzMjRFMDBBOUQwODEgLyogSW1hZ2VPYnNlcnZlci5oICovLAogCQkJCUE4NzQ4RDc0MTJDQzNG
ODkwMDFGQkE0MSAvKiBJbWFnZU9yaWVudGF0aW9uLmNwcCAqLywKIAkJCQlBODc0OEQ2NjEyQ0Mz
NzYzMDAxRkJBNDEgLyogSW1hZ2VPcmllbnRhdGlvbi5oICovLApAQCAtMjIyNTEsNiArMjIyNjIs
NyBAQAogCQkJCTJENTAwMkZBMUI1NkQ3OTkwMDIwQUFGNyAvKiBQYXRoVXRpbGl0aWVzLmggKi8s
CiAJCQkJQThGQTZFNUMwRTRDRkRFRDAwRDVDRjQ5IC8qIFBhdHRlcm4uY3BwICovLAogCQkJCUE4
RkE2RTVCMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggKi8sCisJCQkJNTU3NEYwODUxRDAy
NzQ0NDAwQjlGMTRDIC8qIFBsYXRmb3JtSW1hZ2UuaCAqLywKIAkJCQkwNTYyRjk2MDE1NzNGODhG
MDAzMUNBMTYgLyogUGxhdGZvcm1MYXllci5oICovLAogCQkJCUNFRUZDRDdCMTlEQjMzREMwMDM4
NzZENyAvKiBQbGF0Zm9ybU1lZGlhUmVzb3VyY2VMb2FkZXIuaCAqLywKIAkJCQkwNzI4NDdFMjE2
RUJDNUIwMDA0M0NGQTQgLyogUGxhdGZvcm1UZXh0VHJhY2suaCAqLywKQEAgLTI2MDE4LDYgKzI2
MDMwLDcgQEAKIAkJCQk4NUU3MTFCOTBBQzVENTM1MDA1MzI3MEYgLyogRE9NSFRNTE1hcEVsZW1l
bnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1MTU3OUYwQzAzQkJEMzAwOEJCMEVF
IC8qIERPTUhUTUxNYXJxdWVlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM1MTU2RUEw
QzAzQjc0MTAwOEJCMEVFIC8qIERPTUhUTUxNYXJxdWVlRWxlbWVudEludGVybmFsLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk1NTc0RjA4NzFEMDI3OTA5MDBCOUYxNEMgLyogUGxhdGZvcm1JbWFnZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMkRFQzY2NTUxQzgyRDA0MTAwOTk4NDZBIC8qIERPTUhUTUxN
ZWRpYUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJERUM2NjUxMUM4MkQwMTYwMDk5ODQ2
QSAvKiBET01IVE1MTWVkaWFFbGVtZW50SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1
QkE0RDEzMEFBNjg4NjgwMDg4MDUyRCAvKiBET01IVE1MTWVudUVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjY0NTksNiArMjY0NzIsNyBAQAogCQkJCUQzNTlENzhBMTI5Q0EyNzEwMDA2RTVE
MiAvKiBIVE1MRGV0YWlsc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RUE3OUZBMEEx
OTE2REYwMEE4RUY1RiAvKiBIVE1MRGlyZWN0b3J5RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThFQTdDQjcwQTE5MkI5QzAwQThFRjVGIC8qIEhUTUxEaXZFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk1NUNCQTZBMjFEMURGMkUxMDA0NTE4NjAgLyogSW1hZ2VGcmFtZURhdGEuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4RUE3OUY3MEExOTE2REYwMEE4RUY1RiAvKiBIVE1MRExpc3RF
bGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOThFNTA4MjQ1RTU5MDAxRTlBQkMgLyog
SFRNTERvY3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzdCMzg2NzEyMjg4M0U5MDBCODFG
RjggLyogSFRNTERvY3VtZW50UGFyc2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTI4MzU5LDYgKzI4
MzczLDcgQEAKIAkJCQlCMjIyNzk5MzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHQW5pbWF0ZU1vdGlv
bkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OTk1MEQwMEJGMjIwMDcxQjc4MiAv
KiBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5
OTgwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0FuaW1hdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTU1MDRFNENCMUQzNTU3QjIwMEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTQzOUQzMzQ1MTNBNjkxMUMwMEMyMEY0RiAvKiBTVkdBbmltYXRvckZhY3Rv
cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4RkIzRjg0MTNCQzc1NEMwMDk5RkMxOCAvKiBTVkdB
dHRyaWJ1dGVUb1Byb3BlcnR5TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk5QzBEMDBC
RjIyMDA3MUI3ODIgLyogU1ZHQ2lyY2xlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yOTQx
MSw3ICsyOTQyNiw3IEBACiAJCQkJRkRDNTRGMDQxMzk5QjBEQTAwOEQ5MTE3IC8qIEJpcXVhZEZp
bHRlck5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQzMTYwMjYxMkIwMjY3NjAwQzFBMzU5
IC8qIEJpcXVhZFByb2Nlc3Nvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODk5NDMyOTBCNDIz
Mzg4MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMzc3QTNB
OTAxNUVGQ0U5QjAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3IC8qIFBsYXRmb3JtSW1hZ2VDRy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5NzZENkM3ODEyMkI4QTNEMDAxRkQxRjcgLyogQmxvYi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkyRURFRjFGMzEyMUIwRUZDMDA3MjZEQjIgLyogQmxvYkRhdGEuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRTFEMzFDREMxOTE5NjAyMDAwMTAwNUEzIC8qIEJsb2JEYXRhRmls
ZVJlZmVyZW5jZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5Nzc0LDYgKzI5Nzg5LDcgQEAKIAkJ
CQkyRTJEOTlFODEwRTJCQzFDMDA0OTYzMzcgLyogRE9NQmxvYi5tbSBpbiBTb3VyY2VzICovLAog
CQkJCTg1MDg5Q0Q4MEE5OEM0MjgwMEEyNzVBQSAvKiBET01DREFUQVNlY3Rpb24ubW0gaW4gU291
cmNlcyAqLywKIAkJCQk4NUFDQTk4NzBBOUI1MjAzMDA2NzFFOTAgLyogRE9NQ2hhcmFjdGVyRGF0
YS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTU1Q0JBNkExMUQxREYyRTEwMDQ1MTg2MCAvKiBJbWFn
ZUZyYW1lRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NTA4OUNEQTBBOThDNDI4MDBBMjc1
QUEgLyogRE9NQ29tbWVudC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTk3OEQwN0JFMTQ1QTBGNkMw
MDk2OTA4RCAvKiBET01Db3JlRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg1OEMz
OEE2MEFBOEYyMDQwMEIxODdBNCAvKiBET01Db3VudGVyLm1tIGluIFNvdXJjZXMgKi8sCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9vYmpjL0RPTS5tbSBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCmluZGV4IDQwMTFlYTNmZDhjMDQ2OTc0YzU1ZDQ4ZTM5
NmYxYjgzYjgxZjMzNWQuLmE1YWM0ZjA1YWUzMzlhOGQ2NDcwNmMxMGZjMGY3YWY0MDQyNTYyM2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvRE9NLm1tCkBAIC02MDYsNyArNjA2LDcgQEAgLSAo
dm9pZClnZXRQcmV2aWV3U25hcHNob3RJbWFnZTooQ0dJbWFnZVJlZiopY2dJbWFnZSBhbmRSZWN0
czooTlNBcnJheSAqKilyZWN0cwogCiAgICAgaWYgKHRleHRJbmRpY2F0b3IpIHsKICAgICAgICAg
aWYgKEltYWdlKiBpbWFnZSA9IHRleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpKQotICAgICAg
ICAgICAgKmNnSW1hZ2UgPSAoQ0dJbWFnZVJlZilDRkF1dG9yZWxlYXNlKENHSW1hZ2VSZXRhaW4o
aW1hZ2UtPmdldENHSW1hZ2VSZWYoKSkpOworICAgICAgICAgICAgKmNnSW1hZ2UgPSBpbWFnZS0+
bmF0aXZlSW1hZ2UoKS5hdXRvcmVsZWFzZSgpOwogICAgIH0KIAogICAgIFJldGFpblB0cjxOU011
dGFibGVBcnJheT4gcmVjdEFycmF5ID0gYWRvcHROUyhbW05TTXV0YWJsZUFycmF5IGFsbG9jXSBp
bml0XSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9y
V2luZG93Lm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9tYWMvVGV4dEluZGljYXRvcldpbmRvdy5t
bQppbmRleCAzNjRhOWE4N2NlNmYwNjYzOTQ4Yjg4NDZlOGUyY2U2ZDE5MGYyNDg5Li5hNzRkYTg1
YWNlY2EzYzY2OThkZDE1NmFiMzFhNmM5NzFhMzU0ZTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL21hYy9UZXh0SW5kaWNhdG9yV2luZG93Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvbWFjL1RleHRJbmRpY2F0b3JXaW5kb3cubW0KQEAgLTE2Miw5ICsxNjIsOSBAQCAtIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooTlNSZWN0KWZyYW1lIHRleHRJbmRpY2F0b3I6KFBh
c3NSZWZQdHI8VGV4dEluZGljYQogICAgIGNvbnRlbnRzSW1hZ2VMb2dpY2FsU2l6ZS5zY2FsZSgx
IC8gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZVNjYWxlRmFjdG9yKCkpOwogICAgIFJldGFp
blB0cjxDR0ltYWdlUmVmPiBjb250ZW50c0ltYWdlOwogICAgIGlmIChpbmRpY2F0b3JXYW50c0Nv
bnRlbnRDcm9zc2ZhZGUoKl90ZXh0SW5kaWNhdG9yKSkKLSAgICAgICAgY29udGVudHNJbWFnZSA9
IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1hZ2VXaXRoSGlnaGxpZ2h0KCktPmdldENHSW1hZ2VS
ZWYoKTsKKyAgICAgICAgY29udGVudHNJbWFnZSA9IF90ZXh0SW5kaWNhdG9yLT5jb250ZW50SW1h
Z2VXaXRoSGlnaGxpZ2h0KCktPm5hdGl2ZUltYWdlKCk7CiAgICAgZWxzZQotICAgICAgICBjb250
ZW50c0ltYWdlID0gX3RleHRJbmRpY2F0b3ItPmNvbnRlbnRJbWFnZSgpLT5nZXRDR0ltYWdlUmVm
KCk7CisgICAgICAgIGNvbnRlbnRzSW1hZ2UgPSBfdGV4dEluZGljYXRvci0+Y29udGVudEltYWdl
KCktPm5hdGl2ZUltYWdlKCk7CiAKICAgICBSZXRhaW5QdHI8TlNNdXRhYmxlQXJyYXk+IGJvdW5j
ZUxheWVycyA9IGFkb3B0TlMoW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF0pOwogCkBAIC0y
NjUsNyArMjY1LDcgQEAgc3RhdGljIFJldGFpblB0cjxDQUtleWZyYW1lQW5pbWF0aW9uPiBjcmVh
dGVCb3VuY2VBbmltYXRpb24oQ0ZUaW1lSW50ZXJ2YWwgZHVyYXQKIHN0YXRpYyBSZXRhaW5QdHI8
Q0FCYXNpY0FuaW1hdGlvbj4gY3JlYXRlQ29udGVudENyb3NzZmFkZUFuaW1hdGlvbihDRlRpbWVJ
bnRlcnZhbCBkdXJhdGlvbiwgVGV4dEluZGljYXRvciYgdGV4dEluZGljYXRvcikKIHsKICAgICBS
ZXRhaW5QdHI8Q0FCYXNpY0FuaW1hdGlvbj4gY3Jvc3NmYWRlQW5pbWF0aW9uID0gW0NBQmFzaWNB
bmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6QCJjb250ZW50cyJdOwotICAgIFJldGFpblB0
cjxDR0ltYWdlUmVmPiBjb250ZW50c0ltYWdlID0gdGV4dEluZGljYXRvci5jb250ZW50SW1hZ2Uo
KS0+Z2V0Q0dJbWFnZVJlZigpOworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb250ZW50c0lt
YWdlID0gdGV4dEluZGljYXRvci5jb250ZW50SW1hZ2UoKS0+bmF0aXZlSW1hZ2UoKTsKICAgICBb
Y3Jvc3NmYWRlQW5pbWF0aW9uIHNldFRvVmFsdWU6KGlkKWNvbnRlbnRzSW1hZ2UuZ2V0KCldOwog
ICAgIFtjcm9zc2ZhZGVBbmltYXRpb24gc2V0RmlsbE1vZGU6a0NBRmlsbE1vZGVGb3J3YXJkc107
CiAgICAgW2Nyb3NzZmFkZUFuaW1hdGlvbiBzZXRSZW1vdmVkT25Db21wbGV0aW9uOk5PXTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcAppbmRl
eCA0NjBkMWI4NTZiNzdiN2NmNGVjNjg5NjU4MWI4MzNkM2U3Zjk3MDE0Li5mYzY0OWQxMGFhYjlj
MTNmZmYyOTMwNTVhNzA3Y2I3NDUzNzQ2OTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwCkBAIC02OCwxNSArNjgsMTMgQEAgQml0bWFw
SW1hZ2U6OkJpdG1hcEltYWdlKE5hdGl2ZUltYWdlUHRyJiYgaW1hZ2UsIEltYWdlT2JzZXJ2ZXIq
IG9ic2VydmVyKQogICAgICwgbV9oYXZlRnJhbWVDb3VudCh0cnVlKQogICAgICwgbV9hbmltYXRp
b25GaW5pc2hlZFdoZW5DYXRjaGluZ1VwKGZhbHNlKQogeworICAgIG1fZnJhbWVzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoMSk7CisgICAgbV9mcmFtZXMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUo
aW1hZ2UpKTsKKyAgICAKICAgICAvLyBTaW5jZSB3ZSBkb24ndCBoYXZlIGEgZGVjb2Rlciwgd2Ug
Y2FuJ3QgZmlndXJlIG91dCB0aGUgaW1hZ2Ugb3JpZW50YXRpb24uCiAgICAgLy8gU2V0IG1fc2l6
ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiB0byBiZSB0aGUgc2FtZSBhcyBtX3NpemUgc28gaXQncyBu
b3QgMHgwLgotICAgIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiA9IG1fc2l6ZSA9IE5hdGl2
ZUltYWdlOjpzaXplKGltYWdlKTsKKyAgICBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBt
X3NpemUgPSBtX2ZyYW1lc1swXS5zaXplKCk7CiAgICAgbV9kZWNvZGVkU2l6ZSA9IG1fc2l6ZS5h
cmVhKCkgKiA0OwotICAgIAotICAgIG1fZnJhbWVzLmdyb3coMSk7Ci0gICAgbV9mcmFtZXNbMF0u
bV9oYXNBbHBoYSA9IE5hdGl2ZUltYWdlOjpoYXNBbHBoYShpbWFnZSk7Ci0gICAgbV9mcmFtZXNb
MF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOwotICAgIG1fZnJhbWVzWzBdLm1faW1hZ2UgPSBXVEZN
b3ZlKGltYWdlKTsKIH0KIAogQml0bWFwSW1hZ2U6On5CaXRtYXBJbWFnZSgpCkBAIC0xMDUsNyAr
MTAzLDcgQEAgYm9vbCBCaXRtYXBJbWFnZTo6aGF2ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBp
bmRleCkKICAgICBpZiAoaW5kZXggPj0gbV9mcmFtZXMuc2l6ZSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2U7CisgICAgcmV0dXJu
IG1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpOwogfQogCiBib29sIEJpdG1hcEltYWdlOjpoYXNT
aW5nbGVTZWN1cml0eU9yaWdpbigpIGNvbnN0CkBAIC0xMjUsOSArMTIzLDcgQEAgdm9pZCBCaXRt
YXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhKGJvb2wgZGVzdHJveUFsbCkKICAgICAgICAgLy8g
VGhlIHVuZGVybHlpbmcgZnJhbWUgaXNuJ3QgYWN0dWFsbHkgY2hhbmdpbmcgKHdlJ3JlIGp1c3Qg
dHJ5aW5nIHRvCiAgICAgICAgIC8vIHNhdmUgdGhlIG1lbW9yeSBmb3IgdGhlIGZyYW1lYnVmZmVy
IGRhdGEpLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNsZWFyCiAgICAgICAgIC8vIHRoZSBtZXRhZGF0
YS4KLSAgICAgICAgdW5zaWduZWQgZnJhbWVCeXRlcyA9IG1fZnJhbWVzW2ldLm1fZnJhbWVCeXRl
czsKLSAgICAgICAgaWYgKG1fZnJhbWVzW2ldLmNsZWFyKGZhbHNlKSkKLSAgICAgICAgICAgIGZy
YW1lQnl0ZXNDbGVhcmVkICs9IGZyYW1lQnl0ZXM7CisgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVk
ICs9IG1fZnJhbWVzW2ldLmNsZWFyKEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRhZGF0YSk7
CiAgICAgfQogCiAgICAgbV9zb3VyY2UuY2xlYXIoZGVzdHJveUFsbCwgY2xlYXJCZWZvcmVGcmFt
ZSwgZGF0YSgpLCBtX2FsbERhdGFSZWNlaXZlZCk7CkBAIC0xNTAsOCArMTQ2LDggQEAgdm9pZCBC
aXRtYXBJbWFnZTo6ZGVzdHJveURlY29kZWREYXRhSWZOZWNlc3NhcnkoYm9vbCBkZXN0cm95QWxs
KQogICAgICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBhbGxGcmFtZUJ5dGVzID0gMDsKLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fZnJhbWVzLnNpemUoKTsgKytpKQotICAgICAgICBh
bGxGcmFtZUJ5dGVzICs9IG1fZnJhbWVzW2ldLnVzZWRGcmFtZUJ5dGVzKCk7CisgICAgZm9yIChh
dXRvJiBmcmFtZSA6IG1fZnJhbWVzKQorICAgICAgICBhbGxGcmFtZUJ5dGVzICs9IGZyYW1lLmZy
YW1lQnl0ZXMoKTsKIAogICAgIGlmIChhbGxGcmFtZUJ5dGVzID4gbGFyZ2VBbmltYXRpb25DdXRv
ZmYpIHsKICAgICAgICAgTE9HKEltYWdlcywgIkJpdG1hcEltYWdlICVwIGRlc3Ryb3lEZWNvZGVk
RGF0YUlmTmVjZXNzYXJ5IGRlc3Ryb3lpbmdEYXRhOiBhbGxGcmFtZUJ5dGVzPSV1IGN1dG9mZj0l
dSIsIHRoaXMsIGFsbEZyYW1lQnl0ZXMsIGxhcmdlQW5pbWF0aW9uQ3V0b2ZmKTsKQEAgLTE3Nyw3
ICsxNzMsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkZXN0cm95TWV0YWRhdGFBbmROb3RpZnkodW5z
aWduZWQgZnJhbWVCeXRlc0NsZWFyZWQsIENsZWFyZWRTbwogICAgICAgICBpbWFnZU9ic2VydmVy
KCktPmRlY29kZWRTaXplQ2hhbmdlZCh0aGlzLCAtc2FmZUNhc3Q8aW50PihmcmFtZUJ5dGVzQ2xl
YXJlZCkpOwogfQogCi12b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwg
U3Vic2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lQ2FjaGluZyBmcmFt
ZUNhY2hpbmcpCit2b2lkIEJpdG1hcEltYWdlOjpjYWNoZUZyYW1lKHNpemVfdCBpbmRleCwgU3Vi
c2FtcGxpbmdMZXZlbCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyBj
YWNoaW5nKQogewogICAgIHNpemVfdCBudW1GcmFtZXMgPSBmcmFtZUNvdW50KCk7CiAgICAgQVNT
RVJUKG1fZGVjb2RlZFNpemUgPT0gMCB8fCBudW1GcmFtZXMgPiAxKTsKQEAgLTE4NSwyNSArMTgx
LDEyIEBAIHZvaWQgQml0bWFwSW1hZ2U6OmNhY2hlRnJhbWUoc2l6ZV90IGluZGV4LCBTdWJzYW1w
bGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIEltCiAgICAgaWYgKG1fZnJhbWVzLnNpemUoKSA8
IG51bUZyYW1lcykKICAgICAgICAgbV9mcmFtZXMuZ3JvdyhudW1GcmFtZXMpOwogCi0gICAgaWYg
KGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhQW5kRnJhbWUpIHsKLSAgICAgICAgbV9mcmFt
ZXNbaW5kZXhdLm1faW1hZ2UgPSBtX3NvdXJjZS5jcmVhdGVGcmFtZUltYWdlQXRJbmRleChpbmRl
eCwgc3Vic2FtcGxpbmdMZXZlbCk7Ci0gICAgICAgIG1fZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBs
aW5nTGV2ZWwgPSBzdWJzYW1wbGluZ0xldmVsOwotICAgIH0KLQotICAgIG1fZnJhbWVzW2luZGV4
XS5tX29yaWVudGF0aW9uID0gbV9zb3VyY2Uub3JpZW50YXRpb25BdEluZGV4KGluZGV4KTsKLSAg
ICBtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOwotICAgIG1fZnJhbWVzW2lu
ZGV4XS5tX2lzQ29tcGxldGUgPSBtX3NvdXJjZS5mcmFtZUlzQ29tcGxldGVBdEluZGV4KGluZGV4
KTsKKyAgICBtX2ZyYW1lc1tpbmRleF0gPSBtX3NvdXJjZS5jcmVhdGVGcmFtZURhdGFBdEluZGV4
KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsLCBjYWNoaW5nKTsKIAotICAgIGlmIChyZXBldGl0aW9u
Q291bnQoZmFsc2UpICE9IGNBbmltYXRpb25Ob25lKQotICAgICAgICBtX2ZyYW1lc1tpbmRleF0u
bV9kdXJhdGlvbiA9IG1fc291cmNlLmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KTsKKyAgICBM
T0coSW1hZ2VzLCAiQml0bWFwSW1hZ2UgJXAgY2FjaGVGcmFtZSAlbHUgKCVzJXUgYnl0ZXMsIGNv
bXBsZXRlICVkKSIsIHRoaXMsIGluZGV4LCBjYWNoaW5nID09IEltYWdlRnJhbWVEYXRhOjpDYWNo
aW5nOjpNZXRhZGF0YSA/ICJtZXRhZGF0YSBvbmx5LCAiIDogIiIsIG1fZnJhbWVzW2luZGV4XS5m
cmFtZUJ5dGVzKCksIG1fZnJhbWVzW2luZGV4XS5pc0NvbXBsZXRlKCkpOwogCi0gICAgbV9mcmFt
ZXNbaW5kZXhdLm1faGFzQWxwaGEgPSBtX3NvdXJjZS5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRl
eCk7Ci0gICAgbV9mcmFtZXNbaW5kZXhdLm1fZnJhbWVCeXRlcyA9IG1fc291cmNlLmZyYW1lQnl0
ZXNBdEluZGV4KGluZGV4LCBzdWJzYW1wbGluZ0xldmVsKTsKLQotICAgIExPRyhJbWFnZXMsICJC
aXRtYXBJbWFnZSAlcCBjYWNoZUZyYW1lICVsdSAoJXMldSBieXRlcywgY29tcGxldGUgJWQpIiwg
dGhpcywgaW5kZXgsIGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1ldGFkYXRhT25seSA/ICJtZXRhZGF0
YSBvbmx5LCAiIDogIiIsIG1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXMsIG1fZnJhbWVzW2lu
ZGV4XS5tX2lzQ29tcGxldGUpOwotCi0gICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKSB7
Ci0gICAgICAgIGludCBkZWx0YUJ5dGVzID0gc2FmZUNhc3Q8aW50PihtX2ZyYW1lc1tpbmRleF0u
bV9mcmFtZUJ5dGVzKTsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhdLmhhc0ltYWdlKCkpIHsKKyAg
ICAgICAgaW50IGRlbHRhQnl0ZXMgPSBzYWZlQ2FzdDxpbnQ+KG1fZnJhbWVzW2luZGV4XS5mcmFt
ZUJ5dGVzKCkpOwogICAgICAgICBtX2RlY29kZWRTaXplICs9IGRlbHRhQnl0ZXM7CiAgICAgICAg
IC8vIFRoZSBmdWxseS1kZWNvZGVkIGZyYW1lIHdpbGwgc3Vic3VtZSB0aGUgcGFydGlhbGx5IGRl
Y29kZWQgZGF0YSB1c2VkCiAgICAgICAgIC8vIHRvIGRldGVybWluZSBpbWFnZSBwcm9wZXJ0aWVz
LgpAQCAtMjg4LDIxICsyNzEsMTkgQEAgYm9vbCBCaXRtYXBJbWFnZTo6ZGF0YUNoYW5nZWQoYm9v
bCBhbGxEYXRhUmVjZWl2ZWQpCiAgICAgLy8gZnJhbWUgYWZmZWN0ZWQgYnkgYXBwZW5kaW5nIG5l
dyBkYXRhIGhlcmUuIFRodXMgd2UgaGF2ZSB0byBjbGVhciBhbGwgdGhlCiAgICAgLy8gaW5jb21w
bGV0ZSBmcmFtZXMgdG8gYmUgc2FmZS4KICAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzQ2xlYXJlZCA9
IDA7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2ZyYW1lcy5zaXplKCk7ICsraSkgewor
ICAgIGZvciAoYXV0byYgZnJhbWUgOiBtX2ZyYW1lcykgewogICAgICAgICAvLyBOT1RFOiBEb24n
dCBjYWxsIGZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoKSBoZXJlLCB0aGF0IHdpbGwgdHJ5IHRvCiAg
ICAgICAgIC8vIGRlY29kZSBhbnkgdW5jYWNoZWQgKGkuZS4gbmV2ZXItZGVjb2RlZCBvcgogICAg
ICAgICAvLyBjbGVhcmVkLW9uLWEtcHJldmlvdXMtcGFzcykgZnJhbWVzIQotICAgICAgICB1bnNp
Z25lZCBmcmFtZUJ5dGVzID0gbV9mcmFtZXNbaV0ubV9mcmFtZUJ5dGVzOwotICAgICAgICBpZiAo
bV9mcmFtZXNbaV0ubV9oYXZlTWV0YWRhdGEgJiYgIW1fZnJhbWVzW2ldLm1faXNDb21wbGV0ZSkK
LSAgICAgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IChtX2ZyYW1lc1tpXS5jbGVhcih0cnVl
KSA/IGZyYW1lQnl0ZXMgOiAwKTsKKyAgICAgICAgaWYgKGZyYW1lLmhhc01ldGFkYXRhKCkgJiYg
IWZyYW1lLmlzQ29tcGxldGUoKSkKKyAgICAgICAgICAgIGZyYW1lQnl0ZXNDbGVhcmVkICs9IGZy
YW1lLmNsZWFyKEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpFbXB0eSk7CiAgICAgfQogICAgIGRl
c3Ryb3lNZXRhZGF0YUFuZE5vdGlmeShmcmFtZUJ5dGVzQ2xlYXJlZCwgQ2xlYXJlZFNvdXJjZTo6
Tm8pOwogI2Vsc2UKICAgICAvLyBGSVhNRTogd2h5IGlzIHRoaXMgZGlmZmVyZW50IGZvciBpT1M/
CiAgICAgaW50IGRlbHRhQnl0ZXMgPSAwOwogICAgIGlmICghbV9mcmFtZXMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGludCBieXRlcyA9IG1fZnJhbWVzW21fZnJhbWVzLnNpemUoKSAtIDFdLm1fZnJh
bWVCeXRlczsKLSAgICAgICAgaWYgKG1fZnJhbWVzW21fZnJhbWVzLnNpemUoKSAtIDFdLmNsZWFy
KHRydWUpKSB7CisgICAgICAgIGlmIChpbnQgYnl0ZXMgPSBtX2ZyYW1lc1ttX2ZyYW1lcy5zaXpl
KCkgLSAxXS5jbGVhcihJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6RW1wdHkpKSB7CiAgICAgICAg
ICAgICBkZWx0YUJ5dGVzICs9IGJ5dGVzOwogICAgICAgICAgICAgZGVsdGFCeXRlcyArPSBtX2Rl
Y29kZWRQcm9wZXJ0aWVzU2l6ZTsKICAgICAgICAgICAgIG1fZGVjb2RlZFByb3BlcnRpZXNTaXpl
ID0gMDsKQEAgLTM2NiwxNSArMzQ3LDE1IEBAIGJvb2wgQml0bWFwSW1hZ2U6OmlzU2l6ZUF2YWls
YWJsZSgpCiAgICAgcmV0dXJuIG1fc2l6ZUF2YWlsYWJsZTsKIH0KIAotYm9vbCBCaXRtYXBJbWFn
ZTo6ZW5zdXJlRnJhbWVJc0NhY2hlZChzaXplX3QgaW5kZXgsIEltYWdlRnJhbWVDYWNoaW5nIGZy
YW1lQ2FjaGluZykKK2Jvb2wgQml0bWFwSW1hZ2U6OmVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90
IGluZGV4LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyBjYWNoaW5nKQogewogICAgIGlmIChpbmRl
eCA+PSBmcmFtZUNvdW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChpbmRl
eCA+PSBtX2ZyYW1lcy5zaXplKCkKLSAgICAgICAgfHwgKGZyYW1lQ2FjaGluZyA9PSBDYWNoZU1l
dGFkYXRhQW5kRnJhbWUgJiYgIW1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKQotICAgICAgICB8fCAo
ZnJhbWVDYWNoaW5nID09IENhY2hlTWV0YWRhdGFPbmx5ICYmICFtX2ZyYW1lc1tpbmRleF0ubV9o
YXZlTWV0YWRhdGEpKQotICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwLCBmcmFtZUNhY2hpbmcp
OworICAgICAgICB8fCAoY2FjaGluZyA9PSBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRh
dGFBbmRJbWFnZSAmJiAhbV9mcmFtZXNbaW5kZXhdLmhhc0ltYWdlKCkpCisgICAgICAgIHx8IChj
YWNoaW5nID09IEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRhZGF0YSAmJiAhbV9mcmFtZXNb
aW5kZXhdLmhhc01ldGFkYXRhKCkpKQorICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCAwLCBjYWNo
aW5nKTsKIAogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMzg4LDEwICszNjksOSBAQCBOYXRpdmVJ
bWFnZVB0ciBCaXRtYXBJbWFnZTo6ZnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4LCBmbG9h
dCBwcmVzZW50YXRpb25TYwogCiAgICAgLy8gV2UgbWF5IGhhdmUgY2FjaGVkIGEgZnJhbWUgd2l0
aCBhIGhpZ2hlciBzdWJzYW1wbGluZyBsZXZlbCwgaW4gd2hpY2ggY2FzZSB3ZSBuZWVkIHRvCiAg
ICAgLy8gcmUtZGVjb2RlIHdpdGggYSBsb3dlciBsZXZlbC4KLSAgICBpZiAoaW5kZXggPCBtX2Zy
YW1lcy5zaXplKCkgJiYgbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2UgJiYgc3Vic2FtcGxpbmdMZXZl
bCA8IG1fZnJhbWVzW2luZGV4XS5tX3N1YnNhbXBsaW5nTGV2ZWwpIHsKKyAgICBpZiAoaW5kZXgg
PCBtX2ZyYW1lcy5zaXplKCkgJiYgbV9mcmFtZXNbaW5kZXhdLmhhc0ltYWdlKCkgJiYgc3Vic2Ft
cGxpbmdMZXZlbCA8IG1fZnJhbWVzW2luZGV4XS5zdWJzYW1wbGluZ0xldmVsKCkpIHsKICAgICAg
ICAgLy8gSWYgdGhlIGltYWdlIGlzIGFscmVhZHkgY2FjaGVkLCBidXQgYXQgdG9vIHNtYWxsIGEg
c2l6ZSwgcmUtZGVjb2RlIGEgbGFyZ2VyIHZlcnNpb24uCi0gICAgICAgIGludCBzaXplQ2hhbmdl
ID0gLW1fZnJhbWVzW2luZGV4XS5tX2ZyYW1lQnl0ZXM7Ci0gICAgICAgIG1fZnJhbWVzW2luZGV4
XS5jbGVhcih0cnVlKTsKKyAgICAgICAgaW50IHNpemVDaGFuZ2UgPSAtbV9mcmFtZXNbaW5kZXhd
LmNsZWFyKEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpFbXB0eSk7CiAgICAgICAgIGludmFsaWRh
dGVQbGF0Zm9ybURhdGEoKTsKICAgICAgICAgbV9kZWNvZGVkU2l6ZSArPSBzaXplQ2hhbmdlOwog
ICAgICAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQpAQCAtMzk5LDQwICszNzksNzIgQEAgTmF0aXZl
SW1hZ2VQdHIgQml0bWFwSW1hZ2U6OmZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgZmxv
YXQgcHJlc2VudGF0aW9uU2MKICAgICB9CiAKICAgICAvLyBJZiB3ZSBoYXZlbid0IGZldGNoZWQg
YSBmcmFtZSB5ZXQsIGRvIHNvLgotICAgIGlmIChpbmRleCA+PSBtX2ZyYW1lcy5zaXplKCkgfHwg
IW1fZnJhbWVzW2luZGV4XS5tX2ltYWdlKQotICAgICAgICBjYWNoZUZyYW1lKGluZGV4LCBzdWJz
YW1wbGluZ0xldmVsLCBDYWNoZU1ldGFkYXRhQW5kRnJhbWUpOworICAgIGlmIChpbmRleCA+PSBt
X2ZyYW1lcy5zaXplKCkgfHwgIW1fZnJhbWVzW2luZGV4XS5oYXNJbWFnZSgpKQorICAgICAgICBj
YWNoZUZyYW1lKGluZGV4LCBzdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGlu
Zzo6TWV0YWRhdGFBbmRJbWFnZSk7CisKKyAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLmltYWdl
KCk7Cit9CisgICAgCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2UoKQor
eworICAgIHJldHVybiBmcmFtZUltYWdlQXRJbmRleCgwKTsKK30KKyAgICAKK05hdGl2ZUltYWdl
UHRyIEJpdG1hcEltYWdlOjpuYXRpdmVJbWFnZU9mU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQor
eworICAgIHNpemVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKKyAgICAKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAgICAgICAgYXV0byBpbWFnZSA9IGZyYW1lSW1h
Z2VBdEluZGV4KGkpOworICAgICAgICBpZiAoaW1hZ2UgJiYgUGxhdGZvcm1JbWFnZShpbWFnZSku
c2l6ZSgpID09IHNpemUpCisgICAgICAgICAgICByZXR1cm4gaW1hZ2U7CisgICAgfQorICAgIAor
ICAgIC8vIEZhbGxiYWNrIHRvIHRoZSBmaXJzdCBmcmFtZSBpbWFnZSBpZiB3ZSBjYW4ndCBmaW5k
IHRoZSByaWdodCBzaXplCisgICAgcmV0dXJuIGZyYW1lSW1hZ2VBdEluZGV4KDApOworfQorICAg
IAorTmF0aXZlSW1hZ2VQdHIgQml0bWFwSW1hZ2U6Om5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCkKK3sKKyAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOworfQog
Ci0gICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2ltYWdlOworVmVjdG9yPE5hdGl2ZUltYWdl
UHRyPiBCaXRtYXBJbWFnZTo6ZnJhbWVzTmF0aXZlSW1hZ2VzKCkKK3sKKyAgICBWZWN0b3I8TmF0
aXZlSW1hZ2VQdHI+IGltYWdlczsKKyAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7Cisg
ICAgCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGlm
IChhdXRvIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkpCisgICAgICAgICAgICBpbWFnZXMu
YXBwZW5kKGltYWdlKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGltYWdlczsKIH0KIAogYm9v
bCBCaXRtYXBJbWFnZTo6ZnJhbWVJc0NvbXBsZXRlQXRJbmRleChzaXplX3QgaW5kZXgpCiB7Ci0g
ICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBDYWNoZU1ldGFkYXRhT25seSkpCisg
ICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGlu
Zzo6TWV0YWRhdGEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gbV9mcmFt
ZXNbaW5kZXhdLm1faXNDb21wbGV0ZTsKKyAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLmlzQ29t
cGxldGUoKTsKIH0KIAogZmxvYXQgQml0bWFwSW1hZ2U6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNp
emVfdCBpbmRleCkKIHsKLSAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQoaW5kZXgsIENhY2hl
TWV0YWRhdGFPbmx5KSkKKyAgICBpZiAoIWVuc3VyZUZyYW1lSXNDYWNoZWQoaW5kZXgsIEltYWdl
RnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRhZGF0YSkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAg
cmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX2R1cmF0aW9uOwotfQotCi1OYXRpdmVJbWFnZVB0ciBC
aXRtYXBJbWFnZTo6bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKQotewotICAgIHJldHVybiBm
cmFtZUltYWdlQXRJbmRleChjdXJyZW50RnJhbWUoKSk7CisgICAgcmV0dXJuIG1fZnJhbWVzW2lu
ZGV4XS5kdXJhdGlvbigpOwogfQogCiBib29sIEJpdG1hcEltYWdlOjpmcmFtZUhhc0FscGhhQXRJ
bmRleChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4
LCBDYWNoZU1ldGFkYXRhT25seSkpCisgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2FjaGVkKGluZGV4
LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICAgIGlmIChtX2ZyYW1lc1tpbmRleF0ubV9oYXZlTWV0YWRhdGEpCi0gICAgICAgIHJl
dHVybiBtX2ZyYW1lc1tpbmRleF0ubV9oYXNBbHBoYTsKKyAgICBpZiAobV9mcmFtZXNbaW5kZXhd
Lmhhc01ldGFkYXRhKCkpCisgICAgICAgIHJldHVybiBtX2ZyYW1lc1tpbmRleF0uaGFzQWxwaGEo
KTsKIAogICAgIHJldHVybiBtX3NvdXJjZS5mcmFtZUhhc0FscGhhQXRJbmRleChpbmRleCk7CiB9
CkBAIC00NDQsMTEgKzQ1NiwxMSBAQCBib29sIEJpdG1hcEltYWdlOjpjdXJyZW50RnJhbWVLbm93
blRvQmVPcGFxdWUoKQogCiBJbWFnZU9yaWVudGF0aW9uIEJpdG1hcEltYWdlOjpmcmFtZU9yaWVu
dGF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCiB7Ci0gICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2Fj
aGVkKGluZGV4LCBDYWNoZU1ldGFkYXRhT25seSkpCisgICAgaWYgKCFlbnN1cmVGcmFtZUlzQ2Fj
aGVkKGluZGV4LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGEpKQogICAgICAgICBy
ZXR1cm4gSW1hZ2VPcmllbnRhdGlvbigpOwogCi0gICAgaWYgKG1fZnJhbWVzW2luZGV4XS5tX2hh
dmVNZXRhZGF0YSkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVzW2luZGV4XS5tX29yaWVudGF0aW9u
OworICAgIGlmIChtX2ZyYW1lc1tpbmRleF0uaGFzTWV0YWRhdGEoKSkKKyAgICAgICAgcmV0dXJu
IG1fZnJhbWVzW2luZGV4XS5vcmllbnRhdGlvbigpOwogCiAgICAgcmV0dXJuIG1fc291cmNlLm9y
aWVudGF0aW9uQXRJbmRleChpbmRleCk7CiB9CkBAIC03MDAsMTcgKzcxMiw1NiBAQCBDb2xvciBC
aXRtYXBJbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkKICAgICAgICAgcmV0dXJuIENvbG9y
KCk7CiAgICAgCiAgICAgQVNTRVJUKG1fZnJhbWVzLnNpemUoKSk7Ci0gICAgbV9zb2xpZENvbG9y
ID0gTmF0aXZlSW1hZ2U6OnNpbmdsZVBpeGVsU29saWRDb2xvcihtX2ZyYW1lc1swXS5tX2ltYWdl
LmdldCgpKTsKKyAgICBtX3NvbGlkQ29sb3IgPSBtX2ZyYW1lc1swXS5zaW5nbGVQaXhlbFNvbGlk
Q29sb3IoKTsKICAgICAKICAgICBBU1NFUlQobV9zb2xpZENvbG9yKTsKICAgICByZXR1cm4gbV9z
b2xpZENvbG9yLnZhbHVlKCk7CiB9CiAgICAgCitib29sIEJpdG1hcEltYWdlOjppc0FsbW9zdFNv
bGlkQ29sb3IoKQoreworICAgIGlmIChmcmFtZUNvdW50KCkgIT0gMSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcmV0dXJuIGVuc3VyZUZyYW1lSXNDYWNoZWQoMCkgJiYgbV9mcmFtZXNb
MF0uaXNBbG1vc3RTb2xpZENvbG9yKCk7Cit9CisgICAgCiBib29sIEJpdG1hcEltYWdlOjpjYW5B
bmltYXRlKCkKIHsKICAgICByZXR1cm4gc2hvdWxkQW5pbWF0ZSgpICYmIGZyYW1lQ291bnQoKSA+
IDE7CiB9CiAKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSwgSW1hZ2VPcmllbnRhdGlvbkRlc2Ny
aXB0aW9uIGRlc2NyaXB0aW9uKQoreworICAgIGlmIChkZXN0UmVjdC5pc0VtcHR5KCkgfHwgc3Jj
UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworI2lmIFBMQVRGT1JNKElPUykKKyAg
ICBzdGFydEFuaW1hdGlvbihEb05vdENhdGNoVXApOworI2Vsc2UKKyAgICBzdGFydEFuaW1hdGlv
bigpOworI2VuZGlmCisgICAgCisgICAgQ29sb3IgY29sb3IgPSBzaW5nbGVQaXhlbFNvbGlkQ29s
b3IoKTsKKyAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7CisgICAgICAgIGZpbGxXaXRoU29saWRD
b2xvcihjb250ZXh0LCBkZXN0UmVjdCwgY29sb3IsIG9wKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAKKyAgICBhdXRvIGltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJh
bWUsIFBsYXRmb3JtSW1hZ2U6OnN1YnNhbXBsaW5nU2NhbGUoY29udGV4dCwgZGVzdFJlY3QsIHNy
Y1JlY3QpKTsKKyAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBo
YXZlIGFuIGltYWdlIHlldC4KKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEltYWdlT3JpZW50
YXRpb24gb3JpZW50YXRpb24oZGVzY3JpcHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKTsKKyAgICBp
ZiAoZGVzY3JpcHRpb24ucmVzcGVjdEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VP
cmllbnRhdGlvbikKKyAgICAgICAgb3JpZW50YXRpb24gPSBmcmFtZU9yaWVudGF0aW9uQXRJbmRl
eChtX2N1cnJlbnRGcmFtZSk7CisgICAgCisgICAgUGxhdGZvcm1JbWFnZShpbWFnZSkuZHJhdyhj
b250ZXh0LCBkZXN0UmVjdCwgc3JjUmVjdCwgbV9zaXplLCBvcCwgbW9kZSwgb3JpZW50YXRpb24p
OworICAgIAorICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCisgICAgICAgIGltYWdlT2JzZXJ2ZXIo
KS0+ZGlkRHJhdyh0aGlzKTsKK30KKyAgICAKIHZvaWQgQml0bWFwSW1hZ2U6OmR1bXAoVGV4dFN0
cmVhbSYgdHMpIGNvbnN0CiB7CiAgICAgSW1hZ2U6OmR1bXAodHMpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmgKaW5kZXggMDc1ODkyOWNkODdmYWRh
Y2YwMmI2ZWQ4ZWVhZmU3ZGVmZDY2ZjBjNS4uMjIxOGM4MjRiNTI4ZmQ2MzliYWIxMzhkZWNjOThi
OTgxNmExNjgxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Qml0bWFwSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRt
YXBJbWFnZS5oCkBAIC0yOCwxMSArMjgsMTMgQEAKICNpZm5kZWYgQml0bWFwSW1hZ2VfaAogI2Rl
ZmluZSBCaXRtYXBJbWFnZV9oCiAKLSNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkNvbG9y
LmgiCisjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1lRGF0YS5oIgogI2lu
Y2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgogI2lu
Y2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCiAKICNpZiBVU0Uo
Q0cpIHx8IFVTRShBUFBLSVQpCiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgpAQCAtNDcsNjMg
KzQ5LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgSEJJVE1BUF9fICpIQklUTUFQOwogI2VuZGlmCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKLSAgICBzdHJ1Y3QgRnJhbWVEYXRhOwotfQotCi1uYW1lc3BhY2Ug
V1RGIHsKLSAgICB0ZW1wbGF0ZTw+IHN0cnVjdCBWZWN0b3JUcmFpdHM8V2ViQ29yZTo6RnJhbWVE
YXRhPiA6IHB1YmxpYyBTaW1wbGVDbGFzc1ZlY3RvclRyYWl0cyB7Ci0gICAgICAgIHN0YXRpYyBj
b25zdCBib29sIGNhbkluaXRpYWxpemVXaXRoTWVtc2V0ID0gZmFsc2U7IC8vIE5vdCBhbGwgRnJh
bWVEYXRhIG1lbWJlcnMgaW5pdGlhbGl6ZSB0byAwLgotICAgIH07Ci19Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgVGltZXI7CiAKLW5hbWVzcGFjZSBOYXRpdmVJbWFnZSB7Ci0gICAg
SW50U2l6ZSBzaXplKGNvbnN0IE5hdGl2ZUltYWdlUHRyJik7Ci0gICAgYm9vbCBoYXNBbHBoYShj
b25zdCBOYXRpdmVJbWFnZVB0ciYpOwotICAgIENvbG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcihj
b25zdCBOYXRpdmVJbWFnZVB0ciYpOwotfQotCi0vLyA9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS8vIEZyYW1lRGF0YSBDbGFzcwotLy8gPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXN0cnVjdCBGcmFtZURh
dGEgewotcHVibGljOgotICAgIEZyYW1lRGF0YSgpCi0gICAgICAgIDogbV9oYXZlTWV0YWRhdGEo
ZmFsc2UpCi0gICAgICAgICwgbV9pc0NvbXBsZXRlKGZhbHNlKQotICAgICAgICAsIG1faGFzQWxw
aGEodHJ1ZSkKLSAgICB7Ci0gICAgfQotCi0gICAgfkZyYW1lRGF0YSgpCi0gICAgeyAKLSAgICAg
ICAgY2xlYXIodHJ1ZSk7Ci0gICAgfQotCi0gICAgLy8gQ2xlYXIgdGhlIGNhY2hlZCBpbWFnZSBk
YXRhIG9uIHRoZSBmcmFtZSwgYW5kIChvcHRpb25hbGx5KSB0aGUgbWV0YWRhdGEuCi0gICAgLy8g
UmV0dXJucyB3aGV0aGVyIHRoZXJlIHdhcyBjYWNoZWQgaW1hZ2UgZGF0YSB0byBjbGVhci4KLSAg
ICBib29sIGNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSk7Ci0gICAgCi0gICAgdW5zaWduZWQgdXNl
ZEZyYW1lQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlID8gbV9mcmFtZUJ5dGVzIDogMDsg
fQotCi0gICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsKLSAgICBJbWFnZU9yaWVudGF0aW9uIG1f
b3JpZW50YXRpb24geyBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbiB9OwotICAgIFN1YnNhbXBsaW5n
TGV2ZWwgbV9zdWJzYW1wbGluZ0xldmVsIHsgMCB9OwotICAgIGZsb2F0IG1fZHVyYXRpb24geyAw
IH07Ci0gICAgYm9vbCBtX2hhdmVNZXRhZGF0YSA6IDE7Ci0gICAgYm9vbCBtX2lzQ29tcGxldGUg
OiAxOwotICAgIGJvb2wgbV9oYXNBbHBoYSA6IDE7Ci0gICAgdW5zaWduZWQgbV9mcmFtZUJ5dGVz
IHsgMCB9OwotfTsKLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLy8gQml0bWFwSW1hZ2UgQ2xhc3MKLS8vID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQogY2xhc3MgQml0bWFwSW1hZ2UgZmluYWwg
OiBwdWJsaWMgSW1hZ2UgewogICAgIGZyaWVuZCBjbGFzcyBHZW5lcmF0ZWRJbWFnZTsKICAgICBm
cmllbmQgY2xhc3MgQ3Jvc3NmYWRlR2VuZXJhdGVkSW1hZ2U7CkBAIC0xNTUsMTIgKzEwMyw2IEBA
IHB1YmxpYzoKICAgICBDRkRhdGFSZWYgZ2V0VElGRlJlcHJlc2VudGF0aW9uKCkgb3ZlcnJpZGU7
CiAjZW5kaWYKIAotI2lmIFVTRShDRykKLSAgICBXRUJDT1JFX0VYUE9SVCBDR0ltYWdlUmVmIGdl
dENHSW1hZ2VSZWYoKSBvdmVycmlkZTsKLSAgICBDR0ltYWdlUmVmIGdldEZpcnN0Q0dJbWFnZVJl
Zk9mU2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7Ci0gICAgUmV0YWluUHRyPENGQXJyYXlS
ZWY+IGdldENHSW1hZ2VBcnJheSgpIG92ZXJyaWRlOwotI2VuZGlmCi0KICNpZiBQTEFURk9STShX
SU4pCiAgICAgYm9vbCBnZXRIQklUTUFQKEhCSVRNQVApIG92ZXJyaWRlOwogICAgIGJvb2wgZ2V0
SEJJVE1BUE9mU2l6ZShIQklUTUFQLCBjb25zdCBJbnRTaXplKikgb3ZlcnJpZGU7CkBAIC0xNzQs
OCArMTE2LDEzIEBAIHB1YmxpYzoKICAgICBFdmFzX09iamVjdCogZ2V0RXZhc09iamVjdChFdmFz
Kikgb3ZlcnJpZGU7CiAjZW5kaWYKIAorICAgIFdFQkNPUkVfRVhQT1JUIE5hdGl2ZUltYWdlUHRy
IG5hdGl2ZUltYWdlKCkgb3ZlcnJpZGU7CisgICAgTmF0aXZlSW1hZ2VQdHIgbmF0aXZlSW1hZ2VP
ZlNpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwogICAgIE5hdGl2ZUltYWdlUHRyIG5hdGl2
ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkgb3ZlcnJpZGU7CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBv
cmllbnRhdGlvbkZvckN1cnJlbnRGcmFtZSgpIG92ZXJyaWRlIHsgcmV0dXJuIGZyYW1lT3JpZW50
YXRpb25BdEluZGV4KGN1cnJlbnRGcmFtZSgpKTsgfQorICAgIFZlY3RvcjxOYXRpdmVJbWFnZVB0
cj4gZnJhbWVzTmF0aXZlSW1hZ2VzKCkgb3ZlcnJpZGU7CisgICAgCisgICAgV0VCQ09SRV9FWFBP
UlQgYm9vbCBpc0FsbW9zdFNvbGlkQ29sb3IoKTsKIAogICAgIGJvb2wgY3VycmVudEZyYW1lS25v
d25Ub0JlT3BhcXVlKCkgb3ZlcnJpZGU7CiAKQEAgLTIxNSw3ICsxNjIsNiBAQCBwcm90ZWN0ZWQ6
CiAgICAgc2l6ZV90IGZyYW1lQ291bnQoKTsKIAogICAgIE5hdGl2ZUltYWdlUHRyIGZyYW1lSW1h
Z2VBdEluZGV4KHNpemVfdCwgZmxvYXQgcHJlc2VudGF0aW9uU2NhbGVIaW50ID0gMSk7Ci0gICAg
TmF0aXZlSW1hZ2VQdHIgY29weVVuc2NhbGVkRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90KTsKIAog
ICAgIGJvb2wgaGF2ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCk7CiAKQEAgLTIyNSwxMSArMTcx
LDEwIEBAIHByb3RlY3RlZDoKICAgICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3JpZW50YXRpb25B
dEluZGV4KHNpemVfdCk7CiAKICAgICAvLyBEZWNvZGVzIGFuZCBjYWNoZXMgYSBmcmFtZS4gTmV2
ZXIgYWNjZXNzZWQgZXhjZXB0IGludGVybmFsbHkuCi0gICAgZW51bSBJbWFnZUZyYW1lQ2FjaGlu
ZyB7IENhY2hlTWV0YWRhdGFPbmx5LCBDYWNoZU1ldGFkYXRhQW5kRnJhbWUgfTsKLSAgICB2b2lk
IGNhY2hlRnJhbWUoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsLCBJbWFnZUZyYW1lQ2Fj
aGluZyA9IENhY2hlTWV0YWRhdGFBbmRGcmFtZSk7CisgICAgdm9pZCBjYWNoZUZyYW1lKHNpemVf
dCBpbmRleCwgU3Vic2FtcGxpbmdMZXZlbCwgSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmcgPSBJbWFn
ZUZyYW1lRGF0YTo6Q2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSk7CiAKICAgICAvLyBDYWxsZWQg
YmVmb3JlIGFjY2Vzc2luZyBtX2ZyYW1lc1tpbmRleF0gZm9yIGluZm8gd2l0aG91dCBkZWNvZGlu
Zy4gUmV0dXJucyBmYWxzZSBvbiBpbmRleCBvdXQgb2YgYm91bmRzLgotICAgIGJvb2wgZW5zdXJl
RnJhbWVJc0NhY2hlZChzaXplX3QgaW5kZXgsIEltYWdlRnJhbWVDYWNoaW5nID0gQ2FjaGVNZXRh
ZGF0YUFuZEZyYW1lKTsKKyAgICBib29sIGVuc3VyZUZyYW1lSXNDYWNoZWQoc2l6ZV90IGluZGV4
LCBJbWFnZUZyYW1lRGF0YTo6Q2FjaGluZyA9IEltYWdlRnJhbWVEYXRhOjpDYWNoaW5nOjpNZXRh
ZGF0YUFuZEltYWdlKTsKIAogICAgIC8vIENhbGxlZCB0byBpbnZhbGlkYXRlIGNhY2hlZCBkYXRh
LiBXaGVuIHxkZXN0cm95QWxsfCBpcyB0cnVlLCB3ZSB3aXBlIG91dAogICAgIC8vIHRoZSBlbnRp
cmUgZnJhbWUgYnVmZmVyIGNhY2hlIGFuZCB0ZWxsIHRoZSBpbWFnZSBzb3VyY2UgdG8gZGVzdHJv
eQpAQCAtMjkyLDcgKzIzNyw3IEBAIHByaXZhdGU6CiAgICAgbXV0YWJsZSBJbnRTaXplIG1fc2l6
ZVJlc3BlY3RpbmdPcmllbnRhdGlvbjsKIAogICAgIHNpemVfdCBtX2N1cnJlbnRGcmFtZSB7IDAg
fTsgLy8gVGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGZyYW1lIG9mIGFuaW1hdGlvbi4KLSAgICBW
ZWN0b3I8RnJhbWVEYXRhLCAxPiBtX2ZyYW1lczsgLy8gQW4gYXJyYXkgb2YgdGhlIGNhY2hlZCBm
cmFtZXMgb2YgdGhlIGFuaW1hdGlvbi4gV2UgaGF2ZSB0byByZWYgZnJhbWVzIHRvIHBpbiB0aGVt
IGluIHRoZSBjYWNoZS4KKyAgICBWZWN0b3I8SW1hZ2VGcmFtZURhdGEsIDE+IG1fZnJhbWVzOyAv
LyBBbiBhcnJheSBvZiB0aGUgY2FjaGVkIGZyYW1lcyBvZiB0aGUgYW5pbWF0aW9uLiBXZSBoYXZl
IHRvIHJlZiBmcmFtZXMgdG8gcGluIHRoZW0gaW4gdGhlIGNhY2hlLgogCiAgICAgc3RkOjp1bmlx
dWVfcHRyPFRpbWVyPiBtX2ZyYW1lVGltZXI7CiAgICAgaW50IG1fcmVwZXRpdGlvbkNvdW50IHsg
Y0FuaW1hdGlvbk5vbmUgfTsgLy8gSG93IG1hbnkgdG90YWwgYW5pbWF0aW9uIGxvb3BzIHdlIHNo
b3VsZCBkby4gVGhpcyB3aWxsIGJlIGNBbmltYXRpb25Ob25lIGlmIHRoaXMgaW1hZ2UgdHlwZSBp
cyBpbmNhcGFibGUgb2YgYW5pbWF0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwUGl4ZWxzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBQaXhlbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZmFlM2QyZTQwY2NmMWQ4MWY2YmE1
N2RiNjgyZDkyZDQ2OWJiYWMyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQml0bWFwUGl4ZWxzLmgKQEAgLTAsMCArMSwxODMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
bmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXpl
LmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBCaXRtYXBQaXhlbHMgeworcHVibGlj
OgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8Qml0bWFwUGl4ZWxzPiBjcmVhdGUoY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHN0ZDo6bWFrZV91bmlxdWU8Qml0bWFwUGl4ZWxzPihzaXplLCBwcmVtdWx0aXBseUFscGhh
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gY3Jl
YXRlKGNvbnN0IEJpdG1hcFBpeGVscyYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX3VuaXF1ZTxCaXRtYXBQaXhlbHM+KG90aGVyKTsKKyAgICB9CisKKyAgICBCaXRtYXBQ
aXhlbHMoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhID0gdHJ1ZSkK
KyAgICAgICAgOiBtX3ByZW11bHRpcGx5QWxwaGEocHJlbXVsdGlwbHlBbHBoYSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCghc2l6ZS5pc0VtcHR5KCkpOworICAgICAgICBzZXRTaXplKHNpemUpOwor
ICAgIH0KKworICAgIEJpdG1hcFBpeGVscyhjb25zdCBCaXRtYXBQaXhlbHMmIG90aGVyKQorICAg
IHsKKyAgICAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAKKyAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBvdGhlci5tX2JhY2tpbmdTdG9yZTsKKyAg
ICAgICAgbV9waXhlbHMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7CisgICAgICAgIG1fc2l6ZSA9
IG90aGVyLm1fc2l6ZTsKKyAgICAgICAgbV9yZWN0ID0gb3RoZXIubV9yZWN0OworICAgICAgICBt
X3ByZW11bHRpcGx5QWxwaGEgPSBvdGhlci5tX3ByZW11bHRpcGx5QWxwaGE7CisgICAgfQorCisg
ICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2UoKSBjb25zdDsKKworICAgIGJvb2wgc2V0U2l6ZShjb25z
dCBJbnRTaXplJiBzaXplKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2JhY2tpbmdTdG9yZS50cnlS
ZXNlcnZlQ2FwYWNpdHkoc2l6ZS5hcmVhKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgbV9iYWNraW5nU3RvcmUucmVzaXplKHNpemUuYXJlYSgpKTsKKyAg
ICAgICAgbV9waXhlbHMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7CisgICAgICAgIG1fc2l6ZSA9
IHNpemU7CisgICAgICAgIG1fcmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXplKTsKKyAg
ICAgICAgY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZv
aWQgc2V0UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFt
X3NpemUuaXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKGluQm91bmRzKHJlY3QpKTsKKyAgICAg
ICAgbV9yZWN0ID0gcmVjdDsKKyAgICB9CisgICAgCisgICAgSW50U2l6ZSBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplOyB9CisgICAgSW50UmVjdCByZWN0KCkgY29uc3QgeyByZXR1cm4gbV9y
ZWN0OyB9CisKKyAgICBSR0JBMzIqIGF0KGludCB4LCBpbnQgeSkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3BpeGVscyArIHkgKiBtX3NpemUud2lkdGgoKSArIHg7CisgICAgfQorCisg
ICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtZW1zZXQobV9waXhlbHMsIDAsIG1fc2l6
ZS5hcmVhKCkgKiBzaXplb2YoUkdCQTMyKSk7CisgICAgfQorCisgICAgdm9pZCBjbGVhclJlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSB8
fCBpbkJvdW5kcyhyZWN0KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAg
IHNpemVfdCByZWN0V2lkdGhJbkJ5dGVzID0gcmVjdC53aWR0aCgpICogc2l6ZW9mKFJHQkEzMik7
CisgICAgICAgIFJHQkEzMiogc3RhcnQgPSBhdChyZWN0LngoKSwgcmVjdC55KCkpOworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QuaGVpZ2h0KCk7ICsraSkgeworICAgICAgICAgICAg
bWVtc2V0KHN0YXJ0LCAwLCByZWN0V2lkdGhJbkJ5dGVzKTsKKyAgICAgICAgICAgIHN0YXJ0ICs9
IG1fc2l6ZS53aWR0aCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCByZXBlYXRGaXJz
dFJvdyhjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHJlY3QuaXNFbXB0
eSgpIHx8IGluQm91bmRzKHJlY3QpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAg
ICAgICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkgKiBzaXplb2YoUkdC
QTMyKTsKKyAgICAgICAgUkdCQTMyKiBzcmMgPSBhdChyZWN0LngoKSwgcmVjdC55KCkpOworICAg
ICAgICBSR0JBMzIqIGRlc3QgPSBzcmMgKyBtX3NpemUud2lkdGgoKTsKKyAgICAgICAgZm9yIChp
bnQgaSA9IDE7IGkgPCByZWN0LmhlaWdodCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1lbWNweShk
ZXN0LCBzcmMsIHJlY3RXaWR0aEluQnl0ZXMpOworICAgICAgICAgICAgZGVzdCArPSBtX3NpemUu
d2lkdGgoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgc2V0UkdCQShpbnQgeCwgaW50
IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAg
eworICAgICAgICBzZXRSR0JBKGF0KHgsIHkpLCByLCBnLCBiLCBhKTsKKyAgICB9CisKKyAgICB2
b2lkIHNldFJHQkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25l
ZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEg
fHwgYSA+PSAyNTUpCisgICAgICAgICAgICAqZGVzdCA9IG1ha2VSR0JBKHIsIGcsIGIsIGEpOwor
ICAgICAgICBlbHNlIGlmICghYSkKKyAgICAgICAgICAgICpkZXN0ID0gMDsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgKmRlc3QgPSBtYWtlUHJlbXVsdGlwbGllZFJHQkEociwgZywgYiwgYSk7
CisgICAgfQorCisgICAgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIsIHVu
c2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAgeworICAgICAgICBpZiAoIWEp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBpZiAoYSA+PSAyNTUgfHwg
IWFscGhhQ2hhbm5lbCgqZGVzdCkpIHsKKyAgICAgICAgICAgIHNldFJHQkEoZGVzdCwgciwgZywg
YiwgYSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmICghbV9wcmVtdWx0aXBseUFscGhhKQorICAgICAgICAgICAgKmRlc3QgPSBtYWtlUHJlbXVs
dGlwbGllZFJHQkEocmVkQ2hhbm5lbCgqZGVzdCksIGdyZWVuQ2hhbm5lbCgqZGVzdCksIGJsdWVD
aGFubmVsKCpkZXN0KSwgYWxwaGFDaGFubmVsKCpkZXN0KSk7CisgICAgICAgIAorICAgICAgICBS
R0JBMzIgc3JjID0gbWFrZVJHQkEociwgZywgYiwgYSk7CisgICAgICAgICpkZXN0ID0gQ29sb3Io
KmRlc3QpLmJsZW5kKHNyYykucmdiKCk7CisgICAgICAgIAorICAgICAgICBpZiAoIW1fcHJlbXVs
dGlwbHlBbHBoYSkKKyAgICAgICAgICAgICpkZXN0ID0gbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEo
cmVkQ2hhbm5lbCgqZGVzdCksIGdyZWVuQ2hhbm5lbCgqZGVzdCksIGJsdWVDaGFubmVsKCpkZXN0
KSwgYWxwaGFDaGFubmVsKCpkZXN0KSk7CisgICAgfQorCisgICAgYm9vbCBpbkJvdW5kcyhjb25z
dCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSW50UmVjdChJ
bnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHBvaW50KTsKKyAgICB9CisKKyAgICBib29sIGlu
Qm91bmRzKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
SW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHJlY3QpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBWZWN0b3I8UkdCQTMyPiBtX2JhY2tpbmdTdG9yZTsKKyAgICBSR0JBMzIqIG1f
cGl4ZWxzIHsgbnVsbHB0ciB9OworICAgIEludFNpemUgbV9zaXplOworICAgIEludFJlY3QgbV9y
ZWN0OyAvLyBUaGlzIHdpbGwgYWx3YXlzIGp1c3QgYmUgdGhlIGVudGlyZSBidWZmZXIgZXhjZXB0
IGZvciBHSUYgYW5kIFBORyBmcmFtZXMKKyAgICBib29sIG1fcHJlbXVsdGlwbHlBbHBoYSB7IHRy
dWUgfTsKK307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cAppbmRleCA0ZTI1YWE2ZmQ3NGQxZTQ2YzU0MTYxNDk4YmMxNzJiZjYwMDg3NWQxLi40MzlmNWE2
M2M3YmViZTU2MDQyYjI0ZTdkNzJlY2NlY2YzNmM0MGM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCkBAIC00OSw2ICs0OSw0MCBAQCBjb25zdCBSR0JBMzIg
Q29sb3I6OnRyYW5zcGFyZW50Owogc3RhdGljIGNvbnN0IFJHQkEzMiBsaWdodGVuZWRCbGFjayA9
IDB4RkY1NDU0NTQ7CiBzdGF0aWMgY29uc3QgUkdCQTMyIGRhcmtlbmVkV2hpdGUgPSAweEZGQUJB
QkFCOwogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG11bHRpcGx5MjU1KHVuc2lnbmVkIGMpCit7
CisgICAgLy8gYyAqIDI1NQorICAgIC8vICAgPSBjICogKDI1NiAtIDEpCisgICAgLy8gICA9IGMg
KiAyNTYgLSBjCisgICAgcmV0dXJuIChjIDw8IDgpIC0gYzsKK30KKworc3RhdGljIGlubGluZSB1
bnNpZ25lZCBkaXZpZGUyNTUodW5zaWduZWQgYykKK3sKKyAgICAvLyBjIC8gMjU1CisgICAgLy8g
ICA9IGMgLyAyNTYgKiAoMSArIDEgLyAyNTUpCisgICAgLy8gICA9IChjICsgYyAvIDI1NSkgLyAy
NTYKKyAgICAvLyAgID0gKGMgKyAoYyArIGMgLyAyNTUpIC8gMjU2KSAvIDI1NgorICAgIC8vICAg
PSAoYyArIGMgLyAyNTYgKyBjIC8gKDI1NSB4IDI1NikpIC8gMjU2CisgICAgLy8gIH49IChjICsg
YyAvIDI1NiArIDEpIC8gMjU2CisgICAgcmV0dXJuIChjICsgKGMgPj4gOCkgKyAxKSA+PiA4Owor
fQorICAgIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBkaXZpZGVDZWlsKHVuc2lnbmVkIGMsIHVu
c2lnbmVkIGQpCit7CisgICAgcmV0dXJuIChjICsgZCAtIDEpIC8gZDsKK30KKyAgICAKK3N0YXRp
YyBpbmxpbmUgdW5zaWduZWQgcHJlbXVsdGlwbGllZENoYW5uZWwodW5zaWduZWQgYywgdW5zaWdu
ZWQgYSkKK3sKKyAgICByZXR1cm4gZGl2aWRlMjU1KGMgKiBhKTsKK30KKworc3RhdGljIGlubGlu
ZSB1bnNpZ25lZCB1bnByZW11bHRpcGxpZWRDaGFubmVsKHVuc2lnbmVkIGMsIHVuc2lnbmVkIGEp
Cit7CisgICAgcmV0dXJuIGRpdmlkZUNlaWwobXVsdGlwbHkyNTUoYyksIGEpOworfQorICAgIAog
UkdCQTMyIG1ha2VSR0IoaW50IHIsIGludCBnLCBpbnQgYikKIHsKICAgICByZXR1cm4gMHhGRjAw
MDAwMCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKHIsIDI1NSkpIDw8IDE2IHwgc3RkOjptYXgoMCwg
c3RkOjptaW4oZywgMjU1KSkgPDwgOCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGIsIDI1NSkpOwpA
QCAtNTksNiArOTMsMTYgQEAgUkdCQTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGlu
dCBhKQogICAgIHJldHVybiBzdGQ6Om1heCgwLCBzdGQ6Om1pbihhLCAyNTUpKSA8PCAyNCB8IHN0
ZDo6bWF4KDAsIHN0ZDo6bWluKHIsIDI1NSkpIDw8IDE2IHwgc3RkOjptYXgoMCwgc3RkOjptaW4o
ZywgMjU1KSkgPDwgOCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGIsIDI1NSkpOwogfQogCitSR0JB
MzIgbWFrZVByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQorewor
ICAgIHJldHVybiBtYWtlUkdCQShwcmVtdWx0aXBsaWVkQ2hhbm5lbChyLCBhKSwgcHJlbXVsdGlw
bGllZENoYW5uZWwoZywgYSksIHByZW11bHRpcGxpZWRDaGFubmVsKGIsIGEpLCBhKTsKK30KKyAg
ICAKK1JHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBp
bnQgYSkKK3sKKyAgICByZXR1cm4gbWFrZVJHQkEodW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChyLCBh
KSwgdW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBhKSwgdW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChi
LCBhKSwgYSk7Cit9CisgICAgCiBzdGF0aWMgaW50IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGZsb2F0
IGYpCiB7CiAgICAgLy8gV2UgdXNlIGxyb3VuZGYgYW5kIDI1NSBpbnN0ZWFkIG9mIG5leHRhZnRl
cmYoMjU2LCAwKSB0byBtYXRjaCBDRydzIHJvdW5kaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuaAppbmRleCBkZDI2MjcwYmI0NjYwYjMzYWUwNzBlOGM5NDQ1MjBkNzI4
NDU0YjhhLi5hNTQ1MzJjNzc1NWE3Yzg3NjkzNjI0MGNhZTRlYzM3YTRkYTBkMDQzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKQEAgLTU0LDYgKzU0LDggQEAgdHlw
ZWRlZiB1bnNpZ25lZCBSR0JBMzI7IC8vIERlcHJlY2F0ZWQ6IFR5cGUgZm9yIGFuIFJHQkEgcXVh
ZHJ1cGxldC4gVXNlIFJHQkEgY2wKIAogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VSR0IoaW50
IHIsIGludCBnLCBpbnQgYik7CiBXRUJDT1JFX0VYUE9SVCBSR0JBMzIgbWFrZVJHQkEoaW50IHIs
IGludCBnLCBpbnQgYiwgaW50IGEpOworV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VQcmVtdWx0
aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7CitXRUJDT1JFX0VYUE9SVCBS
R0JBMzIgbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEp
OwogCiBXRUJDT1JFX0VYUE9SVCBSR0JBMzIgY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShSR0JBMzIg
Y29sb3IsIGZsb2F0IG92ZXJyaWRlQWxwaGEpOwogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIGNvbG9y
V2l0aE92ZXJyaWRlQWxwaGEoUkdCQTMyIGNvbG9yLCBPcHRpb25hbDxmbG9hdD4gb3ZlcnJpZGVB
bHBoYSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2UuaAppbmRleCA3YTI5
OTkyZjc3MTg4ZTAzODI4ZDgwYTY1YjhiZTJjZDhkYzJkZTc2Li44ZTdiNTJiMWY0ZjMxYzc0YTNj
YjJhMTMyMTVkYTc3YTJiMThjMDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlLmgKQEAgLTEzNyw4ICsxMzcsMTEgQEAgcHVibGljOgogCiAgICAgZW51bSBUaWxlUnVs
ZSB7IFN0cmV0Y2hUaWxlLCBSb3VuZFRpbGUsIFNwYWNlVGlsZSwgUmVwZWF0VGlsZSB9OwogCisg
ICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBuYXRpdmVJbWFnZSgpIHsgcmV0dXJuIG51bGxwdHI7
IH0KKyAgICB2aXJ0dWFsIE5hdGl2ZUltYWdlUHRyIG5hdGl2ZUltYWdlT2ZTaXplKGNvbnN0IElu
dFNpemUmKSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgdmlydHVhbCBOYXRpdmVJbWFnZVB0ciBu
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICB2aXJ0
dWFsIEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb25Gb3JDdXJyZW50RnJhbWUoKSB7IHJldHVy
biBJbWFnZU9yaWVudGF0aW9uKCk7IH0KKyAgICB2aXJ0dWFsIFZlY3RvcjxOYXRpdmVJbWFnZVB0
cj4gZnJhbWVzTmF0aXZlSW1hZ2VzKCkgeyByZXR1cm4geyB9OyB9CiAKICAgICAvLyBBY2Nlc3Nv
cnMgZm9yIG5hdGl2ZSBpbWFnZSBmb3JtYXRzLgogCkBAIC0xNTAsMTIgKzE1Myw2IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIENGRGF0YVJlZiBnZXRUSUZGUmVwcmVzZW50YXRpb24oKSB7IHJldHVy
biBudWxscHRyOyB9CiAjZW5kaWYKIAotI2lmIFVTRShDRykKLSAgICB2aXJ0dWFsIENHSW1hZ2VS
ZWYgZ2V0Q0dJbWFnZVJlZigpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICB2aXJ0dWFsIENHSW1h
Z2VSZWYgZ2V0Rmlyc3RDR0ltYWdlUmVmT2ZTaXplKGNvbnN0IEludFNpemUmKSB7IHJldHVybiBu
dWxscHRyOyB9Ci0gICAgdmlydHVhbCBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gZ2V0Q0dJbWFnZUFy
cmF5KCkgeyByZXR1cm4gbnVsbHB0cjsgfQotI2VuZGlmCi0KICNpZiBQTEFURk9STShXSU4pCiAg
ICAgdmlydHVhbCBib29sIGdldEhCSVRNQVAoSEJJVE1BUCkgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIGJvb2wgZ2V0SEJJVE1BUE9mU2l6ZShIQklUTUFQLCBjb25zdCBJbnRTaXplKikg
eyByZXR1cm4gZmFsc2U7IH0KQEAgLTE3OSw2ICsxNzYsOCBAQCBwdWJsaWM6CiAjaWYgIUFTU0VS
VF9ESVNBQkxFRAogICAgIHZpcnR1YWwgYm9vbCBub3RTb2xpZENvbG9yKCkgeyByZXR1cm4gdHJ1
ZTsgfQogI2VuZGlmCisgICAgCisgICAgdmlydHVhbCB2b2lkIGxheW91dElmTmVlZGVkKCkgeyB9
CiAKICAgICB2aXJ0dWFsIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3Q7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iZmQyMGNmOGU2MWY0YjFhMWZlMDhlYjMzMmI3MTY1N2YwMTQ4YzE1Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURh
dGEuY3BwCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUZyYW1l
RGF0YS5oIgorCisjaW5jbHVkZSAiQ29sb3IuaCIKKworI2lmIFVTRShDRykKKyNpbmNsdWRlICJJ
bWFnZURlY29kZXJDRy5oIgorI2Vsc2UKKyNpbmNsdWRlICJJbWFnZURlY29kZXIuaCIKKyNlbmRp
ZgorCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0ltYWdlRnJhbWVEYXRhOjpJbWFnZUZyYW1lRGF0YSgpCit7Cit9CisKK0ltYWdlRnJhbWVEYXRh
OjpJbWFnZUZyYW1lRGF0YShOYXRpdmVJbWFnZVB0ciYmIGltYWdlKQorICAgIDogbV9zdGF0dXMo
RGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlKQorICAgICwgbV9pbWFnZShXVEZNb3ZlKGltYWdlKSkK
K3sKKyAgICBtX3NpemUgPSBQbGF0Zm9ybUltYWdlKG1faW1hZ2UpLnNpemUoKTsKKyAgICBtX2hh
c0FscGhhID0gUGxhdGZvcm1JbWFnZShtX2ltYWdlKS5oYXNBbHBoYSgpOworfQorCitJbWFnZUZy
YW1lRGF0YTo6SW1hZ2VGcmFtZURhdGEoSW1hZ2VEZWNvZGVyJiBkZWNvZGVyLCBzaXplX3QgaW5k
ZXgsIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCwgQ2FjaGluZyBmcmFtZUNhY2hp
bmcpCit7CisgICAgQVNTRVJUKGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpNZXRhZGF0YSB8fCBm
cmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGFBbmRJbWFnZSk7CisgICAgCisgICAgaWYg
KGZyYW1lQ2FjaGluZyA9PSBDYWNoaW5nOjpJbWFnZSB8fCBmcmFtZUNhY2hpbmcgPT0gQ2FjaGlu
Zzo6TWV0YWRhdGFBbmRJbWFnZSkgeworICAgICAgICBtX2ltYWdlID0gZGVjb2Rlci5jcmVhdGVG
cmFtZUltYWdlQXRJbmRleChpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCk7CisgICAgICAgIG1fc3Vi
c2FtcGxpbmdMZXZlbCA9IHN1YnNhbXBsaW5nTGV2ZWw7CisgICAgfQorICAgIAorICAgIGlmIChm
cmFtZUNhY2hpbmcgPT0gQ2FjaGluZzo6TWV0YWRhdGEgfHwgZnJhbWVDYWNoaW5nID09IENhY2hp
bmc6Ok1ldGFkYXRhQW5kSW1hZ2UpIHsKKyAgICAgICAgbV9vcmllbnRhdGlvbiA9IGRlY29kZXIu
b3JpZW50YXRpb25BdEluZGV4KGluZGV4KTsKKyAgICAgICAgbV9zdGF0dXMgPSBkZWNvZGVyLmZy
YW1lSXNDb21wbGV0ZUF0SW5kZXgoaW5kZXgpID8gRGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlIDog
RGVjb2RpbmdTdGF0dXM6OlBhcnRpYWw7CisgICAgICAgIAorICAgICAgICBpZiAoZGVjb2Rlci5y
ZXBldGl0aW9uQ291bnQoKSAhPSBjQW5pbWF0aW9uTm9uZSkKKyAgICAgICAgICAgIG1fZHVyYXRp
b24gPSBkZWNvZGVyLmZyYW1lRHVyYXRpb25BdEluZGV4KGluZGV4KTsKKyAgICAgICAgCisgICAg
ICAgIG1faGFzQWxwaGEgPSBkZWNvZGVyLmZyYW1lSGFzQWxwaGFBdEluZGV4KGluZGV4KTsKKyAg
ICAgICAgbV9zaXplID0gZGVjb2Rlci5mcmFtZVNpemVBdEluZGV4KGluZGV4LCBzdWJzYW1wbGlu
Z0xldmVsKTsKKyAgICB9Cit9CisKK0ltYWdlRnJhbWVEYXRhOjp+SW1hZ2VGcmFtZURhdGEoKQor
eworICAgIGNsZWFyU3ViSW1hZ2VzKCk7Cit9CisgICAgCitJbWFnZUZyYW1lRGF0YSYgSW1hZ2VG
cmFtZURhdGE6Om9wZXJhdG9yPShjb25zdCBJbWFnZUZyYW1lRGF0YSYgb3RoZXIpCit7CisgICAg
aWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBtX3N0YXR1
cyA9IG90aGVyLm1fc3RhdHVzOworICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKKyAgICBtX2lt
YWdlID0gb3RoZXIubV9pbWFnZTsKKyAgICAKKyAgICBtX3BpeGVscyA9IG90aGVyLnBpeGVscygp
ID8gQml0bWFwUGl4ZWxzOjpjcmVhdGUoKm90aGVyLnBpeGVscygpKSA6IG51bGxwdHI7CisgICAg
CisgICAgbV9vcmllbnRhdGlvbiA9IG90aGVyLm1fb3JpZW50YXRpb247CisgICAgbV9zdWJzYW1w
bGluZ0xldmVsID0gb3RoZXIubV9zdWJzYW1wbGluZ0xldmVsOworICAgIG1fZHVyYXRpb24gPSBv
dGhlci5tX2R1cmF0aW9uOworICAgIG1faGFzQWxwaGEgPSBvdGhlci5tX2hhc0FscGhhOworICAg
IHJldHVybiAqdGhpczsKK30KKwordm9pZCBJbWFnZUZyYW1lRGF0YTo6Y2xlYXJTdWJJbWFnZXMo
KQoreworICAgIGlmICghbV9pbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFBsYXRm
b3JtSW1hZ2UobV9pbWFnZSkuY2xlYXJTdWJJbWFnZXMoKTsKK30KKwordW5zaWduZWQgSW1hZ2VG
cmFtZURhdGE6OmNsZWFyKENhY2hpbmcgZnJhbWVDYWNoaW5nKQoreworICAgIEFTU0VSVChmcmFt
ZUNhY2hpbmcgPT0gQ2FjaGluZzo6RW1wdHkgfHwgZnJhbWVDYWNoaW5nID09IENhY2hpbmc6Ok1l
dGFkYXRhKTsKKyAgICAKKyAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzID0gdGhpcy0+ZnJhbWVCeXRl
cygpOworICAgIAorICAgIGNsZWFyU3ViSW1hZ2VzKCk7CisgICAgCisgICAgaWYgKGZyYW1lQ2Fj
aGluZyA9PSBDYWNoaW5nOjpFbXB0eSkKKyAgICAgICAgKnRoaXMgPSBJbWFnZUZyYW1lRGF0YSgp
OworICAgIGVsc2UKKyAgICAgICAgbV9pbWFnZSA9IG51bGxwdHI7CisgICAgCisgICAgcmV0dXJu
IGZyYW1lQnl0ZXM7Cit9CisKK0NvbG9yIEltYWdlRnJhbWVEYXRhOjpzaW5nbGVQaXhlbFNvbGlk
Q29sb3IoKSBjb25zdAoreworICAgIGlmICghaGFzSW1hZ2UoKSB8fCBtX3NpemUgIT0gSW50U2l6
ZSgxLCAxKSkKKyAgICAgICAgcmV0dXJuIENvbG9yKCk7CisgICAgCisgICAgcmV0dXJuIFBsYXRm
b3JtSW1hZ2UobV9pbWFnZSkuc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCk7Cit9CisKK2Jvb2wgSW1h
Z2VGcmFtZURhdGE6OmlzQWxtb3N0U29saWRDb2xvcigpIGNvbnN0Cit7CisgICAgaWYgKCFoYXNJ
bWFnZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIFBsYXRmb3Jt
SW1hZ2UobV9pbWFnZSkuaXNBbG1vc3RTb2xpZENvbG9yKCk7Cit9CisgICAgCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mNmZiNzU4ZWYzYTQyNThjYmRiM2FlMmY0NmU4NDQwZjczMGVmNDdjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEu
aApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkJpdG1hcFBpeGVscy5oIgorI2lu
Y2x1ZGUgIkltYWdlT3JpZW50YXRpb24uaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVk
ZSAiTmF0aXZlSW1hZ2VQdHIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb2xv
cjsKK2NsYXNzIEltYWdlRGVjb2RlcjsKKworLy8gU3Vic2FtcGxpbmdMZXZlbC4gMCBpcyBubyBz
dWJzYW1wbGluZywgMSBpcyBoYWxmIGRpbWVuc2lvbnMgb24gZWFjaCBheGlzIGV0Yy4KK3VzaW5n
IFN1YnNhbXBsaW5nTGV2ZWwgPSB1aW50OF90OworCitlbnVtIDogU3Vic2FtcGxpbmdMZXZlbCB7
CisgICAgTWluU3Vic2FtcGxpbmdMZXZlbCA9IDAsCisgICAgTWF4U3Vic2FtcGxpbmdMZXZlbCA9
IDMsCisgICAgRGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwgPSBNaW5TdWJzYW1wbGluZ0xldmVsCit9
OworCitjbGFzcyBJbWFnZUZyYW1lRGF0YSB7CisgICAgZnJpZW5kIGNsYXNzIEltYWdlRGVjb2Rl
cjsKK3B1YmxpYzoKKyAgICBlbnVtIGNsYXNzIENhY2hpbmcgeyBFbXB0eSwgTWV0YWRhdGEsIElt
YWdlLCBNZXRhZGF0YUFuZEltYWdlIH07CisgICAgZW51bSBjbGFzcyBEZWNvZGluZ1N0YXR1cyB7
IEVtcHR5LCBQYXJ0aWFsLCBDb21wbGV0ZSB9OworICAgIAorICAgIEltYWdlRnJhbWVEYXRhKCk7
CisgICAgSW1hZ2VGcmFtZURhdGEoTmF0aXZlSW1hZ2VQdHImJik7CisgICAgSW1hZ2VGcmFtZURh
dGEoSW1hZ2VEZWNvZGVyJiwgc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsID0gRGVmYXVs
dFN1YnNhbXBsaW5nTGV2ZWwsIENhY2hpbmcgPSBDYWNoaW5nOjpNZXRhZGF0YUFuZEltYWdlKTsK
KyAgICBJbWFnZUZyYW1lRGF0YShjb25zdCBJbWFnZUZyYW1lRGF0YSYgb3RoZXIpIHsgb3BlcmF0
b3I9KG90aGVyKTsgfQorCisgICAgfkltYWdlRnJhbWVEYXRhKCk7CisKKyAgICBJbWFnZUZyYW1l
RGF0YSYgb3BlcmF0b3I9KGNvbnN0IEltYWdlRnJhbWVEYXRhJiBvdGhlcik7CisgICAgCisgICAg
dW5zaWduZWQgY2xlYXIoQ2FjaGluZyk7CisgICAgQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9y
KCkgY29uc3Q7CisgICAgYm9vbCBpc0FsbW9zdFNvbGlkQ29sb3IoKSBjb25zdDsKKyAgICAKKyAg
ICBEZWNvZGluZ1N0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1czsgfQorICAg
IGJvb2wgaXNDb21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzID09IERlY29kaW5nU3Rh
dHVzOjpDb21wbGV0ZTsgfQorICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIGhhc1Bp
eGVscygpID8gcGl4ZWxzKCktPnNpemUoKSA6IG1fc2l6ZTsgfQorICAgIHVuc2lnbmVkIGZyYW1l
Qnl0ZXMoKSBjb25zdCB7IHJldHVybiBoYXNJbWFnZSgpID8gbV9zaXplLmFyZWEoKSAqIHNpemVv
ZihSR0JBMzIpIDogMDsgfQorICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlKCkgY29uc3QgeyByZXR1
cm4gbV9pbWFnZTsgfQorICAgIEJpdG1hcFBpeGVscyogcGl4ZWxzKCkgY29uc3QgeyByZXR1cm4g
bV9waXhlbHMgPyBtX3BpeGVscy5nZXQoKSA6IG51bGxwdHI7IH0KKyAgICAKKyAgICBJbWFnZU9y
aWVudGF0aW9uIG9yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9vcmllbnRhdGlvbjsgfQor
ICAgIFN1YnNhbXBsaW5nTGV2ZWwgc3Vic2FtcGxpbmdMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3Vic2FtcGxpbmdMZXZlbDsgfQorICAgIGZsb2F0IGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9kdXJhdGlvbjsgfQorICAgIAorICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdCB7IHJldHVybiBt
X2hhc0FscGhhOyB9CisgICAgYm9vbCBoYXNJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7
IH0KKyAgICBib29sIGhhc01ldGFkYXRhKCkgY29uc3QgeyByZXR1cm4gIW1fc2l6ZS5pc0VtcHR5
KCk7IH0KKyAgICBib29sIGhhc1BpeGVscygpIGNvbnN0IHsgcmV0dXJuIHBpeGVscygpOyB9Cisg
ICAgCitwcml2YXRlOgorICAgIHZvaWQgY2xlYXJTdWJJbWFnZXMoKTsKKworICAgIHZvaWQgc2V0
U3RhdHVzKERlY29kaW5nU3RhdHVzIHN0YXR1cykgeyBtX3N0YXR1cyA9IHN0YXR1czsgfQorICAg
IHZvaWQgc2V0T3JpZW50YXRpb24oSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbikgeyBtX29y
aWVudGF0aW9uID0gb3JpZW50YXRpb247IH07CisgICAgdm9pZCBzZXREdXJhdGlvbih1bnNpZ25l
ZCBkdXJhdGlvbikgeyBtX2R1cmF0aW9uID0gZHVyYXRpb247IH0KKyAgICB2b2lkIHNldEhhc0Fs
cGhhKGJvb2wgaGFzQWxwaGEpIHsgbV9oYXNBbHBoYSA9IGhhc0FscGhhOyB9CisgICAgCisgICAg
RGVjb2RpbmdTdGF0dXMgbV9zdGF0dXMgeyBEZWNvZGluZ1N0YXR1czo6RW1wdHkgfTsKKyAgICBJ
bnRTaXplIG1fc2l6ZTsKKyAgICBOYXRpdmVJbWFnZVB0ciBtX2ltYWdlOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxCaXRtYXBQaXhlbHM+IG1fcGl4ZWxzOworICAgIAorICAgIEltYWdlT3JpZW50YXRp
b24gbV9vcmllbnRhdGlvbiB7IERlZmF1bHRJbWFnZU9yaWVudGF0aW9uIH07CisgICAgU3Vic2Ft
cGxpbmdMZXZlbCBtX3N1YnNhbXBsaW5nTGV2ZWwgeyAwIH07CisgICAgZmxvYXQgbV9kdXJhdGlv
biB7IDAgfTsKKyAgICBib29sIG1faGFzQWxwaGEgeyB0cnVlIH07Cit9OworICAgIAorfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuY3BwCmluZGV4
IGRkZDhhNTViYTA5MDZjNTg2NmExOTJjZjhlNDE0ZWE3MDdiNzI4YWMuLjgyZjZlMmQ2ZTQ1NDMz
ZGExYTdkNTZiMzcwZGZhNjFhNGM0MTkxMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9JbWFnZVNvdXJjZS5jcHAKQEAgLTIyNCw2ICsyMjQsMTEgQEAgTmF0aXZl
SW1hZ2VQdHIgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lSW1hZ2VBdEluZGV4KHNpemVfdCBpbmRl
eCwgU3Vic2FtcGxpbmdMZXYKICAgICByZXR1cm4gaW5pdGlhbGl6ZWQoKSA/IG1fZGVjb2Rlci0+
Y3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgsIHN1YnNhbXBsaW5nTGV2ZWwpIDogbnVsbHB0
cjsKIH0KIAorSW1hZ2VGcmFtZURhdGEgSW1hZ2VTb3VyY2U6OmNyZWF0ZUZyYW1lRGF0YUF0SW5k
ZXgoc2l6ZV90IGluZGV4LCBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5nTGV2ZWwsIEltYWdl
RnJhbWVEYXRhOjpDYWNoaW5nIGNhY2hpbmcpCit7CisgICAgcmV0dXJuIGluaXRpYWxpemVkKCkg
PyBJbWFnZUZyYW1lRGF0YSgqbV9kZWNvZGVyLCBpbmRleCwgc3Vic2FtcGxpbmdMZXZlbCwgY2Fj
aGluZykgOiBJbWFnZUZyYW1lRGF0YSgpOworfQorICAgIAogdm9pZCBJbWFnZVNvdXJjZTo6ZHVt
cChUZXh0U3RyZWFtJiB0cykgY29uc3QKIHsKICAgICBpZiAobV9hbGxvd1N1YnNhbXBsaW5nKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlU291cmNlLmgKaW5kZXgg
NjAzNTczOWI3ZThiMDk2ZGM4ZGZlOWM1MzBhNDJjNmYyOTFiZGEwMC4uYTQwYzdjZTkzMDdjZGFk
ZjA3OWFiNzAxYTgyNzk5YjY5MDUyOWQ0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW1hZ2VTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZVNvdXJjZS5oCkBAIC0yNyw2ICsyNyw3IEBACiAjaWZuZGVmIEltYWdl
U291cmNlX2gKICNkZWZpbmUgSW1hZ2VTb3VyY2VfaAogCisjaW5jbHVkZSAiSW1hZ2VGcmFtZURh
dGEuaCIKICNpbmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiSW50UG9pbnQu
aCIKICNpbmNsdWRlICJOYXRpdmVJbWFnZVB0ci5oIgpAQCAtNjMsOSArNjQsNiBAQCBjb25zdCBp
bnQgY0FuaW1hdGlvbkxvb3BPbmNlID0gMDsKIGNvbnN0IGludCBjQW5pbWF0aW9uTG9vcEluZmlu
aXRlID0gLTE7CiBjb25zdCBpbnQgY0FuaW1hdGlvbk5vbmUgPSAtMjsKIAotLy8gU3Vic2FtcGxp
bmdMZXZlbC4gMCBpcyBubyBzdWJzYW1wbGluZywgMSBpcyBoYWxmIGRpbWVuc2lvbnMgb24gZWFj
aCBheGlzIGV0Yy4KLXR5cGVkZWYgc2hvcnQgU3Vic2FtcGxpbmdMZXZlbDsKLQogY2xhc3MgSW1h
Z2VTb3VyY2UgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEltYWdlU291cmNlKTsKICAgICBm
cmllbmQgY2xhc3MgQml0bWFwSW1hZ2U7CkBAIC0xMzIsMTggKzEzMCwxOSBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBhbGxvd1N1YnNhbXBsaW5nT2ZGcmFtZUF0SW5kZXgoc2l6ZV90KSBjb25zdDsKICAg
ICAKICAgICAvLyBTaXplIG9mIG9wdGlvbmFsbHkgc3Vic2FtcGxlZCBmcmFtZS4KLSAgICBJbnRT
aXplIGZyYW1lU2l6ZUF0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gMCwgUmVzcGVj
dEltYWdlT3JpZW50YXRpb25FbnVtID0gRG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikgY29u
c3Q7CisgICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZl
bCA9IERlZmF1bHRTdWJzYW1wbGluZ0xldmVsLCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0g
PSBEb05vdFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKSBjb25zdDsKICAgICAKICAgICAvLyBSZXR1
cm4gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgZGVjb2RlZCBmcmFtZS4gSWYgdGhlIGZyYW1l
IGlzIG5vdCB5ZXQKICAgICAvLyBkZWNvZGVkIHRoZW4gcmV0dXJuIDAuCi0gICAgdW5zaWduZWQg
ZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gMCkgY29uc3Q7Cisg
ICAgdW5zaWduZWQgZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0g
RGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwpIGNvbnN0OwogICAgIAogICAgIGZsb2F0IGZyYW1lRHVy
YXRpb25BdEluZGV4KHNpemVfdCk7CiAgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbkF0
SW5kZXgoc2l6ZV90KSBjb25zdDsgLy8gRVhJRiBpbWFnZSBvcmllbnRhdGlvbgogICAgIAogICAg
IC8vIENhbGxlcnMgc2hvdWxkIG5vdCBjYWxsIHRoaXMgYWZ0ZXIgY2FsbGluZyBjbGVhcigpIHdp
dGggYSBoaWdoZXIgaW5kZXg7CiAgICAgLy8gc2VlIGNvbW1lbnRzIG9uIGNsZWFyKCkgYWJvdmUu
Ci0gICAgTmF0aXZlSW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90LCBTdWJz
YW1wbGluZ0xldmVsID0gMCk7CisgICAgTmF0aXZlSW1hZ2VQdHIgY3JlYXRlRnJhbWVJbWFnZUF0
SW5kZXgoc2l6ZV90LCBTdWJzYW1wbGluZ0xldmVsID0gRGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwp
OworICAgIEltYWdlRnJhbWVEYXRhIGNyZWF0ZUZyYW1lRGF0YUF0SW5kZXgoc2l6ZV90LCBTdWJz
YW1wbGluZ0xldmVsID0gRGVmYXVsdFN1YnNhbXBsaW5nTGV2ZWwsIEltYWdlRnJhbWVEYXRhOjpD
YWNoaW5nID0gSW1hZ2VGcmFtZURhdGE6OkNhY2hpbmc6Ok1ldGFkYXRhQW5kSW1hZ2UpOwogICAg
IAogcHJpdmF0ZToKICAgICB2b2lkIGNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1JbWFnZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmFiN2FlYTQ4OWYzZWIyYTgyODc3MWMyMTAzZThkNGQwYmUxN2JlNWQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0Zm9ybUltYWdl
LmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKKyNp
bmNsdWRlICJJbWFnZU9yaWVudGF0aW9uLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VQdHIuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDb2xvcjsKK2NsYXNzIEZsb2F0UmVjdDsK
K2NsYXNzIEludFNpemU7CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CisKK2NsYXNzIFBsYXRmb3Jt
SW1hZ2UgeworcHVibGljOgorICAgIFBsYXRmb3JtSW1hZ2UoY29uc3QgTmF0aXZlSW1hZ2VQdHIm
IGltYWdlKQorICAgICAgICA6IG1faW1hZ2UoaW1hZ2UpCisgICAgeworICAgIH0KKworICAgIGJv
b2wgaXNOaWwoKSBjb25zdCB7IHJldHVybiAhbV9pbWFnZTsgfQorICAgIHZvaWQgY2xlYXJTdWJJ
bWFnZXMoKTsKKworICAgIEludFNpemUgc2l6ZSgpIGNvbnN0OworICAgIGJvb2wgaGFzQWxwaGEo
KSBjb25zdDsKKyAgICBDb2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoKSBjb25zdDsKKyAgICBi
b29sIGlzQWxtb3N0U29saWRDb2xvcigpIGNvbnN0OworICAgIHZvaWQgZHJhdyhHcmFwaGljc0Nv
bnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1Jl
Y3QsIGNvbnN0IEludFNpemUmIHNyY1NpemUsIENvbXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUs
IGNvbnN0IEltYWdlT3JpZW50YXRpb24mKSBjb25zdDsKKworICAgIHN0YXRpYyBmbG9hdCBzdWJz
YW1wbGluZ1NjYWxlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCk7CisKK3ByaXZhdGU6CisjaWYgVVNFKENHKQorICAg
IENHSW1hZ2VSZWYgY2dJbWFnZVJlZigpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2UgPyBtX2ltYWdl
LmdldCgpIDogbnVsbHB0cjsgfQorI2VuZGlmCisgICAgTmF0aXZlSW1hZ2VQdHIgbV9pbWFnZTsK
K307CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU3RyZWFtQVZGT2JqQy5tbQppbmRleCBmNGMxNDU3YmJiMjU1NzU0
ZjAwYTA2MjVlZTgzZTA0ZGE3YzZlZmNmLi5kNTIwZjVkNTg1YWM2MGRiYWVlMjU1ZTFiODNjMjRk
YzY4NzIxMGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9h
dmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakMubW0K
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMv
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTdHJlYW1BVkZPYmpDLm1tCkBAIC0yMTIsNyArMjEyLDcg
QEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVN0cmVhbUFWRk9iakM6OnVwZGF0ZURpc3Bs
YXlNb2RlKCkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgbV9wYXVzZWRJbWFnZSA9IGltYWdlLT5nZXRDR0ltYWdlUmVm
KCk7CisgICAgICAgICAgICAgICAgbV9wYXVzZWRJbWFnZSA9IGltYWdlLT5uYXRpdmVJbWFnZUZv
ckN1cnJlbnRGcmFtZSgpOwogICAgICAgICAgICAgICAgIGlmICghbV9wYXVzZWRJbWFnZSkgewog
ICAgICAgICAgICAgICAgICAgICBtX2Rpc3BsYXlNb2RlID0gUGFpbnRJdEJsYWNrOwogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0JpdG1hcEltYWdlQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDE3NzIyYmVjNTNhYjhhMDhhOGRhODUyOGI5ZTBkN2M0ZDBjZDQx
MzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vQml0bWFwSW1hZ2VDYWlyby5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIw
MDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+Ci0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCaXRt
YXBJbWFnZS5oIgotCi0jaWYgVVNFKENBSVJPKQotCi0jaW5jbHVkZSAiQ2Fpcm9VdGlsaXRpZXMu
aCIKLSNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0
Q2Fpcm8uaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgPGNhaXJvLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIE5hdGl2ZUltYWdlIHsKLQotSW50U2l6ZSBzaXpl
KGNvbnN0IFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+JiBpbWFnZSkKLXsKLSAgICByZXR1cm4gY2Fp
cm9TdXJmYWNlU2l6ZShpbWFnZS5nZXQoKSk7Ci19Ci0KLWJvb2wgaGFzQWxwaGEoY29uc3QgUmVm
UHRyPGNhaXJvX3N1cmZhY2VfdD4mIGltYWdlKQotewotICAgIHJldHVybiBjYWlyb19zdXJmYWNl
X2dldF9jb250ZW50KGltYWdlLmdldCgpKSAhPSBDQUlST19DT05URU5UX0NPTE9SOwotfQotCi1D
b2xvciBzaW5nbGVQaXhlbFNvbGlkQ29sb3IoY29uc3QgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4m
IGltYWdlKQotewotICAgIEFTU0VSVChpbWFnZSk7Ci0gICAgCi0gICAgaWYgKE5hdGl2ZUltYWdl
OjpzaXplKGltYWdlKSAhPSBJbnRTaXplKDEsIDEpKQotICAgICAgICByZXR1cm4gQ29sb3IoKTsK
LQotICAgIGlmIChjYWlyb19zdXJmYWNlX2dldF90eXBlKGltYWdlLmdldCgpKSAhPSBDQUlST19T
VVJGQUNFX1RZUEVfSU1BR0UpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotCi0gICAgUkdCQTMy
KiBwaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFJHQkEzMio+KGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X2RhdGEoaW1hZ2UuZ2V0KCkpKTsKLSAgICByZXR1cm4gY29sb3JGcm9tUHJlbXVsdGlw
bGllZEFSR0IoKnBpeGVsKTsKLX0KLQotfQotCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCwKLSAgICBCbGVuZE1vZGUgYmxlbmRNb2RlLCBJ
bWFnZU9yaWVudGF0aW9uRGVzY3JpcHRpb24gZGVzY3JpcHRpb24pCi17Ci0gICAgaWYgKCFkc3Qu
d2lkdGgoKSB8fCAhZHN0LmhlaWdodCgpIHx8ICFzcmMud2lkdGgoKSB8fCAhc3JjLmhlaWdodCgp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdGFydEFuaW1hdGlvbigpOwotCi0gICAgYXV0byBz
dXJmYWNlID0gZnJhbWVJbWFnZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwotICAgIGlmICghc3Vy
ZmFjZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5ZXQuCi0g
ICAgICAgIHJldHVybjsKLQotICAgIENvbG9yIGNvbG9yID0gc2luZ2xlUGl4ZWxTb2xpZENvbG9y
KCk7Ci0gICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkgewotICAgICAgICBmaWxsV2l0aFNvbGlkQ29s
b3IoY29udGV4dCwgZHN0LCBjb2xvciwgb3ApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgY29udGV4dC5zYXZlKCk7Ci0KLSAgICAvLyBTZXQgdGhlIGNvbXBvc2l0aW5nIG9wZXJhdGlv
bi4KLSAgICBpZiAob3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciAmJiBibGVuZE1vZGUgPT0gQmxl
bmRNb2RlTm9ybWFsICYmICFmcmFtZUhhc0FscGhhQXRJbmRleChtX2N1cnJlbnRGcmFtZSkpCi0g
ICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOwotICAg
IGVsc2UKLSAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3AsIGJsZW5kTW9k
ZSk7Ci0KLSNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQotICAgIEludFNp
emUgc2NhbGVkU2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUoc3VyZmFjZS5nZXQoKSk7Ci0gICAgRmxv
YXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGxpbmco
c3JjLCBzY2FsZWRTaXplKTsKLSNlbHNlCi0gICAgRmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdChz
cmMpOwotI2VuZGlmCi0KLSAgICBJbWFnZU9yaWVudGF0aW9uIGZyYW1lT3JpZW50YXRpb24oZGVz
Y3JpcHRpb24uaW1hZ2VPcmllbnRhdGlvbigpKTsKLSAgICBpZiAoZGVzY3JpcHRpb24ucmVzcGVj
dEltYWdlT3JpZW50YXRpb24oKSA9PSBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikKLSAgICAgICAg
ZnJhbWVPcmllbnRhdGlvbiA9IGZyYW1lT3JpZW50YXRpb25BdEluZGV4KG1fY3VycmVudEZyYW1l
KTsKLQotICAgIEZsb2F0UmVjdCBkc3RSZWN0ID0gZHN0OwotCi0gICAgaWYgKGZyYW1lT3JpZW50
YXRpb24gIT0gRGVmYXVsdEltYWdlT3JpZW50YXRpb24pIHsKLSAgICAgICAgLy8gSW1hZ2VPcmll
bnRhdGlvbiBleHBlY3RzIHRoZSBvcmlnaW4gdG8gYmUgYXQgKDAsIDApLgotICAgICAgICBjb250
ZXh0LnRyYW5zbGF0ZShkc3RSZWN0LngoKSwgZHN0UmVjdC55KCkpOwotICAgICAgICBkc3RSZWN0
LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoKSk7Ci0gICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKGZy
YW1lT3JpZW50YXRpb24udHJhbnNmb3JtRnJvbURlZmF1bHQoZHN0UmVjdC5zaXplKCkpKTsKLSAg
ICAgICAgaWYgKGZyYW1lT3JpZW50YXRpb24udXNlc1dpZHRoQXNIZWlnaHQoKSkgewotICAgICAg
ICAgICAgLy8gVGhlIGRlc3RpbmF0aW9uIHJlY3RhbmdsZSB3aWxsIGhhdmUgaXQncyB3aWR0aCBh
bmQgaGVpZ2h0IGFscmVhZHkgcmV2ZXJzZWQgZm9yIHRoZSBvcmllbnRhdGlvbiBvZgotICAgICAg
ICAgICAgLy8gdGhlIGltYWdlLCBhcyBpdCB3YXMgbmVlZGVkIGZvciBwYWdlIGxheW91dCwgc28g
d2UgbmVlZCB0byByZXZlcnNlIGl0IGJhY2sgaGVyZS4KLSAgICAgICAgICAgIGRzdFJlY3QgPSBG
bG9hdFJlY3QoZHN0UmVjdC54KCksIGRzdFJlY3QueSgpLCBkc3RSZWN0LmhlaWdodCgpLCBkc3RS
ZWN0LndpZHRoKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29udGV4dC5wbGF0Zm9ybUNv
bnRleHQoKS0+ZHJhd1N1cmZhY2VUb0NvbnRleHQoc3VyZmFjZS5nZXQoKSwgZHN0UmVjdCwgYWRq
dXN0ZWRTcmNSZWN0LCBjb250ZXh0KTsKLQotICAgIGNvbnRleHQucmVzdG9yZSgpOwotCi0gICAg
aWYgKGltYWdlT2JzZXJ2ZXIoKSkKLSAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRo
aXMpOwotfQotCi1ib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQotewot
ICAgIGlmIChjbGVhck1ldGFkYXRhKQotICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOwot
Ci0gICAgaWYgKG1faW1hZ2UpIHsKLSAgICAgICAgbV9pbWFnZSA9IG51bGxwdHI7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFVTRShDQUlSTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjcwYWRhZWMyNzBlMzFiMDU0YWZjNWY2NmQ0ODI4OGFlYmYwNjFlM2EK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCisKKyNpZiBVU0UoQ0FJUk8pCisKKyNpbmNsdWRlICJD
YWlyb1V0aWxpdGllcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCisjaW5j
bHVkZSA8Y2Fpcm8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFBsYXRmb3JtSW1h
Z2U6OmNsZWFyU3ViSW1hZ2VzKCkKK3sKK30KKworSW50U2l6ZSBQbGF0Zm9ybUltYWdlOjpzaXpl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNOaWwoKSA/IEludFNpemUoKSA6IGNhaXJvU3VyZmFj
ZVNpemUobV9pbWFnZS5nZXQoKSk7Cit9CisKK2Jvb2wgUGxhdGZvcm1JbWFnZTo6aGFzQWxwaGEo
KSBjb25zdAoreworICAgIHJldHVybiBpc05pbCgpIHx8IGNhaXJvX3N1cmZhY2VfZ2V0X2NvbnRl
bnQobV9pbWFnZS5nZXQoKSkgIT0gQ0FJUk9fQ09OVEVOVF9DT0xPUjsKK30KKworQ29sb3IgUGxh
dGZvcm1JbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29uc3QKK3sKKyAgICBpZiAoaXNO
aWwoKSB8fCBzaXplKCkgIT0gSW50U2l6ZSgxLCAxKSkKKyAgICAgICAgcmV0dXJuIENvbG9yKCk7
CisKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9nZXRfdHlwZShtX2ltYWdlLmdldCgpKSAhPSBDQUlS
T19TVVJGQUNFX1RZUEVfSU1BR0UpCisgICAgICAgIHJldHVybiBDb2xvcigpOworCisgICAgUkdC
QTMyKiBwaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPFJHQkEzMio+KGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2RhdGEobV9pbWFnZS5nZXQoKSkpOworICAgIHJldHVybiBjb2xvckZyb21QcmVt
dWx0aXBsaWVkQVJHQigqcGl4ZWwpOworfQorCitib29sIFBsYXRmb3JtSW1hZ2U6OmlzQWxtb3N0
U29saWRDb2xvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitmbG9hdCBQbGF0
Zm9ybUltYWdlOjpzdWJzYW1wbGluZ1NjYWxlKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYpCit7CisgICAgcmV0dXJuIDE7Cit9CisKK3ZvaWQgUGxh
dGZvcm1JbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgSW50U2l6ZSYsIENv
bXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9kZSwgY29uc3QgSW1hZ2VPcmllbnRhdGlv
biYgb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgY29udGV4dC5zYXZlKCk7CisgICAgCisgICAg
Ly8gU2V0IHRoZSBjb21wb3NpdGluZyBvcGVyYXRpb24uCisgICAgaWYgKG9wID09IENvbXBvc2l0
ZVNvdXJjZU92ZXIgJiYgbW9kZSA9PSBCbGVuZE1vZGVOb3JtYWwgJiYgIWhhc0FscGhhKCkpCisg
ICAgICAgIGNvbnRleHQuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOworICAg
IGVsc2UKKyAgICAgICAgY29udGV4dC5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3AsIG1vZGUpOwor
ICAgICAgICAKKyNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQorICAgIElu
dFNpemUgc2NhbGVkU2l6ZSA9IGNhaXJvU3VyZmFjZVNpemUobV9pbWFnZS5nZXQoKSk7CisgICAg
RmxvYXRSZWN0IGFkanVzdGVkU3JjUmVjdCA9IGFkanVzdFNvdXJjZVJlY3RGb3JEb3duU2FtcGxp
bmcoc3JjUmVjdCwgc2NhbGVkU2l6ZSk7CisjZWxzZQorICAgIEZsb2F0UmVjdCBhZGp1c3RlZFNy
Y1JlY3Qoc3JjUmVjdCk7CisjZW5kaWYKKyAgICAgICAgCisgICAgRmxvYXRSZWN0IGFkanVzdGVk
RGVzdFJlY3QgPSBkZXN0UmVjdDsKKyAgICAgICAgCisgICAgaWYgKG9yaWVudGF0aW9uICE9IERl
ZmF1bHRJbWFnZU9yaWVudGF0aW9uKSB7CisgICAgICAgIC8vIEltYWdlT3JpZW50YXRpb24gZXhw
ZWN0cyB0aGUgb3JpZ2luIHRvIGJlIGF0ICgwLCAwKS4KKyAgICAgICAgY29udGV4dC50cmFuc2xh
dGUoZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCkpOworICAgICAgICBhZGp1c3RlZERlc3RSZWN0
LnNldExvY2F0aW9uKEZsb2F0UG9pbnQoKSk7CisgICAgICAgIGNvbnRleHQuY29uY2F0Q1RNKG9y
aWVudGF0aW9uLnRyYW5zZm9ybUZyb21EZWZhdWx0KGFkanVzdGVkRGVzdFJlY3Quc2l6ZSgpKSk7
CisgICAgICAgIGlmIChvcmllbnRhdGlvbi51c2VzV2lkdGhBc0hlaWdodCgpKSB7CisgICAgICAg
ICAgICAvLyBUaGUgZGVzdGluYXRpb24gcmVjdGFuZ2xlIHdpbGwgaGF2ZSBpdCdzIHdpZHRoIGFu
ZCBoZWlnaHQgYWxyZWFkeSByZXZlcnNlZCBmb3IgdGhlIG9yaWVudGF0aW9uIG9mCisgICAgICAg
ICAgICAvLyB0aGUgaW1hZ2UsIGFzIGl0IHdhcyBuZWVkZWQgZm9yIHBhZ2UgbGF5b3V0LCBzbyB3
ZSBuZWVkIHRvIHJldmVyc2UgaXQgYmFjayBoZXJlLgorICAgICAgICAgICAgYWRqdXN0ZWREZXN0
UmVjdC5zZXRTaXplKGFkanVzdGVkRGVzdFJlY3Quc2l6ZSgpLnRyYW5zcG9zZWRTaXplKCkpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1N1
cmZhY2VUb0NvbnRleHQobV9pbWFnZS5nZXQoKSwgYWRqdXN0ZWREZXN0UmVjdCwgYWRqdXN0ZWRT
cmNSZWN0LCBjb250ZXh0KTsKKworICAgIGNvbnRleHQucmVzdG9yZSgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoQ0FJUk8pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2M4MWExNzBiZTc5YWU2YmU2Y2FjZGM5OWY0YzM5OGNh
YWY0MjZkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsMjA2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkJpdG1hcEltYWdlLmgiCi0KLSNpZiBVU0UoQ0cpCi0KLSNpbmNsdWRlICJDb3JlR3JhcGhp
Y3NTUEkuaCIKLSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJHZW9tZXRy
eVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCi0jaW5jbHVkZSAi
SW1hZ2VPYnNlcnZlci5oIgotI2luY2x1ZGUgIlN1YmltYWdlQ2FjaGVXaXRoVGltZXIuaCIKLSNp
bmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0KLSNpZiBVU0UoQVBQS0lUKQotI2luY2x1ZGUgPEFw
cGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgotI2VuZGlmCi0KLSNpZiBQ
TEFURk9STShDT0NPQSkKLSNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCi0jZW5k
aWYKLQotI2lmIFBMQVRGT1JNKFdJTikKLSNpbmNsdWRlIDxXZWJLaXRTeXN0ZW1JbnRlcmZhY2Uv
V2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1uYW1lc3BhY2UgTmF0aXZlSW1hZ2UgewotCi1JbnRTaXplIHNpemUoY29uc3QgUmV0YWluUHRy
PENHSW1hZ2VSZWY+JiBpbWFnZSkKLXsKLSAgICBBU1NFUlQoaW1hZ2UpOwotICAgIHJldHVybiBJ
bnRTaXplKENHSW1hZ2VHZXRXaWR0aChpbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQoaW1h
Z2UuZ2V0KCkpKTsKLX0KLQotYm9vbCBoYXNBbHBoYShjb25zdCBSZXRhaW5QdHI8Q0dJbWFnZVJl
Zj4mKQotewotICAgIC8vIEZJWE1FOiBBbnN3ZXIgY29ycmVjdGx5IHRoZSBxdWVzdGlvbjogZG9l
cyB0aGUgQ0dJbWFnZVJlZiBoYXZlIGFscGhhIGNoYW5ubmVsPwotICAgIHJldHVybiB0cnVlOwot
fQotICAgIAotQ29sb3Igc2luZ2xlUGl4ZWxTb2xpZENvbG9yKGNvbnN0IFJldGFpblB0cjxDR0lt
YWdlUmVmPiYgaW1hZ2UpCi17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICAKLSAgICBpZiAoTmF0
aXZlSW1hZ2U6OnNpemUoaW1hZ2UpICE9IEludFNpemUoMSwgMSkpCi0gICAgICAgIHJldHVybiBD
b2xvcigpOwotICAgIAotICAgIHVuc2lnbmVkIGNoYXIgcGl4ZWxbNF07IC8vIFJHQkEKLSAgICBh
dXRvIGJpdG1hcENvbnRleHQgPSBhZG9wdENGKENHQml0bWFwQ29udGV4dENyZWF0ZShwaXhlbCwg
MSwgMSwgOCwgc2l6ZW9mKHBpeGVsKSwgc1JHQkNvbG9yU3BhY2VSZWYoKSwKLSAgICAgICAga0NH
SW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcpKTsK
LQotICAgIGlmICghYml0bWFwQ29udGV4dCkKLSAgICAgICAgcmV0dXJuIENvbG9yKCk7Ci0gICAg
Ci0gICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGJpdG1hcENvbnRleHQuZ2V0KCksIGtDR0JsZW5k
TW9kZUNvcHkpOwotICAgIENHQ29udGV4dERyYXdJbWFnZShiaXRtYXBDb250ZXh0LmdldCgpLCBD
R1JlY3RNYWtlKDAsIDAsIDEsIDEpLCBpbWFnZS5nZXQoKSk7Ci0gICAgCi0gICAgaWYgKCFwaXhl
bFszXSkKLSAgICAgICAgcmV0dXJuIENvbG9yKDAsIDAsIDAsIDApOwotCi0gICAgcmV0dXJuIENv
bG9yKHBpeGVsWzBdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICogMjU1IC8gcGl4ZWxbM10s
IHBpeGVsWzJdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKLX0KLQotfQotCi1ib29sIEZy
YW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRhKQotewotICAgIGlmIChjbGVhck1ldGFk
YXRhKQotICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZhbHNlOwotCi0gICAgbV9zdWJzYW1wbGlu
Z0xldmVsID0gMDsKLQotICAgIGlmIChtX2ltYWdlKSB7Ci0jaWYgQ0FDSEVfU1VCSU1BR0VTCi0g
ICAgICAgIHN1YmltYWdlQ2FjaGUoKS5jbGVhckltYWdlKG1faW1hZ2UuZ2V0KCkpOwotI2VuZGlm
Ci0gICAgICAgIG1faW1hZ2UgPSBudWxscHRyOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1DR0ltYWdlUmVmIEJpdG1hcEltYWdlOjpnZXRDR0lt
YWdlUmVmKCkKLXsKLSAgICByZXR1cm4gZnJhbWVJbWFnZUF0SW5kZXgoMCkuZ2V0KCk7Ci19Ci0K
LUNHSW1hZ2VSZWYgQml0bWFwSW1hZ2U6OmdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6ZShjb25zdCBJ
bnRTaXplJiBzaXplKQotewotICAgIHNpemVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgQ0dJbWFnZVJlZiBj
Z0ltYWdlID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkuZ2V0KCk7Ci0gICAgICAgIGlmIChjZ0ltYWdl
ICYmIEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGNnSW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGNn
SW1hZ2UpKSA9PSBzaXplKQotICAgICAgICAgICAgcmV0dXJuIGNnSW1hZ2U7Ci0gICAgfQotCi0g
ICAgLy8gRmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgQ0dJbWFnZVJlZiBpZiB3ZSBjYW4ndCBmaW5k
IHRoZSByaWdodCBzaXplCi0gICAgcmV0dXJuIGdldENHSW1hZ2VSZWYoKTsKLX0KLQotUmV0YWlu
UHRyPENGQXJyYXlSZWY+IEJpdG1hcEltYWdlOjpnZXRDR0ltYWdlQXJyYXkoKQotewotICAgIHNp
emVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKLSAgICBpZiAoIWNvdW50KQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICAKLSAgICBDRk11dGFibGVBcnJheVJlZiBhcnJheSA9IENGQXJyYXlD
cmVhdGVNdXRhYmxlKE5VTEwsIGNvdW50LCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKTsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgaWYgKENHSW1hZ2VS
ZWYgY3VyckZyYW1lID0gZnJhbWVJbWFnZUF0SW5kZXgoaSkuZ2V0KCkpCi0gICAgICAgICAgICBD
RkFycmF5QXBwZW5kVmFsdWUoYXJyYXksIGN1cnJGcmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBh
ZG9wdENGKGFycmF5KTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRl
eHQmIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3AsIEJsZW5kTW9kZSBibGVuZE1vZGUs
IEltYWdlT3JpZW50YXRpb25EZXNjcmlwdGlvbiBkZXNjcmlwdGlvbikKLXsKLSNpZiBQTEFURk9S
TShJT1MpCi0gICAgc3RhcnRBbmltYXRpb24oRG9Ob3RDYXRjaFVwKTsKLSNlbHNlCi0gICAgc3Rh
cnRBbmltYXRpb24oKTsKLSNlbmRpZgotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGltYWdl
OwotICAgIC8vIE5ldmVyIHVzZSBzdWJzYW1wbGVkIGltYWdlcyBmb3IgZHJhd2luZyBpbnRvIFBE
RiBjb250ZXh0cy4KLSAgICBpZiAod2tDR0NvbnRleHRJc1BERkNvbnRleHQoY3R4dC5wbGF0Zm9y
bUNvbnRleHQoKSkpCi0gICAgICAgIGltYWdlID0gY29weVVuc2NhbGVkRnJhbWVJbWFnZUF0SW5k
ZXgobV9jdXJyZW50RnJhbWUpOwotICAgIGVsc2UgewotICAgICAgICBDR1JlY3QgdHJhbnNmb3Jt
ZWREZXN0aW5hdGlvblJlY3QgPSBDR1JlY3RBcHBseUFmZmluZVRyYW5zZm9ybShkZXN0UmVjdCwg
Q0dDb250ZXh0R2V0Q1RNKGN0eHQucGxhdGZvcm1Db250ZXh0KCkpKTsKLSAgICAgICAgZmxvYXQg
c3Vic2FtcGxpbmdTY2FsZSA9IHN0ZDo6bWluPGZsb2F0PigxLCBzdGQ6Om1heCh0cmFuc2Zvcm1l
ZERlc3RpbmF0aW9uUmVjdC5zaXplLndpZHRoIC8gc3JjUmVjdC53aWR0aCgpLCB0cmFuc2Zvcm1l
ZERlc3RpbmF0aW9uUmVjdC5zaXplLmhlaWdodCAvIHNyY1JlY3QuaGVpZ2h0KCkpKTsKLQotICAg
ICAgICBpbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KG1fY3VycmVudEZyYW1lLCBzdWJzYW1wbGlu
Z1NjYWxlKTsKLSAgICB9Ci0KLSAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJseSB3
ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIENv
bG9yIGNvbG9yID0gc2luZ2xlUGl4ZWxTb2xpZENvbG9yKCk7Ci0gICAgaWYgKGNvbG9yLmlzVmFs
aWQoKSkgewotICAgICAgICBmaWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwgZGVzdFJlY3QsIGNvbG9y
LCBjb21wb3NpdGVPcCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBTdWJzYW1w
bGluZyBtYXkgaGF2ZSBnaXZlbiB1cyBhbiBpbWFnZSB0aGF0IGlzIHNtYWxsZXIgdGhhbiBzaXpl
KCkuCi0gICAgSW50U2l6ZSBpbWFnZVNpemUoQ0dJbWFnZUdldFdpZHRoKGltYWdlLmdldCgpKSwg
Q0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSkpOwotICAgIAotICAgIC8vIHNyY1JlY3QgaXMg
aW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB1bnN1YnNhbXBsZWQgaW1hZ2UsIHNvIHdlIGhhdmUg
dG8gbWFwIGl0IHRvIHRoZSBzdWJzYW1wbGVkIGltYWdlLgotICAgIEZsb2F0UmVjdCBzY2FsZWRT
cmNSZWN0ID0gc3JjUmVjdDsKLSAgICBpZiAoaW1hZ2VTaXplICE9IG1fc2l6ZSkgewotICAgICAg
ICBGbG9hdFJlY3Qgb3JpZ2luYWxJbWFnZUJvdW5kcyhGbG9hdFBvaW50KCksIG1fc2l6ZSk7Ci0g
ICAgICAgIEZsb2F0UmVjdCBzdWJzYW1wbGVkSW1hZ2VCb3VuZHMoRmxvYXRQb2ludCgpLCBpbWFn
ZVNpemUpOwotICAgICAgICBzY2FsZWRTcmNSZWN0ID0gbWFwUmVjdChzcmNSZWN0LCBvcmlnaW5h
bEltYWdlQm91bmRzLCBzdWJzYW1wbGVkSW1hZ2VCb3VuZHMpOwotICAgIH0KLSAgICAKLSAgICBJ
bWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uOwotICAgIGlmIChkZXNjcmlwdGlvbi5yZXNwZWN0
SW1hZ2VPcmllbnRhdGlvbigpID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQotICAgICAgICBv
cmllbnRhdGlvbiA9IGZyYW1lT3JpZW50YXRpb25BdEluZGV4KG1fY3VycmVudEZyYW1lKTsKLQot
ICAgIGN0eHQuZHJhd05hdGl2ZUltYWdlKGltYWdlLCBpbWFnZVNpemUsIGRlc3RSZWN0LCBzY2Fs
ZWRTcmNSZWN0LCBjb21wb3NpdGVPcCwgYmxlbmRNb2RlLCBvcmllbnRhdGlvbik7Ci0KLSAgICBp
ZiAoaW1hZ2VPYnNlcnZlcigpKQotICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhp
cyk7Ci19Ci0KLVJldGFpblB0cjxDR0ltYWdlUmVmPiBCaXRtYXBJbWFnZTo6Y29weVVuc2NhbGVk
RnJhbWVJbWFnZUF0SW5kZXgoc2l6ZV90IGluZGV4KQotewotICAgIGlmIChpbmRleCA+PSBmcmFt
ZUNvdW50KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGluZGV4ID49IG1f
ZnJhbWVzLnNpemUoKSB8fCAhbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2UpCi0gICAgICAgIGNhY2hl
RnJhbWUoaW5kZXgsIDApOwotCi0gICAgaWYgKCFtX2ZyYW1lc1tpbmRleF0ubV9zdWJzYW1wbGlu
Z0xldmVsKQotICAgICAgICByZXR1cm4gbV9mcmFtZXNbaW5kZXhdLm1faW1hZ2U7Ci0KLSAgICBy
ZXR1cm4gbV9zb3VyY2UuY3JlYXRlRnJhbWVJbWFnZUF0SW5kZXgoaW5kZXgpOwotfQotCi19Ci0K
LSNlbmRpZiAvLyBVU0UoQ0cpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvUGF0dGVybkNHLmNwcAppbmRleCBiNDI4ZDUwZDk0YmY5MjQyODAzMjg3ZDJlZWMxNmJk
NjljNTI4ZDkyLi4zZGFhMTM5YWI3ZWE1YjQyMTU3Nzg4MzVkMzUzZDhhZGI1ZjBjNzVlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9QYXR0ZXJuQ0cuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BhdHRlcm5DRy5jcHAK
QEAgLTcyLDcgKzcyLDcgQEAgQ0dQYXR0ZXJuUmVmIFBhdHRlcm46OmNyZWF0ZVBsYXRmb3JtUGF0
dGVybihjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHVzZXJTcGFjZVRyYW4KICAgICAvLyBJZiB3ZSdy
ZSByZXBlYXRpbmcgaW4gYm90aCBkaXJlY3Rpb25zLCB3ZSBjYW4gdXNlIGltYWdlLWJhY2tlZCBw
YXR0ZXJucwogICAgIC8vIGluc3RlYWQgb2YgY3VzdG9tIHBhdHRlcm5zLCBhbmQgYXZvaWQgdGls
aW5nLWVkZ2UgcGl4ZWwgY3JhY2tzLgogICAgIGlmIChtX3JlcGVhdFggJiYgbV9yZXBlYXRZKQot
ICAgICAgICByZXR1cm4gd2tDR1BhdHRlcm5DcmVhdGVXaXRoSW1hZ2VBbmRUcmFuc2Zvcm0odGls
ZUltYWdlKCktPmdldENHSW1hZ2VSZWYoKSwgcGF0dGVyblRyYW5zZm9ybSwgd2tQYXR0ZXJuVGls
aW5nQ29uc3RhbnRTcGFjaW5nKTsKKyAgICAgICAgcmV0dXJuIHdrQ0dQYXR0ZXJuQ3JlYXRlV2l0
aEltYWdlQW5kVHJhbnNmb3JtKHRpbGVJbWFnZSgpLT5uYXRpdmVJbWFnZSgpLmdldCgpLCBwYXR0
ZXJuVHJhbnNmb3JtLCB3a1BhdHRlcm5UaWxpbmdDb25zdGFudFNwYWNpbmcpOwogCiAgICAgLy8g
SWYgRkxUX01BWCBzaG91bGQgYWxzbyBiZSB1c2VkIGZvciB4U3RlcCBvciB5U3RlcCwgbm90aGlu
ZyBpcyByZW5kZXJlZC4gVXNpbmcgZnJhY3Rpb25zIG9mIEZMVF9NQVggYWxzbwogICAgIC8vIHJl
c3VsdCBpbiBub3RoaW5nIGJlaW5nIHJlbmRlcmVkLgpAQCAtODMsNyArODMsNyBAQCBDR1BhdHRl
cm5SZWYgUGF0dGVybjo6Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdXNlclNwYWNlVHJhbgogICAgIENHRmxvYXQgeVN0ZXAgPSBtX3JlcGVhdFkgPyB0aWxlUmVj
dC5oZWlnaHQoKSA6ICgxIDw8IDIyKTsKIAogICAgIC8vIFRoZSBwYXR0ZXJuIHdpbGwgcmVsZWFz
ZSB0aGUgQ0dJbWFnZVJlZiB3aGVuIGl0J3MgZG9uZSByZW5kZXJpbmcgaW4gcGF0dGVyblJlbGVh
c2VDYWxsYmFjawotICAgIENHSW1hZ2VSZWYgcGxhdGZvcm1JbWFnZSA9IENHSW1hZ2VSZXRhaW4o
dGlsZUltYWdlKCktPmdldENHSW1hZ2VSZWYoKSk7CisgICAgQ0dJbWFnZVJlZiBwbGF0Zm9ybUlt
YWdlID0gdGlsZUltYWdlKCktPm5hdGl2ZUltYWdlKCkubGVha1JlZigpOwogCiAgICAgY29uc3Qg
Q0dQYXR0ZXJuQ2FsbGJhY2tzIHBhdHRlcm5DYWxsYmFja3MgPSB7IDAsIHBhdHRlcm5DYWxsYmFj
aywgcGF0dGVyblJlbGVhc2VDYWxsYmFjayB9OwogICAgIHJldHVybiBDR1BhdHRlcm5DcmVhdGUo
cGxhdGZvcm1JbWFnZSwgdGlsZVJlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHhTdGVwLCB5U3RlcCwg
a0NHUGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2luZywgVFJVRSwgJnBhdHRlcm5DYWxsYmFja3Mp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvUGxhdGZv
cm1JbWFnZUNHLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL1BsYXRm
b3JtSW1hZ2VDRy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWZiMmRlMGVhMTJkYTIxNGYxMDQ2YzM5NjJlOGVh
YjUzYzY0NDEyNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAi
Q29sb3IuaCIKKyNpbmNsdWRlICJDb3JlR3JhcGhpY3NTUEkuaCIKKyNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgorI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dENHLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlN1YmltYWdlQ2Fj
aGVXaXRoVGltZXIuaCIKKworI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDxXZWJLaXRTeXN0
ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CisjZW5kaWYKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworICAgIAordm9pZCBQbGF0Zm9ybUltYWdlOjpjbGVhclN1YkltYWdlcygpCit7
CisjaWYgQ0FDSEVfU1VCSU1BR0VTCisgICAgaWYgKCFpc05pbCgpKQorICAgICAgICBzdWJpbWFn
ZUNhY2hlKCkuY2xlYXJJbWFnZShjZ0ltYWdlUmVmKCkpOworI2VuZGlmCit9CisKK0ludFNpemUg
UGxhdGZvcm1JbWFnZTo6c2l6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzTmlsKCkgPyBJbnRT
aXplKCkgOiBJbnRTaXplKENHSW1hZ2VHZXRXaWR0aChjZ0ltYWdlUmVmKCkpLCBDR0ltYWdlR2V0
SGVpZ2h0KGNnSW1hZ2VSZWYoKSkpOworfQorCitib29sIFBsYXRmb3JtSW1hZ2U6Omhhc0FscGhh
KCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogQW5zd2VyIGNvcnJlY3RseSB0aGUgcXVlc3Rpb246
IGRvZXMgdGhlIENHSW1hZ2VSZWYgaGF2ZSBhbHBoYSBjaGFubm5lbD8KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworQ29sb3IgUGxhdGZvcm1JbWFnZTo6c2luZ2xlUGl4ZWxTb2xpZENvbG9yKCkgY29u
c3QKK3sKKyAgICBpZiAoaXNOaWwoKSB8fCBzaXplKCkgIT0gSW50U2l6ZSgxLCAxKSkKKyAgICAg
ICAgcmV0dXJuIENvbG9yKCk7CisgICAgCisgICAgdW5zaWduZWQgY2hhciBwaXhlbFs0XTsgLy8g
UkdCQQorICAgIGF1dG8gYml0bWFwQ29udGV4dCA9IGFkb3B0Q0YoQ0dCaXRtYXBDb250ZXh0Q3Jl
YXRlKHBpeGVsLCAxLCAxLCA4LCBzaXplb2YocGl4ZWwpLCBzUkdCQ29sb3JTcGFjZVJlZigpLAor
ICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3QgfCBrQ0dCaXRtYXBCeXRlT3Jk
ZXIzMkJpZykpOworICAgIAorICAgIGlmICghYml0bWFwQ29udGV4dCkKKyAgICAgICAgcmV0dXJu
IENvbG9yKCk7CisgICAgCisgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGJpdG1hcENvbnRleHQu
Z2V0KCksIGtDR0JsZW5kTW9kZUNvcHkpOworICAgIENHQ29udGV4dERyYXdJbWFnZShiaXRtYXBD
b250ZXh0LmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIDEsIDEpLCBjZ0ltYWdlUmVmKCkpOworICAg
IAorICAgIGlmICghcGl4ZWxbM10pCisgICAgICAgIHJldHVybiBDb2xvcigwLCAwLCAwLCAwKTsK
KyAgICAKKyAgICByZXR1cm4gQ29sb3IocGl4ZWxbMF0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxb
MV0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMl0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbM10p
OworfQorICAgIAorYm9vbCBQbGF0Zm9ybUltYWdlOjppc0FsbW9zdFNvbGlkQ29sb3IoKSBjb25z
dAoreworICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBjZ0ltYWdlUmVmKCk7CisgICAgQVNTRVJUKENH
SW1hZ2VHZXRCaXRzUGVyQ29tcG9uZW50KGltYWdlKSA9PSA4KTsKKyAgICAKKyAgICBDR0JpdG1h
cEluZm8gaW1hZ2VJbmZvID0gQ0dJbWFnZUdldEJpdG1hcEluZm8oaW1hZ2UpOworICAgIGlmICgh
KGltYWdlSW5mbyAmIGtDR0JpdG1hcEJ5dGVPcmRlcjMyTGl0dGxlKSB8fCAoaW1hZ2VJbmZvICYg
a0NHQml0bWFwQWxwaGFJbmZvTWFzaykgIT0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJz
dCkgeworICAgICAgICAvLyBGSVhNRTogQ29uc2lkZXIgYmVpbmcgYWJsZSB0byBoYW5kbGUgb3Ro
ZXIgcGl4ZWwgZm9ybWF0cy4KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgc2l6ZV90IHdpZHRoID0gQ0dJbWFnZUdl
dFdpZHRoKGltYWdlKTsKKyAgICBzaXplX3QgaGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChpbWFn
ZSk7CisgICAgc2l6ZV90IGJ5dGVzUGVyUm93ID0gQ0dJbWFnZUdldEJ5dGVzUGVyUm93KGltYWdl
KTsKKyAgICAKKyAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBwcm92aWRlciA9IGFkb3B0Q0YoQ0dE
YXRhUHJvdmlkZXJDb3B5RGF0YShDR0ltYWdlR2V0RGF0YVByb3ZpZGVyKGltYWdlKSkpOworICAg
IGNvbnN0IFVJbnQ4KiBkYXRhID0gQ0ZEYXRhR2V0Qnl0ZVB0cihwcm92aWRlci5nZXQoKSk7Cisg
ICAgCisgICAgLy8gT3ZlcmxheSBhIGdyaWQgb2Ygc2FtcGxpbmcgZG90cyBvbiB0b3Agb2YgYSBn
cmF5c2NhbGUgdmVyc2lvbiBvZiB0aGUgaW1hZ2UuCisgICAgLy8gRm9yIHRoZSBpbnRlcmlvciBw
b2ludHMsIGNhbGN1bGF0ZSB0aGUgZGlmZmVyZW5jZSBpbiBsdW1pbmFuY2UgYW1vbmcgdGhlIHNh
bXBsZSBwb2ludAorICAgIC8vIGFuZCBpdHMgc3Vycm91bmRzIHBvaW50cywgc2NhbGVkIGJ5IHRy
YW5zcGFyZW5jeS4KKyAgICBjb25zdCB1bnNpZ25lZCBzYW1wbGVSb3dzID0gNzsKKyAgICBjb25z
dCB1bnNpZ25lZCBzYW1wbGVDb2xzID0gNzsKKyAgICAvLyBGSVhNRTogUmVmaW5lIHRoZSBwcm9w
ZXIgbnVtYmVyIG9mIHNhbXBsZXMsIGFuZCBhY2NvbW1vZGF0ZSBkaWZmZXJlbnQgYXNwZWN0IHJh
dGlvcy4KKyAgICBpZiAod2lkdGggPCBzYW1wbGVDb2xzIHx8IGhlaWdodCA8IHNhbXBsZVJvd3Mp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBFbnN1cmUgdGhhdCB0aGUgbGFz
dCByb3cvY29sdW1uIGxhbmQgb24gdGhlIGltYWdlIHBlcmltZXRlci4KKyAgICBjb25zdCBmbG9h
dCBzdHJpZGVXaWR0aCA9IHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCAtIDEpIC8gKHNhbXBsZUNv
bHMgLSAxKTsKKyAgICBjb25zdCBmbG9hdCBzdHJpZGVIZWlnaHQgPSBzdGF0aWNfY2FzdDxmbG9h
dD4oaGVpZ2h0IC0gMSkgLyAoc2FtcGxlUm93cyAtIDEpOworICAgIGZsb2F0IHNhbXBsZXNbc2Ft
cGxlUm93c11bc2FtcGxlQ29sc107CisgICAgCisgICAgLy8gRmluZCB0aGUgbHVtaW5hbmNlIG9m
IHRoZSBzYW1wbGUgcG9pbnRzLgorICAgIGZsb2F0IHkgPSAwOworICAgIGNvbnN0IFVJbnQ4KiBy
b3cgPSBkYXRhOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzYW1wbGVSb3dzOyArK2kp
IHsKKyAgICAgICAgZmxvYXQgeCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGog
PCBzYW1wbGVDb2xzOyArK2opIHsKKyAgICAgICAgICAgIGNvbnN0IFVJbnQ4KiBwMCA9IHJvdyAr
IChzdGF0aWNfY2FzdDxpbnQ+KHggKyAuNSkpICogNDsKKyAgICAgICAgICAgIC8vIFIgRyBCIEEK
KyAgICAgICAgICAgIHNhbXBsZXNbaV1bal0gPSAoMC4yMTI1ICogKnAwICsgMC43MTU0ICogKihw
MCsxKSArIDAuMDcyMSAqICoocDArMikpICogKihwMCszKSAvIDI1NTsKKyAgICAgICAgICAgIHgg
Kz0gc3RyaWRlV2lkdGg7CisgICAgICAgIH0KKyAgICAgICAgeSArPSBzdHJpZGVIZWlnaHQ7Cisg
ICAgICAgIHJvdyA9IGRhdGEgKyAoc3RhdGljX2Nhc3Q8aW50Pih5ICsgLjUpKSAqIGJ5dGVzUGVy
Um93OworICAgIH0KKyAgICAKKyAgICAvLyBEZXRlcm1pbmUgdGhlIGltYWdlIHNjb3JlLgorICAg
IGZsb2F0IGFjY3VtU2NvcmUgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBzYW1w
bGVSb3dzIC0gMTsgKytpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDE7IGogPCBzYW1w
bGVDb2xzIC0gMTsgKytqKSB7CisgICAgICAgICAgICBmbG9hdCBkaWZmID0gc2FtcGxlc1tpIC0g
MV1bal0gKyBzYW1wbGVzW2kgKyAxXVtqXSArIHNhbXBsZXNbaV1baiAtIDFdICsgc2FtcGxlc1tp
XVtqICsgMV0gLSA0ICogc2FtcGxlc1tpXVtqXTsKKyAgICAgICAgICAgIGFjY3VtU2NvcmUgKz0g
ZGlmZiAqIGRpZmY7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gVGhlIHNjb3JlIGZv
ciBhIGdpdmVuIHNhbXBsZSBjYW4gYmUgd2l0aGluIHRoZSByYW5nZSBvZiAwIGFuZCAyNTVeMi4K
KyAgICByZXR1cm4gYWNjdW1TY29yZSA8IDI1MDAgKiAoc2FtcGxlUm93cyAtIDIpICogKHNhbXBs
ZUNvbHMgLSAyKTsKK30KKworZmxvYXQgUGxhdGZvcm1JbWFnZTo6c3Vic2FtcGxpbmdTY2FsZShH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCkKK3sKKyAgICAvLyBOZXZlciB1c2Ugc3Vic2FtcGxlZCBpbWFn
ZXMgZm9yIGRyYXdpbmcgaW50byBQREYgY29udGV4dHMuCisgICAgaWYgKHdrQ0dDb250ZXh0SXNQ
REZDb250ZXh0KGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCkpKQorICAgICAgICByZXR1cm4gMTsK
KyAgICAKKyAgICBDR1JlY3QgdHJhbnNmb3JtZWREZXN0aW5hdGlvblJlY3QgPSBDR1JlY3RBcHBs
eUFmZmluZVRyYW5zZm9ybShkZXN0UmVjdCwgQ0dDb250ZXh0R2V0Q1RNKGNvbnRleHQucGxhdGZv
cm1Db250ZXh0KCkpKTsKKyAgICByZXR1cm4gc3RkOjptaW48ZmxvYXQ+KDEsIHN0ZDo6bWF4KHRy
YW5zZm9ybWVkRGVzdGluYXRpb25SZWN0LnNpemUud2lkdGggLyBzcmNSZWN0LndpZHRoKCksIHRy
YW5zZm9ybWVkRGVzdGluYXRpb25SZWN0LnNpemUuaGVpZ2h0IC8gc3JjUmVjdC5oZWlnaHQoKSkp
OworfQorCit2b2lkIFBsYXRmb3JtSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEludFNpemUmIHNyY1NpemUsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBCbGVuZE1vZGUgbW9k
ZSwgY29uc3QgSW1hZ2VPcmllbnRhdGlvbiYgb3JpZW50YXRpb24pIGNvbnN0Cit7CisgICAgLy8g
U3Vic2FtcGxpbmcgbWF5IGhhdmUgZ2l2ZW4gdXMgYW4gaW1hZ2UgdGhhdCBpcyBzbWFsbGVyIHRo
YW4gc2l6ZSgpLgorICAgIEludFNpemUgc3Vic2FtcGxlZEltYWdlU2l6ZSA9IHNpemUoKTsKKyAg
ICAKKyAgICAvLyBzcmNSZWN0IGlzIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgdW5zdWJzYW1w
bGVkIGltYWdlLCBzbyB3ZSBoYXZlIHRvIG1hcCBpdCB0byB0aGUgc3Vic2FtcGxlZCBpbWFnZS4K
KyAgICBGbG9hdFJlY3QgYWRqdXN0ZWRTcmNSZWN0ID0gc3JjUmVjdDsKKyAgICBpZiAoc3Vic2Ft
cGxlZEltYWdlU2l6ZSAhPSBzcmNTaXplKQorICAgICAgICBhZGp1c3RlZFNyY1JlY3QgPSBtYXBS
ZWN0KHNyY1JlY3QsIEZsb2F0UmVjdCh7IH0sIHNyY1NpemUpLCBGbG9hdFJlY3QoeyB9LCBzdWJz
YW1wbGVkSW1hZ2VTaXplKSk7CisgICAgCisgICAgY29udGV4dC5kcmF3TmF0aXZlSW1hZ2UobV9p
bWFnZSwgc3Vic2FtcGxlZEltYWdlU2l6ZSwgZGVzdFJlY3QsIGFkanVzdGVkU3JjUmVjdCwgb3As
IG1vZGUsIG9yaWVudGF0aW9uKTsKK30KKyAgICAKK30KKworI2VuZGlmIC8vIFVTRShDRykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1RleHRUcmFj
a1JlcHJlc2VudGF0aW9uQ29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jb2NvYS9UZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hLm1tCmluZGV4IDg5NzIwZDE3MzY1
ZGE3ZThiYTg0NjlkNTI5NDU0OGQ1MTg0N2E3ZmUuLjQ0NzZmYzVmODdjMzQ5ODhmNmQ5YWQ1NWVl
YmQ4ZDFiOWJiMDIyZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NvY29hL1RleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2EubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvVGV4dFRyYWNrUmVwcmVzZW50YXRpb25Db2Nv
YS5tbQpAQCAtMTI5LDcgKzEyOSw3IEBAIFRleHRUcmFja1JlcHJlc2VudGF0aW9uQ29jb2E6On5U
ZXh0VHJhY2tSZXByZXNlbnRhdGlvbkNvY29hKCkKIHZvaWQgVGV4dFRyYWNrUmVwcmVzZW50YXRp
b25Db2NvYTo6dXBkYXRlKCkKIHsKICAgICBpZiAoYXV0byByZXByZXNlbnRhdGlvbiA9IG1fY2xp
ZW50LmNyZWF0ZVRleHRUcmFja1JlcHJlc2VudGF0aW9uSW1hZ2UoKSkKLSAgICAgICAgW21fbGF5
ZXIuZ2V0KCkgc2V0Q29udGVudHM6KGlkKXJlcHJlc2VudGF0aW9uLT5nZXRDR0ltYWdlUmVmKCld
OworICAgICAgICBbbV9sYXllci5nZXQoKSBzZXRDb250ZW50czooaWQpcmVwcmVzZW50YXRpb24t
Pm5hdGl2ZUltYWdlKCkuZ2V0KCldOwogfQogCiB2b2lkIFRleHRUcmFja1JlcHJlc2VudGF0aW9u
Q29jb2E6OnNldENvbnRlbnRTY2FsZShmbG9hdCBzY2FsZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JbWFnZU1hYy5tbQppbmRleCAwMWViNmRkMzAwNDNhMjI1
MjkxNzZmZDkxMjExN2RjNTc3NmMxN2JhLi5kYzFjN2M3MDk1ZDk0NGM0YzYyZjFmZTA5MzU3MDJh
MTNjN2M3YTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvSW1hZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0ltYWdlTWFjLm1tCkBAIC04NSwzMSArODUsMjIgQEAgQ0ZEYXRhUmVmIEJpdG1hcEltYWdlOjpn
ZXRUSUZGUmVwcmVzZW50YXRpb24oKQogICAgIGlmIChtX3RpZmZSZXApCiAgICAgICAgIHJldHVy
biBtX3RpZmZSZXAuZ2V0KCk7CiAKLSAgICB1bnNpZ25lZCBudW1GcmFtZXMgPSBmcmFtZUNvdW50
KCk7CisgICAgYXV0byBuYXRpdmVJbWFnZXMgPSB0aGlzLT5mcmFtZXNOYXRpdmVJbWFnZXMoKTsK
IAotICAgIC8vIElmIG51bUZyYW1lcyBpcyB6ZXJvLCB3ZSBrbm93IGZvciBjZXJ0YWluIHRoaXMg
aW1hZ2UgZG9lc24ndCBoYXZlIHZhbGlkIGRhdGEKKyAgICAvLyBJZiBmcmFtZXNJbWFnZXMuc2l6
ZSgpIGlzIHplcm8sIHdlIGtub3cgZm9yIGNlcnRhaW4gdGhpcyBpbWFnZSBkb2Vzbid0IGhhdmUg
dmFsaWQgZGF0YQogICAgIC8vIEV2ZW4gdGhvdWdoIHRoZSBjYWxsIHRvIENHSW1hZ2VEZXN0aW5h
dGlvbkNyZWF0ZVdpdGhEYXRhIHdpbGwgZmFpbCBhbmQgd2UnbGwgaGFuZGxlIGl0IGdyYWNlZnVs
bHksCiAgICAgLy8gaW4gY2VydGFpbiBjaXJjdW1zdGFuY2VzIHRoYXQgY2FsbCB3aWxsIHNwYW0g
dGhlIGNvbnNvbGUgd2l0aCBhbiBlcnJvciBtZXNzYWdlCi0gICAgaWYgKCFudW1GcmFtZXMpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgVmVjdG9yPENHSW1hZ2VSZWY+IGltYWdlczsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRnJhbWVzOyArK2kgKSB7Ci0gICAgICAgIENHSW1h
Z2VSZWYgY2dJbWFnZSA9IGZyYW1lSW1hZ2VBdEluZGV4KGkpLmdldCgpOwotICAgICAgICBpZiAo
Y2dJbWFnZSkKLSAgICAgICAgICAgIGltYWdlcy5hcHBlbmQoY2dJbWFnZSk7Ci0gICAgfQotCi0g
ICAgdW5zaWduZWQgbnVtVmFsaWRGcmFtZXMgPSBpbWFnZXMuc2l6ZSgpOworICAgIGlmICghbmF0
aXZlSW1hZ2VzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBSZXRhaW5Q
dHI8Q0ZNdXRhYmxlRGF0YVJlZj4gZGF0YSA9IGFkb3B0Q0YoQ0ZEYXRhQ3JlYXRlTXV0YWJsZSgw
LCAwKSk7Ci0gICAgUmV0YWluUHRyPENHSW1hZ2VEZXN0aW5hdGlvblJlZj4gZGVzdGluYXRpb24g
PSBhZG9wdENGKENHSW1hZ2VEZXN0aW5hdGlvbkNyZWF0ZVdpdGhEYXRhKGRhdGEuZ2V0KCksIGtV
VFR5cGVUSUZGLCBudW1WYWxpZEZyYW1lcywgMCkpOworICAgIFJldGFpblB0cjxDR0ltYWdlRGVz
dGluYXRpb25SZWY+IGRlc3RpbmF0aW9uID0gYWRvcHRDRihDR0ltYWdlRGVzdGluYXRpb25DcmVh
dGVXaXRoRGF0YShkYXRhLmdldCgpLCBrVVRUeXBlVElGRiwgbmF0aXZlSW1hZ2VzLnNpemUoKSwg
MCkpOwogCiAgICAgaWYgKCFkZXN0aW5hdGlvbikKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bVZhbGlk
RnJhbWVzOyArK2kpCi0gICAgICAgIENHSW1hZ2VEZXN0aW5hdGlvbkFkZEltYWdlKGRlc3RpbmF0
aW9uLmdldCgpLCBpbWFnZXNbaV0sIDApOworICAgIGZvciAoYXV0byBuYXRpdmVJbWFnZSA6IG5h
dGl2ZUltYWdlcykKKyAgICAgICAgQ0dJbWFnZURlc3RpbmF0aW9uQWRkSW1hZ2UoZGVzdGluYXRp
b24uZ2V0KCksIG5hdGl2ZUltYWdlLmdldCgpLCAwKTsKIAogICAgIENHSW1hZ2VEZXN0aW5hdGlv
bkZpbmFsaXplKGRlc3RpbmF0aW9uLmdldCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAKaW5kZXggMjE3NTNi
ZDA3OGExYzU1YzMyNzE5YzE0ODQ2ZjBmNmI5OTc1ZjhmZC4uODYxMDI1MDhiZWQ3MjlmZmFmNDYw
NzdlYWI4MjA5NmU5ZWIxYWMzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCkBAIC0xNDIsNyArMTQyLDcgQEAg
SW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0IEltYWdlRnJhbWUmIG90aGVy
KQogICAgICAgICByZXR1cm4gKnRoaXM7CiAKICAgICBjb3B5Qml0bWFwRGF0YShvdGhlcik7Ci0g
ICAgc2V0T3JpZ2luYWxGcmFtZVJlY3Qob3RoZXIub3JpZ2luYWxGcmFtZVJlY3QoKSk7CisgICAg
c2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7CiAgICAgc2V0U3RhdHVzKG90aGVyLnN0YXR1
cygpKTsKICAgICBzZXREdXJhdGlvbihvdGhlci5kdXJhdGlvbigpKTsKICAgICBzZXREaXNwb3Nh
bE1ldGhvZChvdGhlci5kaXNwb3NhbE1ldGhvZCgpKTsKQEAgLTE1Miw4ICsxNTIsNyBAQCBJbWFn
ZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpCiAK
IHZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXJQaXhlbERhdGEoKQogewotICAgIG1fYmFja2luZ1N0b3Jl
LmNsZWFyKCk7Ci0gICAgbV9ieXRlcyA9IDA7CisgICAgbV9waXhlbHMgPSBudWxscHRyOwogICAg
IG1fc3RhdHVzID0gRnJhbWVFbXB0eTsKICAgICAvLyBOT1RFOiBEbyBub3QgcmVzZXQgb3RoZXIg
bWVtYmVycyBoZXJlOyBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoKSBjYWxscyB0aGlzCiAgICAgLy8g
dG8gZnJlZSB0aGUgYml0bWFwIGRhdGEsIGJ1dCBvdGhlciBmdW5jdGlvbnMgbGlrZSBpbml0RnJh
bWVCdWZmZXIoKSBhbmQKQEAgLTE2MywyNCArMTYyLDE2IEBAIHZvaWQgSW1hZ2VGcmFtZTo6Y2xl
YXJQaXhlbERhdGEoKQogCiB2b2lkIEltYWdlRnJhbWU6Onplcm9GaWxsUGl4ZWxEYXRhKCkKIHsK
LSAgICBtZW1zZXQobV9ieXRlcywgMCwgbV9zaXplLndpZHRoKCkgKiBtX3NpemUuaGVpZ2h0KCkg
KiBzaXplb2YoUGl4ZWxEYXRhKSk7CisgICAgbV9waXhlbHMtPmNsZWFyKCk7CiAgICAgbV9oYXNB
bHBoYSA9IHRydWU7CiB9CiAKIHZvaWQgSW1hZ2VGcmFtZTo6emVyb0ZpbGxGcmFtZVJlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBBU1NFUlQoSW50UmVjdChJbnRQb2ludCgpLCBtX3Np
emUpLmNvbnRhaW5zKHJlY3QpKTsKLQogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkgKiBz
aXplb2YoUGl4ZWxEYXRhKTsKLSAgICBQaXhlbERhdGEqIHN0YXJ0ID0gbV9ieXRlcyArIChyZWN0
LnkoKSAqIHdpZHRoKCkpICsgcmVjdC54KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0
LmhlaWdodCgpOyArK2kpIHsKLSAgICAgICAgbWVtc2V0KHN0YXJ0LCAwLCByZWN0V2lkdGhJbkJ5
dGVzKTsKLSAgICAgICAgc3RhcnQgKz0gd2lkdGgoKTsKLSAgICB9Ci0KKyAgICBtX3BpeGVscy0+
Y2xlYXJSZWN0KHJlY3QpOwogICAgIHNldEhhc0FscGhhKHRydWUpOwogfQogCkBAIC0xODksMjUg
KzE4MCwyMyBAQCBib29sIEltYWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKGNvbnN0IEltYWdlRnJh
bWUmIG90aGVyKQogICAgIGlmICh0aGlzID09ICZvdGhlcikKICAgICAgICAgcmV0dXJuIHRydWU7
CiAKLSAgICBtX2JhY2tpbmdTdG9yZSA9IG90aGVyLm1fYmFja2luZ1N0b3JlOwotICAgIG1fYnl0
ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7Ci0gICAgbV9zaXplID0gb3RoZXIubV9zaXplOwot
ICAgIHNldEhhc0FscGhhKG90aGVyLm1faGFzQWxwaGEpOworICAgIGlmIChvdGhlci5tX3BpeGVs
cykKKyAgICAgICAgbV9waXhlbHMgPSBCaXRtYXBQaXhlbHM6OmNyZWF0ZSgqb3RoZXIubV9waXhl
bHMuZ2V0KCkpOworICAgIGVsc2UKKyAgICAgICAgbV9waXhlbHMgPSBudWxscHRyOwogICAgIHJl
dHVybiB0cnVlOwogfQogCiBib29sIEltYWdlRnJhbWU6OnNldFNpemUoaW50IG5ld1dpZHRoLCBp
bnQgbmV3SGVpZ2h0KQogewotICAgIEFTU0VSVCghd2lkdGgoKSAmJiAhaGVpZ2h0KCkpOwotICAg
IHNpemVfdCBiYWNraW5nU3RvcmVTaXplID0gbmV3V2lkdGggKiBuZXdIZWlnaHQ7Ci0gICAgaWYg
KCFtX2JhY2tpbmdTdG9yZS50cnlSZXNlcnZlQ2FwYWNpdHkoYmFja2luZ1N0b3JlU2l6ZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2JhY2tpbmdTdG9yZS5yZXNpemUoYmFja2luZ1N0
b3JlU2l6ZSk7Ci0gICAgbV9ieXRlcyA9IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsKLSAgICBtX3Np
emUgPSBJbnRTaXplKG5ld1dpZHRoLCBuZXdIZWlnaHQpOworICAgIEFTU0VSVCghbV9waXhlbHMp
OworICAgIG1fcGl4ZWxzID0gQml0bWFwUGl4ZWxzOjpjcmVhdGUoSW50U2l6ZShuZXdXaWR0aCwg
bmV3SGVpZ2h0KSwgbV9wcmVtdWx0aXBseUFscGhhKTsKKyAgICByZXR1cm4gbV9waXhlbHMgIT0g
bnVsbHB0cjsKK30KIAotICAgIHplcm9GaWxsUGl4ZWxEYXRhKCk7Ci0gICAgcmV0dXJuIHRydWU7
Cit2b2lkIEltYWdlRnJhbWU6OmNvcHlSb3dOVGltZXMoaW50IHN0YXJ0WCwgaW50IGVuZFgsIGlu
dCBzdGFydFksIGludCBlbmRZKQoreworICAgIG1fcGl4ZWxzLT5yZXBlYXRGaXJzdFJvdyhJbnRS
ZWN0KHN0YXJ0WCwgc3RhcnRZLCBlbmRYIC1zdGFydFggLCBlbmRZIC0gc3RhcnRZKSk7CiB9CiAK
IGJvb2wgSW1hZ2VGcmFtZTo6aGFzQWxwaGEoKSBjb25zdApAQCAtMjkxLDcgKzI4MCw3IEBAIHVu
c2lnbmVkIEltYWdlRGVjb2Rlcjo6ZnJhbWVCeXRlc0F0SW5kZXgoc2l6ZV90IGluZGV4KSBjb25z
dAogICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpIDw9IGluZGV4KQogICAgICAgICBy
ZXR1cm4gMDsKICAgICAvLyBGSVhNRTogVXNlIHRoZSBkaW1lbnNpb24gb2YgdGhlIHJlcXVlc3Rl
ZCBmcmFtZS4KLSAgICByZXR1cm4gbV9zaXplLmFyZWEoKSAqIHNpemVvZihJbWFnZUZyYW1lOjpQ
aXhlbERhdGEpOworICAgIHJldHVybiBtX3NpemUuYXJlYSgpICogc2l6ZW9mKFJHQkEzMik7CiB9
CiAKIGZsb2F0IEltYWdlRGVjb2Rlcjo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90IGluZGV4
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaAppbmRleCAyZjhlZWUxNzgxZDE2MmQ4NmM0OWZlMWRhYzcyYTJlN2U0MGE1ZDZk
Li4zYmUzZmVlZTA5NGZhZjAzYmMwZTk2ZDgyMGExMWExN2Y0YTRjZmM1IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaApA
QCAtMjgsNiArMjgsNyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkJpdG1hcFBpeGVs
cy5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCkBAIC01Nyw3ICs1OCw2IEBAIHVzaW5nIENvbG9yUHJv
ZmlsZSA9IFZlY3RvcjxjaGFyPjsKICAgICAgICAgICAgIERpc3Bvc2VPdmVyd3JpdGVQcmV2aW91
cyAgLy8gQ2xlYXIgZnJhbWUgdG8gcHJldmlvdXMgZnJhbWVidWZmZXIKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udGVudHMKICAgICAgICAgfTsKLSAgICAgICAg
dHlwZWRlZiB1bnNpZ25lZCBQaXhlbERhdGE7CiAKICAgICAgICAgSW1hZ2VGcmFtZSgpOwogCkBA
IC04MCwzMCArODAsMjQgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAg
ICAgICAvLyBDb3BpZXMgdGhlIHBpeGVsIGRhdGEgYXQgWyhzdGFydFgsIHN0YXJ0WSksIChlbmRY
LCBzdGFydFkpKSB0byB0aGUKICAgICAgICAgLy8gc2FtZSBYLWNvb3JkaW5hdGVzIG9uIGVhY2gg
c3Vic2VxdWVudCByb3cgdXAgdG8gYnV0IG5vdCBpbmNsdWRpbmcKICAgICAgICAgLy8gZW5kWS4K
LSAgICAgICAgdm9pZCBjb3B5Um93TlRpbWVzKGludCBzdGFydFgsIGludCBlbmRYLCBpbnQgc3Rh
cnRZLCBpbnQgZW5kWSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHN0YXJ0WCA8IHdp
ZHRoKCkpOwotICAgICAgICAgICAgQVNTRVJUKGVuZFggPD0gd2lkdGgoKSk7Ci0gICAgICAgICAg
ICBBU1NFUlQoc3RhcnRZIDwgaGVpZ2h0KCkpOwotICAgICAgICAgICAgQVNTRVJUKGVuZFkgPD0g
aGVpZ2h0KCkpOwotICAgICAgICAgICAgY29uc3QgaW50IHJvd0J5dGVzID0gKGVuZFggLSBzdGFy
dFgpICogc2l6ZW9mKFBpeGVsRGF0YSk7Ci0gICAgICAgICAgICBjb25zdCBQaXhlbERhdGEqIGNv
bnN0IHN0YXJ0QWRkciA9IGdldEFkZHIoc3RhcnRYLCBzdGFydFkpOwotICAgICAgICAgICAgZm9y
IChpbnQgZGVzdFkgPSBzdGFydFkgKyAxOyBkZXN0WSA8IGVuZFk7ICsrZGVzdFkpCi0gICAgICAg
ICAgICAgICAgbWVtY3B5KGdldEFkZHIoc3RhcnRYLCBkZXN0WSksIHN0YXJ0QWRkciwgcm93Qnl0
ZXMpOwotICAgICAgICB9CisgICAgICAgIHZvaWQgY29weVJvd05UaW1lcyhpbnQgc3RhcnRYLCBp
bnQgZW5kWCwgaW50IHN0YXJ0WSwgaW50IGVuZFkpOwogCiAgICAgICAgIC8vIEFsbG9jYXRlcyBz
cGFjZSBmb3IgdGhlIHBpeGVsIGRhdGEuICBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IHBpeGVs
cwogICAgICAgICAvLyBhcmUgd3JpdHRlbi4gIE11c3Qgb25seSBiZSBjYWxsZWQgb25jZS4gIFJl
dHVybnMgd2hldGhlciBhbGxvY2F0aW9uCiAgICAgICAgIC8vIHN1Y2NlZWRlZC4KICAgICAgICAg
Ym9vbCBzZXRTaXplKGludCBuZXdXaWR0aCwgaW50IG5ld0hlaWdodCk7CisgICAgICAgIAorICAg
ICAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3BpeGVscy0+c2l6ZSgpOyB9CiAK
ICAgICAgICAgLy8gUmV0dXJucyBhIGNhbGxlci1vd25lZCBwb2ludGVyIHRvIHRoZSB1bmRlcmx5
aW5nIG5hdGl2ZSBpbWFnZSBkYXRhLgogICAgICAgICAvLyAoQWN0dWFsIHVzZTogVGhpcyBwb2lu
dGVyIHdpbGwgYmUgb3duZWQgYnkgQml0bWFwSW1hZ2UgYW5kIGZyZWVkIGluCiAgICAgICAgIC8v
IEZyYW1lRGF0YTo6Y2xlYXIoKSkuCi0gICAgICAgIE5hdGl2ZUltYWdlUHRyIGFzTmV3TmF0aXZl
SW1hZ2UoKSBjb25zdDsKKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIgYXNOZXdOYXRpdmVJbWFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxzLT5pbWFnZSgpOyB9CisKKyAgICAgICAgaW5saW5lIEJp
dG1hcFBpeGVscyogcGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gbV9waXhlbHMgPyBtX3BpeGVscy5n
ZXQoKSA6IG51bGxwdHI7IH0KKyAgICAgICAgaW5saW5lIGJvb2wgaGFzUGl4ZWxzKCkgY29uc3Qg
eyByZXR1cm4gcGl4ZWxzKCk7IH0KIAogICAgICAgICBib29sIGhhc0FscGhhKCkgY29uc3Q7Ci0g
ICAgICAgIGNvbnN0IEludFJlY3QmIG9yaWdpbmFsRnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4g
bV9vcmlnaW5hbEZyYW1lUmVjdDsgfQogICAgICAgICBGcmFtZVN0YXR1cyBzdGF0dXMoKSBjb25z
dCB7IHJldHVybiBtX3N0YXR1czsgfQogICAgICAgICB1bnNpZ25lZCBkdXJhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fZHVyYXRpb247IH0KICAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNw
b3NhbE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGlzcG9zYWxNZXRob2Q7IH0KQEAgLTExMSw3
ICsxMDUsNiBAQCB1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hhcj47CiAKICAgICAgICAg
dm9pZCBzZXRIYXNBbHBoYShib29sIGFscGhhKTsKICAgICAgICAgdm9pZCBzZXRDb2xvclByb2Zp
bGUoY29uc3QgQ29sb3JQcm9maWxlJik7Ci0gICAgICAgIHZvaWQgc2V0T3JpZ2luYWxGcmFtZVJl
Y3QoY29uc3QgSW50UmVjdCYgcikgeyBtX29yaWdpbmFsRnJhbWVSZWN0ID0gcjsgfQogICAgICAg
ICB2b2lkIHNldFN0YXR1cyhGcmFtZVN0YXR1cyBzdGF0dXMpOwogICAgICAgICB2b2lkIHNldER1
cmF0aW9uKHVuc2lnbmVkIGR1cmF0aW9uKSB7IG1fZHVyYXRpb24gPSBkdXJhdGlvbjsgfQogICAg
ICAgICB2b2lkIHNldERpc3Bvc2FsTWV0aG9kKEZyYW1lRGlzcG9zYWxNZXRob2QgbWV0aG9kKSB7
IG1fZGlzcG9zYWxNZXRob2QgPSBtZXRob2Q7IH0KQEAgLTExOSwxMDggKzExMiwzMiBAQCB1c2lu
ZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hhcj47CiAKICAgICAgICAgaW5saW5lIHZvaWQgc2V0
UkdCQShpbnQgeCwgaW50IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVu
c2lnbmVkIGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHNldFJHQkEoZ2V0QWRkcih4LCB5KSwg
ciwgZywgYiwgYSk7CisgICAgICAgICAgICBtX3BpeGVscy0+c2V0UkdCQSh4LCB5LCByLCBnLCBi
LCBhKTsKICAgICAgICAgfQogCi0gICAgICAgIGlubGluZSBQaXhlbERhdGEqIGdldEFkZHIoaW50
IHgsIGludCB5KQorICAgICAgICBpbmxpbmUgUkdCQTMyKiBnZXRBZGRyKGludCB4LCBpbnQgeSkK
ICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXMgKyAoeSAqIHdpZHRoKCkpICsg
eDsKKyAgICAgICAgICAgIHJldHVybiBtX3BpeGVscy0+YXQoeCwgeSk7CiAgICAgICAgIH0KIAot
ICAgICAgICBpbmxpbmUgYm9vbCBoYXNQaXhlbERhdGEoKSBjb25zdAorICAgICAgICBpbmxpbmUg
dm9pZCBzZXRSR0JBKFJHQkEzMiogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWdu
ZWQgYiwgdW5zaWduZWQgYSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXM7
Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBVc2UgZml4IHBvaW50IG11bHRpcGxpZXIgaW5zdGVh
ZCBvZiBpbnRlZ2VyIGRpdmlzaW9uIG9yIGZsb2F0aW5nIHBvaW50IG1hdGguCi0gICAgICAgIC8v
IFRoaXMgbXVsdGlwbGVyIHByb2R1Y2VzIGV4YWN0bHkgdGhlIHNhbWUgcmVzdWx0IGZvciBhbGwg
dmFsdWVzIGluIHJhbmdlIDAgLSAyNTUuCi0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBm
aXhQb2ludFNoaWZ0ID0gMjQ7Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmaXhQb2lu
dE11bHQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oMS4wIC8gMjU1LjAgKiAoMSA8PCBmaXhQb2lu
dFNoaWZ0KSkgKyAxOwotICAgICAgICAvLyBNdWx0aXBsaWVzIHVuc2lnbmVkIHZhbHVlIGJ5IGZp
eHBvaW50IHZhbHVlIGFuZCBjb252ZXJ0cyBiYWNrIHRvIHVuc2lnbmVkLgotICAgICAgICBzdGF0
aWMgdW5zaWduZWQgZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KHVuc2lnbmVkIGZpeGVkLCB1bnNp
Z25lZCB2KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gIChmaXhlZCAqIHYpID4+IGZp
eFBvaW50U2hpZnQ7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKFBp
eGVsRGF0YSogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWdu
ZWQgYSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAmJiBh
IDwgMjU1KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFhKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICpkZXN0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhTXVsdCA9IGEgKiBmaXhQb2ludE11
bHQ7Ci0gICAgICAgICAgICAgICAgciA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShyLCBhbHBo
YU11bHQpOwotICAgICAgICAgICAgICAgIGcgPSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkoZywg
YWxwaGFNdWx0KTsKLSAgICAgICAgICAgICAgICBiID0gZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5
KGIsIGFscGhhTXVsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqZGVzdCA9IChhIDw8
IDI0IHwgciA8PCAxNiB8IGcgPDwgOCB8IGIpOworICAgICAgICAgICAgbV9waXhlbHMtPnNldFJH
QkEoZGVzdCwgciwgZywgYiwgYSk7CiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShBUE5HKQotICAg
ICAgICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRpdmlkZTI1NSh1bnNpZ25lZCBhKQorICAgICAg
ICBpbmxpbmUgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVk
IGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biAoYSArIChhID4+IDgpICsgMSkgPj4gODsKLSAgICAgICAgfQotCi0gICAgICAgIGlubGluZSB2
b2lkIG92ZXJSR0JBKFBpeGVsRGF0YSogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5z
aWduZWQgYiwgdW5zaWduZWQgYSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFhKQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgaWYgKGEgPCAyNTUpIHsKLSAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBhRGVzdCA9ICgoKmRlc3QpID4+IDI0KSAmIDI1NTsKLSAgICAg
ICAgICAgICAgICBpZiAoYURlc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgckRl
c3QgPSAoKCpkZXN0KSA+PiAxNikgJiAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGdEZXN0ID0gKCgqZGVzdCkgPj4gOCkgJiAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGJEZXN0ID0gKCpkZXN0KSAmIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
YUF1eCA9IDI1NSAtIGE7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFs
cGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByRGVzdCA9IGRpdmlkZTI1NShyRGVzdCAq
IGFEZXN0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdEZXN0ID0gZGl2aWRlMjU1KGdEZXN0
ICogYURlc3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgYkRlc3QgPSBkaXZpZGUyNTUoYkRl
c3QgKiBhRGVzdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ciA9IGRpdmlkZTI1NShyICogYSArIHJEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAg
IGcgPSBkaXZpZGUyNTUoZyAqIGEgKyBnRGVzdCAqIGFBdXgpOwotICAgICAgICAgICAgICAgICAg
ICBiID0gZGl2aWRlMjU1KGIgKiBhICsgYkRlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAgICAg
ICAgYSArPSBkaXZpZGUyNTUoYURlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KCFtX3ByZW11bHRpcGx5QWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHIgPSAociAq
IDI1NSArIGEgLSAxKSAvIGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnID0gKGcgKiAyNTUg
KyBhIC0gMSkgLyBhOwotICAgICAgICAgICAgICAgICAgICAgICAgYiA9IChiICogMjU1ICsgYSAt
IDEpIC8gYTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSBp
ZiAobV9wcmVtdWx0aXBseUFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBkaXZpZGUy
NTUociAqIGEpOwotICAgICAgICAgICAgICAgICAgICBnID0gZGl2aWRlMjU1KGcgKiBhKTsKLSAg
ICAgICAgICAgICAgICAgICAgYiA9IGRpdmlkZTI1NShiICogYSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3QgPSAoYSA8PCAyNCB8IHIgPDwgMTYg
fCBnIDw8IDggfCBiKTsKKyAgICAgICAgICAgIG1fcGl4ZWxzLT5vdmVyUkdCQShkZXN0LCByLCBn
LCBiLCBhKTsKICAgICAgICAgfQogI2VuZGlmCiAKICAgICBwcml2YXRlOgotICAgICAgICBpbnQg
d2lkdGgoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9zaXplLndpZHRo
KCk7Ci0gICAgICAgIH0KKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEJpdG1hcFBpeGVscz4gbV9w
aXhlbHM7CiAKLSAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiBtX3NpemUuaGVpZ2h0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBWZWN0b3I8
UGl4ZWxEYXRhPiBtX2JhY2tpbmdTdG9yZTsKLSAgICAgICAgUGl4ZWxEYXRhKiBtX2J5dGVzOyAv
LyBUaGUgbWVtb3J5IGlzIGJhY2tlZCBieSBtX2JhY2tpbmdTdG9yZS4KLSAgICAgICAgSW50U2l6
ZSBtX3NpemU7CiAgICAgICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIG1fY29sb3JQcm9maWxlIGFu
eW1vcmU/CiAgICAgICAgIENvbG9yUHJvZmlsZSBtX2NvbG9yUHJvZmlsZTsKICAgICAgICAgYm9v
bCBtX2hhc0FscGhhOwotICAgICAgICBJbnRSZWN0IG1fb3JpZ2luYWxGcmFtZVJlY3Q7IC8vIFRo
aXMgd2lsbCBhbHdheXMganVzdCBiZSB0aGUgZW50aXJlCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gYnVmZmVyIGV4Y2VwdCBmb3IgR0lGIGZyYW1lcyB3aG9zZQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yaWdpbmFsIHJlY3Qgd2FzIHNt
YWxsZXIgdGhhbiB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBv
dmVyYWxsIGltYWdlIHNpemUuCiAgICAgICAgIEZyYW1lU3RhdHVzIG1fc3RhdHVzOwogICAgICAg
ICB1bnNpZ25lZCBtX2R1cmF0aW9uOwogICAgICAgICBGcmFtZURpc3Bvc2FsTWV0aG9kIG1fZGlz
cG9zYWxNZXRob2Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcAppbmRleCA1YzAwNTUzNGVjZDky
MTM0YTEzYjMyOTU4OTI3NzkwZjA3YWQwZjgxLi5mOTE4Y2YzMjQyOTY3ZjcyN2E3NTM3YTNiNGE2
NWYxMjk0OWM3NmMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAKQEAgLTg2LDkgKzg2LDYg
QEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6ZGVjb2RlQk1QKGJvb2wgb25seVNpemUpCiAgICAgICAg
IC8vIHRoZXNlIDBzIGNvdWxkIGFjdHVhbGx5IHNob3cgdGhyb3VnaC4KICAgICAgICAgbV9idWZm
ZXItPnNldEhhc0FscGhhKGZhbHNlKTsKIAotICAgICAgICAvLyBGb3IgQk1QcywgdGhlIGZyYW1l
IGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgotICAgICAgICBtX2J1ZmZlci0+c2V0T3Jp
Z2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBtX3BhcmVudC0+c2l6ZSgpKSk7Ci0K
ICAgICAgICAgaWYgKCFtX2lzVG9wRG93bikKICAgICAgICAgICAgIG1fY29vcmQuc2V0WShtX3Bh
cmVudC0+c2l6ZSgpLmhlaWdodCgpIC0gMSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vQml0bWFwUGl4ZWxzQ2Fpcm8uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vQml0bWFwUGl4
ZWxzQ2Fpcm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjVhYWY4YTBhMzZiMThjYmY3Mjc3ZDJjMmUyNmViNDE3
MTI1NjAwZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHAKQEAgLTAsMCArMSw0MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkJpdG1hcFBpeGVscy5oIgorCisjaW5jbHVkZSA8Y2Fpcm8u
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitOYXRpdmVJbWFnZVB0ciBCaXRtYXBQaXhlbHM6
OmltYWdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9jcmVhdGVfZm9yX2RhdGEoCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hh
cio+KGNvbnN0X2Nhc3Q8UkdCQTMyKj4obV9waXhlbHMpKSwKKyAgICAgICAgQ0FJUk9fRk9STUFU
X0FSR0IzMiwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSwgc2l6ZSgpLndpZHRoKCkg
KiBzaXplb2YoUkdCQTMyKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURl
Y29kZXJDYWlyby5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9j
YWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDdiNDEyOTVmODU3MzU4ZmJiZjM1YzFiMDUyNWU4ZDZjYzM1MjBmNTguLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltYWdlRGVjb2Rlci5oIgot
Ci0jaW5jbHVkZSA8Y2Fpcm8uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1OYXRpdmVJbWFn
ZVB0ciBJbWFnZUZyYW1lOjphc05ld05hdGl2ZUltYWdlKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
YWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoCi0gICAgICAgIHJl
aW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGNvbnN0X2Nhc3Q8UGl4ZWxEYXRhKj4obV9i
eXRlcykpLAotICAgICAgICBDQUlST19GT1JNQVRfQVJHQjMyLCB3aWR0aCgpLCBoZWlnaHQoKSwg
d2lkdGgoKSAqIHNpemVvZihQaXhlbERhdGEpKSk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dp
Zi9HSUZJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKaW5kZXggOWY5OTJhN2JlMWQ2NjcyMjY3NWMy
ZTg1NGFkMTg5MWU2MGY4NTc3Yy4uYmQ0NDQ1M2QxZDc3MDQ3YWE1ZmM5M2U4ZjIxNzczNDA5Yzgx
Yzg0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Z2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKQEAgLTIxMywxMCArMjEzLDEwIEBA
IGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4
LCBjb25zdCBWZWN0b3I8dW5zaWduZWQKIAogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lIGlm
IG5lY2Vzc2FyeS4KICAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVb
ZnJhbWVJbmRleF07Ci0gICAgaWYgKCgoYnVmZmVyLnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZy
YW1lRW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkpIHx8ICFidWZmZXIuaGFz
UGl4ZWxEYXRhKCkpCisgICAgaWYgKCgoYnVmZmVyLnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZy
YW1lRW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkpIHx8ICFidWZmZXIuaGFz
UGl4ZWxzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEltYWdlRnJhbWU6OlBpeGVs
RGF0YSogY3VycmVudEFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcih4QmVnaW4sIHlCZWdpbik7Cisg
ICAgUkdCQTMyKiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHhCZWdpbiwgeUJlZ2lu
KTsKICAgICAvLyBXcml0ZSBvbmUgcm93J3Mgd29ydGggb2YgZGF0YSBpbnRvIHRoZSBmcmFtZS4g
IAogICAgIGZvciAoaW50IHggPSB4QmVnaW47IHggPCB4RW5kOyArK3gpIHsKICAgICAgICAgY29u
c3QgdW5zaWduZWQgY2hhciBzb3VyY2VWYWx1ZSA9IHJvd0J1ZmZlclsobV9zY2FsZWQgPyBtX3Nj
YWxlZENvbHVtbnNbeF0gOiB4KSAtIGZyYW1lQ29udGV4dC0+eE9mZnNldF07CkBAIC0yNjAsNyAr
MjYwLDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUodW5zaWduZWQgZnJh
bWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwKICAgICBpZiAoIW1fY3VycmVudEJ1ZmZl
clNhd0FscGhhKSB7CiAgICAgICAgIC8vIFRoZSB3aG9sZSBmcmFtZSB3YXMgbm9uLXRyYW5zcGFy
ZW50LCBzbyBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGVudGlyZQogICAgICAgICAvLyByZXN1bHRp
bmcgYnVmZmVyIHdhcyBub24tdHJhbnNwYXJlbnQsIGFuZCB3ZSBjYW4gc2V0SGFzQWxwaGEoZmFs
c2UpLgotICAgICAgICBpZiAoYnVmZmVyLm9yaWdpbmFsRnJhbWVSZWN0KCkuY29udGFpbnMoSW50
UmVjdChJbnRQb2ludCgpLCBzY2FsZWRTaXplKCkpKSkKKyAgICAgICAgaWYgKGJ1ZmZlci5waXhl
bHMoKS0+cmVjdCgpLmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkp
CiAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwogICAgICAgICBlbHNlIGlm
IChmcmFtZUluZGV4KSB7CiAgICAgICAgICAgICAvLyBUcmlja3kgY2FzZS4gIFRoaXMgZnJhbWUg
ZG9lcyBub3QgaGF2ZSBhbHBoYSBvbmx5IGlmIGV2ZXJ5d2hlcmUKQEAgLTI4Myw3ICsyODMsNyBA
QCBib29sIEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpZ25lZCBmcmFtZUluZGV4
LCB1bnNpZ25lZCBmcmFtZUR1cmF0aW9uLAogICAgICAgICAgICAgLy8gVGhlIG9ubHkgcmVtYWlu
aW5nIGNhc2UgaXMgYSBEaXNwb3NlT3ZlcndyaXRlQmdjb2xvciBmcmFtZS4gIElmCiAgICAgICAg
ICAgICAvLyBpdCBoYWQgbm8gYWxwaGEsIGFuZCBpdHMgcmVjdCBpcyBjb250YWluZWQgaW4gdGhl
IGN1cnJlbnQgZnJhbWUncwogICAgICAgICAgICAgLy8gcmVjdCwgd2Uga25vdyB0aGUgY3VycmVu
dCBmcmFtZSBoYXMgbm8gYWxwaGEuCi0gICAgICAgICAgICBpZiAoKHByZXZCdWZmZXItPmRpc3Bv
c2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zZU92ZXJ3cml0ZUJnY29sb3IpICYmICFw
cmV2QnVmZmVyLT5oYXNBbHBoYSgpICYmIGJ1ZmZlci5vcmlnaW5hbEZyYW1lUmVjdCgpLmNvbnRh
aW5zKHByZXZCdWZmZXItPm9yaWdpbmFsRnJhbWVSZWN0KCkpKQorICAgICAgICAgICAgaWYgKChw
cmV2QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3Jp
dGVCZ2NvbG9yKSAmJiAhcHJldkJ1ZmZlci0+aGFzQWxwaGEoKSAmJiBidWZmZXIucGl4ZWxzKCkt
PnJlY3QoKS5jb250YWlucyhwcmV2QnVmZmVyLT5waXhlbHMoKS0+cmVjdCgpKSkKICAgICAgICAg
ICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFsc2UpOwogICAgICAgICB9CiAgICAgfQpAQCAt
MzUzLDExICszNTMsNiBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVu
c2lnbmVkIGZyYW1lSW5kZXgpCiAgICAgICAgIGZyYW1lUmVjdC5zZXRIZWlnaHQoc2l6ZSgpLmhl
aWdodCgpIC0gZnJhbWVDb250ZXh0LT55T2Zmc2V0KTsKIAogICAgIEltYWdlRnJhbWUqIGNvbnN0
IGJ1ZmZlciA9ICZtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07Ci0gICAgaW50IGxlZnQg
PSB1cHBlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QueCgpKTsKLSAgICBpbnQgcmlnaHQgPSBsb3dl
ckJvdW5kU2NhbGVkWChmcmFtZVJlY3QubWF4WCgpLCBsZWZ0KTsKLSAgICBpbnQgdG9wID0gdXBw
ZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWN0LnkoKSk7Ci0gICAgaW50IGJvdHRvbSA9IGxvd2VyQm91
bmRTY2FsZWRZKGZyYW1lUmVjdC5tYXhZKCksIHRvcCk7Ci0gICAgYnVmZmVyLT5zZXRPcmlnaW5h
bEZyYW1lUmVjdChJbnRSZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3Ap
KTsKIAogICAgIGlmICghZnJhbWVJbmRleCkgewogICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJz
dCBmcmFtZSwgc28gd2UncmUgbm90IHJlbHlpbmcgb24gYW55IHByZXZpb3VzIGRhdGEuCkBAIC0z
ODcsNyArMzgyLDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bnNp
Z25lZCBmcmFtZUluZGV4KQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gV2Ugd2Fu
dCB0byBjbGVhciB0aGUgcHJldmlvdXMgZnJhbWUgdG8gdHJhbnNwYXJlbnQsIHdpdGhvdXQKICAg
ICAgICAgICAgIC8vIGFmZmVjdGluZyBwaXhlbHMgaW4gdGhlIGltYWdlIG91dHNpZGUgb2YgdGhl
IGZyYW1lLgotICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcHJldlJlY3QgPSBwcmV2QnVmZmVy
LT5vcmlnaW5hbEZyYW1lUmVjdCgpOworICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcHJldlJl
Y3QgPSBwcmV2QnVmZmVyLT5waXhlbHMoKS0+cmVjdCgpOwogICAgICAgICAgICAgY29uc3QgSW50
U2l6ZSYgYnVmZmVyU2l6ZSA9IHNjYWxlZFNpemUoKTsKICAgICAgICAgICAgIGlmICghZnJhbWVJ
bmRleCB8fCBwcmV2UmVjdC5jb250YWlucyhJbnRSZWN0KEludFBvaW50KCksIHNjYWxlZFNpemUo
KSkpKSB7CiAgICAgICAgICAgICAgICAgLy8gQ2xlYXJpbmcgdGhlIGZpcnN0IGZyYW1lLCBvciBh
IGZyYW1lIHRoZSBzaXplIG9mIHRoZSB3aG9sZQpAQCAtNDAyLDYgKzM5NywxMiBAQCBib29sIEdJ
RkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuc2lnbmVkIGZyYW1lSW5kZXgpCiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisgICAgCisgICAgaW50IGxlZnQgPSB1cHBlckJv
dW5kU2NhbGVkWChmcmFtZVJlY3QueCgpKTsKKyAgICBpbnQgcmlnaHQgPSBsb3dlckJvdW5kU2Nh
bGVkWChmcmFtZVJlY3QubWF4WCgpLCBsZWZ0KTsKKyAgICBpbnQgdG9wID0gdXBwZXJCb3VuZFNj
YWxlZFkoZnJhbWVSZWN0LnkoKSk7CisgICAgaW50IGJvdHRvbSA9IGxvd2VyQm91bmRTY2FsZWRZ
KGZyYW1lUmVjdC5tYXhZKCksIHRvcCk7CisgICAgYnVmZmVyLT5waXhlbHMoKS0+c2V0UmVjdChJ
bnRSZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3ApKTsKIAogICAgIC8v
IFVwZGF0ZSBvdXIgc3RhdHVzIHRvIGJlIHBhcnRpYWxseSBjb21wbGV0ZS4KICAgICBidWZmZXIt
PnNldFN0YXR1cyhJbWFnZUZyYW1lOjpGcmFtZVBhcnRpYWwpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdl
RGVjb2Rlci5jcHAKaW5kZXggZWU2NmFjMTRkNGJlMDdjYTlhZmZiMmEzYWZmODllYmZhNjJmYjEy
ZS4uOThmZmUwMjAyMTVjYzkzNjQ3MGUzMTNjNzJmM2I0YTc1NmI1ZmEzNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNv
ZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVn
L0pQRUdJbWFnZURlY29kZXIuY3BwCkBAIC01ODgsNyArNTg4LDcgQEAgYm9vbCBKUEVHSW1hZ2VE
ZWNvZGVyOjpzZXRGYWlsZWQoKQogfQogCiB0ZW1wbGF0ZSA8Sl9DT0xPUl9TUEFDRSBjb2xvclNw
YWNlPgotdm9pZCBzZXRQaXhlbChJbWFnZUZyYW1lJiBidWZmZXIsIEltYWdlRnJhbWU6OlBpeGVs
RGF0YSogY3VycmVudEFkZHJlc3MsIEpTQU1QQVJSQVkgc2FtcGxlcywgaW50IGNvbHVtbikKK3Zv
aWQgc2V0UGl4ZWwoSW1hZ2VGcmFtZSYgYnVmZmVyLCBSR0JBMzIqIGN1cnJlbnRBZGRyZXNzLCBK
U0FNUEFSUkFZIHNhbXBsZXMsIGludCBjb2x1bW4pCiB7CiAgICAgSlNBTVBMRSoganNhbXBsZSA9
ICpzYW1wbGVzICsgY29sdW1uICogKGNvbG9yU3BhY2UgPT0gSkNTX1JHQiA/IDMgOiA0KTsKIApA
QCAtNjMxLDcgKzYzMSw3IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVz
KEltYWdlRnJhbWUmIGJ1ZmZlcikKICAgICAgICAgaWYgKGRlc3RZIDwgMCkKICAgICAgICAgICAg
IGNvbnRpbnVlOwogCi0gICAgICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogY3VycmVudEFkZHJl
c3MgPSBidWZmZXIuZ2V0QWRkcigwLCBkZXN0WSk7CisgICAgICAgIFJHQkEzMiogY3VycmVudEFk
ZHJlc3MgPSBidWZmZXIuZ2V0QWRkcigwLCBkZXN0WSk7CiAgICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgd2lkdGg7ICsreCkgewogICAgICAgICAgICAgc2V0UGl4ZWw8Y29sb3JTcGFjZT4oYnVm
ZmVyLCBjdXJyZW50QWRkcmVzcywgc2FtcGxlcywgaXNTY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNb
eF0gOiB4KTsKICAgICAgICAgICAgICsrY3VycmVudEFkZHJlc3M7CkBAIC02NjEsOSArNjYxLDYg
QEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoKQogICAgICAgICAvLyBs
b2FkaW5nLiBUaGUgY29tcGxldGVkIGltYWdlIHdpbGwgYmUgbWFya2VkIGZ1bGx5IG9wYXF1ZSBp
biBqcGVnQ29tcGxldGUoKS4KICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKHRydWUpOwogICAg
ICAgICBidWZmZXIuc2V0Q29sb3JQcm9maWxlKG1fY29sb3JQcm9maWxlKTsKLQotICAgICAgICAv
LyBGb3IgSlBFR3MsIHRoZSBmcmFtZSBhbHdheXMgZmlsbHMgdGhlIGVudGlyZSBpbWFnZS4KLSAg
ICAgICAgYnVmZmVyLnNldE9yaWdpbmFsRnJhbWVSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgc2l6
ZSgpKSk7CiAgICAgfQogCiAgICAganBlZ19kZWNvbXByZXNzX3N0cnVjdCogaW5mbyA9IG1fcmVh
ZGVyLT5pbmZvKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCmluZGV4IGU2NDRhNzExMGVm
Y2I1NDBkODljZTFiYTgxMTAwYmM0ODIzYjE4ZjIuLjQ0NGQ0MzhkMjg2N2Q1MTE2NzBjMjcwZTdm
MzAxYWE5OWM5YmZlM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCkBAIC00NTIsMTkg
KzQ1MiwxOSBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKICAgICB9
CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJHQihJbWFnZUZyYW1lOjpQaXhlbERh
dGEqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJH
QihSR0JBMzIqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCkKIHsKICAgICAqZGVzdCA9IDB4RkYwMDAw
MDBVIHwgcGl4ZWxbMF0gPDwgMTYgfCBwaXhlbFsxXSA8PCA4IHwgcGl4ZWxbMl07CiB9CiAKLXN0
YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJHQkEoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBkZXN0
LCBwbmdfYnl0ZXAgcGl4ZWwsIHVuc2lnbmVkIGNoYXImIG5vblRyaXZpYWxBbHBoYU1hc2spCitz
dGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxSR0JBKFJHQkEzMiogZGVzdCwgcG5nX2J5dGVwIHBp
eGVsLCB1bnNpZ25lZCBjaGFyJiBub25Ucml2aWFsQWxwaGFNYXNrKQogewogICAgIHVuc2lnbmVk
IGNoYXIgYSA9IHBpeGVsWzNdOwogICAgICpkZXN0ID0gYSA8PCAyNCB8IHBpeGVsWzBdIDw8IDE2
IHwgcGl4ZWxbMV0gPDwgOCB8IHBpeGVsWzJdOwogICAgIG5vblRyaXZpYWxBbHBoYU1hc2sgfD0g
KDI1NSAtIGEpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxQcmVtdWx0aXBsaWVk
UkdCQShJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCwgdW5zaWdu
ZWQgY2hhciYgbm9uVHJpdmlhbEFscGhhTWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhl
bFByZW11bHRpcGxpZWRSR0JBKFJHQkEzMiogZGVzdCwgcG5nX2J5dGVwIHBpeGVsLCB1bnNpZ25l
ZCBjaGFyJiBub25Ucml2aWFsQWxwaGFNYXNrKQogewogICAgIHVuc2lnbmVkIGNoYXIgYSA9IHBp
eGVsWzNdOwogICAgIHVuc2lnbmVkIGNoYXIgciA9IGZhc3REaXZpZGVCeTI1NShwaXhlbFswXSAq
IGEpOwpAQCAtNTExLDEwICs1MTEsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxh
YmxlKHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgcm93SW5kZXgsCiAjaWYgRU5B
QkxFKEFQTkcpCiAgICAgICAgIGlmIChtX2N1cnJlbnRGcmFtZSkKICAgICAgICAgICAgIGluaXRG
cmFtZUJ1ZmZlcihtX2N1cnJlbnRGcmFtZSk7Ci0gICAgICAgIGVsc2UKICNlbmRpZgotICAgICAg
ICAvLyBGb3IgUE5HcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgot
ICAgICAgICBidWZmZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBz
aXplKCkpKTsKICAgICB9CiAKICAgICAvKiBsaWJwbmcgY29tbWVudHMgKGhlcmUgdG8gZXhwbGFp
biB3aGF0IGZvbGxvd3MpLgpAQCAtNTczLDcgKzU3MCw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVy
Ojpyb3dBdmFpbGFibGUodW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRl
eCwKICAgICB9CiAKICAgICAvLyBXcml0ZSB0aGUgZGVjb2RlZCByb3cgcGl4ZWxzIHRvIHRoZSBm
cmFtZSBidWZmZXIuCi0gICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBhZGRyZXNzID0gYnVmZmVy
LmdldEFkZHIoMCwgeSk7CisgICAgUkdCQTMyKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoMCwg
eSk7CiAgICAgaW50IHdpZHRoID0gc2NhbGVkU2l6ZSgpLndpZHRoKCk7CiAgICAgdW5zaWduZWQg
Y2hhciBub25Ucml2aWFsQWxwaGFNYXNrID0gMDsKIApAQCAtODM0LDExICs4MzEsNiBAQCB2b2lk
IFBOR0ltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHNpemVfdCBmcmFtZUluZGV4KQogICAg
ICAgICBmcmFtZVJlY3Quc2V0SGVpZ2h0KHNpemUoKS5oZWlnaHQoKSAtIG1feU9mZnNldCk7CiAK
ICAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07
Ci0gICAgaW50IGxlZnQgPSB1cHBlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QueCgpKTsKLSAgICBp
bnQgcmlnaHQgPSBsb3dlckJvdW5kU2NhbGVkWChmcmFtZVJlY3QubWF4WCgpLCBsZWZ0KTsKLSAg
ICBpbnQgdG9wID0gdXBwZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWN0LnkoKSk7Ci0gICAgaW50IGJv
dHRvbSA9IGxvd2VyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC5tYXhZKCksIHRvcCk7Ci0gICAgYnVm
ZmVyLnNldE9yaWdpbmFsRnJhbWVSZWN0KEludFJlY3QobGVmdCwgdG9wLCByaWdodCAtIGxlZnQs
IGJvdHRvbSAtIHRvcCkpOwogCiAgICAgLy8gVGhlIHN0YXJ0aW5nIHN0YXRlIGZvciB0aGlzIGZy
YW1lIGRlcGVuZHMgb24gdGhlIHByZXZpb3VzIGZyYW1lJ3MKICAgICAvLyBkaXNwb3NhbCBtZXRo
b2QuCkBAIC04NjIsNyArODU0LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1
ZmZlcihzaXplX3QgZnJhbWVJbmRleCkKICAgICB9IGVsc2UgewogICAgICAgICAvLyBXZSB3YW50
IHRvIGNsZWFyIHRoZSBwcmV2aW91cyBmcmFtZSB0byB0cmFuc3BhcmVudCwgd2l0aG91dAogICAg
ICAgICAvLyBhZmZlY3RpbmcgcGl4ZWxzIGluIHRoZSBpbWFnZSBvdXRzaWRlIG9mIHRoZSBmcmFt
ZS4KLSAgICAgICAgY29uc3QgSW50UmVjdCYgcHJldlJlY3QgPSBwcmV2QnVmZmVyLT5vcmlnaW5h
bEZyYW1lUmVjdCgpOworICAgICAgICBjb25zdCBJbnRSZWN0JiBwcmV2UmVjdCA9IHByZXZCdWZm
ZXItPnBpeGVscygpLT5yZWN0KCk7CiAgICAgICAgIGlmICghZnJhbWVJbmRleCB8fCBwcmV2UmVj
dC5jb250YWlucyhJbnRSZWN0KEludFBvaW50KCksIHNjYWxlZFNpemUoKSkpKSB7CiAgICAgICAg
ICAgICAvLyBDbGVhcmluZyB0aGUgZmlyc3QgZnJhbWUsIG9yIGEgZnJhbWUgdGhlIHNpemUgb2Yg
dGhlIHdob2xlCiAgICAgICAgICAgICAvLyBpbWFnZSwgcmVzdWx0cyBpbiBhIGNvbXBsZXRlbHkg
ZW1wdHkgaW1hZ2UuCkBAIC04NzMsNiArODY1LDEyIEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpp
bml0RnJhbWVCdWZmZXIoc2l6ZV90IGZyYW1lSW5kZXgpCiAgICAgICAgICAgICBidWZmZXIuemVy
b0ZpbGxGcmFtZVJlY3QocHJldlJlY3QpOwogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIGlu
dCBsZWZ0ID0gdXBwZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0LngoKSk7CisgICAgaW50IHJpZ2h0
ID0gbG93ZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0Lm1heFgoKSwgbGVmdCk7CisgICAgaW50IHRv
cCA9IHVwcGVyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC55KCkpOworICAgIGludCBib3R0b20gPSBs
b3dlckJvdW5kU2NhbGVkWShmcmFtZVJlY3QubWF4WSgpLCB0b3ApOworICAgIGJ1ZmZlci5waXhl
bHMoKS0+c2V0UmVjdChJbnRSZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0
b3ApKTsKIH0KIAogdm9pZCBQTkdJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUoKQpAQCAtODg2
LDcgKzg4NCw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKCkKICAgICBw
bmdfYnl0ZXAgaW50ZXJsYWNlQnVmZmVyID0gbV9yZWFkZXItPmludGVybGFjZUJ1ZmZlcigpOwog
CiAgICAgaWYgKG1fY3VycmVudEZyYW1lICYmIGludGVybGFjZUJ1ZmZlcikgewotICAgICAgICBj
b25zdCBJbnRSZWN0JiByZWN0ID0gYnVmZmVyLm9yaWdpbmFsRnJhbWVSZWN0KCk7CisgICAgICAg
IGNvbnN0IEludFJlY3QmIHJlY3QgPSBidWZmZXIucGl4ZWxzKCktPnJlY3QoKTsKICAgICAgICAg
Ym9vbCBoYXNBbHBoYSA9IG1fcmVhZGVyLT5oYXNBbHBoYSgpOwogICAgICAgICB1bnNpZ25lZCBj
b2xvckNoYW5uZWxzID0gaGFzQWxwaGEgPyA0IDogMzsKICAgICAgICAgYm9vbCBub25Ucml2aWFs
QWxwaGEgPSBmYWxzZTsKQEAgLTg5Niw3ICs4OTQsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6
ZnJhbWVDb21wbGV0ZSgpCiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykK
ICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCByZWN0Lm1heFkoKSAtIHJlY3QueSgpOyArK3kp
IHsKICAgICAgICAgICAgIHBuZ19ieXRlcCByb3cgPSBpbnRlcmxhY2VCdWZmZXIgKyAobV9zY2Fs
ZWQgPyBtX3NjYWxlZFJvd3NbeV0gOiB5KSAqIGNvbG9yQ2hhbm5lbHMgKiBzaXplKCkud2lkdGgo
KTsKLSAgICAgICAgICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogYWRkcmVzcyA9IGJ1ZmZlci5n
ZXRBZGRyKHJlY3QueCgpLCB5ICsgcmVjdC55KCkpOworICAgICAgICAgICAgUkdCQTMyKiBhZGRy
ZXNzID0gYnVmZmVyLmdldEFkZHIocmVjdC54KCksIHkgKyByZWN0LnkoKSk7CiAgICAgICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHJlY3QubWF4WCgpIC0gcmVjdC54KCk7ICsreCkgewogICAg
ICAgICAgICAgICAgIHBuZ19ieXRlcCBwaXhlbCA9IHJvdyArIChtX3NjYWxlZCA/IG1fc2NhbGVk
Q29sdW1uc1t4XSA6IHgpICogY29sb3JDaGFubmVsczsKICAgICAgICAgICAgICAgICB1bnNpZ25l
ZCBhbHBoYSA9IGhhc0FscGhhID8gcGl4ZWxbM10gOiAyNTU7CkBAIC05MTIsNyArOTEwLDcgQEAg
dm9pZCBQTkdJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUoKQogICAgICAgICBwbmdfYnl0ZXAg
cm93ID0gaW50ZXJsYWNlQnVmZmVyOwogICAgICAgICBmb3IgKGludCB5ID0gcmVjdC55KCk7IHkg
PCByZWN0Lm1heFkoKTsgKyt5LCByb3cgKz0gY29sb3JDaGFubmVscyAqIHNpemUoKS53aWR0aCgp
KSB7CiAgICAgICAgICAgICBwbmdfYnl0ZXAgcGl4ZWwgPSByb3c7Ci0gICAgICAgICAgICBJbWFn
ZUZyYW1lOjpQaXhlbERhdGEqIGFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcihyZWN0LngoKSwgeSk7
CisgICAgICAgICAgICBSR0JBMzIqIGFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcihyZWN0LngoKSwg
eSk7CiAgICAgICAgICAgICBmb3IgKGludCB4ID0gcmVjdC54KCk7IHggPCByZWN0Lm1heFgoKTsg
Kyt4LCBwaXhlbCArPSBjb2xvckNoYW5uZWxzKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQg
YWxwaGEgPSBoYXNBbHBoYSA/IHBpeGVsWzNdIDogMjU1OwogICAgICAgICAgICAgICAgIG5vblRy
aXZpYWxBbHBoYSB8PSBhbHBoYSA8IDI1NTsKQEAgLTkyNSw3ICs5MjMsNyBAQCB2b2lkIFBOR0lt
YWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAjZW5kaWYKIAogICAgICAgICBpZiAoIW5vblRy
aXZpYWxBbHBoYSkgewotICAgICAgICAgICAgaWYgKGJ1ZmZlci5vcmlnaW5hbEZyYW1lUmVjdCgp
LmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpCisgICAgICAgICAg
ICBpZiAoYnVmZmVyLnBpeGVscygpLT5yZWN0KCkuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgp
LCBzY2FsZWRTaXplKCkpKSkKICAgICAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEoZmFs
c2UpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgc2l6ZV90IGZyYW1lSW5k
ZXggPSBtX2N1cnJlbnRGcmFtZTsKQEAgLTkzMyw3ICs5MzEsNyBAQCB2b2lkIFBOR0ltYWdlRGVj
b2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAgICAgICAgICAgICAgICAgd2hpbGUgKGZyYW1lSW5kZXgg
JiYgKHByZXZCdWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zZU92
ZXJ3cml0ZVByZXZpb3VzKSkKICAgICAgICAgICAgICAgICAgICAgcHJldkJ1ZmZlciA9ICZtX2Zy
YW1lQnVmZmVyQ2FjaGVbLS1mcmFtZUluZGV4XTsKICAgICAgICAgICAgICAgICBpZiAoKHByZXZC
dWZmZXItPmRpc3Bvc2FsTWV0aG9kKCkgPT0gSW1hZ2VGcmFtZTo6RGlzcG9zZU92ZXJ3cml0ZUJn
Y29sb3IpCi0gICAgICAgICAgICAgICAgICAgICYmICFwcmV2QnVmZmVyLT5oYXNBbHBoYSgpICYm
IGJ1ZmZlci5vcmlnaW5hbEZyYW1lUmVjdCgpLmNvbnRhaW5zKHByZXZCdWZmZXItPm9yaWdpbmFs
RnJhbWVSZWN0KCkpKQorICAgICAgICAgICAgICAgICAgICAmJiAhcHJldkJ1ZmZlci0+aGFzQWxw
aGEoKSAmJiBidWZmZXIucGl4ZWxzKCktPnJlY3QoKS5jb250YWlucyhwcmV2QnVmZmVyLT5waXhl
bHMoKS0+cmVjdCgpKSkKICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZh
bHNlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmICghbV9ibGVuZCAmJiAhYnVm
ZmVyLmhhc0FscGhhKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAppbmRleCAxMjRh
MWIyZjE5OTdmZTY3OGM2MWI1MmYzMDU4ZGI0ZDZiODg2NzlhLi4wMjJjNmYwYWIyNWU4MWMwYWNk
ZjZkNTQzOTQyYTdjMTI1YzA2YjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHAK
QEAgLTEzMiwxNCArMTMyLDEzIEBAIGJvb2wgV0VCUEltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wg
b25seVNpemUpCiAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgICAgIGJ1ZmZl
ci5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKICAgICAgICAgYnVmZmVyLnNl
dEhhc0FscGhhKG1faGFzQWxwaGEpOwotICAgICAgICBidWZmZXIuc2V0T3JpZ2luYWxGcmFtZVJl
Y3QoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKTsKICAgICB9CiAKICAgICBpZiAoIW1fZGVj
b2RlcikgewogICAgICAgICBXRUJQX0NTUF9NT0RFIG1vZGUgPSBvdXRwdXRNb2RlKG1faGFzQWxw
aGEpOwogICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkKICAgICAgICAgICAgIG1vZGUg
PSBvdXRwdXRNb2RlKGZhbHNlKTsKLSAgICAgICAgaW50IHJvd1N0cmlkZSA9IHNpemUoKS53aWR0
aCgpICogc2l6ZW9mKEltYWdlRnJhbWU6OlBpeGVsRGF0YSk7CisgICAgICAgIGludCByb3dTdHJp
ZGUgPSBzaXplKCkud2lkdGgoKSAqIHNpemVvZihSR0JBMzIpOwogICAgICAgICB1aW50OF90KiBv
dXRwdXQgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIuZ2V0QWRkcigwLCAwKSk7
CiAgICAgICAgIGludCBvdXRwdXRTaXplID0gc2l6ZSgpLmhlaWdodCgpICogcm93U3RyaWRlOwog
ICAgICAgICBtX2RlY29kZXIgPSBXZWJQSU5ld1JHQihtb2RlLCBvdXRwdXQsIG91dHB1dFNpemUs
IHJvd1N0cmlkZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9tYWMvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VNYWMubW0KaW5k
ZXggMjE2Y2QwOTNmMjY0NjdjYmE4OGE0M2Y2OTNhYmY0Y2Y1MWRkMWE0ZC4uZDExNDU0YjA1ZWY4
ODk5M2E2Mjg5Mzg5NmJjMGMxMTcyOGM1ZWQ1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vbWFjL01vY2tSZWFsdGltZVZpZGVvU291cmNlTWFjLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL21hYy9Nb2NrUmVhbHRpbWVW
aWRlb1NvdXJjZU1hYy5tbQpAQCAtODcsNyArODcsNyBAQCB2b2lkIE1vY2tSZWFsdGltZVZpZGVv
U291cmNlTWFjOjp1cGRhdGVQbGF0Zm9ybUxheWVyKCkgY29uc3QKICAgICAgICAgaWYgKCFpbWFn
ZSkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIG1fcHJldmlld0ltYWdlID0gaW1hZ2Ut
PmdldENHSW1hZ2VSZWYoKTsKKyAgICAgICAgbV9wcmV2aWV3SW1hZ2UgPSBpbWFnZS0+bmF0aXZl
SW1hZ2UoKTsKICAgICAgICAgaWYgKCFtX3ByZXZpZXdJbWFnZSkKICAgICAgICAgICAgIGJyZWFr
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dX
aW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL0RyYWdJbWFnZUNHV2luLmNwcApp
bmRleCAzNmNkNjUxNmU4MGYxNzQ4YmZlYWI3N2E5MzAyNzFjMTIxZGU4MDE5Li40YjRlMzc3OWU5
NmY3OGM2NTQwYTUzYzQ0NzhjM2JmZDkzNWY1M2U5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vRHJhZ0ltYWdlQ0dXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dpbi9EcmFnSW1hZ2VDR1dpbi5jcHAKQEAgLTEzNiw5ICsxMzYsOSBAQCBEcmFnSW1h
Z2VSZWYgY3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiBpbWcsIEltYWdlT3JpZW50YXRp
b25EZXNjcmlwdGlvbikKICAgICBDR0NvbnRleHRTY2FsZUNUTShkcmF3Q29udGV4dCwgMSwgLTEp
OwogICAgIENHQ29udGV4dFNldEZpbGxDb2xvcihkcmF3Q29udGV4dCwgd2hpdGUpOwogICAgIENH
Q29udGV4dEZpbGxSZWN0KGRyYXdDb250ZXh0LCByZWN0KTsKLSAgICBpZiAoYXV0byBzcmNJbWFn
ZSA9IGltZy0+Z2V0Q0dJbWFnZVJlZigpKSB7CisgICAgaWYgKGF1dG8gc3JjSW1hZ2UgPSBpbWct
Pm5hdGl2ZUltYWdlKCkpIHsKICAgICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGRyYXdDb250
ZXh0LCBrQ0dCbGVuZE1vZGVOb3JtYWwpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoZHJh
d0NvbnRleHQsIHJlY3QsIHNyY0ltYWdlKTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGRy
YXdDb250ZXh0LCByZWN0LCBzcmNJbWFnZS5nZXQoKSk7CiAgICAgfQogICAgIENHQ29udGV4dFJl
bGVhc2UoZHJhd0NvbnRleHQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L21hYy9NaXNj
L1dlYkNhY2hlLm1tIGIvU291cmNlL1dlYktpdC9tYWMvTWlzYy9XZWJDYWNoZS5tbQppbmRleCBi
NjU5ZDZkYmY5YWQ2OTk5YzNhYzk2MmRlOTUxNTc4MDk3ZTFmM2IxLi43YzVlZDIxMGRkYjJhMzJh
NzY2Njc0YzEyMGQ5OTRjMmZhNDdlN2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L21hYy9N
aXNjL1dlYkNhY2hlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvbWFjL01pc2MvV2ViQ2FjaGUubW0K
QEAgLTIwNCw3ICsyMDQsNyBAQCArIChDR0ltYWdlUmVmKWltYWdlRm9yVVJMOihOU1VSTCAqKXVy
bAogICAgIFdlYkNvcmU6OkNhY2hlZEltYWdlJiBjYWNoZWRJbWFnZSA9IGRvd25jYXN0PFdlYkNv
cmU6OkNhY2hlZEltYWdlPigqY2FjaGVkUmVzb3VyY2UpOwogICAgIGlmICghY2FjaGVkSW1hZ2Uu
aGFzSW1hZ2UoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGNhY2hlZElt
YWdlLmltYWdlKCktPmdldENHSW1hZ2VSZWYoKTsKKyAgICByZXR1cm4gY2FjaGVkSW1hZ2UuaW1h
Z2UoKS0+bmF0aXZlSW1hZ2UoKS5nZXQoKTsKIH0KIAogI2VuZGlmIC8vIFBMQVRGT1JNKElPUykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9jZy9XS0ljb25EYXRh
YmFzZUNHLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvQy9jZy9XS0ljb25EYXRh
YmFzZUNHLmNwcAppbmRleCAwZjZkZTdhMTQ2YTYxMWE1MmFhMWU1MzkwMTlmYTZjMWM0NjcyNWFl
Li4zMDU2MzM2Y2I2NmZlNGFmMThiZGM1MjlhY2EyZjhmYzg4MWRmZTU2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvY2cvV0tJY29uRGF0YWJhc2VDRy5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL2NnL1dLSWNvbkRhdGFiYXNlQ0cuY3Bw
CkBAIC0zNywxMiArMzcsMjMgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiBDR0ltYWdlUmVm
IFdLSWNvbkRhdGFiYXNlVHJ5R2V0Q0dJbWFnZUZvclVSTChXS0ljb25EYXRhYmFzZVJlZiBpY29u
RGF0YWJhc2VSZWYsIFdLVVJMUmVmIHVybFJlZiwgV0tTaXplIHNpemUpCiB7CiAgICAgSW1hZ2Uq
IGltYWdlID0gdG9JbXBsKGljb25EYXRhYmFzZVJlZiktPmltYWdlRm9yUGFnZVVSTCh0b1dURlN0
cmluZyh1cmxSZWYpKTsKLSAgICByZXR1cm4gaW1hZ2UgPyBpbWFnZS0+Z2V0Rmlyc3RDR0ltYWdl
UmVmT2ZTaXplKEludFNpemUoc3RhdGljX2Nhc3Q8aW50PihzaXplLndpZHRoKSwgc3RhdGljX2Nh
c3Q8aW50PihzaXplLmhlaWdodCkpKSA6IDA7CisgICAgcmV0dXJuIGltYWdlID8gaW1hZ2UtPm5h
dGl2ZUltYWdlT2ZTaXplKEludFNpemUoc3RhdGljX2Nhc3Q8aW50PihzaXplLndpZHRoKSwgc3Rh
dGljX2Nhc3Q8aW50PihzaXplLmhlaWdodCkpKS5nZXQoKSA6IG51bGxwdHI7CiB9CiAKIENGQXJy
YXlSZWYgV0tJY29uRGF0YWJhc2VUcnlDb3B5Q0dJbWFnZUFycmF5Rm9yVVJMKFdLSWNvbkRhdGFi
YXNlUmVmIGljb25EYXRhYmFzZVJlZiwgV0tVUkxSZWYgdXJsUmVmKQogewogICAgIEltYWdlKiBp
bWFnZSA9IHRvSW1wbChpY29uRGF0YWJhc2VSZWYpLT5pbWFnZUZvclBhZ2VVUkwodG9XVEZTdHJp
bmcodXJsUmVmKSk7Ci0gICAgcmV0dXJuIGltYWdlID8gaW1hZ2UtPmdldENHSW1hZ2VBcnJheSgp
LmxlYWtSZWYoKSA6IDA7CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBhdXRvIG5hdGl2ZUltYWdlcyA9IGltYWdlLT5mcmFtZXNOYXRpdmVJbWFnZXMoKTsK
KyAgICBpZiAoIW5hdGl2ZUltYWdlcy5zaXplKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIAorICAgIENGTXV0YWJsZUFycmF5UmVmIGFycmF5ID0gQ0ZBcnJheUNyZWF0ZU11dGFibGUo
bnVsbHB0ciwgbmF0aXZlSW1hZ2VzLnNpemUoKSwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcyk7Cisg
ICAgZm9yIChhdXRvIG5hdGl2ZUltYWdlIDogbmF0aXZlSW1hZ2VzKQorICAgICAgICBDRkFycmF5
QXBwZW5kVmFsdWUoYXJyYXksIG5hdGl2ZUltYWdlLmdldCgpKTsKKyAgICAKKyAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8Q0ZBcnJheVJlZj4oQ0ZSZXRhaW4oYXJyYXkpKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL2lvcy9XS0NvbnRlbnRWaWV3SW50ZXJhY3Rpb24u
bW0gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlv
bi5tbQppbmRleCBkYzc5ODNhYjk4OGMyZDA0YTE3MzBlZTEzNzMwM2MyNDQxNjE1MTk3Li5mYmMz
ZTVkNGM1NDMwMWNlOTIxN2E0MGY4ZDA4YmQ1ODM1Mjc4N2M2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQorKysgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvaW9zL1dLQ29udGVudFZpZXdJbnRlcmFjdGlvbi5tbQpA
QCAtNDA3MSw3ICs0MDcxLDcgQEAgLSAoVUlJbWFnZSAqKV9wcmVzZW50YXRpb25TbmFwc2hvdEZv
clByZXZpZXdJdGVtQ29udHJvbGxlcjooVUlQcmV2aWV3SXRlbUNvbnRyb2wKIHsKICAgICBpZiAo
IV9wb3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRpY2F0b3IuY29udGVudEltYWdlKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gW1tbVUlJbWFnZSBhbGxvY10gaW5pdFdpdGhD
R0ltYWdlOl9wb3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRpY2F0b3IuY29udGVudEltYWdlLT5n
ZXRDR0ltYWdlUmVmKCldIGF1dG9yZWxlYXNlXTsKKyAgICByZXR1cm4gW1tbVUlJbWFnZSBhbGxv
Y10gaW5pdFdpdGhDR0ltYWdlOl9wb3NpdGlvbkluZm9ybWF0aW9uLmxpbmtJbmRpY2F0b3IuY29u
dGVudEltYWdlLT5uYXRpdmVJbWFnZSgpLmdldCgpXSBhdXRvcmVsZWFzZV07CiB9CiAKIC0gKE5T
QXJyYXkgKilfcHJlc2VudGF0aW9uUmVjdHNGb3JQcmV2aWV3SXRlbUNvbnRyb2xsZXI6KFVJUHJl
dmlld0l0ZW1Db250cm9sbGVyICopY29udHJvbGxlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9QbHVnaW5zL1BsdWdpblZpZXcuY3BwCmluZGV4IDlhMzNmN2NjN2RjN2M3ZDcyZjlk
YTc0MzA5OGI3ZGJjYTgyNDA5Y2YuLmE1MzI1MTA2NzhiOWY1MzUxNDU4YTM4YTlmNDIzMzc0N2Qw
MzVmNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9QbHVn
aW5WaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1BsdWdpbnMvUGx1Z2lu
Vmlldy5jcHAKQEAgLTE3MjcsNjkgKzE3MjcsNiBAQCB2b2lkIFBsdWdpblZpZXc6OndpbmRvd2Vk
UGx1Z2luVmlzaWJpbGl0eURpZENoYW5nZShib29sIGlzVmlzaWJsZSwgdWludDY0X3Qgd2luZAog
fQogI2VuZGlmCiAKLSNpZiBQTEFURk9STShDT0NPQSkKLXN0YXRpYyBib29sIGlzQWxtb3N0U29s
aWRDb2xvcihCaXRtYXBJbWFnZSogYml0bWFwKQotewotICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBi
aXRtYXAtPmdldENHSW1hZ2VSZWYoKTsKLSAgICBBU1NFUlQoQ0dJbWFnZUdldEJpdHNQZXJDb21w
b25lbnQoaW1hZ2UpID09IDgpOwotCi0gICAgQ0dCaXRtYXBJbmZvIGltYWdlSW5mbyA9IENHSW1h
Z2VHZXRCaXRtYXBJbmZvKGltYWdlKTsKLSAgICBpZiAoIShpbWFnZUluZm8gJiBrQ0dCaXRtYXBC
eXRlT3JkZXIzMkxpdHRsZSkgfHwgKGltYWdlSW5mbyAmIGtDR0JpdG1hcEFscGhhSW5mb01hc2sp
ICE9IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QpIHsKLSAgICAgICAgLy8gRklYTUU6
IENvbnNpZGVyIGJlaW5nIGFibGUgdG8gaGFuZGxlIG90aGVyIHBpeGVsIGZvcm1hdHMuCi0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgc2l6ZV90IHdpZHRoID0gQ0dJbWFnZUdldFdpZHRoKGltYWdlKTsKLSAgICBzaXplX3Qg
aGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChpbWFnZSk7Ci0gICAgc2l6ZV90IGJ5dGVzUGVyUm93
ID0gQ0dJbWFnZUdldEJ5dGVzUGVyUm93KGltYWdlKTsKLQotICAgIFJldGFpblB0cjxDRkRhdGFS
ZWY+IHByb3ZpZGVyID0gYWRvcHRDRihDR0RhdGFQcm92aWRlckNvcHlEYXRhKENHSW1hZ2VHZXRE
YXRhUHJvdmlkZXIoaW1hZ2UpKSk7Ci0gICAgY29uc3QgVUludDgqIGRhdGEgPSBDRkRhdGFHZXRC
eXRlUHRyKHByb3ZpZGVyLmdldCgpKTsKLQotICAgIC8vIE92ZXJsYXkgYSBncmlkIG9mIHNhbXBs
aW5nIGRvdHMgb24gdG9wIG9mIGEgZ3JheXNjYWxlIHZlcnNpb24gb2YgdGhlIGltYWdlLgotICAg
IC8vIEZvciB0aGUgaW50ZXJpb3IgcG9pbnRzLCBjYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgaW4g
bHVtaW5hbmNlIGFtb25nIHRoZSBzYW1wbGUgcG9pbnQKLSAgICAvLyBhbmQgaXRzIHN1cnJvdW5k
cyBwb2ludHMsIHNjYWxlZCBieSB0cmFuc3BhcmVuY3kuCi0gICAgY29uc3QgdW5zaWduZWQgc2Ft
cGxlUm93cyA9IDc7Ci0gICAgY29uc3QgdW5zaWduZWQgc2FtcGxlQ29scyA9IDc7Ci0gICAgLy8g
RklYTUU6IFJlZmluZSB0aGUgcHJvcGVyIG51bWJlciBvZiBzYW1wbGVzLCBhbmQgYWNjb21tb2Rh
dGUgZGlmZmVyZW50IGFzcGVjdCByYXRpb3MuCi0gICAgaWYgKHdpZHRoIDwgc2FtcGxlQ29scyB8
fCBoZWlnaHQgPCBzYW1wbGVSb3dzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBF
bnN1cmUgdGhhdCB0aGUgbGFzdCByb3cvY29sdW1uIGxhbmQgb24gdGhlIGltYWdlIHBlcmltZXRl
ci4KLSAgICBjb25zdCBmbG9hdCBzdHJpZGVXaWR0aCA9IHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0
aCAtIDEpIC8gKHNhbXBsZUNvbHMgLSAxKTsKLSAgICBjb25zdCBmbG9hdCBzdHJpZGVIZWlnaHQg
PSBzdGF0aWNfY2FzdDxmbG9hdD4oaGVpZ2h0IC0gMSkgLyAoc2FtcGxlUm93cyAtIDEpOwotICAg
IGZsb2F0IHNhbXBsZXNbc2FtcGxlUm93c11bc2FtcGxlQ29sc107Ci0KLSAgICAvLyBGaW5kIHRo
ZSBsdW1pbmFuY2Ugb2YgdGhlIHNhbXBsZSBwb2ludHMuCi0gICAgZmxvYXQgeSA9IDA7Ci0gICAg
Y29uc3QgVUludDgqIHJvdyA9IGRhdGE7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNh
bXBsZVJvd3M7ICsraSkgewotICAgICAgICBmbG9hdCB4ID0gMDsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gMDsgaiA8IHNhbXBsZUNvbHM7ICsraikgewotICAgICAgICAgICAgY29uc3QgVUlu
dDgqIHAwID0gcm93ICsgKHN0YXRpY19jYXN0PGludD4oeCArIC41KSkgKiA0OwotICAgICAgICAg
ICAgLy8gUiBHIEIgQQotICAgICAgICAgICAgc2FtcGxlc1tpXVtqXSA9ICgwLjIxMjUgKiAqcDAg
KyAwLjcxNTQgKiAqKHAwKzEpICsgMC4wNzIxICogKihwMCsyKSkgKiAqKHAwKzMpIC8gMjU1Owot
ICAgICAgICAgICAgeCArPSBzdHJpZGVXaWR0aDsKLSAgICAgICAgfQotICAgICAgICB5ICs9IHN0
cmlkZUhlaWdodDsKLSAgICAgICAgcm93ID0gZGF0YSArIChzdGF0aWNfY2FzdDxpbnQ+KHkgKyAu
NSkpICogYnl0ZXNQZXJSb3c7Ci0gICAgfQotCi0gICAgLy8gRGV0ZXJtaW5lIHRoZSBpbWFnZSBz
Y29yZS4KLSAgICBmbG9hdCBhY2N1bVNjb3JlID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAx
OyBpIDwgc2FtcGxlUm93cyAtIDE7ICsraSkgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAx
OyBqIDwgc2FtcGxlQ29scyAtIDE7ICsraikgewotICAgICAgICAgICAgZmxvYXQgZGlmZiA9IHNh
bXBsZXNbaSAtIDFdW2pdICsgc2FtcGxlc1tpICsgMV1bal0gKyBzYW1wbGVzW2ldW2ogLSAxXSAr
IHNhbXBsZXNbaV1baiArIDFdIC0gNCAqIHNhbXBsZXNbaV1bal07Ci0gICAgICAgICAgICBhY2N1
bVNjb3JlICs9IGRpZmYgKiBkaWZmOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlIHNj
b3JlIGZvciBhIGdpdmVuIHNhbXBsZSBjYW4gYmUgd2l0aGluIHRoZSByYW5nZSBvZiAwIGFuZCAy
NTVeMi4KLSAgICByZXR1cm4gYWNjdW1TY29yZSA8IDI1MDAgKiAoc2FtcGxlUm93cyAtIDIpICog
KHNhbXBsZUNvbHMgLSAyKTsKLX0KLSNlbmRpZgotCiB2b2lkIFBsdWdpblZpZXc6OnBsdWdpblNu
YXBzaG90VGltZXJGaXJlZCgpCiB7CiAjaWYgRU5BQkxFKFBSSU1BUllfU05BUFNIT1RURURfUExV
R0lOX0hFVVJJU1RJQykKQEAgLTE4MDksNyArMTc0Niw3IEBAIHZvaWQgUGx1Z2luVmlldzo6cGx1
Z2luU25hcHNob3RUaW1lckZpcmVkKCkKIAogICAgICAgICBpZiAoc25hcHNob3RJbWFnZSkgewog
I2lmIEVOQUJMRShQUklNQVJZX1NOQVBTSE9UVEVEX1BMVUdJTl9IRVVSSVNUSUMpCi0gICAgICAg
ICAgICBib29sIHNuYXBzaG90SXNBbG1vc3RTb2xpZENvbG9yID0gaXNBbG1vc3RTb2xpZENvbG9y
KGRvd25jYXN0PEJpdG1hcEltYWdlPihzbmFwc2hvdEltYWdlLmdldCgpKSk7CisgICAgICAgICAg
ICBib29sIHNuYXBzaG90SXNBbG1vc3RTb2xpZENvbG9yID0gc3RhdGljX3BvaW50ZXJfY2FzdDxC
aXRtYXBJbWFnZT4oc25hcHNob3RJbWFnZSktPmlzQWxtb3N0U29saWRDb2xvcigpOwogICAgICAg
ICAgICAgc25hcHNob3RGb3VuZCA9ICFzbmFwc2hvdElzQWxtb3N0U29saWRDb2xvcjsKICNlbmRp
ZgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>283469</attachid>
            <date>2016-07-12 16:51:14 -0700</date>
            <delta_ts>2016-09-09 12:03:12 -0700</delta_ts>
            <desc>Patch for review</desc>
            <filename>159679.patch</filename>
            <type>text/plain</type>
            <size>47876</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBhMzRkZjg4Li5mZThkMmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMg
QEAKKzIwMTYtMDctMTIgIFNhaWQgQWJvdS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNv
bT4KKworICAgICAgICBTcGxpdCB0aGUgcGl4ZWwgZGF0YSBvZiBJbWFnZUZyYW1lIHRvIGEgc2Vw
YXJhdGUgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1OTY3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE1vdmUgdGhlIHBpeGVsIGRhdGEgbWFuaXB1bGF0aW9uIHBhcnQgaW4gSW1hZ2VGcmFtZSBp
bnRvIGEgc2VwYXJhdGUgY2xhc3MKKyAgICAgICAgYW5kIHRoZW4gbWFrZSBpdCBvcHRpb25hbCAo
YWxsb2NhdGVkIG9uIGRlbWFuZCkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAg
ICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5jbWFrZToKKyAg
ICAgICAgKiBQbGF0Zm9ybVdpbkNhaXJvLmNtYWtlOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBQ
aXhlbHMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OkJpdG1hcFBpeGVscyk6CisgICAgICAg
IChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OndpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1h
cFBpeGVsczo6aGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6c2V0U2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OmF0KToKKyAgICAgICAgKFdlYkNv
cmU6OkJpdG1hcFBpeGVsczo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxz
OjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpyZXBlYXRGaXJz
dFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBQaXhlbHM6OnNldFJHQkEpOgorICAgICAg
ICAoV2ViQ29yZTo6Qml0bWFwUGl4ZWxzOjpvdmVyUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpC
aXRtYXBQaXhlbHM6OmluQm91bmRzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjptdWx0aXBseTI1NSk6CisgICAgICAgIChXZWJDb3Jl
OjpkaXZpZGUyNTUpOgorICAgICAgICAoV2ViQ29yZTo6ZGl2aWRlQ2VpbCk6CisgICAgICAgIChX
ZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2hhbm5lbCk6CisgICAgICAgIChXZWJDb3JlOjp1bnByZW11
bHRpcGxpZWRDaGFubmVsKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VQcmVtdWx0aXBsaWVkUkdC
QSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlVW5QcmVtdWx0aXBsaWVkUkdCQSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUZyYW1lRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZURhdGE6OnBp
eGVscyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lRGF0YTo6aGFzUGl4ZWxzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6
Onplcm9GaWxsUGl4ZWxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Onplcm9G
aWxsRnJhbWVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNvcHlCaXRtYXBE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldFNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weVJvd05UaW1lcyk6CisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjphc05ld05hdGl2ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNl
dFJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Z2V0QWRkcik6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUZyYW1lOjpoYXNQaXhlbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VGcmFtZTo6b3ZlclJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6d2lk
dGgpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6aGVpZ2h0KToKKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlRnJhbWU6OmNvcHlSb3dOVGltZXMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6Zml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmRpdmlkZTI1NSk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpkZWNvZGVCTVApOgorICAgICAgICAqIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcDogUmVuYW1lZCBm
cm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVj
b2RlckNhaXJvLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFBpeGVsczo6aW1hZ2UpOgor
ICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIpOgorICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRQaXhlbCk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNv
ZGVyOjpvdXRwdXRTY2FubGluZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L3BuZy9QTkdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxSR0Ip
OgorICAgICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OnNl
dFBpeGVsUHJlbXVsdGlwbGllZFJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNv
ZGVyOjpyb3dBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpp
bml0RnJhbWVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpmcmFt
ZUNvbXBsZXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJ
bWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0VCUEltYWdlRGVjb2Rlcjo6ZGVj
b2RlKToKKwogMjAxNi0wNy0xMSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBw
bGUsY29tPgogCiAgICAgICAgIFJlbmFtZSBGcmFtZURhdGEgdG8gSW1hZ2VGcmFtZURhdGEgYW5k
IG1vdmUgaXQgdG8gYSBzZXBhcmF0ZSBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4
IGI5M2RiY2UuLjY0YWUxNzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZs
LmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBAIC0xNzksOSAr
MTc5LDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MveDExL1BsYXRmb3JtRGlzcGxheVgxMS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy94MTEv
WFVuaXF1ZVJlc291cmNlLmNwcAogCi0gICAgcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvSlBFR0lt
YWdlRW5jb2Rlci5jcHAKKyAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9CaXRtYXBQ
aXhlbHNDYWlyby5jcHAKIAotICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdl
RGVjb2RlckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2ltYWdlLWVuY29kZXJzL0pQRUdJbWFnZUVu
Y29kZXIuY3BwCiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL2VmbC9OZXR3b3JrU3RhdGVOb3RpZmll
ckVmbC5jcHAKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2Ug
Yi9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCAxNTM5YjBhLi5kMzFmNTcw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtMTQ5LDcgKzE0OSw3IEBAIGxpc3QoQVBQ
RU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMu
Y3BwCiAgICAgcGxhdGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5jcHAKIAotICAgIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcAogCiAgICAgcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3RrL1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlR3RrLmNwcAogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQppbmRleCBjMjAzMDkxLi4zNDJhYTkyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKQEAgLTQ2LDcgKzQ2LDcgQEAgbGlzdChB
UFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4v
U2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAKIAotICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcAogCiAgICAgcGxhdGZvcm0vbmV0d29yay9OZXR3
b3JrU3RvcmFnZVNlc3Npb25TdHViLmNwcAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggZjQzZDlkZS4uZmYyYTQ5OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAt
MjMyNSw2ICsyMzI1LDcgQEAKIAkJNTNFRDNGREYxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJu
YWxTZXR0aW5nc0dlbmVyYXRlZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTNFRDNGREQxNjdBODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJuYWxTZXR0aW5n
c0dlbmVyYXRlZC5oICovOyB9OwogCQk1M0VGNzY2QjE2NTMwQTYxMDA0Q0JFNDkgLyogU2V0dGlu
Z3NNYWNyb3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDUzRUY3NjZBMTY1MzBBNjEwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oICovOyB9OwogCQk1
M0VGNzY2QzE2NTMxOTk0MDA0Q0JFNDkgLyogU2V0dGluZ3NNYWNyb3MuaCBpbiBDb3B5IEdlbmVy
YXRlZCBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRUY3NjZB
MTY1MzBBNjEwMDRDQkU0OSAvKiBTZXR0aW5nc01hY3Jvcy5oICovOyB9OworCQk1NTA0RTRDQjFE
MzU1N0IyMDBGRTUwODggLyogQml0bWFwUGl4ZWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTA0RTRDQTFEMzU1MzJEMDBGRTUwODggLyogQml0bWFw
UGl4ZWxzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJNTUwQTBCQzkwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzcwODVGNjAzOTAw
NzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovOyB9OwogCQk1NTBBMEJDQTA4NUY2MDM5MDA3
MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk1NTVC
ODdFQzFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU1Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1
IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLzsgfTsKQEAgLTk5OTIsNiArOTk5Myw3IEBACiAJCTUz
RUQzRkRDMTY3QTg4RTcwMDY3NjJFNiAvKiBKU0ludGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbnRlcm5hbFNldHRpbmdz
R2VuZXJhdGVkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNFRDNGREQxNjdB
ODhFNzAwNjc2MkU2IC8qIEpTSW50ZXJuYWxTZXR0aW5nc0dlbmVyYXRlZC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVybmFsU2V0dGluZ3NHZW5lcmF0ZWQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTNFRjc2NkExNjUzMEE2MTAwNENCRTQ5IC8qIFNl
dHRpbmdzTWFjcm9zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNldHRpbmdz
TWFjcm9zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1MDRFNENBMUQzNTUzMkQw
MEZFNTA4OCAvKiBCaXRtYXBQaXhlbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQml0bWFwUGl4ZWxzLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1MEEwQkM3MDg1RjYwMzkwMDczNTNENiAv
KiBRdWFsaWZpZWROYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFF1YWxpZmllZE5hbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTUwQTBCQzgwODVGNjAzOTAw
NzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUXVhbGlmaWVkTmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNTU1Qjg3RUExQ0FBRjBBQjAw
MzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTIyMTI0LDYgKzIyMTI2LDcgQEAKIAkJCQlCRUYyOUVFOTE3MTVERDA5MDBDNEI0QzkgLyog
QXVkaW9UcmFja1ByaXZhdGUuaCAqLywKIAkJCQlBODk5NDMyNzBCNDIzMzg3MDBEN0M4MDIgLyog
Qml0bWFwSW1hZ2UuY3BwICovLAogCQkJCUE4OTk0MzI2MEI0MjMzODcwMEQ3QzgwMiAvKiBCaXRt
YXBJbWFnZS5oICovLAorCQkJCTU1MDRFNENBMUQzNTUzMkQwMEZFNTA4OCAvKiBCaXRtYXBQaXhl
bHMuaCAqLywKIAkJCQlDRERFMDJFOTE4QjNERkM3MDBDRjdGRjEgLyogQ0RNU2Vzc2lvbi5oICov
LAogCQkJCUIyNzUzNTM4MEIwNTM4MTQwMDJDRTY0RiAvKiBDb2xvci5jcHAgKi8sCiAJCQkJQjI3
NTM1MzkwQjA1MzgxNDAwMkNFNjRGIC8qIENvbG9yLmggKi8sCkBAIC0yODM3MCw2ICsyODM3Myw3
IEBACiAJCQkJQjIyMjc5OTMwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0FuaW1hdGVNb3Rpb25FbGVt
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyNzk5NTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZH
QW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OTk4MEQw
MEJGMjIwMDcxQjc4MiAvKiBTVkdBbmltYXRpb25FbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJ
CQk1NTA0RTRDQjFEMzU1N0IyMDBGRTUwODggLyogQml0bWFwUGl4ZWxzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0MzlEMzM0NTEzQTY5MTFDMDBDMjBGNEYgLyogU1ZHQW5pbWF0b3JGYWN0b3J5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwOEZCM0Y4NDEzQkM3NTRDMDA5OUZDMTggLyogU1ZHQXR0cmli
dXRlVG9Qcm9wZXJ0eU1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjc5OUMwRDAwQkYyMjAw
NzFCNzgyIC8qIFNWR0NpcmNsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwUGl4ZWxzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBQaXhlbHMuaAppbmRleCBlNjlkZTI5Li4x
ZmFlM2QyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRt
YXBQaXhlbHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBQ
aXhlbHMuaApAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5j
bHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJOYXRpdmVJ
bWFnZVB0ci5oIgorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEJpdG1hcFBpeGVscyB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxCaXRtYXBQaXhlbHM+IGNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBib29sIHBy
ZW11bHRpcGx5QWxwaGEpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxC
aXRtYXBQaXhlbHM+KHNpemUsIHByZW11bHRpcGx5QWxwaGEpOworICAgIH0KKworICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8Qml0bWFwUGl4ZWxzPiBjcmVhdGUoY29uc3QgQml0bWFwUGl4ZWxz
JiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEJpdG1hcFBp
eGVscz4ob3RoZXIpOworICAgIH0KKworICAgIEJpdG1hcFBpeGVscyhjb25zdCBJbnRTaXplJiBz
aXplLCBib29sIHByZW11bHRpcGx5QWxwaGEgPSB0cnVlKQorICAgICAgICA6IG1fcHJlbXVsdGlw
bHlBbHBoYShwcmVtdWx0aXBseUFscGhhKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFzaXplLmlz
RW1wdHkoKSk7CisgICAgICAgIHNldFNpemUoc2l6ZSk7CisgICAgfQorCisgICAgQml0bWFwUGl4
ZWxzKGNvbnN0IEJpdG1hcFBpeGVscyYgb3RoZXIpCisgICAgeworICAgICAgICBpZiAodGhpcyA9
PSAmb3RoZXIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBtX2JhY2tp
bmdTdG9yZSA9IG90aGVyLm1fYmFja2luZ1N0b3JlOworICAgICAgICBtX3BpeGVscyA9IG1fYmFj
a2luZ1N0b3JlLmRhdGEoKTsKKyAgICAgICAgbV9zaXplID0gb3RoZXIubV9zaXplOworICAgICAg
ICBtX3JlY3QgPSBvdGhlci5tX3JlY3Q7CisgICAgICAgIG1fcHJlbXVsdGlwbHlBbHBoYSA9IG90
aGVyLm1fcHJlbXVsdGlwbHlBbHBoYTsKKyAgICB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBpbWFn
ZSgpIGNvbnN0OworCisgICAgYm9vbCBzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpCisgICAg
eworICAgICAgICBpZiAoIW1fYmFja2luZ1N0b3JlLnRyeVJlc2VydmVDYXBhY2l0eShzaXplLmFy
ZWEoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBtX2Jh
Y2tpbmdTdG9yZS5yZXNpemUoc2l6ZS5hcmVhKCkpOworICAgICAgICBtX3BpeGVscyA9IG1fYmFj
a2luZ1N0b3JlLmRhdGEoKTsKKyAgICAgICAgbV9zaXplID0gc2l6ZTsKKyAgICAgICAgbV9yZWN0
ID0gSW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUpOworICAgICAgICBjbGVhcigpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRSZWN0KGNvbnN0IEludFJl
Y3QmIHJlY3QpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fc2l6ZS5pc0VtcHR5KCkpOworICAg
ICAgICBBU1NFUlQoaW5Cb3VuZHMocmVjdCkpOworICAgICAgICBtX3JlY3QgPSByZWN0OworICAg
IH0KKyAgICAKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAg
ICBJbnRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KKworICAgIFJHQkEzMiog
YXQoaW50IHgsIGludCB5KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcGl4ZWxzICsg
eSAqIG1fc2l6ZS53aWR0aCgpICsgeDsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7
CisgICAgICAgIG1lbXNldChtX3BpeGVscywgMCwgbV9zaXplLmFyZWEoKSAqIHNpemVvZihSR0JB
MzIpKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQor
ICAgIHsKKyAgICAgICAgaWYgKHJlY3QuaXNFbXB0eSgpIHx8IGluQm91bmRzKHJlY3QpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0
ZXMgPSByZWN0LndpZHRoKCkgKiBzaXplb2YoUkdCQTMyKTsKKyAgICAgICAgUkdCQTMyKiBzdGFy
dCA9IGF0KHJlY3QueCgpLCByZWN0LnkoKSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
cmVjdC5oZWlnaHQoKTsgKytpKSB7CisgICAgICAgICAgICBtZW1zZXQoc3RhcnQsIDAsIHJlY3RX
aWR0aEluQnl0ZXMpOworICAgICAgICAgICAgc3RhcnQgKz0gbV9zaXplLndpZHRoKCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB2b2lkIHJlcGVhdEZpcnN0Um93KGNvbnN0IEludFJlY3QmIHJl
Y3QpCisgICAgeworICAgICAgICBpZiAocmVjdC5pc0VtcHR5KCkgfHwgaW5Cb3VuZHMocmVjdCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAgICBzaXplX3QgcmVjdFdpZHRo
SW5CeXRlcyA9IHJlY3Qud2lkdGgoKSAqIHNpemVvZihSR0JBMzIpOworICAgICAgICBSR0JBMzIq
IHNyYyA9IGF0KHJlY3QueCgpLCByZWN0LnkoKSk7CisgICAgICAgIFJHQkEzMiogZGVzdCA9IHNy
YyArIG1fc2l6ZS53aWR0aCgpOworICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IHJlY3QuaGVp
Z2h0KCk7ICsraSkgeworICAgICAgICAgICAgbWVtY3B5KGRlc3QsIHNyYywgcmVjdFdpZHRoSW5C
eXRlcyk7CisgICAgICAgICAgICBkZXN0ICs9IG1fc2l6ZS53aWR0aCgpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgdm9pZCBzZXRSR0JBKGludCB4LCBpbnQgeSwgdW5zaWduZWQgciwgdW5zaWdu
ZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKKyAgICB7CisgICAgICAgIHNldFJHQkEoYXQo
eCwgeSksIHIsIGcsIGIsIGEpOworICAgIH0KKworICAgIHZvaWQgc2V0UkdCQShSR0JBMzIqIGRl
c3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAg
eworICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSB8fCBhID49IDI1NSkKKyAgICAgICAg
ICAgICpkZXN0ID0gbWFrZVJHQkEociwgZywgYiwgYSk7CisgICAgICAgIGVsc2UgaWYgKCFhKQor
ICAgICAgICAgICAgKmRlc3QgPSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqZGVzdCA9
IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShyLCBnLCBiLCBhKTsKKyAgICB9CisKKyAgICB2b2lkIG92
ZXJSR0JBKFJHQkEzMiogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwg
dW5zaWduZWQgYSkKKyAgICB7CisgICAgICAgIGlmICghYSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgCisgICAgICAgIGlmIChhID49IDI1NSB8fCAhYWxwaGFDaGFubmVsKCpkZXN0KSkg
eworICAgICAgICAgICAgc2V0UkdCQShkZXN0LCByLCBnLCBiLCBhKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxw
aGEpCisgICAgICAgICAgICAqZGVzdCA9IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShyZWRDaGFubmVs
KCpkZXN0KSwgZ3JlZW5DaGFubmVsKCpkZXN0KSwgYmx1ZUNoYW5uZWwoKmRlc3QpLCBhbHBoYUNo
YW5uZWwoKmRlc3QpKTsKKyAgICAgICAgCisgICAgICAgIFJHQkEzMiBzcmMgPSBtYWtlUkdCQShy
LCBnLCBiLCBhKTsKKyAgICAgICAgKmRlc3QgPSBDb2xvcigqZGVzdCkuYmxlbmQoc3JjKS5yZ2Io
KTsKKyAgICAgICAgCisgICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKQorICAgICAgICAg
ICAgKmRlc3QgPSBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShyZWRDaGFubmVsKCpkZXN0KSwgZ3Jl
ZW5DaGFubmVsKCpkZXN0KSwgYmx1ZUNoYW5uZWwoKmRlc3QpLCBhbHBoYUNoYW5uZWwoKmRlc3Qp
KTsKKyAgICB9CisKKyAgICBib29sIGluQm91bmRzKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KCksIG1fc2l6ZSkuY29u
dGFpbnMocG9pbnQpOworICAgIH0KKworICAgIGJvb2wgaW5Cb3VuZHMoY29uc3QgSW50UmVjdCYg
cmVjdCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KCksIG1f
c2l6ZSkuY29udGFpbnMocmVjdCk7CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxSR0JB
MzI+IG1fYmFja2luZ1N0b3JlOworICAgIFJHQkEzMiogbV9waXhlbHMgeyBudWxscHRyIH07Cisg
ICAgSW50U2l6ZSBtX3NpemU7CisgICAgSW50UmVjdCBtX3JlY3Q7IC8vIFRoaXMgd2lsbCBhbHdh
eXMganVzdCBiZSB0aGUgZW50aXJlIGJ1ZmZlciBleGNlcHQgZm9yIEdJRiBhbmQgUE5HIGZyYW1l
cworICAgIGJvb2wgbV9wcmVtdWx0aXBseUFscGhhIHsgdHJ1ZSB9OworfTsKKworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCmluZGV4IDRlMjVhYTYuLjQzOWY1
YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKQEAgLTQ5
LDYgKzQ5LDQwIEBAIGNvbnN0IFJHQkEzMiBDb2xvcjo6dHJhbnNwYXJlbnQ7CiBzdGF0aWMgY29u
c3QgUkdCQTMyIGxpZ2h0ZW5lZEJsYWNrID0gMHhGRjU0NTQ1NDsKIHN0YXRpYyBjb25zdCBSR0JB
MzIgZGFya2VuZWRXaGl0ZSA9IDB4RkZBQkFCQUI7CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQg
bXVsdGlwbHkyNTUodW5zaWduZWQgYykKK3sKKyAgICAvLyBjICogMjU1CisgICAgLy8gICA9IGMg
KiAoMjU2IC0gMSkKKyAgICAvLyAgID0gYyAqIDI1NiAtIGMKKyAgICByZXR1cm4gKGMgPDwgOCkg
LSBjOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRpdmlkZTI1NSh1bnNpZ25lZCBjKQor
eworICAgIC8vIGMgLyAyNTUKKyAgICAvLyAgID0gYyAvIDI1NiAqICgxICsgMSAvIDI1NSkKKyAg
ICAvLyAgID0gKGMgKyBjIC8gMjU1KSAvIDI1NgorICAgIC8vICAgPSAoYyArIChjICsgYyAvIDI1
NSkgLyAyNTYpIC8gMjU2CisgICAgLy8gICA9IChjICsgYyAvIDI1NiArIGMgLyAoMjU1IHggMjU2
KSkgLyAyNTYKKyAgICAvLyAgfj0gKGMgKyBjIC8gMjU2ICsgMSkgLyAyNTYKKyAgICByZXR1cm4g
KGMgKyAoYyA+PiA4KSArIDEpID4+IDg7Cit9CisgICAgCitzdGF0aWMgaW5saW5lIHVuc2lnbmVk
IGRpdmlkZUNlaWwodW5zaWduZWQgYywgdW5zaWduZWQgZCkKK3sKKyAgICByZXR1cm4gKGMgKyBk
IC0gMSkgLyBkOworfQorICAgIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBwcmVtdWx0aXBsaWVk
Q2hhbm5lbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBhKQoreworICAgIHJldHVybiBkaXZpZGUyNTUo
YyAqIGEpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHVucHJlbXVsdGlwbGllZENoYW5u
ZWwodW5zaWduZWQgYywgdW5zaWduZWQgYSkKK3sKKyAgICByZXR1cm4gZGl2aWRlQ2VpbChtdWx0
aXBseTI1NShjKSwgYSk7Cit9CisgICAgCiBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGlu
dCBiKQogewogICAgIHJldHVybiAweEZGMDAwMDAwIHwgc3RkOjptYXgoMCwgc3RkOjptaW4ociwg
MjU1KSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAyNTUpKSA8PCA4IHwgc3RkOjpt
YXgoMCwgc3RkOjptaW4oYiwgMjU1KSk7CkBAIC01OSw2ICs5MywxNiBAQCBSR0JBMzIgbWFrZVJH
QkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCiAgICAgcmV0dXJuIHN0ZDo6bWF4KDAsIHN0
ZDo6bWluKGEsIDI1NSkpIDw8IDI0IHwgc3RkOjptYXgoMCwgc3RkOjptaW4ociwgMjU1KSkgPDwg
MTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAyNTUpKSA8PCA4IHwgc3RkOjptYXgoMCwgc3Rk
OjptaW4oYiwgMjU1KSk7CiB9CiAKK1JHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIs
IGludCBnLCBpbnQgYiwgaW50IGEpCit7CisgICAgcmV0dXJuIG1ha2VSR0JBKHByZW11bHRpcGxp
ZWRDaGFubmVsKHIsIGEpLCBwcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBhKSwgcHJlbXVsdGlwbGll
ZENoYW5uZWwoYiwgYSksIGEpOworfQorICAgIAorUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRS
R0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQoreworICAgIHJldHVybiBtYWtlUkdCQSh1
bnByZW11bHRpcGxpZWRDaGFubmVsKHIsIGEpLCB1bnByZW11bHRpcGxpZWRDaGFubmVsKGcsIGEp
LCB1bnByZW11bHRpcGxpZWRDaGFubmVsKGIsIGEpLCBhKTsKK30KKyAgICAKIHN0YXRpYyBpbnQg
Y29sb3JGbG9hdFRvUkdCQUJ5dGUoZmxvYXQgZikKIHsKICAgICAvLyBXZSB1c2UgbHJvdW5kZiBh
bmQgMjU1IGluc3RlYWQgb2YgbmV4dGFmdGVyZigyNTYsIDApIHRvIG1hdGNoIENHJ3Mgcm91bmRp
bmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCmluZGV4IGRkMjYyNzAu
LmE1NDUzMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Nv
bG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaApAQCAt
NTQsNiArNTQsOCBAQCB0eXBlZGVmIHVuc2lnbmVkIFJHQkEzMjsgLy8gRGVwcmVjYXRlZDogVHlw
ZSBmb3IgYW4gUkdCQSBxdWFkcnVwbGV0LiBVc2UgUkdCQSBjbAogCiBXRUJDT1JFX0VYUE9SVCBS
R0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBiKTsKIFdFQkNPUkVfRVhQT1JUIFJHQkEz
MiBtYWtlUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7CitXRUJDT1JFX0VYUE9SVCBS
R0JBMzIgbWFrZVByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsK
K1dFQkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50
IGcsIGludCBiLCBpbnQgYSk7CiAKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBjb2xvcldpdGhPdmVy
cmlkZUFscGhhKFJHQkEzMiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSk7CiBXRUJDT1JFX0VY
UE9SVCBSR0JBMzIgY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIE9wdGlvbmFs
PGZsb2F0PiBvdmVycmlkZUFscGhhKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmNwcAppbmRleCAwY2UxNGI1Li5iZmQyMGNmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1lRGF0YS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEu
Y3BwCkBAIC03NSw2ICs3NSwyNCBAQCBJbWFnZUZyYW1lRGF0YTo6fkltYWdlRnJhbWVEYXRhKCkK
IHsKICAgICBjbGVhclN1YkltYWdlcygpOwogfQorICAgIAorSW1hZ2VGcmFtZURhdGEmIEltYWdl
RnJhbWVEYXRhOjpvcGVyYXRvcj0oY29uc3QgSW1hZ2VGcmFtZURhdGEmIG90aGVyKQoreworICAg
IGlmICh0aGlzID09ICZvdGhlcikKKyAgICAgICAgcmV0dXJuICp0aGlzOworCisgICAgbV9zdGF0
dXMgPSBvdGhlci5tX3N0YXR1czsKKyAgICBtX3NpemUgPSBvdGhlci5tX3NpemU7CisgICAgbV9p
bWFnZSA9IG90aGVyLm1faW1hZ2U7CisgICAgCisgICAgbV9waXhlbHMgPSBvdGhlci5waXhlbHMo
KSA/IEJpdG1hcFBpeGVsczo6Y3JlYXRlKCpvdGhlci5waXhlbHMoKSkgOiBudWxscHRyOworICAg
IAorICAgIG1fb3JpZW50YXRpb24gPSBvdGhlci5tX29yaWVudGF0aW9uOworICAgIG1fc3Vic2Ft
cGxpbmdMZXZlbCA9IG90aGVyLm1fc3Vic2FtcGxpbmdMZXZlbDsKKyAgICBtX2R1cmF0aW9uID0g
b3RoZXIubV9kdXJhdGlvbjsKKyAgICBtX2hhc0FscGhhID0gb3RoZXIubV9oYXNBbHBoYTsKKyAg
ICByZXR1cm4gKnRoaXM7Cit9CiAKIHZvaWQgSW1hZ2VGcmFtZURhdGE6OmNsZWFyU3ViSW1hZ2Vz
KCkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
RnJhbWVEYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUZyYW1l
RGF0YS5oCmluZGV4IDU4NjA0NTYuLmY2ZmI3NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlRnJhbWVEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VGcmFtZURhdGEuaApAQCAtMjUsNiArMjUsNyBAQAogCiAj
cHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkJpdG1hcFBpeGVscy5oIgogI2luY2x1ZGUgIkltYWdl
T3JpZW50YXRpb24uaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiTmF0aXZlSW1h
Z2VQdHIuaCIKQEAgLTQ0LDYgKzQ1LDcgQEAgZW51bSA6IFN1YnNhbXBsaW5nTGV2ZWwgewogfTsK
IAogY2xhc3MgSW1hZ2VGcmFtZURhdGEgeworICAgIGZyaWVuZCBjbGFzcyBJbWFnZURlY29kZXI7
CiBwdWJsaWM6CiAgICAgZW51bSBjbGFzcyBDYWNoaW5nIHsgRW1wdHksIE1ldGFkYXRhLCBJbWFn
ZSwgTWV0YWRhdGFBbmRJbWFnZSB9OwogICAgIGVudW0gY2xhc3MgRGVjb2RpbmdTdGF0dXMgeyBF
bXB0eSwgUGFydGlhbCwgQ29tcGxldGUgfTsKQEAgLTUxLDggKzUzLDExIEBAIHB1YmxpYzoKICAg
ICBJbWFnZUZyYW1lRGF0YSgpOwogICAgIEltYWdlRnJhbWVEYXRhKE5hdGl2ZUltYWdlUHRyJiYp
OwogICAgIEltYWdlRnJhbWVEYXRhKEltYWdlRGVjb2RlciYsIHNpemVfdCBpbmRleCwgU3Vic2Ft
cGxpbmdMZXZlbCA9IERlZmF1bHRTdWJzYW1wbGluZ0xldmVsLCBDYWNoaW5nID0gQ2FjaGluZzo6
TWV0YWRhdGFBbmRJbWFnZSk7Ci0gICAgCisgICAgSW1hZ2VGcmFtZURhdGEoY29uc3QgSW1hZ2VG
cmFtZURhdGEmIG90aGVyKSB7IG9wZXJhdG9yPShvdGhlcik7IH0KKwogICAgIH5JbWFnZUZyYW1l
RGF0YSgpOworCisgICAgSW1hZ2VGcmFtZURhdGEmIG9wZXJhdG9yPShjb25zdCBJbWFnZUZyYW1l
RGF0YSYgb3RoZXIpOwogICAgIAogICAgIHVuc2lnbmVkIGNsZWFyKENhY2hpbmcpOwogICAgIENv
bG9yIHNpbmdsZVBpeGVsU29saWRDb2xvcigpIGNvbnN0OwpAQCAtNjAsOSArNjUsMTAgQEAgcHVi
bGljOgogICAgIAogICAgIERlY29kaW5nU3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhdHVzOyB9CiAgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXMg
PT0gRGVjb2RpbmdTdGF0dXM6OkNvbXBsZXRlOyB9Ci0gICAgSW50U2l6ZSBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplOyB9Ci0gICAgdW5zaWduZWQgZnJhbWVCeXRlcygpIGNvbnN0IHsgcmV0
dXJuIGhhc0ltYWdlKCkgPyBtX3NpemUuYXJlYSgpICogNCA6IDA7IH0KKyAgICBJbnRTaXplIHNp
emUoKSBjb25zdCB7IHJldHVybiBoYXNQaXhlbHMoKSA/IHBpeGVscygpLT5zaXplKCkgOiBtX3Np
emU7IH0KKyAgICB1bnNpZ25lZCBmcmFtZUJ5dGVzKCkgY29uc3QgeyByZXR1cm4gaGFzSW1hZ2Uo
KSA/IG1fc2l6ZS5hcmVhKCkgKiBzaXplb2YoUkdCQTMyKSA6IDA7IH0KICAgICBOYXRpdmVJbWFn
ZVB0ciBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2U7IH0KKyAgICBCaXRtYXBQaXhlbHMq
IHBpeGVscygpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxzID8gbV9waXhlbHMuZ2V0KCkgOiBudWxs
cHRyOyB9CiAgICAgCiAgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fb3JpZW50YXRpb247IH0KICAgICBTdWJzYW1wbGluZ0xldmVsIHN1YnNhbXBsaW5n
TGV2ZWwoKSBjb25zdCB7IHJldHVybiBtX3N1YnNhbXBsaW5nTGV2ZWw7IH0KQEAgLTcxLDEzICs3
NywyMCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1faGFz
QWxwaGE7IH0KICAgICBib29sIGhhc0ltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZTsgfQog
ICAgIGJvb2wgaGFzTWV0YWRhdGEoKSBjb25zdCB7IHJldHVybiAhbV9zaXplLmlzRW1wdHkoKTsg
fQorICAgIGJvb2wgaGFzUGl4ZWxzKCkgY29uc3QgeyByZXR1cm4gcGl4ZWxzKCk7IH0KICAgICAK
IHByaXZhdGU6CiAgICAgdm9pZCBjbGVhclN1YkltYWdlcygpOworCisgICAgdm9pZCBzZXRTdGF0
dXMoRGVjb2RpbmdTdGF0dXMgc3RhdHVzKSB7IG1fc3RhdHVzID0gc3RhdHVzOyB9CisgICAgdm9p
ZCBzZXRPcmllbnRhdGlvbihJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uKSB7IG1fb3JpZW50
YXRpb24gPSBvcmllbnRhdGlvbjsgfTsKKyAgICB2b2lkIHNldER1cmF0aW9uKHVuc2lnbmVkIGR1
cmF0aW9uKSB7IG1fZHVyYXRpb24gPSBkdXJhdGlvbjsgfQorICAgIHZvaWQgc2V0SGFzQWxwaGEo
Ym9vbCBoYXNBbHBoYSkgeyBtX2hhc0FscGhhID0gaGFzQWxwaGE7IH0KICAgICAKICAgICBEZWNv
ZGluZ1N0YXR1cyBtX3N0YXR1cyB7IERlY29kaW5nU3RhdHVzOjpFbXB0eSB9OwogICAgIEludFNp
emUgbV9zaXplOwogICAgIE5hdGl2ZUltYWdlUHRyIG1faW1hZ2U7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEJpdG1hcFBpeGVscz4gbV9waXhlbHM7CiAgICAgCiAgICAgSW1hZ2VPcmllbnRhdGlvbiBt
X29yaWVudGF0aW9uIHsgRGVmYXVsdEltYWdlT3JpZW50YXRpb24gfTsKICAgICBTdWJzYW1wbGlu
Z0xldmVsIG1fc3Vic2FtcGxpbmdMZXZlbCB7IDAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCmluZGV4IDIxNzUz
YmQuLjg2MTAyNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL0ltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcApAQCAtMTQyLDcgKzE0Miw3IEBAIEltYWdlRnJh
bWUmIEltYWdlRnJhbWU6Om9wZXJhdG9yPShjb25zdCBJbWFnZUZyYW1lJiBvdGhlcikKICAgICAg
ICAgcmV0dXJuICp0aGlzOwogCiAgICAgY29weUJpdG1hcERhdGEob3RoZXIpOwotICAgIHNldE9y
aWdpbmFsRnJhbWVSZWN0KG90aGVyLm9yaWdpbmFsRnJhbWVSZWN0KCkpOworICAgIHNldEhhc0Fs
cGhhKG90aGVyLm1faGFzQWxwaGEpOwogICAgIHNldFN0YXR1cyhvdGhlci5zdGF0dXMoKSk7CiAg
ICAgc2V0RHVyYXRpb24ob3RoZXIuZHVyYXRpb24oKSk7CiAgICAgc2V0RGlzcG9zYWxNZXRob2Qo
b3RoZXIuZGlzcG9zYWxNZXRob2QoKSk7CkBAIC0xNTIsOCArMTUyLDcgQEAgSW1hZ2VGcmFtZSYg
SW1hZ2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0IEltYWdlRnJhbWUmIG90aGVyKQogCiB2b2lkIElt
YWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKCkKIHsKLSAgICBtX2JhY2tpbmdTdG9yZS5jbGVhcigp
OwotICAgIG1fYnl0ZXMgPSAwOworICAgIG1fcGl4ZWxzID0gbnVsbHB0cjsKICAgICBtX3N0YXR1
cyA9IEZyYW1lRW1wdHk7CiAgICAgLy8gTk9URTogRG8gbm90IHJlc2V0IG90aGVyIG1lbWJlcnMg
aGVyZTsgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKCkgY2FsbHMgdGhpcwogICAgIC8vIHRvIGZyZWUg
dGhlIGJpdG1hcCBkYXRhLCBidXQgb3RoZXIgZnVuY3Rpb25zIGxpa2UgaW5pdEZyYW1lQnVmZmVy
KCkgYW5kCkBAIC0xNjMsMjQgKzE2MiwxNiBAQCB2b2lkIEltYWdlRnJhbWU6OmNsZWFyUGl4ZWxE
YXRhKCkKIAogdm9pZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSgpCiB7Ci0gICAgbWVt
c2V0KG1fYnl0ZXMsIDAsIG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgpICogc2l6ZW9m
KFBpeGVsRGF0YSkpOworICAgIG1fcGl4ZWxzLT5jbGVhcigpOwogICAgIG1faGFzQWxwaGEgPSB0
cnVlOwogfQogCiB2b2lkIEltYWdlRnJhbWU6Onplcm9GaWxsRnJhbWVSZWN0KGNvbnN0IEludFJl
Y3QmIHJlY3QpCiB7Ci0gICAgQVNTRVJUKEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXplKS5jb250
YWlucyhyZWN0KSk7Ci0KICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIHNpemVfdCByZWN0V2lkdGhJbkJ5dGVzID0gcmVjdC53aWR0aCgpICogc2l6ZW9mKFBp
eGVsRGF0YSk7Ci0gICAgUGl4ZWxEYXRhKiBzdGFydCA9IG1fYnl0ZXMgKyAocmVjdC55KCkgKiB3
aWR0aCgpKSArIHJlY3QueCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdC5oZWlnaHQo
KTsgKytpKSB7Ci0gICAgICAgIG1lbXNldChzdGFydCwgMCwgcmVjdFdpZHRoSW5CeXRlcyk7Ci0g
ICAgICAgIHN0YXJ0ICs9IHdpZHRoKCk7Ci0gICAgfQotCisgICAgbV9waXhlbHMtPmNsZWFyUmVj
dChyZWN0KTsKICAgICBzZXRIYXNBbHBoYSh0cnVlKTsKIH0KIApAQCAtMTg5LDI1ICsxODAsMjMg
QEAgYm9vbCBJbWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YShjb25zdCBJbWFnZUZyYW1lJiBvdGhl
cikKICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAg
bV9iYWNraW5nU3RvcmUgPSBvdGhlci5tX2JhY2tpbmdTdG9yZTsKLSAgICBtX2J5dGVzID0gbV9i
YWNraW5nU3RvcmUuZGF0YSgpOwotICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKLSAgICBzZXRI
YXNBbHBoYShvdGhlci5tX2hhc0FscGhhKTsKKyAgICBpZiAob3RoZXIubV9waXhlbHMpCisgICAg
ICAgIG1fcGl4ZWxzID0gQml0bWFwUGl4ZWxzOjpjcmVhdGUoKm90aGVyLm1fcGl4ZWxzLmdldCgp
KTsKKyAgICBlbHNlCisgICAgICAgIG1fcGl4ZWxzID0gbnVsbHB0cjsKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAogYm9vbCBJbWFnZUZyYW1lOjpzZXRTaXplKGludCBuZXdXaWR0aCwgaW50IG5ld0hl
aWdodCkKIHsKLSAgICBBU1NFUlQoIXdpZHRoKCkgJiYgIWhlaWdodCgpKTsKLSAgICBzaXplX3Qg
YmFja2luZ1N0b3JlU2l6ZSA9IG5ld1dpZHRoICogbmV3SGVpZ2h0OwotICAgIGlmICghbV9iYWNr
aW5nU3RvcmUudHJ5UmVzZXJ2ZUNhcGFjaXR5KGJhY2tpbmdTdG9yZVNpemUpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgbV9iYWNraW5nU3RvcmUucmVzaXplKGJhY2tpbmdTdG9yZVNpemUp
OwotICAgIG1fYnl0ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7Ci0gICAgbV9zaXplID0gSW50
U2l6ZShuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKKyAgICBBU1NFUlQoIW1fcGl4ZWxzKTsKKyAgICBt
X3BpeGVscyA9IEJpdG1hcFBpeGVsczo6Y3JlYXRlKEludFNpemUobmV3V2lkdGgsIG5ld0hlaWdo
dCksIG1fcHJlbXVsdGlwbHlBbHBoYSk7CisgICAgcmV0dXJuIG1fcGl4ZWxzICE9IG51bGxwdHI7
Cit9CiAKLSAgICB6ZXJvRmlsbFBpeGVsRGF0YSgpOwotICAgIHJldHVybiB0cnVlOwordm9pZCBJ
bWFnZUZyYW1lOjpjb3B5Um93TlRpbWVzKGludCBzdGFydFgsIGludCBlbmRYLCBpbnQgc3RhcnRZ
LCBpbnQgZW5kWSkKK3sKKyAgICBtX3BpeGVscy0+cmVwZWF0Rmlyc3RSb3coSW50UmVjdChzdGFy
dFgsIHN0YXJ0WSwgZW5kWCAtc3RhcnRYICwgZW5kWSAtIHN0YXJ0WSkpOwogfQogCiBib29sIElt
YWdlRnJhbWU6Omhhc0FscGhhKCkgY29uc3QKQEAgLTI5MSw3ICsyODAsNyBAQCB1bnNpZ25lZCBJ
bWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KHNpemVfdCBpbmRleCkgY29uc3QKICAgICBp
ZiAobV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKSA8PSBpbmRleCkKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgLy8gRklYTUU6IFVzZSB0aGUgZGltZW5zaW9uIG9mIHRoZSByZXF1ZXN0ZWQgZnJhbWUu
Ci0gICAgcmV0dXJuIG1fc2l6ZS5hcmVhKCkgKiBzaXplb2YoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRh
KTsKKyAgICByZXR1cm4gbV9zaXplLmFyZWEoKSAqIHNpemVvZihSR0JBMzIpOwogfQogCiBmbG9h
dCBJbWFnZURlY29kZXI6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVy
LmgKaW5kZXggMmY4ZWVlMS4uM2JlM2ZlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgKQEAgLTI4LDYgKzI4LDcgQEAK
IAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJCaXRtYXBQaXhlbHMuaCIKICNpbmNsdWRlICJJ
bnRSZWN0LmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVNj
cmVlbi5oIgpAQCAtNTcsNyArNTgsNiBAQCB1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hh
cj47CiAgICAgICAgICAgICBEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMgIC8vIENsZWFyIGZyYW1l
IHRvIHByZXZpb3VzIGZyYW1lYnVmZmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGNvbnRlbnRzCiAgICAgICAgIH07Ci0gICAgICAgIHR5cGVkZWYgdW5zaWduZWQg
UGl4ZWxEYXRhOwogCiAgICAgICAgIEltYWdlRnJhbWUoKTsKIApAQCAtODAsMzAgKzgwLDI0IEBA
IHVzaW5nIENvbG9yUHJvZmlsZSA9IFZlY3RvcjxjaGFyPjsKICAgICAgICAgLy8gQ29waWVzIHRo
ZSBwaXhlbCBkYXRhIGF0IFsoc3RhcnRYLCBzdGFydFkpLCAoZW5kWCwgc3RhcnRZKSkgdG8gdGhl
CiAgICAgICAgIC8vIHNhbWUgWC1jb29yZGluYXRlcyBvbiBlYWNoIHN1YnNlcXVlbnQgcm93IHVw
IHRvIGJ1dCBub3QgaW5jbHVkaW5nCiAgICAgICAgIC8vIGVuZFkuCi0gICAgICAgIHZvaWQgY29w
eVJvd05UaW1lcyhpbnQgc3RhcnRYLCBpbnQgZW5kWCwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChzdGFydFggPCB3aWR0aCgpKTsKLSAgICAgICAg
ICAgIEFTU0VSVChlbmRYIDw9IHdpZHRoKCkpOwotICAgICAgICAgICAgQVNTRVJUKHN0YXJ0WSA8
IGhlaWdodCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChlbmRZIDw9IGhlaWdodCgpKTsKLSAgICAg
ICAgICAgIGNvbnN0IGludCByb3dCeXRlcyA9IChlbmRYIC0gc3RhcnRYKSAqIHNpemVvZihQaXhl
bERhdGEpOwotICAgICAgICAgICAgY29uc3QgUGl4ZWxEYXRhKiBjb25zdCBzdGFydEFkZHIgPSBn
ZXRBZGRyKHN0YXJ0WCwgc3RhcnRZKTsKLSAgICAgICAgICAgIGZvciAoaW50IGRlc3RZID0gc3Rh
cnRZICsgMTsgZGVzdFkgPCBlbmRZOyArK2Rlc3RZKQotICAgICAgICAgICAgICAgIG1lbWNweShn
ZXRBZGRyKHN0YXJ0WCwgZGVzdFkpLCBzdGFydEFkZHIsIHJvd0J5dGVzKTsKLSAgICAgICAgfQor
ICAgICAgICB2b2lkIGNvcHlSb3dOVGltZXMoaW50IHN0YXJ0WCwgaW50IGVuZFgsIGludCBzdGFy
dFksIGludCBlbmRZKTsKIAogICAgICAgICAvLyBBbGxvY2F0ZXMgc3BhY2UgZm9yIHRoZSBwaXhl
bCBkYXRhLiAgTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBwaXhlbHMKICAgICAgICAgLy8gYXJl
IHdyaXR0ZW4uICBNdXN0IG9ubHkgYmUgY2FsbGVkIG9uY2UuICBSZXR1cm5zIHdoZXRoZXIgYWxs
b2NhdGlvbgogICAgICAgICAvLyBzdWNjZWVkZWQuCiAgICAgICAgIGJvb2wgc2V0U2l6ZShpbnQg
bmV3V2lkdGgsIGludCBuZXdIZWlnaHQpOworICAgICAgICAKKyAgICAgICAgSW50U2l6ZSBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9waXhlbHMtPnNpemUoKTsgfQogCiAgICAgICAgIC8vIFJldHVy
bnMgYSBjYWxsZXItb3duZWQgcG9pbnRlciB0byB0aGUgdW5kZXJseWluZyBuYXRpdmUgaW1hZ2Ug
ZGF0YS4KICAgICAgICAgLy8gKEFjdHVhbCB1c2U6IFRoaXMgcG9pbnRlciB3aWxsIGJlIG93bmVk
IGJ5IEJpdG1hcEltYWdlIGFuZCBmcmVlZCBpbgogICAgICAgICAvLyBGcmFtZURhdGE6OmNsZWFy
KCkpLgotICAgICAgICBOYXRpdmVJbWFnZVB0ciBhc05ld05hdGl2ZUltYWdlKCkgY29uc3Q7Cisg
ICAgICAgIE5hdGl2ZUltYWdlUHRyIGFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdCB7IHJldHVybiBt
X3BpeGVscy0+aW1hZ2UoKTsgfQorCisgICAgICAgIGlubGluZSBCaXRtYXBQaXhlbHMqIHBpeGVs
cygpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxzID8gbV9waXhlbHMuZ2V0KCkgOiBudWxscHRyOyB9
CisgICAgICAgIGlubGluZSBib29sIGhhc1BpeGVscygpIGNvbnN0IHsgcmV0dXJuIHBpeGVscygp
OyB9CiAKICAgICAgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0OwotICAgICAgICBjb25zdCBJbnRS
ZWN0JiBvcmlnaW5hbEZyYW1lUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luYWxGcmFtZVJl
Y3Q7IH0KICAgICAgICAgRnJhbWVTdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0
dXM7IH0KICAgICAgICAgdW5zaWduZWQgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0
aW9uOyB9CiAgICAgICAgIEZyYW1lRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2QoKSBjb25z
dCB7IHJldHVybiBtX2Rpc3Bvc2FsTWV0aG9kOyB9CkBAIC0xMTEsNyArMTA1LDYgQEAgdXNpbmcg
Q29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogCiAgICAgICAgIHZvaWQgc2V0SGFzQWxwaGEo
Ym9vbCBhbHBoYSk7CiAgICAgICAgIHZvaWQgc2V0Q29sb3JQcm9maWxlKGNvbnN0IENvbG9yUHJv
ZmlsZSYpOwotICAgICAgICB2b2lkIHNldE9yaWdpbmFsRnJhbWVSZWN0KGNvbnN0IEludFJlY3Qm
IHIpIHsgbV9vcmlnaW5hbEZyYW1lUmVjdCA9IHI7IH0KICAgICAgICAgdm9pZCBzZXRTdGF0dXMo
RnJhbWVTdGF0dXMgc3RhdHVzKTsKICAgICAgICAgdm9pZCBzZXREdXJhdGlvbih1bnNpZ25lZCBk
dXJhdGlvbikgeyBtX2R1cmF0aW9uID0gZHVyYXRpb247IH0KICAgICAgICAgdm9pZCBzZXREaXNw
b3NhbE1ldGhvZChGcmFtZURpc3Bvc2FsTWV0aG9kIG1ldGhvZCkgeyBtX2Rpc3Bvc2FsTWV0aG9k
ID0gbWV0aG9kOyB9CkBAIC0xMTksMTA4ICsxMTIsMzIgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0g
VmVjdG9yPGNoYXI+OwogCiAgICAgICAgIGlubGluZSB2b2lkIHNldFJHQkEoaW50IHgsIGludCB5
LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQogICAgICAg
ICB7Ci0gICAgICAgICAgICBzZXRSR0JBKGdldEFkZHIoeCwgeSksIHIsIGcsIGIsIGEpOworICAg
ICAgICAgICAgbV9waXhlbHMtPnNldFJHQkEoeCwgeSwgciwgZywgYiwgYSk7CiAgICAgICAgIH0K
IAotICAgICAgICBpbmxpbmUgUGl4ZWxEYXRhKiBnZXRBZGRyKGludCB4LCBpbnQgeSkKKyAgICAg
ICAgaW5saW5lIFJHQkEzMiogZ2V0QWRkcihpbnQgeCwgaW50IHkpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBtX2J5dGVzICsgKHkgKiB3aWR0aCgpKSArIHg7CisgICAgICAgICAgICBy
ZXR1cm4gbV9waXhlbHMtPmF0KHgsIHkpOwogICAgICAgICB9CiAKLSAgICAgICAgaW5saW5lIGJv
b2wgaGFzUGl4ZWxEYXRhKCkgY29uc3QKKyAgICAgICAgaW5saW5lIHZvaWQgc2V0UkdCQShSR0JB
MzIqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2J5dGVzOwotICAgICAgICB9Ci0KLSAg
ICAgICAgLy8gVXNlIGZpeCBwb2ludCBtdWx0aXBsaWVyIGluc3RlYWQgb2YgaW50ZWdlciBkaXZp
c2lvbiBvciBmbG9hdGluZyBwb2ludCBtYXRoLgotICAgICAgICAvLyBUaGlzIG11bHRpcGxlciBw
cm9kdWNlcyBleGFjdGx5IHRoZSBzYW1lIHJlc3VsdCBmb3IgYWxsIHZhbHVlcyBpbiByYW5nZSAw
IC0gMjU1LgotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZml4UG9pbnRTaGlmdCA9IDI0
OwotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZml4UG9pbnRNdWx0ID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KDEuMCAvIDI1NS4wICogKDEgPDwgZml4UG9pbnRTaGlmdCkpICsgMTsKLSAg
ICAgICAgLy8gTXVsdGlwbGllcyB1bnNpZ25lZCB2YWx1ZSBieSBmaXhwb2ludCB2YWx1ZSBhbmQg
Y29udmVydHMgYmFjayB0byB1bnNpZ25lZC4KLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZpeFBv
aW50VW5zaWduZWRNdWx0aXBseSh1bnNpZ25lZCBmaXhlZCwgdW5zaWduZWQgdikKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuICAoZml4ZWQgKiB2KSA+PiBmaXhQb2ludFNoaWZ0OwotICAg
ICAgICB9Ci0KLSAgICAgICAgaW5saW5lIHZvaWQgc2V0UkdCQShQaXhlbERhdGEqIGRlc3QsIHVu
c2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChtX3ByZW11bHRpcGx5QWxwaGEgJiYgYSA8IDI1NSkgewotICAgICAg
ICAgICAgICAgIGlmICghYSkgewotICAgICAgICAgICAgICAgICAgICAqZGVzdCA9IDA7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBhbHBoYU11bHQgPSBhICogZml4UG9pbnRNdWx0OwotICAgICAgICAgICAg
ICAgIHIgPSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkociwgYWxwaGFNdWx0KTsKLSAgICAgICAg
ICAgICAgICBnID0gZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KGcsIGFscGhhTXVsdCk7Ci0gICAg
ICAgICAgICAgICAgYiA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShiLCBhbHBoYU11bHQpOwot
ICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3QgPSAoYSA8PCAyNCB8IHIgPDwgMTYgfCBn
IDw8IDggfCBiKTsKKyAgICAgICAgICAgIG1fcGl4ZWxzLT5zZXRSR0JBKGRlc3QsIHIsIGcsIGIs
IGEpOwogICAgICAgICB9CiAKICNpZiBFTkFCTEUoQVBORykKLSAgICAgICAgc3RhdGljIGlubGlu
ZSB1bnNpZ25lZCBkaXZpZGUyNTUodW5zaWduZWQgYSkKKyAgICAgICAgaW5saW5lIHZvaWQgb3Zl
clJHQkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1
bnNpZ25lZCBhKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKGEgKyAoYSA+PiA4KSAr
IDEpID4+IDg7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmxpbmUgdm9pZCBvdmVyUkdCQShQaXhl
bERhdGEqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVk
IGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghYSkKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgICAgIGlmIChhIDwgMjU1KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWdu
ZWQgYURlc3QgPSAoKCpkZXN0KSA+PiAyNCkgJiAyNTU7Ci0gICAgICAgICAgICAgICAgaWYgKGFE
ZXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJEZXN0ID0gKCgqZGVzdCkgPj4g
MTYpICYgMjU1OwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBnRGVzdCA9ICgoKmRlc3Qp
ID4+IDgpICYgMjU1OwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBiRGVzdCA9ICgqZGVz
dCkgJiAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFBdXggPSAyNTUgLSBhOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgckRlc3QgPSBkaXZpZGUyNTUockRlc3QgKiBhRGVzdCk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBnRGVzdCA9IGRpdmlkZTI1NShnRGVzdCAqIGFEZXN0KTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJEZXN0ID0gZGl2aWRlMjU1KGJEZXN0ICogYURlc3QpOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBkaXZpZGUyNTUociAq
IGEgKyByRGVzdCAqIGFBdXgpOwotICAgICAgICAgICAgICAgICAgICBnID0gZGl2aWRlMjU1KGcg
KiBhICsgZ0Rlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IGRpdmlkZTI1NShi
ICogYSArIGJEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAgIGEgKz0gZGl2aWRlMjU1
KGFEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFs
cGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByID0gKHIgKiAyNTUgKyBhIC0gMSkgLyBh
OwotICAgICAgICAgICAgICAgICAgICAgICAgZyA9IChnICogMjU1ICsgYSAtIDEpIC8gYTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGIgPSAoYiAqIDI1NSArIGEgLSAxKSAvIGE7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fcHJlbXVsdGlwbHlB
bHBoYSkgewotICAgICAgICAgICAgICAgICAgICByID0gZGl2aWRlMjU1KHIgKiBhKTsKLSAgICAg
ICAgICAgICAgICAgICAgZyA9IGRpdmlkZTI1NShnICogYSk7Ci0gICAgICAgICAgICAgICAgICAg
IGIgPSBkaXZpZGUyNTUoYiAqIGEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICpkZXN0ID0gKGEgPDwgMjQgfCByIDw8IDE2IHwgZyA8PCA4IHwgYik7Cisg
ICAgICAgICAgICBtX3BpeGVscy0+b3ZlclJHQkEoZGVzdCwgciwgZywgYiwgYSk7CiAgICAgICAg
IH0KICNlbmRpZgogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgaW50IHdpZHRoKCkgY29uc3QKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOwotICAgICAgICB9Cisg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxCaXRtYXBQaXhlbHM+IG1fcGl4ZWxzOwogCi0gICAgICAg
IGludCBoZWlnaHQoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9zaXpl
LmhlaWdodCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgVmVjdG9yPFBpeGVsRGF0YT4gbV9iYWNr
aW5nU3RvcmU7Ci0gICAgICAgIFBpeGVsRGF0YSogbV9ieXRlczsgLy8gVGhlIG1lbW9yeSBpcyBi
YWNrZWQgYnkgbV9iYWNraW5nU3RvcmUuCi0gICAgICAgIEludFNpemUgbV9zaXplOwogICAgICAg
ICAvLyBGSVhNRTogRG8gd2UgbmVlZCBtX2NvbG9yUHJvZmlsZSBhbnltb3JlPwogICAgICAgICBD
b2xvclByb2ZpbGUgbV9jb2xvclByb2ZpbGU7CiAgICAgICAgIGJvb2wgbV9oYXNBbHBoYTsKLSAg
ICAgICAgSW50UmVjdCBtX29yaWdpbmFsRnJhbWVSZWN0OyAvLyBUaGlzIHdpbGwgYWx3YXlzIGp1
c3QgYmUgdGhlIGVudGlyZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGJ1ZmZlciBleGNlcHQgZm9yIEdJRiBmcmFtZXMgd2hvc2UKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBvcmlnaW5hbCByZWN0IHdhcyBzbWFsbGVyIHRoYW4gdGhlCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3ZlcmFsbCBpbWFnZSBzaXpl
LgogICAgICAgICBGcmFtZVN0YXR1cyBtX3N0YXR1czsKICAgICAgICAgdW5zaWduZWQgbV9kdXJh
dGlvbjsKICAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBtX2Rpc3Bvc2FsTWV0aG9kOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUElt
YWdlUmVhZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2Jt
cC9CTVBJbWFnZVJlYWRlci5jcHAKaW5kZXggNWMwMDU1My4uZjkxOGNmMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1Q
SW1hZ2VSZWFkZXIuY3BwCkBAIC04Niw5ICs4Niw2IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OmRl
Y29kZUJNUChib29sIG9ubHlTaXplKQogICAgICAgICAvLyB0aGVzZSAwcyBjb3VsZCBhY3R1YWxs
eSBzaG93IHRocm91Z2guCiAgICAgICAgIG1fYnVmZmVyLT5zZXRIYXNBbHBoYShmYWxzZSk7CiAK
LSAgICAgICAgLy8gRm9yIEJNUHMsIHRoZSBmcmFtZSBhbHdheXMgZmlsbHMgdGhlIGVudGlyZSBp
bWFnZS4KLSAgICAgICAgbV9idWZmZXItPnNldE9yaWdpbmFsRnJhbWVSZWN0KEludFJlY3QoSW50
UG9pbnQoKSwgbV9wYXJlbnQtPnNpemUoKSkpOwotCiAgICAgICAgIGlmICghbV9pc1RvcERvd24p
CiAgICAgICAgICAgICBtX2Nvb3JkLnNldFkobV9wYXJlbnQtPnNpemUoKS5oZWlnaHQoKSAtIDEp
OwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2NhaXJvL0JpdG1hcFBpeGVsc0NhaXJvLmNwcAppbmRleCA3YjQxMjk1
Li41YWFmOGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9CaXRtYXBQaXhlbHNDYWlyby5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vQml0bWFwUGl4ZWxzQ2Fpcm8uY3BwCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI0LDE3ICsyNCwx
NyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZURlY29kZXIu
aCIKKyNpbmNsdWRlICJCaXRtYXBQaXhlbHMuaCIKIAogI2luY2x1ZGUgPGNhaXJvLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotTmF0aXZlSW1hZ2VQdHIgSW1hZ2VGcmFtZTo6YXNOZXdOYXRp
dmVJbWFnZSgpIGNvbnN0CitOYXRpdmVJbWFnZVB0ciBCaXRtYXBQaXhlbHM6OmltYWdlKCkgY29u
c3QKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9y
X2RhdGEoCi0gICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGNvbnN0X2Nh
c3Q8UGl4ZWxEYXRhKj4obV9ieXRlcykpLAotICAgICAgICBDQUlST19GT1JNQVRfQVJHQjMyLCB3
aWR0aCgpLCBoZWlnaHQoKSwgd2lkdGgoKSAqIHNpemVvZihQaXhlbERhdGEpKSk7CisgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGNvbnN0X2Nhc3Q8UkdCQTMyKj4obV9w
aXhlbHMpKSwKKyAgICAgICAgQ0FJUk9fRk9STUFUX0FSR0IzMiwgc2l6ZSgpLndpZHRoKCksIHNp
emUoKS5oZWlnaHQoKSwgc2l6ZSgpLndpZHRoKCkgKiBzaXplb2YoUkdCQTMyKSkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCmluZGV4IDlm
OTkyYTcuLmJkNDQ0NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCkBAIC0yMTMsMTAg
KzIxMywxMCBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3codW5zaWduZWQg
ZnJhbWVJbmRleCwgY29uc3QgVmVjdG9yPHVuc2lnbmVkCiAKICAgICAvLyBJbml0aWFsaXplIHRo
ZSBmcmFtZSBpZiBuZWNlc3NhcnkuCiAgICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1
ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOwotICAgIGlmICgoKGJ1ZmZlci5zdGF0dXMoKSA9PSBJbWFn
ZUZyYW1lOjpGcmFtZUVtcHR5KSAmJiAhaW5pdEZyYW1lQnVmZmVyKGZyYW1lSW5kZXgpKSB8fCAh
YnVmZmVyLmhhc1BpeGVsRGF0YSgpKQorICAgIGlmICgoKGJ1ZmZlci5zdGF0dXMoKSA9PSBJbWFn
ZUZyYW1lOjpGcmFtZUVtcHR5KSAmJiAhaW5pdEZyYW1lQnVmZmVyKGZyYW1lSW5kZXgpKSB8fCAh
YnVmZmVyLmhhc1BpeGVscygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbWFnZUZy
YW1lOjpQaXhlbERhdGEqIGN1cnJlbnRBZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoeEJlZ2luLCB5
QmVnaW4pOworICAgIFJHQkEzMiogY3VycmVudEFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcih4QmVn
aW4sIHlCZWdpbik7CiAgICAgLy8gV3JpdGUgb25lIHJvdydzIHdvcnRoIG9mIGRhdGEgaW50byB0
aGUgZnJhbWUuICAKICAgICBmb3IgKGludCB4ID0geEJlZ2luOyB4IDwgeEVuZDsgKyt4KSB7CiAg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgc291cmNlVmFsdWUgPSByb3dCdWZmZXJbKG1fc2Nh
bGVkID8gbV9zY2FsZWRDb2x1bW5zW3hdIDogeCkgLSBmcmFtZUNvbnRleHQtPnhPZmZzZXRdOwpA
QCAtMjYwLDcgKzI2MCw3IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKHVu
c2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGZyYW1lRHVyYXRpb24sCiAgICAgaWYgKCFtX2N1
cnJlbnRCdWZmZXJTYXdBbHBoYSkgewogICAgICAgICAvLyBUaGUgd2hvbGUgZnJhbWUgd2FzIG5v
bi10cmFuc3BhcmVudCwgc28gaXQncyBwb3NzaWJsZSB0aGF0IHRoZSBlbnRpcmUKICAgICAgICAg
Ly8gcmVzdWx0aW5nIGJ1ZmZlciB3YXMgbm9uLXRyYW5zcGFyZW50LCBhbmQgd2UgY2FuIHNldEhh
c0FscGhhKGZhbHNlKS4KLSAgICAgICAgaWYgKGJ1ZmZlci5vcmlnaW5hbEZyYW1lUmVjdCgpLmNv
bnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpCisgICAgICAgIGlmIChi
dWZmZXIucGl4ZWxzKCktPnJlY3QoKS5jb250YWlucyhJbnRSZWN0KEludFBvaW50KCksIHNjYWxl
ZFNpemUoKSkpKQogICAgICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKICAgICAg
ICAgZWxzZSBpZiAoZnJhbWVJbmRleCkgewogICAgICAgICAgICAgLy8gVHJpY2t5IGNhc2UuICBU
aGlzIGZyYW1lIGRvZXMgbm90IGhhdmUgYWxwaGEgb25seSBpZiBldmVyeXdoZXJlCkBAIC0yODMs
NyArMjgzLDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUodW5zaWduZWQg
ZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwKICAgICAgICAgICAgIC8vIFRoZSBv
bmx5IHJlbWFpbmluZyBjYXNlIGlzIGEgRGlzcG9zZU92ZXJ3cml0ZUJnY29sb3IgZnJhbWUuICBJ
ZgogICAgICAgICAgICAgLy8gaXQgaGFkIG5vIGFscGhhLCBhbmQgaXRzIHJlY3QgaXMgY29udGFp
bmVkIGluIHRoZSBjdXJyZW50IGZyYW1lJ3MKICAgICAgICAgICAgIC8vIHJlY3QsIHdlIGtub3cg
dGhlIGN1cnJlbnQgZnJhbWUgaGFzIG5vIGFscGhhLgotICAgICAgICAgICAgaWYgKChwcmV2QnVm
ZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVCZ2Nv
bG9yKSAmJiAhcHJldkJ1ZmZlci0+aGFzQWxwaGEoKSAmJiBidWZmZXIub3JpZ2luYWxGcmFtZVJl
Y3QoKS5jb250YWlucyhwcmV2QnVmZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgpKSkKKyAgICAgICAg
ICAgIGlmICgocHJldkJ1ZmZlci0+ZGlzcG9zYWxNZXRob2QoKSA9PSBJbWFnZUZyYW1lOjpEaXNw
b3NlT3ZlcndyaXRlQmdjb2xvcikgJiYgIXByZXZCdWZmZXItPmhhc0FscGhhKCkgJiYgYnVmZmVy
LnBpeGVscygpLT5yZWN0KCkuY29udGFpbnMocHJldkJ1ZmZlci0+cGl4ZWxzKCktPnJlY3QoKSkp
CiAgICAgICAgICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKICAgICAgICAgfQog
ICAgIH0KQEAgLTM1MywxMSArMzUzLDYgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFt
ZUJ1ZmZlcih1bnNpZ25lZCBmcmFtZUluZGV4KQogICAgICAgICBmcmFtZVJlY3Quc2V0SGVpZ2h0
KHNpemUoKS5oZWlnaHQoKSAtIGZyYW1lQ29udGV4dC0+eU9mZnNldCk7CiAKICAgICBJbWFnZUZy
YW1lKiBjb25zdCBidWZmZXIgPSAmbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOwotICAg
IGludCBsZWZ0ID0gdXBwZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0LngoKSk7Ci0gICAgaW50IHJp
Z2h0ID0gbG93ZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0Lm1heFgoKSwgbGVmdCk7Ci0gICAgaW50
IHRvcCA9IHVwcGVyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC55KCkpOwotICAgIGludCBib3R0b20g
PSBsb3dlckJvdW5kU2NhbGVkWShmcmFtZVJlY3QubWF4WSgpLCB0b3ApOwotICAgIGJ1ZmZlci0+
c2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCwgYm90
dG9tIC0gdG9wKSk7CiAKICAgICBpZiAoIWZyYW1lSW5kZXgpIHsKICAgICAgICAgLy8gVGhpcyBp
cyB0aGUgZmlyc3QgZnJhbWUsIHNvIHdlJ3JlIG5vdCByZWx5aW5nIG9uIGFueSBwcmV2aW91cyBk
YXRhLgpAQCAtMzg3LDcgKzM4Miw3IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVC
dWZmZXIodW5zaWduZWQgZnJhbWVJbmRleCkKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IC8vIFdlIHdhbnQgdG8gY2xlYXIgdGhlIHByZXZpb3VzIGZyYW1lIHRvIHRyYW5zcGFyZW50LCB3
aXRob3V0CiAgICAgICAgICAgICAvLyBhZmZlY3RpbmcgcGl4ZWxzIGluIHRoZSBpbWFnZSBvdXRz
aWRlIG9mIHRoZSBmcmFtZS4KLSAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHByZXZSZWN0ID0g
cHJldkJ1ZmZlci0+b3JpZ2luYWxGcmFtZVJlY3QoKTsKKyAgICAgICAgICAgIGNvbnN0IEludFJl
Y3QmIHByZXZSZWN0ID0gcHJldkJ1ZmZlci0+cGl4ZWxzKCktPnJlY3QoKTsKICAgICAgICAgICAg
IGNvbnN0IEludFNpemUmIGJ1ZmZlclNpemUgPSBzY2FsZWRTaXplKCk7CiAgICAgICAgICAgICBp
ZiAoIWZyYW1lSW5kZXggfHwgcHJldlJlY3QuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBz
Y2FsZWRTaXplKCkpKSkgewogICAgICAgICAgICAgICAgIC8vIENsZWFyaW5nIHRoZSBmaXJzdCBm
cmFtZSwgb3IgYSBmcmFtZSB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUKQEAgLTQwMiw2ICszOTcsMTIg
QEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bnNpZ25lZCBmcmFtZUlu
ZGV4KQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQorICAgIAorICAgIGludCBsZWZ0
ID0gdXBwZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0LngoKSk7CisgICAgaW50IHJpZ2h0ID0gbG93
ZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0Lm1heFgoKSwgbGVmdCk7CisgICAgaW50IHRvcCA9IHVw
cGVyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC55KCkpOworICAgIGludCBib3R0b20gPSBsb3dlckJv
dW5kU2NhbGVkWShmcmFtZVJlY3QubWF4WSgpLCB0b3ApOworICAgIGJ1ZmZlci0+cGl4ZWxzKCkt
PnNldFJlY3QoSW50UmVjdChsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKSk7
CiAKICAgICAvLyBVcGRhdGUgb3VyIHN0YXR1cyB0byBiZSBwYXJ0aWFsbHkgY29tcGxldGUuCiAg
ICAgYnVmZmVyLT5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdl
RGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVn
L0pQRUdJbWFnZURlY29kZXIuY3BwCmluZGV4IGVlNjZhYzEuLjk4ZmZlMDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVj
b2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBl
Zy9KUEVHSW1hZ2VEZWNvZGVyLmNwcApAQCAtNTg4LDcgKzU4OCw3IEBAIGJvb2wgSlBFR0ltYWdl
RGVjb2Rlcjo6c2V0RmFpbGVkKCkKIH0KIAogdGVtcGxhdGUgPEpfQ09MT1JfU1BBQ0UgY29sb3JT
cGFjZT4KLXZvaWQgc2V0UGl4ZWwoSW1hZ2VGcmFtZSYgYnVmZmVyLCBJbWFnZUZyYW1lOjpQaXhl
bERhdGEqIGN1cnJlbnRBZGRyZXNzLCBKU0FNUEFSUkFZIHNhbXBsZXMsIGludCBjb2x1bW4pCit2
b2lkIHNldFBpeGVsKEltYWdlRnJhbWUmIGJ1ZmZlciwgUkdCQTMyKiBjdXJyZW50QWRkcmVzcywg
SlNBTVBBUlJBWSBzYW1wbGVzLCBpbnQgY29sdW1uKQogewogICAgIEpTQU1QTEUqIGpzYW1wbGUg
PSAqc2FtcGxlcyArIGNvbHVtbiAqIChjb2xvclNwYWNlID09IEpDU19SR0IgPyAzIDogNCk7CiAK
QEAgLTYzMSw3ICs2MzEsNyBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5l
cyhJbWFnZUZyYW1lJiBidWZmZXIpCiAgICAgICAgIGlmIChkZXN0WSA8IDApCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAotICAgICAgICBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGN1cnJlbnRBZGRy
ZXNzID0gYnVmZmVyLmdldEFkZHIoMCwgZGVzdFkpOworICAgICAgICBSR0JBMzIqIGN1cnJlbnRB
ZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoMCwgZGVzdFkpOwogICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHdpZHRoOyArK3gpIHsKICAgICAgICAgICAgIHNldFBpeGVsPGNvbG9yU3BhY2U+KGJ1
ZmZlciwgY3VycmVudEFkZHJlc3MsIHNhbXBsZXMsIGlzU2NhbGVkID8gbV9zY2FsZWRDb2x1bW5z
W3hdIDogeCk7CiAgICAgICAgICAgICArK2N1cnJlbnRBZGRyZXNzOwpAQCAtNjYxLDkgKzY2MSw2
IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKCkKICAgICAgICAgLy8g
bG9hZGluZy4gVGhlIGNvbXBsZXRlZCBpbWFnZSB3aWxsIGJlIG1hcmtlZCBmdWxseSBvcGFxdWUg
aW4ganBlZ0NvbXBsZXRlKCkuCiAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYSh0cnVlKTsKICAg
ICAgICAgYnVmZmVyLnNldENvbG9yUHJvZmlsZShtX2NvbG9yUHJvZmlsZSk7Ci0KLSAgICAgICAg
Ly8gRm9yIEpQRUdzLCB0aGUgZnJhbWUgYWx3YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2UuCi0g
ICAgICAgIGJ1ZmZlci5zZXRPcmlnaW5hbEZyYW1lUmVjdChJbnRSZWN0KEludFBvaW50KCksIHNp
emUoKSkpOwogICAgIH0KIAogICAgIGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QqIGluZm8gPSBtX3Jl
YWRlci0+aW5mbygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAppbmRleCBlNjQ0YTcxLi40
NDRkNDM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcApAQCAtNDUyLDE5ICs0NTIsMTkg
QEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmhlYWRlckF2YWlsYWJsZSgpCiAgICAgfQogfQogCi1z
dGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxSR0IoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBkZXN0
LCBwbmdfYnl0ZXAgcGl4ZWwpCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxSR0IoUkdCQTMy
KiBkZXN0LCBwbmdfYnl0ZXAgcGl4ZWwpCiB7CiAgICAgKmRlc3QgPSAweEZGMDAwMDAwVSB8IHBp
eGVsWzBdIDw8IDE2IHwgcGl4ZWxbMV0gPDwgOCB8IHBpeGVsWzJdOwogfQogCi1zdGF0aWMgaW5s
aW5lIHZvaWQgc2V0UGl4ZWxSR0JBKEltYWdlRnJhbWU6OlBpeGVsRGF0YSogZGVzdCwgcG5nX2J5
dGVwIHBpeGVsLCB1bnNpZ25lZCBjaGFyJiBub25Ucml2aWFsQWxwaGFNYXNrKQorc3RhdGljIGlu
bGluZSB2b2lkIHNldFBpeGVsUkdCQShSR0JBMzIqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCwgdW5z
aWduZWQgY2hhciYgbm9uVHJpdmlhbEFscGhhTWFzaykKIHsKICAgICB1bnNpZ25lZCBjaGFyIGEg
PSBwaXhlbFszXTsKICAgICAqZGVzdCA9IGEgPDwgMjQgfCBwaXhlbFswXSA8PCAxNiB8IHBpeGVs
WzFdIDw8IDggfCBwaXhlbFsyXTsKICAgICBub25Ucml2aWFsQWxwaGFNYXNrIHw9ICgyNTUgLSBh
KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldFBpeGVsUHJlbXVsdGlwbGllZFJHQkEoSW1h
Z2VGcmFtZTo6UGl4ZWxEYXRhKiBkZXN0LCBwbmdfYnl0ZXAgcGl4ZWwsIHVuc2lnbmVkIGNoYXIm
IG5vblRyaXZpYWxBbHBoYU1hc2spCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxQcmVtdWx0
aXBsaWVkUkdCQShSR0JBMzIqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCwgdW5zaWduZWQgY2hhciYg
bm9uVHJpdmlhbEFscGhhTWFzaykKIHsKICAgICB1bnNpZ25lZCBjaGFyIGEgPSBwaXhlbFszXTsK
ICAgICB1bnNpZ25lZCBjaGFyIHIgPSBmYXN0RGl2aWRlQnkyNTUocGl4ZWxbMF0gKiBhKTsKQEAg
LTUxMSwxMCArNTExLDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNp
Z25lZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVkIHJvd0luZGV4LAogI2lmIEVOQUJMRShBUE5H
KQogICAgICAgICBpZiAobV9jdXJyZW50RnJhbWUpCiAgICAgICAgICAgICBpbml0RnJhbWVCdWZm
ZXIobV9jdXJyZW50RnJhbWUpOwotICAgICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgLy8gRm9y
IFBOR3MsIHRoZSBmcmFtZSBhbHdheXMgZmlsbHMgdGhlIGVudGlyZSBpbWFnZS4KLSAgICAgICAg
YnVmZmVyLnNldE9yaWdpbmFsRnJhbWVSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSgpKSk7
CiAgICAgfQogCiAgICAgLyogbGlicG5nIGNvbW1lbnRzIChoZXJlIHRvIGV4cGxhaW4gd2hhdCBm
b2xsb3dzKS4KQEAgLTU3Myw3ICs1NzAsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93QXZh
aWxhYmxlKHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgcm93SW5kZXgsCiAgICAg
fQogCiAgICAgLy8gV3JpdGUgdGhlIGRlY29kZWQgcm93IHBpeGVscyB0byB0aGUgZnJhbWUgYnVm
ZmVyLgotICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogYWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRy
KDAsIHkpOworICAgIFJHQkEzMiogYWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKDAsIHkpOwogICAg
IGludCB3aWR0aCA9IHNjYWxlZFNpemUoKS53aWR0aCgpOwogICAgIHVuc2lnbmVkIGNoYXIgbm9u
VHJpdmlhbEFscGhhTWFzayA9IDA7CiAKQEAgLTgzNCwxMSArODMxLDYgQEAgdm9pZCBQTkdJbWFn
ZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcihzaXplX3QgZnJhbWVJbmRleCkKICAgICAgICAgZnJh
bWVSZWN0LnNldEhlaWdodChzaXplKCkuaGVpZ2h0KCkgLSBtX3lPZmZzZXQpOwogCiAgICAgSW1h
Z2VGcmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOwotICAgIGlu
dCBsZWZ0ID0gdXBwZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0LngoKSk7Ci0gICAgaW50IHJpZ2h0
ID0gbG93ZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0Lm1heFgoKSwgbGVmdCk7Ci0gICAgaW50IHRv
cCA9IHVwcGVyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC55KCkpOwotICAgIGludCBib3R0b20gPSBs
b3dlckJvdW5kU2NhbGVkWShmcmFtZVJlY3QubWF4WSgpLCB0b3ApOwotICAgIGJ1ZmZlci5zZXRP
cmlnaW5hbEZyYW1lUmVjdChJbnRSZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20g
LSB0b3ApKTsKIAogICAgIC8vIFRoZSBzdGFydGluZyBzdGF0ZSBmb3IgdGhpcyBmcmFtZSBkZXBl
bmRzIG9uIHRoZSBwcmV2aW91cyBmcmFtZSdzCiAgICAgLy8gZGlzcG9zYWwgbWV0aG9kLgpAQCAt
ODYyLDcgKzg1NCw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIoc2l6
ZV90IGZyYW1lSW5kZXgpCiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gV2Ugd2FudCB0byBjbGVh
ciB0aGUgcHJldmlvdXMgZnJhbWUgdG8gdHJhbnNwYXJlbnQsIHdpdGhvdXQKICAgICAgICAgLy8g
YWZmZWN0aW5nIHBpeGVscyBpbiB0aGUgaW1hZ2Ugb3V0c2lkZSBvZiB0aGUgZnJhbWUuCi0gICAg
ICAgIGNvbnN0IEludFJlY3QmIHByZXZSZWN0ID0gcHJldkJ1ZmZlci0+b3JpZ2luYWxGcmFtZVJl
Y3QoKTsKKyAgICAgICAgY29uc3QgSW50UmVjdCYgcHJldlJlY3QgPSBwcmV2QnVmZmVyLT5waXhl
bHMoKS0+cmVjdCgpOwogICAgICAgICBpZiAoIWZyYW1lSW5kZXggfHwgcHJldlJlY3QuY29udGFp
bnMoSW50UmVjdChJbnRQb2ludCgpLCBzY2FsZWRTaXplKCkpKSkgewogICAgICAgICAgICAgLy8g
Q2xlYXJpbmcgdGhlIGZpcnN0IGZyYW1lLCBvciBhIGZyYW1lIHRoZSBzaXplIG9mIHRoZSB3aG9s
ZQogICAgICAgICAgICAgLy8gaW1hZ2UsIHJlc3VsdHMgaW4gYSBjb21wbGV0ZWx5IGVtcHR5IGlt
YWdlLgpAQCAtODczLDYgKzg2NSwxMiBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aW5pdEZyYW1l
QnVmZmVyKHNpemVfdCBmcmFtZUluZGV4KQogICAgICAgICAgICAgYnVmZmVyLnplcm9GaWxsRnJh
bWVSZWN0KHByZXZSZWN0KTsKICAgICAgICAgfQogICAgIH0KKyAgICAKKyAgICBpbnQgbGVmdCA9
IHVwcGVyQm91bmRTY2FsZWRYKGZyYW1lUmVjdC54KCkpOworICAgIGludCByaWdodCA9IGxvd2Vy
Qm91bmRTY2FsZWRYKGZyYW1lUmVjdC5tYXhYKCksIGxlZnQpOworICAgIGludCB0b3AgPSB1cHBl
ckJvdW5kU2NhbGVkWShmcmFtZVJlY3QueSgpKTsKKyAgICBpbnQgYm90dG9tID0gbG93ZXJCb3Vu
ZFNjYWxlZFkoZnJhbWVSZWN0Lm1heFkoKSwgdG9wKTsKKyAgICBidWZmZXIucGl4ZWxzKCktPnNl
dFJlY3QoSW50UmVjdChsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKSk7CiB9
CiAKIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKCkKQEAgLTg4Niw3ICs4ODQs
NyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAgICAgcG5nX2J5dGVw
IGludGVybGFjZUJ1ZmZlciA9IG1fcmVhZGVyLT5pbnRlcmxhY2VCdWZmZXIoKTsKIAogICAgIGlm
IChtX2N1cnJlbnRGcmFtZSAmJiBpbnRlcmxhY2VCdWZmZXIpIHsKLSAgICAgICAgY29uc3QgSW50
UmVjdCYgcmVjdCA9IGJ1ZmZlci5vcmlnaW5hbEZyYW1lUmVjdCgpOworICAgICAgICBjb25zdCBJ
bnRSZWN0JiByZWN0ID0gYnVmZmVyLnBpeGVscygpLT5yZWN0KCk7CiAgICAgICAgIGJvb2wgaGFz
QWxwaGEgPSBtX3JlYWRlci0+aGFzQWxwaGEoKTsKICAgICAgICAgdW5zaWduZWQgY29sb3JDaGFu
bmVscyA9IGhhc0FscGhhID8gNCA6IDM7CiAgICAgICAgIGJvb2wgbm9uVHJpdmlhbEFscGhhID0g
ZmFsc2U7CkBAIC04OTYsNyArODk0LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmZyYW1lQ29t
cGxldGUoKQogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCiAgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgcmVjdC5tYXhZKCkgLSByZWN0LnkoKTsgKyt5KSB7CiAgICAg
ICAgICAgICBwbmdfYnl0ZXAgcm93ID0gaW50ZXJsYWNlQnVmZmVyICsgKG1fc2NhbGVkID8gbV9z
Y2FsZWRSb3dzW3ldIDogeSkgKiBjb2xvckNoYW5uZWxzICogc2l6ZSgpLndpZHRoKCk7Ci0gICAg
ICAgICAgICBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcihy
ZWN0LngoKSwgeSArIHJlY3QueSgpKTsKKyAgICAgICAgICAgIFJHQkEzMiogYWRkcmVzcyA9IGJ1
ZmZlci5nZXRBZGRyKHJlY3QueCgpLCB5ICsgcmVjdC55KCkpOwogICAgICAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCByZWN0Lm1heFgoKSAtIHJlY3QueCgpOyArK3gpIHsKICAgICAgICAgICAg
ICAgICBwbmdfYnl0ZXAgcGl4ZWwgPSByb3cgKyAobV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNb
eF0gOiB4KSAqIGNvbG9yQ2hhbm5lbHM7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEg
PSBoYXNBbHBoYSA/IHBpeGVsWzNdIDogMjU1OwpAQCAtOTEyLDcgKzkxMCw3IEBAIHZvaWQgUE5H
SW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKCkKICAgICAgICAgcG5nX2J5dGVwIHJvdyA9IGlu
dGVybGFjZUJ1ZmZlcjsKICAgICAgICAgZm9yIChpbnQgeSA9IHJlY3QueSgpOyB5IDwgcmVjdC5t
YXhZKCk7ICsreSwgcm93ICs9IGNvbG9yQ2hhbm5lbHMgKiBzaXplKCkud2lkdGgoKSkgewogICAg
ICAgICAgICAgcG5nX2J5dGVwIHBpeGVsID0gcm93OwotICAgICAgICAgICAgSW1hZ2VGcmFtZTo6
UGl4ZWxEYXRhKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIocmVjdC54KCksIHkpOworICAgICAg
ICAgICAgUkdCQTMyKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIocmVjdC54KCksIHkpOwogICAg
ICAgICAgICAgZm9yIChpbnQgeCA9IHJlY3QueCgpOyB4IDwgcmVjdC5tYXhYKCk7ICsreCwgcGl4
ZWwgKz0gY29sb3JDaGFubmVscykgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0g
aGFzQWxwaGEgPyBwaXhlbFszXSA6IDI1NTsKICAgICAgICAgICAgICAgICBub25Ucml2aWFsQWxw
aGEgfD0gYWxwaGEgPCAyNTU7CkBAIC05MjUsNyArOTIzLDcgQEAgdm9pZCBQTkdJbWFnZURlY29k
ZXI6OmZyYW1lQ29tcGxldGUoKQogI2VuZGlmCiAKICAgICAgICAgaWYgKCFub25Ucml2aWFsQWxw
aGEpIHsKLSAgICAgICAgICAgIGlmIChidWZmZXIub3JpZ2luYWxGcmFtZVJlY3QoKS5jb250YWlu
cyhJbnRSZWN0KEludFBvaW50KCksIHNjYWxlZFNpemUoKSkpKQorICAgICAgICAgICAgaWYgKGJ1
ZmZlci5waXhlbHMoKS0+cmVjdCgpLmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVk
U2l6ZSgpKSkpCiAgICAgICAgICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKGZhbHNlKTsKICAg
ICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIHNpemVfdCBmcmFtZUluZGV4ID0gbV9j
dXJyZW50RnJhbWU7CkBAIC05MzMsNyArOTMxLDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmZy
YW1lQ29tcGxldGUoKQogICAgICAgICAgICAgICAgIHdoaWxlIChmcmFtZUluZGV4ICYmIChwcmV2
QnVmZmVyLT5kaXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVQ
cmV2aW91cykpCiAgICAgICAgICAgICAgICAgICAgIHByZXZCdWZmZXIgPSAmbV9mcmFtZUJ1ZmZl
ckNhY2hlWy0tZnJhbWVJbmRleF07CiAgICAgICAgICAgICAgICAgaWYgKChwcmV2QnVmZmVyLT5k
aXNwb3NhbE1ldGhvZCgpID09IEltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVCZ2NvbG9yKQot
ICAgICAgICAgICAgICAgICAgICAmJiAhcHJldkJ1ZmZlci0+aGFzQWxwaGEoKSAmJiBidWZmZXIu
b3JpZ2luYWxGcmFtZVJlY3QoKS5jb250YWlucyhwcmV2QnVmZmVyLT5vcmlnaW5hbEZyYW1lUmVj
dCgpKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgIXByZXZCdWZmZXItPmhhc0FscGhhKCkgJiYg
YnVmZmVyLnBpeGVscygpLT5yZWN0KCkuY29udGFpbnMocHJldkJ1ZmZlci0+cGl4ZWxzKCktPnJl
Y3QoKSkpCiAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoIW1fYmxlbmQgJiYgIWJ1ZmZlci5oYXNB
bHBoYSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHAKaW5kZXggMTI0YTFiMi4uMDIy
YzZmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
d2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwCkBAIC0xMzIsMTQgKzEzMiwx
MyBAQCBib29sIFdFQlBJbWFnZURlY29kZXI6OmRlY29kZShib29sIG9ubHlTaXplKQogICAgICAg
ICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgICAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdl
RnJhbWU6OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShtX2hhc0Fs
cGhhKTsKLSAgICAgICAgYnVmZmVyLnNldE9yaWdpbmFsRnJhbWVSZWN0KEludFJlY3QoSW50UG9p
bnQoKSwgc2l6ZSgpKSk7CiAgICAgfQogCiAgICAgaWYgKCFtX2RlY29kZXIpIHsKICAgICAgICAg
V0VCUF9DU1BfTU9ERSBtb2RlID0gb3V0cHV0TW9kZShtX2hhc0FscGhhKTsKICAgICAgICAgaWYg
KCFtX3ByZW11bHRpcGx5QWxwaGEpCiAgICAgICAgICAgICBtb2RlID0gb3V0cHV0TW9kZShmYWxz
ZSk7Ci0gICAgICAgIGludCByb3dTdHJpZGUgPSBzaXplKCkud2lkdGgoKSAqIHNpemVvZihJbWFn
ZUZyYW1lOjpQaXhlbERhdGEpOworICAgICAgICBpbnQgcm93U3RyaWRlID0gc2l6ZSgpLndpZHRo
KCkgKiBzaXplb2YoUkdCQTMyKTsKICAgICAgICAgdWludDhfdCogb3V0cHV0ID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyLmdldEFkZHIoMCwgMCkpOwogICAgICAgICBpbnQgb3V0
cHV0U2l6ZSA9IHNpemUoKS5oZWlnaHQoKSAqIHJvd1N0cmlkZTsKICAgICAgICAgbV9kZWNvZGVy
ID0gV2ViUElOZXdSR0IobW9kZSwgb3V0cHV0LCBvdXRwdXRTaXplLCByb3dTdHJpZGUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288426</attachid>
            <date>2016-09-09 12:03:15 -0700</date>
            <delta_ts>2016-09-09 12:31:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159679-20160909120047.patch</filename>
            <type>text/plain</type>
            <size>43850</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTc1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg5IEBACisyMDE2LTA5LTA5ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSB0aGUg
cGl4ZWwgZGF0YSBvZiBJbWFnZUZyYW1lIHRvIGEgc2VwYXJhdGUgY2xhc3MgbmFtZWQgSW1hZ2VC
YWNraW5nU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1OTY3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE1vdmUgdGhlIHBpeGVsIGRhdGEgbWFuaXB1bGF0aW9uIHBhcnQgaW4gSW1hZ2VGcmFtZSBp
bnRvIGEgc2VwYXJhdGUgY2xhc3MKKyAgICAgICAgYW5kIGFsbG9jYXRlIGl0IG9uIGRlbWFuZC4K
KyAKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5j
bWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbkNhaXJvLmNtYWtlOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2hhbm5lbCk6Cisg
ICAgICAgIChXZWJDb3JlOjp1bnByZW11bHRpcGxpZWRDaGFubmVsKToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VQcmVtdWx0aXBsaWVkUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlVW5QcmVt
dWx0aXBsaWVkUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpjb2xvckZyb21QcmVtdWx0aXBsaWVk
QVJHQik6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OmZh
c3RNdWx0aXBseUJ5MjU1KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tp
bmdTdG9yZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OkltYWdlQmFja2lu
Z1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRGcmFtZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OnNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCYWNraW5nU3RvcmU6OmZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJhY2tpbmdTdG9yZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3Rv
cmU6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJhY2tpbmdTdG9yZTo6cmVw
ZWF0Rmlyc3RSb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OmF0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRSR0JBKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpvdmVyUkdCQSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJhY2tpbmdTdG9yZTo6aW5Cb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
YWNraW5nU3RvcmU6OmlzT3ZlclNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L05hdGl2ZUltYWdlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmF0aXZlSW1hZ2VIYXNBbHBo
YSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojp6ZXJvRmlsbEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRC
YWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRPcmlnaW5hbEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6OmNvcHlSb3dOVGltZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjphc05ld05hdGl2ZUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpoYXNCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZTo6b3JpZ2luYWxGcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
Z2V0QWRkcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRSR0JBKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om92ZXJSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2Rlcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRP
cmlnaW5hbEZyYW1lUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
OjpoYXNQaXhlbERhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
Zml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWU6OmRpdmlkZTI1NSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjp3aWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpoZWln
aHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjppc092ZXJTaXpl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1h
Z2VSZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6OmRlY29kZUJN
UCk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VCYWNraW5n
U3RvcmVDYWlyby5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3Rv
cmU6OmltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1h
Z2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6aGF2ZURl
Y29kZWRSb3cpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0lt
YWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhlbCk6CisgICAgICAgIChX
ZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c2V0UGl4ZWxSR0IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxSR0JBKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVsUHJlbXVsdGlwbGllZFJHQkEpOgorICAgICAgICAo
V2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6V0VCUEltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKwogMjAxNi0wOS0wOSAgQnJhZHkgRWlkc29u
ICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgU29mdC1saW5rIEdhbWVDb250cm9sbGVy
LmZyYW1ld29yay4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCShyZXZpc2lvbiAyMDU2
ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQkod29ya2luZyBjb3B5KQpA
QCAtMTgzLDEwICsxODMsOSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3gxMS9YVW5pcXVlUmVzb3VyY2UuY3BwCiAKKyAgICBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9JbWFnZUJhY2tpbmdTdG9yZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2ltYWdl
LWVuY29kZXJzL0pQRUdJbWFnZUVuY29kZXIuY3BwCiAKLSAgICBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKLQogICAgIHBsYXRmb3JtL25ldHdvcmsv
ZWZsL05ldHdvcmtTdGF0ZU5vdGlmaWVyRWZsLmNwcAogCiAgICAgcGxhdGZvcm0vbmV0d29yay9z
b3VwL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU291cC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtR1RLLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
R1RLLmNtYWtlCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdU
Sy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTU1LDcgKzE1NSw3IEBAIGxpc3QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCiAg
ICAgcGxhdGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5jcHAKIAotICAgIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCiAKICAgICBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9ndGsvU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2VHdGsuY3BwCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQkocmV2aXNpb24gMjA1Njg0KQorKysg
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAt
NDYsNyArNDYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAogCi0gICAgcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCisgICAgcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VCYWNraW5nU3RvcmVDYWlyby5jcHAKIAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU3R1Yi5jcHAKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMjc1LDYgKzIyNzUsNyBAQAogCQk1
NTVCODdFQzFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU1Qjg3RUExQ0FBRjBBQjAwMzQ5
NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLzsgfTsKIAkJNTU1Qjg3RUQxQ0FBRjBBQjAwMzQ5
NDI1IC8qIEltYWdlRGVjb2RlckNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cu
aCAqLzsgfTsKIAkJNTVBMzM2RjcxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUEzMzZGNjFEODIw
OUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLzsgfTsKKwkJNTVBMzM2RjkxRDgyMUUzQzAw
MjJDNEM3IC8qIEltYWdlQmFja2luZ1N0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NUEzMzZGODFEODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNr
aW5nU3RvcmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1NzA5RThDRDFENDEzRDQ3MDAzMjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5cHRvLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MDlFOENBMUQ0
MTNDRTMwMDMyNDRBQyAvKiBXZWJLaXRTdWJ0bGVDcnlwdG8uY3BwICovOyB9OwogCQk1NzA5RThD
RTFENDEzRDVCMDAzMjQ0QUMgLyogSlNXZWJLaXRTdWJ0bGVDcnlwdG9DdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFGRjhGNjYxODA3NDYw
ODAwMTMyNjc0IC8qIEpTV2ViS2l0U3VidGxlQ3J5cHRvQ3VzdG9tLmNwcCAqLzsgfTsKIAkJNTcw
OUU4Q0YxRDQxM0Q5QTAwMzI0NEFDIC8qIFdlYktpdFN1YnRsZUNyeXB0by5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcwOUU4Q0IxRDQxM0NFMzAwMzI0
NEFDIC8qIFdlYktpdFN1YnRsZUNyeXB0by5oICovOyB9OwpAQCAtOTI5MSw2ICs5MjkyLDcgQEAK
IAkJNTU1Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdl
RGVjb2RlckNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlRGVjb2Rl
ckNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1QTMzNkY2MUQ4MjA5RjQwMDIy
QzRDNyAvKiBOYXRpdmVJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBO
YXRpdmVJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NUEzMzZGODFEODIx
RTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW1hZ2VCYWNraW5nU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTVENDA4RjcxQTdDNjMxODAwQzc4NDUwIC8qIFNWR0ltYWdlQ2xpZW50cy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdJbWFnZUNsaWVudHMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcwOUU4Q0ExRDQxM0NFMzAwMzI0NEFDIC8qIFdlYktpdFN1
YnRsZUNyeXB0by5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJL
aXRTdWJ0bGVDcnlwdG8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzA5RThD
QjFENDEzQ0UzMDAzMjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5cHRvLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdFN1YnRsZUNyeXB0by5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjA3NjksNiArMjA3NzEsNyBAQAogCQkJCTM3OTkxOTk0MTIwMERERjQw
MEVBMDQxQyAvKiBXT0ZGRmlsZUZvcm1hdC5jcHAgKi8sCiAJCQkJMzc5OTE5OTUxMjAwRERGNDAw
RUEwNDFDIC8qIFdPRkZGaWxlRm9ybWF0LmggKi8sCiAJCQkJNTVBMzM2RjYxRDgyMDlGNDAwMjJD
NEM3IC8qIE5hdGl2ZUltYWdlLmggKi8sCisJCQkJNTVBMzM2RjgxRDgyMUUzQzAwMjJDNEM3IC8q
IEltYWdlQmFja2luZ1N0b3JlLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGdyYXBoaWNzOwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI2MzM5LDYgKzI2MzQyLDcgQEAKIAkJCQk1ODJD
QjA1MzFBNzhBMTRCMDBBRkZDQzQgLyogU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNUExRUE3RDE1MkJDRjA4MDA0RDAwQjYgLyogU2lt
cGxpZnlNYXJrdXBDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzJBN0YyMTFDNkU1NzE5
MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTU1QTMzNkY5
MUQ4MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzE3NDFBQUQxNjYzNjYwOTAwOEE1QjdFIC8qIFNpbXVsYXRlZENsaWNrT3B0aW9ucy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkQwMEQ3QTUxNEEzRjYxOTAwNzM0MDExIC8qIFNpbmNSZXNhbXBs
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMzI3RDYwMTFBMzNBMkIwMDRGOUQ2NSAvKiBTaW5r
RG9jdW1lbnQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSwx
NiBAQCBjb25zdCBSR0JBMzIgQ29sb3I6OnRyYW5zcGFyZW50Owogc3RhdGljIGNvbnN0IFJHQkEz
MiBsaWdodGVuZWRCbGFjayA9IDB4RkY1NDU0NTQ7CiBzdGF0aWMgY29uc3QgUkdCQTMyIGRhcmtl
bmVkV2hpdGUgPSAweEZGQUJBQkFCOwogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHByZW11bHRp
cGxpZWRDaGFubmVsKHVuc2lnbmVkIGMsIHVuc2lnbmVkIGEpCit7CisgICAgcmV0dXJuIGZhc3RE
aXZpZGVCeTI1NShjICogYSArIDI1NCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgdW5w
cmVtdWx0aXBsaWVkQ2hhbm5lbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBhKQoreworICAgIHJldHVy
biAoZmFzdE11bHRpcGx5QnkyNTUoYykgKyBhIC0gMSkgLyBhOworfQorCiBSR0JBMzIgbWFrZVJH
QihpbnQgciwgaW50IGcsIGludCBiKQogewogICAgIHJldHVybiAweEZGMDAwMDAwIHwgc3RkOjpt
YXgoMCwgc3RkOjptaW4ociwgMjU1KSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAy
NTUpKSA8PCA4IHwgc3RkOjptYXgoMCwgc3RkOjptaW4oYiwgMjU1KSk7CkBAIC01OSw2ICs2OSwx
NiBAQCBSR0JBMzIgbWFrZVJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50CiAgICAgcmV0dXJu
IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGEsIDI1NSkpIDw8IDI0IHwgc3RkOjptYXgoMCwgc3RkOjpt
aW4ociwgMjU1KSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAyNTUpKSA8PCA4IHwg
c3RkOjptYXgoMCwgc3RkOjptaW4oYiwgMjU1KSk7CiB9CiAKK1JHQkEzMiBtYWtlUHJlbXVsdGlw
bGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCit7CisgICAgcmV0dXJuIG1ha2VS
R0JBKHByZW11bHRpcGxpZWRDaGFubmVsKHIsIGEpLCBwcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBh
KSwgcHJlbXVsdGlwbGllZENoYW5uZWwoYiwgYSksIGEpOworfQorCitSR0JBMzIgbWFrZVVuUHJl
bXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCit7CisgICAgcmV0dXJu
IG1ha2VSR0JBKHVucHJlbXVsdGlwbGllZENoYW5uZWwociwgYSksIHVucHJlbXVsdGlwbGllZENo
YW5uZWwoZywgYSksIHVucHJlbXVsdGlwbGllZENoYW5uZWwoYiwgYSksIGEpOworfQorCiBzdGF0
aWMgaW50IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGZsb2F0IGYpCiB7CiAgICAgLy8gV2UgdXNlIGxy
b3VuZGYgYW5kIDI1NSBpbnN0ZWFkIG9mIG5leHRhZnRlcmYoMjU2LCAwKSB0byBtYXRjaCBDRydz
IHJvdW5kaW5nCkBAIC00ODIsMTQgKzUwMiw5IEBAIHZvaWQgQ29sb3I6OmdldEhTVihkb3VibGUm
IGh1ZSwgZG91YmxlJiAKIENvbG9yIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKFJHQkEzMiBw
aXhlbENvbG9yKQogewogICAgIGludCBhbHBoYSA9IGFscGhhQ2hhbm5lbChwaXhlbENvbG9yKTsK
LSAgICBpZiAoYWxwaGEgJiYgYWxwaGEgPCAyNTUpIHsKLSAgICAgICAgcmV0dXJuIENvbG9yOjpj
cmVhdGVVbmNoZWNrZWQoCi0gICAgICAgICAgICByZWRDaGFubmVsKHBpeGVsQ29sb3IpICogMjU1
IC8gYWxwaGEsCi0gICAgICAgICAgICBncmVlbkNoYW5uZWwocGl4ZWxDb2xvcikgKiAyNTUgLyBh
bHBoYSwKLSAgICAgICAgICAgIGJsdWVDaGFubmVsKHBpeGVsQ29sb3IpICogMjU1IC8gYWxwaGEs
Ci0gICAgICAgICAgICBhbHBoYSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBDb2xvcihw
aXhlbENvbG9yKTsKKyAgICBpZiAoYWxwaGEgJiYgYWxwaGEgPCAyNTUpCisgICAgICAgIHBpeGVs
Q29sb3IgPSBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShyZWRDaGFubmVsKHBpeGVsQ29sb3IpLCBn
cmVlbkNoYW5uZWwocGl4ZWxDb2xvciksIGJsdWVDaGFubmVsKHBpeGVsQ29sb3IpLCBhbHBoYSk7
CisgICAgcmV0dXJuIENvbG9yKHBpeGVsQ29sb3IpOwogfQogCiBSR0JBMzIgcHJlbXVsdGlwbGll
ZEFSR0JGcm9tQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpAQCAtNDk3LDE0ICs1MTIsMTAgQEAg
UkdCQTMyIHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKGNvbnN0IAogICAgIHVuc2lnbmVkIHBp
eGVsQ29sb3I7CiAKICAgICB1bnNpZ25lZCBhbHBoYSA9IGNvbG9yLmFscGhhKCk7Ci0gICAgaWYg
KGFscGhhIDwgMjU1KSB7Ci0gICAgICAgIHBpeGVsQ29sb3IgPSBDb2xvcjo6Y3JlYXRlVW5jaGVj
a2VkKAotICAgICAgICAgICAgZmFzdERpdmlkZUJ5MjU1KGNvbG9yLnJlZCgpICogYWxwaGEgKyAy
NTQpLAotICAgICAgICAgICAgZmFzdERpdmlkZUJ5MjU1KGNvbG9yLmdyZWVuKCkgKiBhbHBoYSAr
IDI1NCksCi0gICAgICAgICAgICBmYXN0RGl2aWRlQnkyNTUoY29sb3IuYmx1ZSgpICogYWxwaGEg
KyAyNTQpLAotICAgICAgICAgICAgYWxwaGEpLnJnYigpOwotICAgIH0gZWxzZQotICAgICAgICAg
cGl4ZWxDb2xvciA9IGNvbG9yLnJnYigpOworICAgIGlmIChhbHBoYSA8IDI1NSkKKyAgICAgICAg
cGl4ZWxDb2xvciA9IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShjb2xvci5yZWQoKSwgY29sb3IuZ3Jl
ZW4oKSwgY29sb3IuYmx1ZSgpLCBhbHBoYSk7CisgICAgZWxzZQorICAgICAgICBwaXhlbENvbG9y
ID0gY29sb3IucmdiKCk7CiAKICAgICByZXR1cm4gcGl4ZWxDb2xvcjsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjA1Njg0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5KQpA
QCAtNTUsNiArNTUsOSBAQCB0eXBlZGVmIHVuc2lnbmVkIFJHQkEzMjsgLy8gRGVwcmVjYXRlZDog
CiBXRUJDT1JFX0VYUE9SVCBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBiKTsKIFdF
QkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7
CiAKK1JHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50
IGEpOworUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIs
IGludCBhKTsKKwogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEo
UkdCQTMyIGNvbG9yLCBmbG9hdCBvdmVycmlkZUFscGhhKTsKIFdFQkNPUkVfRVhQT1JUIFJHQkEz
MiBjb2xvcldpdGhPdmVycmlkZUFscGhhKFJHQkEzMiBjb2xvciwgT3B0aW9uYWw8ZmxvYXQ+IG92
ZXJyaWRlQWxwaGEpOwogCkBAIC0yMTgsNiArMjIxLDcgQEAgQ29sb3IgYmxlbmQoY29uc3QgQ29s
b3ImIGZyb20sIGNvbnN0IENvbAogCiBpbnQgZGlmZmVyZW5jZVNxdWFyZWQoY29uc3QgQ29sb3Im
LCBjb25zdCBDb2xvciYpOwogCit1aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1aW50MTZfdCB2
YWx1ZSk7CiB1aW50MTZfdCBmYXN0RGl2aWRlQnkyNTUodWludDE2X3QpOwogCiAjaWYgVVNFKENH
KQpAQCAtMjkwLDYgKzI5NCwxMSBAQCBpbmxpbmUgdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JD
aGFubmVsCiAgICAgcmV0dXJuIHN0ZDo6bWF4KDAuZiwgc3RkOjptaW4oMjU1LmYsIHN0ZDo6cm91
bmQodmFsdWUpKSk7CiB9CiAKK2lubGluZSB1aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1aW50
MTZfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gKHZhbHVlIDw8IDgpIC0gdmFsdWU7Cit9CisKIGlu
bGluZSB1aW50MTZfdCBmYXN0RGl2aWRlQnkyNTUodWludDE2X3QgdmFsdWUpCiB7CiAgICAgLy8g
V2hpbGUgdGhpcyBpcyBhbiBhcHByb3hpbWF0ZSBhbGdvcml0aG0gZm9yIGRpdmlzaW9uIGJ5IDI1
NSwgaXQgZ2l2ZXMgcGVyZmVjdGx5IGFjY3VyYXRlIHJlc3VsdHMgZm9yIDE2LWJpdCB2YWx1ZXMu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9y
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QmFja2luZ1N0b3JlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkludFJlY3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBJbWFnZUJhY2tpbmdTdG9yZSB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxJbWFnZUJhY2tpbmdTdG9yZT4gY3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIGJv
b2wgcHJlbXVsdGlwbHlBbHBoYSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5p
cXVlPEltYWdlQmFja2luZ1N0b3JlPihzaXplLCBwcmVtdWx0aXBseUFscGhhKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQmFja2luZ1N0b3JlPiBjcmVhdGUoY29u
c3QgSW1hZ2VCYWNraW5nU3RvcmUmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bWFrZV91bmlxdWU8SW1hZ2VCYWNraW5nU3RvcmU+KG90aGVyKTsKKyAgICB9CisKKyAgICBJbWFn
ZUJhY2tpbmdTdG9yZShjb25zdCBJbnRTaXplJiBzaXplLCBib29sIHByZW11bHRpcGx5QWxwaGEg
PSB0cnVlKQorICAgICAgICA6IG1fcHJlbXVsdGlwbHlBbHBoYShwcmVtdWx0aXBseUFscGhhKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKCFzaXplLmlzRW1wdHkoKSk7CisgICAgICAgIHNldFNpemUo
c2l6ZSk7CisgICAgfQorCisgICAgSW1hZ2VCYWNraW5nU3RvcmUoY29uc3QgSW1hZ2VCYWNraW5n
U3RvcmUmIG90aGVyKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIG1fcGl4ZWxzID0gb3RoZXIubV9waXhlbHM7CisgICAg
ICAgIG1fcGl4ZWxzUHRyID0gbV9waXhlbHMuZGF0YSgpOworICAgICAgICBtX3NpemUgPSBvdGhl
ci5tX3NpemU7CisgICAgICAgIG1fcHJlbXVsdGlwbHlBbHBoYSA9IG90aGVyLm1fcHJlbXVsdGlw
bHlBbHBoYTsKKyAgICB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZSgpIGNvbnN0OworCisg
ICAgYm9vbCBzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpCisgICAgeworICAgICAgICBpZiAo
IW1fcGl4ZWxzLnRyeVJlc2VydmVDYXBhY2l0eShzaXplLmFyZWEoKSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgbV9waXhlbHMucmVzaXplKHNpemUuYXJlYSgpKTsKKyAg
ICAgICAgbV9waXhlbHNQdHIgPSBtX3BpeGVscy5kYXRhKCk7CisgICAgICAgIG1fc2l6ZSA9IHNp
emU7CisgICAgICAgIG1fZnJhbWVSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUpOwor
ICAgICAgICBjbGVhcigpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lk
IHNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiBmcmFtZVJlY3QpCisgICAgeworICAgICAgICBB
U1NFUlQoIW1fc2l6ZS5pc0VtcHR5KCkpOworICAgICAgICBBU1NFUlQoaW5Cb3VuZHMoZnJhbWVS
ZWN0KSk7CisgICAgICAgIG1fZnJhbWVSZWN0ID0gZnJhbWVSZWN0OworICAgIH0KKworICAgIElu
dFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIEludFJlY3QgZnJhbWVS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3Q7IH0KKworICAgIHZvaWQgY2xlYXIoKQor
ICAgIHsKKyAgICAgICAgbWVtc2V0KG1fcGl4ZWxzUHRyLCAwLCBtX3NpemUuYXJlYSgpICogc2l6
ZW9mKFJHQkEzMikpOworICAgIH0KKworICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QpCisgICAgeworICAgICAgICBpZiAocmVjdC5pc0VtcHR5KCkgfHwgIWluQm91bmRzKHJl
Y3QpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHNpemVfdCByZWN0V2lkdGhJbkJ5
dGVzID0gcmVjdC53aWR0aCgpICogc2l6ZW9mKFJHQkEzMik7CisgICAgICAgIFJHQkEzMiogc3Rh
cnQgPSBhdChyZWN0LngoKSwgcmVjdC55KCkpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8
IHJlY3QuaGVpZ2h0KCk7ICsraSkgeworICAgICAgICAgICAgbWVtc2V0KHN0YXJ0LCAwLCByZWN0
V2lkdGhJbkJ5dGVzKTsKKyAgICAgICAgICAgIHN0YXJ0ICs9IG1fc2l6ZS53aWR0aCgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgdm9pZCByZXBlYXRGaXJzdFJvdyhjb25zdCBJbnRSZWN0JiBy
ZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHJlY3QuaXNFbXB0eSgpIHx8ICFpbkJvdW5kcyhyZWN0
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzaXplX3QgcmVjdFdpZHRoSW5CeXRl
cyA9IHJlY3Qud2lkdGgoKSAqIHNpemVvZihSR0JBMzIpOworICAgICAgICBSR0JBMzIqIHNyYyA9
IGF0KHJlY3QueCgpLCByZWN0LnkoKSk7CisgICAgICAgIFJHQkEzMiogZGVzdCA9IHNyYyArIG1f
c2l6ZS53aWR0aCgpOworICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IHJlY3QuaGVpZ2h0KCk7
ICsraSkgeworICAgICAgICAgICAgbWVtY3B5KGRlc3QsIHNyYywgcmVjdFdpZHRoSW5CeXRlcyk7
CisgICAgICAgICAgICBkZXN0ICs9IG1fc2l6ZS53aWR0aCgpOworICAgICAgICB9CisgICAgfQor
CisgICAgUkdCQTMyKiBhdChpbnQgeCwgaW50IHkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9waXhlbHNQdHIgKyB5ICogbV9zaXplLndpZHRoKCkgKyB4OworICAgIH0KKworICAgIHZv
aWQgc2V0UkdCQShpbnQgeCwgaW50IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVk
IGIsIHVuc2lnbmVkIGEpCisgICAgeworICAgICAgICBzZXRSR0JBKGF0KHgsIHkpLCByLCBnLCBi
LCBhKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFJHQkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCBy
LCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgaWYg
KG1fcHJlbXVsdGlwbHlBbHBoYSAmJiAhYSkKKyAgICAgICAgICAgICpkZXN0ID0gMDsKKyAgICAg
ICAgZWxzZSBpZiAobV9wcmVtdWx0aXBseUFscGhhICYmIGEgPCAyNTUpCisgICAgICAgICAgICAq
ZGVzdCA9IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShyLCBnLCBiLCBhKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgKmRlc3QgPSBtYWtlUkdCQShyLCBnLCBiLCBhKTsKKyAgICB9CisKKyAgICB2
b2lkIG92ZXJSR0JBKFJHQkEzMiogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWdu
ZWQgYiwgdW5zaWduZWQgYSkKKyAgICB7CisgICAgICAgIGlmICghYSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBpZiAoYSA+PSAyNTUgfHwgIWFscGhhQ2hhbm5lbCgqZGVzdCkpIHsK
KyAgICAgICAgICAgIHNldFJHQkEoZGVzdCwgciwgZywgYiwgYSk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkKKyAgICAg
ICAgICAgICpkZXN0ID0gbWFrZVByZW11bHRpcGxpZWRSR0JBKHJlZENoYW5uZWwoKmRlc3QpLCBn
cmVlbkNoYW5uZWwoKmRlc3QpLCBibHVlQ2hhbm5lbCgqZGVzdCksIGFscGhhQ2hhbm5lbCgqZGVz
dCkpOworCisgICAgICAgIHVuc2lnbmVkIGQgPSAyNTUgLSBhOworCisgICAgICAgIHIgPSBmYXN0
RGl2aWRlQnkyNTUociAqIGEgKyByZWRDaGFubmVsKCpkZXN0KSAqIGQpOworICAgICAgICBnID0g
ZmFzdERpdmlkZUJ5MjU1KGcgKiBhICsgZ3JlZW5DaGFubmVsKCpkZXN0KSAqIGQpOworICAgICAg
ICBiID0gZmFzdERpdmlkZUJ5MjU1KGIgKiBhICsgYmx1ZUNoYW5uZWwoKmRlc3QpICogZCk7Cisg
ICAgICAgIGEgKz0gZmFzdERpdmlkZUJ5MjU1KGQgKiBhbHBoYUNoYW5uZWwoKmRlc3QpKTsKKwor
ICAgICAgICBpZiAobV9wcmVtdWx0aXBseUFscGhhKQorICAgICAgICAgICAgKmRlc3QgPSBtYWtl
UkdCQShyLCBnLCBiLCBhKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKmRlc3QgPSBtYWtl
VW5QcmVtdWx0aXBsaWVkUkdCQShyLCBnLCBiLCBhKTsKKyAgICB9CisKKyAgICBib29sIGluQm91
bmRzKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSW50
UmVjdChJbnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHJlY3QpOworICAgIH0KKworICAgIHN0
YXRpYyBib29sIGlzT3ZlclNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAg
IHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgTWF4UGl4ZWxzID0gKCgxIDw8IDI5KSAtIDEpOwor
ICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgcGl4ZWxzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
bG9uZyBsb25nPihzaXplLndpZHRoKCkpICogc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25n
PihzaXplLmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuIHBpeGVscyA+IE1heFBpeGVsczsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPFJHQkEzMj4gbV9waXhlbHM7CisgICAgUkdCQTMy
KiBtX3BpeGVsc1B0ciB7IG51bGxwdHIgfTsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICBJbnRS
ZWN0IG1fZnJhbWVSZWN0OyAvLyBUaGlzIHdpbGwgYWx3YXlzIGp1c3QgYmUgdGhlIGVudGlyZSBi
dWZmZXIgZXhjZXB0IGZvciBHSUYgYW5kIFBORyBmcmFtZXMKKyAgICBib29sIG1fcHJlbXVsdGlw
bHlBbHBoYSB7IHRydWUgfTsKK307CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCShyZXZpc2lvbiAyMDU2
ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNH
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTAgKzQ3LDEwIEBAIEludFNpemUgbmF0aXZlSW1h
Z2VTaXplKGNvbnN0IE5hdGl2ZUltYWcKICAgICByZXR1cm4gaW1hZ2UgPyBJbnRTaXplKENHSW1h
Z2VHZXRXaWR0aChpbWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkpKSA6
IEludFNpemUoKTsKIH0KIAotYm9vbCBuYXRpdmVJbWFnZUhhc0FscGhhKGNvbnN0IE5hdGl2ZUlt
YWdlUHRyJikKK2Jvb2wgbmF0aXZlSW1hZ2VIYXNBbHBoYShjb25zdCBOYXRpdmVJbWFnZVB0ciYg
aW1hZ2UpCiB7Ci0gICAgLy8gRklYTUU6IEFuc3dlciBjb3JyZWN0bHkgdGhlIHF1ZXN0aW9uOiBk
b2VzIHRoZSBDR0ltYWdlUmVmIGhhdmUgYWxwaGEgY2hhbm5uZWw/Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgQ0dJbWFnZUFscGhhSW5mbyBpbmZvID0gQ0dJbWFnZUdldEFscGhhSW5mbyhpbWFnZS5n
ZXQoKSk7CisgICAgcmV0dXJuIChpbmZvID49IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFz
dCkgJiYgKGluZm8gPD0ga0NHSW1hZ2VBbHBoYUZpcnN0KTsKIH0KIAogQ29sb3IgbmF0aXZlSW1h
Z2VTaW5nbGVQaXhlbFNvbGlkQ29sb3IoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9J
bWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NDEsOCArMTQxLDggQEAgSW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0IAog
ICAgIGlmICh0aGlzID09ICZvdGhlcikKICAgICAgICAgcmV0dXJuICp0aGlzOwogCi0gICAgY29w
eUJpdG1hcERhdGEob3RoZXIpOwotICAgIHNldE9yaWdpbmFsRnJhbWVSZWN0KG90aGVyLm9yaWdp
bmFsRnJhbWVSZWN0KCkpOworICAgIHNldEJhY2tpbmdTdG9yZShvdGhlci5iYWNraW5nU3RvcmUo
KSk7CisgICAgc2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7CiAgICAgc2V0U3RhdHVzKG90
aGVyLnN0YXR1cygpKTsKICAgICBzZXREdXJhdGlvbihvdGhlci5kdXJhdGlvbigpKTsKICAgICBz
ZXREaXNwb3NhbE1ldGhvZChvdGhlci5kaXNwb3NhbE1ldGhvZCgpKTsKQEAgLTE1Miw4ICsxNTIs
NyBAQCBJbWFnZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QgCiAKIHZvaWQgSW1h
Z2VGcmFtZTo6Y2xlYXJQaXhlbERhdGEoKQogewotICAgIG1fYmFja2luZ1N0b3JlLmNsZWFyKCk7
Ci0gICAgbV9ieXRlcyA9IDA7CisgICAgbV9iYWNraW5nU3RvcmUgPSBudWxscHRyOwogICAgIG1f
c3RhdHVzID0gRnJhbWVFbXB0eTsKICAgICAvLyBOT1RFOiBEbyBub3QgcmVzZXQgb3RoZXIgbWVt
YmVycyBoZXJlOyBjbGVhckZyYW1lQnVmZmVyQ2FjaGUoKSBjYWxscyB0aGlzCiAgICAgLy8gdG8g
ZnJlZSB0aGUgYml0bWFwIGRhdGEsIGJ1dCBvdGhlciBmdW5jdGlvbnMgbGlrZSBpbml0RnJhbWVC
dWZmZXIoKSBhbmQKQEAgLTE2Myw1MSArMTYyLDMxIEBAIHZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXJQ
aXhlbERhdGEoKQogCiB2b2lkIEltYWdlRnJhbWU6Onplcm9GaWxsUGl4ZWxEYXRhKCkKIHsKLSAg
ICBtZW1zZXQobV9ieXRlcywgMCwgbV9zaXplLndpZHRoKCkgKiBtX3NpemUuaGVpZ2h0KCkgKiBz
aXplb2YoUGl4ZWxEYXRhKSk7CisgICAgbV9iYWNraW5nU3RvcmUtPmNsZWFyKCk7CiAgICAgbV9o
YXNBbHBoYSA9IHRydWU7CiB9CiAKIHZvaWQgSW1hZ2VGcmFtZTo6emVyb0ZpbGxGcmFtZVJlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBBU1NFUlQoSW50UmVjdChJbnRQb2ludCgpLCBt
X3NpemUpLmNvbnRhaW5zKHJlY3QpKTsKLQogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkg
KiBzaXplb2YoUGl4ZWxEYXRhKTsKLSAgICBQaXhlbERhdGEqIHN0YXJ0ID0gbV9ieXRlcyArIChy
ZWN0LnkoKSAqIHdpZHRoKCkpICsgcmVjdC54KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBy
ZWN0LmhlaWdodCgpOyArK2kpIHsKLSAgICAgICAgbWVtc2V0KHN0YXJ0LCAwLCByZWN0V2lkdGhJ
bkJ5dGVzKTsKLSAgICAgICAgc3RhcnQgKz0gd2lkdGgoKTsKLSAgICB9Ci0KKyAgICBtX2JhY2tp
bmdTdG9yZS0+Y2xlYXJSZWN0KHJlY3QpOwogICAgIHNldEhhc0FscGhhKHRydWUpOwogfQogCi1i
b29sIEltYWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKGNvbnN0IEltYWdlRnJhbWUmIG90aGVyKQor
dm9pZCBJbWFnZUZyYW1lOjpzZXRCYWNraW5nU3RvcmUoY29uc3QgSW1hZ2VCYWNraW5nU3RvcmUq
IGJhY2tpbmdTdG9yZSkKIHsKLSAgICBpZiAodGhpcyA9PSAmb3RoZXIpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgbV9iYWNraW5nU3RvcmUgPSBvdGhlci5tX2JhY2tpbmdTdG9yZTsKLSAg
ICBtX2J5dGVzID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOwotICAgIG1fc2l6ZSA9IG90aGVyLm1f
c2l6ZTsKLSAgICBzZXRIYXNBbHBoYShvdGhlci5tX2hhc0FscGhhKTsKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICBpZiAoYmFja2luZ1N0b3JlID09IG1fYmFja2luZ1N0b3JlKQorICAgICAgICByZXR1
cm47CisgICAgbV9iYWNraW5nU3RvcmUgPSBiYWNraW5nU3RvcmUgPyBJbWFnZUJhY2tpbmdTdG9y
ZTo6Y3JlYXRlKCpiYWNraW5nU3RvcmUpIDogbnVsbHB0cjsKIH0KIAogYm9vbCBJbWFnZUZyYW1l
OjpzZXRTaXplKGludCBuZXdXaWR0aCwgaW50IG5ld0hlaWdodCkKIHsKLSAgICBBU1NFUlQoIXdp
ZHRoKCkgJiYgIWhlaWdodCgpKTsKLSAgICBzaXplX3QgYmFja2luZ1N0b3JlU2l6ZSA9IG5ld1dp
ZHRoICogbmV3SGVpZ2h0OwotICAgIGlmICghbV9iYWNraW5nU3RvcmUudHJ5UmVzZXJ2ZUNhcGFj
aXR5KGJhY2tpbmdTdG9yZVNpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9iYWNr
aW5nU3RvcmUucmVzaXplKGJhY2tpbmdTdG9yZVNpemUpOwotICAgIG1fYnl0ZXMgPSBtX2JhY2tp
bmdTdG9yZS5kYXRhKCk7Ci0gICAgbV9zaXplID0gSW50U2l6ZShuZXdXaWR0aCwgbmV3SGVpZ2h0
KTsKLQotICAgIHplcm9GaWxsUGl4ZWxEYXRhKCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgQVNT
RVJUKCFtX2JhY2tpbmdTdG9yZSk7CisgICAgbV9iYWNraW5nU3RvcmUgPSBJbWFnZUJhY2tpbmdT
dG9yZTo6Y3JlYXRlKEludFNpemUobmV3V2lkdGgsIG5ld0hlaWdodCksIG1fcHJlbXVsdGlwbHlB
bHBoYSk7CisgICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlOwogfQogCiBib29sIEltYWdlRnJhbWU6
Omhhc0FscGhhKCkgY29uc3QKQEAgLTIyMCw2ICsxOTksMTIgQEAgdm9pZCBJbWFnZUZyYW1lOjpz
ZXRIYXNBbHBoYShib29sIGFscGhhKQogICAgIG1faGFzQWxwaGEgPSBhbHBoYTsKIH0KIAordm9p
ZCBzZXRPcmlnaW5hbEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiBmcmFtZVJlY3QpCit7CisgICAg
aWYgKG1fYmFja2luZ1N0b3JlKQorICAgICAgICBtX2JhY2tpbmdTdG9yZS0+c2V0RnJhbWVSZWN0
KGZyYW1lUmVjdCk7Cit9CisKIHZvaWQgSW1hZ2VGcmFtZTo6c2V0U3RhdHVzKEZyYW1lU3RhdHVz
IHN0YXR1cykKIHsKICAgICBtX3N0YXR1cyA9IHN0YXR1czsKQEAgLTI4Niw3ICsyNzEsNyBAQCB1
bnNpZ25lZCBJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4CiAgICAgaWYgKG1fZnJhbWVC
dWZmZXJDYWNoZS5zaXplKCkgPD0gaW5kZXgpCiAgICAgICAgIHJldHVybiAwOwogICAgIC8vIEZJ
WE1FOiBVc2UgdGhlIGRpbWVuc2lvbiBvZiB0aGUgcmVxdWVzdGVkIGZyYW1lLgotICAgIHJldHVy
biBtX3NpemUuYXJlYSgpICogc2l6ZW9mKEltYWdlRnJhbWU6OlBpeGVsRGF0YSk7CisgICAgcmV0
dXJuIG1fc2l6ZS5hcmVhKCkgKiBzaXplb2YoUkdCQTMyKTsKIH0KIAogZmxvYXQgSW1hZ2VEZWNv
ZGVyOjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAko
cmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDEwIEBACiAKICNw
cmFnbWEgb25jZQogCi0jaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkltYWdlQmFja2lu
Z1N0b3JlLmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNpbmNsdWRlICJJbnRSZWN0Lmgi
CisjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW5j
bHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTU3
LDcgKzU5LDYgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICAg
ICAgRGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzICAvLyBDbGVhciBmcmFtZSB0byBwcmV2aW91cyBm
cmFtZWJ1ZmZlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb250
ZW50cwogICAgICAgICB9OwotICAgICAgICB0eXBlZGVmIHVuc2lnbmVkIFBpeGVsRGF0YTsKIAog
ICAgICAgICBJbWFnZUZyYW1lKCk7CiAKQEAgLTcyLDE1MiArNzMsNjkgQEAgdXNpbmcgQ29sb3JQ
cm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICB2b2lkIHplcm9GaWxsUGl4ZWxEYXRhKCk7
CiAgICAgICAgIHZvaWQgemVyb0ZpbGxGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYpOwogCi0gICAg
ICAgIC8vIE1ha2VzIHRoaXMgZnJhbWUgaGF2ZSBhbiBpbmRlcGVuZGVudCBjb3B5IG9mIHRoZSBw
cm92aWRlZCBpbWFnZSdzCi0gICAgICAgIC8vIHBpeGVsIGRhdGEsIHNvIHRoYXQgbW9kaWZpY2F0
aW9ucyBpbiBvbmUgZnJhbWUgYXJlIG5vdCByZWZsZWN0ZWQgaW4KLSAgICAgICAgLy8gdGhlIG90
aGVyLiAgUmV0dXJucyB3aGV0aGVyIHRoZSBjb3B5IHN1Y2NlZWRlZC4KLSAgICAgICAgYm9vbCBj
b3B5Qml0bWFwRGF0YShjb25zdCBJbWFnZUZyYW1lJik7Ci0KICAgICAgICAgLy8gQ29waWVzIHRo
ZSBwaXhlbCBkYXRhIGF0IFsoc3RhcnRYLCBzdGFydFkpLCAoZW5kWCwgc3RhcnRZKSkgdG8gdGhl
CiAgICAgICAgIC8vIHNhbWUgWC1jb29yZGluYXRlcyBvbiBlYWNoIHN1YnNlcXVlbnQgcm93IHVw
IHRvIGJ1dCBub3QgaW5jbHVkaW5nCiAgICAgICAgIC8vIGVuZFkuCiAgICAgICAgIHZvaWQgY29w
eVJvd05UaW1lcyhpbnQgc3RhcnRYLCBpbnQgZW5kWCwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChzdGFydFggPCB3aWR0aCgpKTsKLSAgICAgICAg
ICAgIEFTU0VSVChlbmRYIDw9IHdpZHRoKCkpOwotICAgICAgICAgICAgQVNTRVJUKHN0YXJ0WSA8
IGhlaWdodCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChlbmRZIDw9IGhlaWdodCgpKTsKLSAgICAg
ICAgICAgIGNvbnN0IGludCByb3dCeXRlcyA9IChlbmRYIC0gc3RhcnRYKSAqIHNpemVvZihQaXhl
bERhdGEpOwotICAgICAgICAgICAgY29uc3QgUGl4ZWxEYXRhKiBjb25zdCBzdGFydEFkZHIgPSBn
ZXRBZGRyKHN0YXJ0WCwgc3RhcnRZKTsKLSAgICAgICAgICAgIGZvciAoaW50IGRlc3RZID0gc3Rh
cnRZICsgMTsgZGVzdFkgPCBlbmRZOyArK2Rlc3RZKQotICAgICAgICAgICAgICAgIG1lbWNweShn
ZXRBZGRyKHN0YXJ0WCwgZGVzdFkpLCBzdGFydEFkZHIsIHJvd0J5dGVzKTsKKyAgICAgICAgICAg
IG1fYmFja2luZ1N0b3JlLT5yZXBlYXRGaXJzdFJvdyhJbnRSZWN0KHN0YXJ0WCwgc3RhcnRZLCBl
bmRYIC1zdGFydFggLCBlbmRZIC0gc3RhcnRZKSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBB
bGxvY2F0ZXMgc3BhY2UgZm9yIHRoZSBwaXhlbCBkYXRhLiAgTXVzdCBiZSBjYWxsZWQgYmVmb3Jl
IGFueSBwaXhlbHMKICAgICAgICAgLy8gYXJlIHdyaXR0ZW4uICBNdXN0IG9ubHkgYmUgY2FsbGVk
IG9uY2UuICBSZXR1cm5zIHdoZXRoZXIgYWxsb2NhdGlvbgogICAgICAgICAvLyBzdWNjZWVkZWQu
Ci0gICAgICAgIGJvb2wgc2V0U2l6ZShpbnQgbmV3V2lkdGgsIGludCBuZXdIZWlnaHQpOworICAg
ICAgICBib29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSk7
CisgICAgICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlLT5z
aXplKCk7IH0KIAogICAgICAgICAvLyBSZXR1cm5zIGEgY2FsbGVyLW93bmVkIHBvaW50ZXIgdG8g
dGhlIHVuZGVybHlpbmcgbmF0aXZlIGltYWdlIGRhdGEuCiAgICAgICAgIC8vIChBY3R1YWwgdXNl
OiBUaGlzIHBvaW50ZXIgd2lsbCBiZSBvd25lZCBieSBCaXRtYXBJbWFnZSBhbmQgZnJlZWQgaW4K
ICAgICAgICAgLy8gRnJhbWVEYXRhOjpjbGVhcigpKS4KLSAgICAgICAgTmF0aXZlSW1hZ2VQdHIg
YXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0OworICAgICAgICBOYXRpdmVJbWFnZVB0ciBhc05ld05h
dGl2ZUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nU3RvcmUtPmltYWdlKCk7IH0KIAor
ICAgICAgICBpbmxpbmUgSW1hZ2VCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2luZ1N0b3JlID8gbV9iYWNraW5nU3RvcmUuZ2V0KCkgOiBudWxscHRyOyB9
CisgICAgICAgIGlubGluZSBib29sIGhhc0JhY2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIGJh
Y2tpbmdTdG9yZSgpOyB9CisgICAgICAgIAogICAgICAgICBib29sIGhhc0FscGhhKCkgY29uc3Q7
Ci0gICAgICAgIGNvbnN0IEludFJlY3QmIG9yaWdpbmFsRnJhbWVSZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9vcmlnaW5hbEZyYW1lUmVjdDsgfQorICAgICAgICBjb25zdCBJbnRSZWN0JiBvcmlnaW5h
bEZyYW1lUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlID8gbV9iYWNraW5nU3Rv
cmUtPmZyYW1lUmVjdCgpIDogSW50UmVjdCgpOyB9CiAgICAgICAgIEZyYW1lU3RhdHVzIHN0YXR1
cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CiAgICAgICAgIHVuc2lnbmVkIGR1cmF0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQogICAgICAgICBGcmFtZURpc3Bvc2FsTWV0
aG9kIGRpc3Bvc2FsTWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwb3NhbE1ldGhvZDsgfQog
ICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3ByZW11bHRp
cGx5QWxwaGE7IH0KIAorICAgICAgICB2b2lkIHNldEJhY2tpbmdTdG9yZShjb25zdCBJbWFnZUJh
Y2tpbmdTdG9yZSopOworICAgICAgICAKICAgICAgICAgdm9pZCBzZXRIYXNBbHBoYShib29sIGFs
cGhhKTsKLSAgICAgICAgdm9pZCBzZXRPcmlnaW5hbEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiBy
KSB7IG1fb3JpZ2luYWxGcmFtZVJlY3QgPSByOyB9CisgICAgICAgIHZvaWQgc2V0T3JpZ2luYWxG
cmFtZVJlY3QoY29uc3QgSW50UmVjdCYpOwogICAgICAgICB2b2lkIHNldFN0YXR1cyhGcmFtZVN0
YXR1cyBzdGF0dXMpOwogICAgICAgICB2b2lkIHNldER1cmF0aW9uKHVuc2lnbmVkIGR1cmF0aW9u
KSB7IG1fZHVyYXRpb24gPSBkdXJhdGlvbjsgfQogICAgICAgICB2b2lkIHNldERpc3Bvc2FsTWV0
aG9kKEZyYW1lRGlzcG9zYWxNZXRob2QgbWV0aG9kKSB7IG1fZGlzcG9zYWxNZXRob2QgPSBtZXRo
b2Q7IH0KICAgICAgICAgdm9pZCBzZXRQcmVtdWx0aXBseUFscGhhKGJvb2wgcHJlbXVsdGlwbHlB
bHBoYSkgeyBtX3ByZW11bHRpcGx5QWxwaGEgPSBwcmVtdWx0aXBseUFscGhhOyB9CiAKLSAgICAg
ICAgaW5saW5lIHZvaWQgc2V0UkdCQShpbnQgeCwgaW50IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVk
IGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAgICAgIGlubGluZSBSR0JBMzIqIGdldEFk
ZHIoaW50IHgsIGludCB5KQogICAgICAgICB7Ci0gICAgICAgICAgICBzZXRSR0JBKGdldEFkZHIo
eCwgeSksIHIsIGcsIGIsIGEpOworICAgICAgICAgICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlLT5h
dCh4LCB5KTsKICAgICAgICAgfQogCi0gICAgICAgIGlubGluZSBQaXhlbERhdGEqIGdldEFkZHIo
aW50IHgsIGludCB5KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9ieXRlcyArICh5
ICogd2lkdGgoKSkgKyB4OwotICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5lIGJvb2wgaGFzUGl4
ZWxEYXRhKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXM7Ci0g
ICAgICAgIH0KLQotICAgICAgICAvLyBVc2UgZml4IHBvaW50IG11bHRpcGxpZXIgaW5zdGVhZCBv
ZiBpbnRlZ2VyIGRpdmlzaW9uIG9yIGZsb2F0aW5nIHBvaW50IG1hdGguCi0gICAgICAgIC8vIFRo
aXMgbXVsdGlwbGVyIHByb2R1Y2VzIGV4YWN0bHkgdGhlIHNhbWUgcmVzdWx0IGZvciBhbGwgdmFs
dWVzIGluIHJhbmdlIDAgLSAyNTUuCi0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmaXhQ
b2ludFNoaWZ0ID0gMjQ7Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmaXhQb2ludE11
bHQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oMS4wIC8gMjU1LjAgKiAoMSA8PCBmaXhQb2ludFNo
aWZ0KSkgKyAxOwotICAgICAgICAvLyBNdWx0aXBsaWVzIHVuc2lnbmVkIHZhbHVlIGJ5IGZpeHBv
aW50IHZhbHVlIGFuZCBjb252ZXJ0cyBiYWNrIHRvIHVuc2lnbmVkLgotICAgICAgICBzdGF0aWMg
dW5zaWduZWQgZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KHVuc2lnbmVkIGZpeGVkLCB1bnNpZ25l
ZCB2KQorICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKGludCB4LCBpbnQgeSwgdW5zaWduZWQg
ciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuICAoZml4ZWQgKiB2KSA+PiBmaXhQb2ludFNoaWZ0OworICAgICAgICAgICAg
bV9iYWNraW5nU3RvcmUtPnNldFJHQkEoeCwgeSwgciwgZywgYiwgYSk7CiAgICAgICAgIH0KLQot
ICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKFBpeGVsRGF0YSogZGVzdCwgdW5zaWduZWQgciwg
dW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKKyAgICAgICAgCisgICAgICAgIGlu
bGluZSB2b2lkIHNldFJHQkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1
bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9wcmVt
dWx0aXBseUFscGhhICYmIGEgPCAyNTUpIHsKLSAgICAgICAgICAgICAgICBpZiAoIWEpIHsKLSAg
ICAgICAgICAgICAgICAgICAgKmRlc3QgPSAwOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgYWxwaGFNdWx0
ID0gYSAqIGZpeFBvaW50TXVsdDsKLSAgICAgICAgICAgICAgICByID0gZml4UG9pbnRVbnNpZ25l
ZE11bHRpcGx5KHIsIGFscGhhTXVsdCk7Ci0gICAgICAgICAgICAgICAgZyA9IGZpeFBvaW50VW5z
aWduZWRNdWx0aXBseShnLCBhbHBoYU11bHQpOwotICAgICAgICAgICAgICAgIGIgPSBmaXhQb2lu
dFVuc2lnbmVkTXVsdGlwbHkoYiwgYWxwaGFNdWx0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICpkZXN0ID0gKGEgPDwgMjQgfCByIDw8IDE2IHwgZyA8PCA4IHwgYik7CisgICAgICAgICAg
ICBtX2JhY2tpbmdTdG9yZS0+c2V0UkdCQShkZXN0LCByLCBnLCBiLCBhKTsKICAgICAgICAgfQog
CiAjaWYgRU5BQkxFKEFQTkcpCi0gICAgICAgIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZGl2aWRl
MjU1KHVuc2lnbmVkIGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAoYSArIChhID4+
IDgpICsgMSkgPj4gODsKLSAgICAgICAgfQotCi0gICAgICAgIGlubGluZSB2b2lkIG92ZXJSR0JB
KFBpeGVsRGF0YSogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5z
aWduZWQgYSkKKyAgICAgICAgaW5saW5lIHZvaWQgb3ZlclJHQkEoUkdCQTMyKiBkZXN0LCB1bnNp
Z25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAoIWEpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAg
ICBpZiAoYSA8IDI1NSkgewotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFEZXN0ID0gKCgqZGVz
dCkgPj4gMjQpICYgMjU1OwotICAgICAgICAgICAgICAgIGlmIChhRGVzdCkgewotICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCByRGVzdCA9ICgoKmRlc3QpID4+IDE2KSAmIDI1NTsKLSAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgZ0Rlc3QgPSAoKCpkZXN0KSA+PiA4KSAmIDI1NTsKLSAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYkRlc3QgPSAoKmRlc3QpICYgMjU1OwotICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBhQXV4ID0gMjU1IC0gYTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJE
ZXN0ID0gZGl2aWRlMjU1KHJEZXN0ICogYURlc3QpOwotICAgICAgICAgICAgICAgICAgICAgICAg
Z0Rlc3QgPSBkaXZpZGUyNTUoZ0Rlc3QgKiBhRGVzdCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBiRGVzdCA9IGRpdmlkZTI1NShiRGVzdCAqIGFEZXN0KTsKLSAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICByID0gZGl2aWRlMjU1KHIgKiBhICsgckRlc3QgKiBhQXV4
KTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IGRpdmlkZTI1NShnICogYSArIGdEZXN0ICogYUF1
eCk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSBkaXZpZGUyNTUoYiAqIGEgKyBiRGVzdCAqIGFB
dXgpOwotICAgICAgICAgICAgICAgICAgICBhICs9IGRpdmlkZTI1NShhRGVzdCAqIGFBdXgpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgciA9IChyICogMjU1ICsgYSAtIDEpIC8gYTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGcgPSAoZyAqIDI1NSArIGEgLSAxKSAvIGE7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBiID0gKGIgKiAyNTUgKyBhIC0gMSkgLyBhOwotICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3ByZW11bHRpcGx5QWxwaGEpIHsKLSAgICAgICAg
ICAgICAgICAgICAgciA9IGRpdmlkZTI1NShyICogYSk7Ci0gICAgICAgICAgICAgICAgICAgIGcg
PSBkaXZpZGUyNTUoZyAqIGEpOwotICAgICAgICAgICAgICAgICAgICBiID0gZGl2aWRlMjU1KGIg
KiBhKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqZGVz
dCA9IChhIDw8IDI0IHwgciA8PCAxNiB8IGcgPDwgOCB8IGIpOworICAgICAgICAgICAgbV9iYWNr
aW5nU3RvcmUtPm92ZXJSR0JBKGRlc3QsIHIsIGcsIGIsIGEpOwogICAgICAgICB9CiAjZW5kaWYK
IAogICAgIHByaXZhdGU6Ci0gICAgICAgIGludCB3aWR0aCgpIGNvbnN0Ci0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBtX3NpemUud2lkdGgoKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlu
dCBoZWlnaHQoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9zaXplLmhl
aWdodCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgVmVjdG9yPFBpeGVsRGF0YT4gbV9iYWNraW5n
U3RvcmU7Ci0gICAgICAgIFBpeGVsRGF0YSogbV9ieXRlczsgLy8gVGhlIG1lbW9yeSBpcyBiYWNr
ZWQgYnkgbV9iYWNraW5nU3RvcmUuCi0gICAgICAgIEludFNpemUgbV9zaXplOworICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCYWNraW5nU3RvcmU+IG1fYmFja2luZ1N0b3JlOwogICAgICAg
ICBib29sIG1faGFzQWxwaGE7Ci0gICAgICAgIEludFJlY3QgbV9vcmlnaW5hbEZyYW1lUmVjdDsg
Ly8gVGhpcyB3aWxsIGFsd2F5cyBqdXN0IGJlIHRoZSBlbnRpcmUKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBidWZmZXIgZXhjZXB0IGZvciBHSUYgZnJhbWVzIHdob3Nl
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3JpZ2luYWwgcmVjdCB3
YXMgc21hbGxlciB0aGFuIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIG92ZXJhbGwgaW1hZ2Ugc2l6ZS4KICAgICAgICAgRnJhbWVTdGF0dXMgbV9zdGF0dXM7CiAg
ICAgICAgIHVuc2lnbmVkIG1fZHVyYXRpb247CiAgICAgICAgIEZyYW1lRGlzcG9zYWxNZXRob2Qg
bV9kaXNwb3NhbE1ldGhvZDsKQEAgLTI4NywxMSArMjA1LDExIEBAIHVzaW5nIENvbG9yUHJvZmls
ZSA9IFZlY3RvcjxjaGFyPjsKIAogICAgICAgICAvLyBSZXR1cm5zIHdoZXRoZXIgdGhlIHNpemUg
aXMgbGVnYWwgKGkuZS4gbm90IGdvaW5nIHRvIHJlc3VsdCBpbgogICAgICAgICAvLyBvdmVyZmxv
dyBlbHNld2hlcmUpLiAgSWYgbm90LCBtYXJrcyBkZWNvZGluZyBhcyBmYWlsZWQuCi0gICAgICAg
IHZpcnR1YWwgYm9vbCBzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCisg
ICAgICAgIHZpcnR1YWwgYm9vbCBzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChpc092ZXJTaXplKHdpZHRoLCBoZWlnaHQpKQorICAgICAgICAg
ICAgaWYgKEltYWdlQmFja2luZ1N0b3JlOjppc092ZXJTaXplKHNpemUpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBzZXRGYWlsZWQoKTsKLSAgICAgICAgICAgIG1fc2l6ZSA9IEludFNpemUod2lk
dGgsIGhlaWdodCk7CisgICAgICAgICAgICBtX3NpemUgPSBzaXplOwogICAgICAgICAgICAgbV9z
aXplQXZhaWxhYmxlID0gdHJ1ZTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CkBAIC0zODYsMTUgKzMwNCw2IEBAIHVzaW5nIENvbG9yUHJvZmlsZSA9IFZlY3RvcjxjaGFyPjsK
ICAgICAgICAgSW1hZ2VPcmllbnRhdGlvbiBtX29yaWVudGF0aW9uOwogCiAgICAgcHJpdmF0ZToK
LSAgICAgICAgLy8gU29tZSBjb2RlIHBhdGhzIGNvbXB1dGUgdGhlIHNpemUgb2YgdGhlIGltYWdl
IGFzICJ3aWR0aCAqIGhlaWdodCAqIDQiCi0gICAgICAgIC8vIGFuZCByZXR1cm4gaXQgYXMgYSAo
c2lnbmVkKSBpbnQuICBBdm9pZCBvdmVyZmxvdy4KLSAgICAgICAgc3RhdGljIGJvb2wgaXNPdmVy
U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQotICAgICAgICB7Ci0gICAgICAg
ICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxfc2l6ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmcgbG9uZz4od2lkdGgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAqIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oaGVpZ2h0KTsKLSAgICAgICAg
ICAgIHJldHVybiB0b3RhbF9zaXplID4gKCgxIDw8IDI5KSAtIDEpOwotICAgICAgICB9Ci0KICAg
ICAgICAgSW50U2l6ZSBtX3NpemU7CiAgICAgICAgIGJvb2wgbV9zaXplQXZhaWxhYmxlIHsgZmFs
c2UgfTsKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9i
bXAvQk1QSW1hZ2VSZWFkZXIuY3BwCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04Niw5ICs4Niw2IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OmRlY29kZUJNUChi
b29sIG9ubHkKICAgICAgICAgLy8gdGhlc2UgMHMgY291bGQgYWN0dWFsbHkgc2hvdyB0aHJvdWdo
LgogICAgICAgICBtX2J1ZmZlci0+c2V0SGFzQWxwaGEoZmFsc2UpOwogCi0gICAgICAgIC8vIEZv
ciBCTVBzLCB0aGUgZnJhbWUgYWx3YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2UuCi0gICAgICAg
IG1fYnVmZmVyLT5zZXRPcmlnaW5hbEZyYW1lUmVjdChJbnRSZWN0KEludFBvaW50KCksIG1fcGFy
ZW50LT5zaXplKCkpKTsKLQogICAgICAgICBpZiAoIW1faXNUb3BEb3duKQogICAgICAgICAgICAg
bV9jb29yZC5zZXRZKG1fcGFyZW50LT5zaXplKCkuaGVpZ2h0KCkgLSAxKTsKICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZUJhY2tp
bmdTdG9yZUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZUJhY2tpbmdTdG9yZUNhaXJvLmNwcAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFn
ZUJhY2tpbmdTdG9yZUNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCYWNraW5nU3RvcmUuaCIKKworI2luY2x1ZGUgPGNh
aXJvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCYWNr
aW5nU3RvcmU6OmltYWdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQgY2hhcio+KGNvbnN0X2Nhc3Q8UkdCQTMyKj4obV9waXhlbHNQdHIpKSwKKyAgICAgICAg
Q0FJUk9fRk9STUFUX0FSR0IzMiwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSwgc2l6
ZSgpLndpZHRoKCkgKiBzaXplb2YoUkdCQTMyKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lG
SW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVj
b2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMywxMCArMjEzLDEwIEBAIGJvb2wgR0lGSW1h
Z2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnMKIAogICAgIC8vIEluaXRpYWxpemUgdGhlIGZy
YW1lIGlmIG5lY2Vzc2FyeS4KICAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVy
Q2FjaGVbZnJhbWVJbmRleF07Ci0gICAgaWYgKCgoYnVmZmVyLnN0YXR1cygpID09IEltYWdlRnJh
bWU6OkZyYW1lRW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkpIHx8ICFidWZm
ZXIuaGFzUGl4ZWxEYXRhKCkpCisgICAgaWYgKCgoYnVmZmVyLnN0YXR1cygpID09IEltYWdlRnJh
bWU6OkZyYW1lRW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkpIHx8ICFidWZm
ZXIuaGFzQmFja2luZ1N0b3JlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEltYWdl
RnJhbWU6OlBpeGVsRGF0YSogY3VycmVudEFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcih4QmVnaW4s
IHlCZWdpbik7CisgICAgUkdCQTMyKiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHhC
ZWdpbiwgeUJlZ2luKTsKICAgICAvLyBXcml0ZSBvbmUgcm93J3Mgd29ydGggb2YgZGF0YSBpbnRv
IHRoZSBmcmFtZS4gIAogICAgIGZvciAoaW50IHggPSB4QmVnaW47IHggPCB4RW5kOyArK3gpIHsK
ICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBzb3VyY2VWYWx1ZSA9IHJvd0J1ZmZlclsobV9z
Y2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4KSAtIGZyYW1lQ29udGV4dC0+eE9mZnNldF07
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJ
bWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDIwNTY4NCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdl
RGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1MSw3ICs1NTEsNyBAQCBib29sIEpQRUdJ
bWFnZURlY29kZXI6OnNldEZhaWxlZCgpCiB9CiAKIHRlbXBsYXRlIDxKX0NPTE9SX1NQQUNFIGNv
bG9yU3BhY2U+Ci12b2lkIHNldFBpeGVsKEltYWdlRnJhbWUmIGJ1ZmZlciwgSW1hZ2VGcmFtZTo6
UGl4ZWxEYXRhKiBjdXJyZW50QWRkcmVzcywgSlNBTVBBUlJBWSBzYW1wbGVzLCBpbnQgY29sdW1u
KQordm9pZCBzZXRQaXhlbChJbWFnZUZyYW1lJiBidWZmZXIsIFJHQkEzMiogY3VycmVudEFkZHJl
c3MsIEpTQU1QQVJSQVkgc2FtcGxlcywgaW50IGNvbHVtbikKIHsKICAgICBKU0FNUExFKiBqc2Ft
cGxlID0gKnNhbXBsZXMgKyBjb2x1bW4gKiAoY29sb3JTcGFjZSA9PSBKQ1NfUkdCID8gMyA6IDQp
OwogCkBAIC01OTQsNyArNTk0LDcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2Fu
bGluZXMoSQogICAgICAgICBpZiAoZGVzdFkgPCAwKQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZlci5n
ZXRBZGRyKDAsIGRlc3RZKTsKKyAgICAgICAgUkdCQTMyKiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZl
ci5nZXRBZGRyKDAsIGRlc3RZKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsg
Kyt4KSB7CiAgICAgICAgICAgICBzZXRQaXhlbDxjb2xvclNwYWNlPihidWZmZXIsIGN1cnJlbnRB
ZGRyZXNzLCBzYW1wbGVzLCBpc1NjYWxlZCA/IG1fc2NhbGVkQ29sdW1uc1t4XSA6IHgpOwogICAg
ICAgICAgICAgKytjdXJyZW50QWRkcmVzczsKQEAgLTYyMyw5ICs2MjMsNiBAQCBib29sIEpQRUdJ
bWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcygpCiAgICAgICAgIC8vIFRoZSBidWZmZXIgaXMg
dHJhbnNwYXJlbnQgb3V0c2lkZSB0aGUgZGVjb2RlZCBhcmVhIHdoaWxlIHRoZSBpbWFnZSBpcwog
ICAgICAgICAvLyBsb2FkaW5nLiBUaGUgY29tcGxldGVkIGltYWdlIHdpbGwgYmUgbWFya2VkIGZ1
bGx5IG9wYXF1ZSBpbiBqcGVnQ29tcGxldGUoKS4KICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhh
KHRydWUpOwotCi0gICAgICAgIC8vIEZvciBKUEVHcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0
aGUgZW50aXJlIGltYWdlLgotICAgICAgICBidWZmZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50
UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKTsKICAgICB9CiAKICAgICBqcGVnX2RlY29tcHJlc3Nf
c3RydWN0KiBpbmZvID0gbV9yZWFkZXItPmluZm8oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURl
Y29kZXIuY3BwCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDExLDE5ICs0MTEsMTkgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmhlYWRlckF2YWlsYWJsZSgp
CiAgICAgfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxSR0IoSW1hZ2VGcmFtZTo6
UGl4ZWxEYXRhKiBkZXN0LCBwbmdfYnl0ZXAgcGl4ZWwpCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0
UGl4ZWxSR0IoUkdCQTMyKiBkZXN0LCBwbmdfYnl0ZXAgcGl4ZWwpCiB7CiAgICAgKmRlc3QgPSAw
eEZGMDAwMDAwVSB8IHBpeGVsWzBdIDw8IDE2IHwgcGl4ZWxbMV0gPDwgOCB8IHBpeGVsWzJdOwog
fQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxSR0JBKEltYWdlRnJhbWU6OlBpeGVsRGF0
YSogZGVzdCwgcG5nX2J5dGVwIHBpeGVsLCB1bnNpZ25lZCBjaGFyJiBub25Ucml2aWFsQWxwaGFN
YXNrKQorc3RhdGljIGlubGluZSB2b2lkIHNldFBpeGVsUkdCQShSR0JBMzIqIGRlc3QsIHBuZ19i
eXRlcCBwaXhlbCwgdW5zaWduZWQgY2hhciYgbm9uVHJpdmlhbEFscGhhTWFzaykKIHsKICAgICB1
bnNpZ25lZCBjaGFyIGEgPSBwaXhlbFszXTsKICAgICAqZGVzdCA9IGEgPDwgMjQgfCBwaXhlbFsw
XSA8PCAxNiB8IHBpeGVsWzFdIDw8IDggfCBwaXhlbFsyXTsKICAgICBub25Ucml2aWFsQWxwaGFN
YXNrIHw9ICgyNTUgLSBhKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldFBpeGVsUHJlbXVs
dGlwbGllZFJHQkEoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBkZXN0LCBwbmdfYnl0ZXAgcGl4ZWws
IHVuc2lnbmVkIGNoYXImIG5vblRyaXZpYWxBbHBoYU1hc2spCitzdGF0aWMgaW5saW5lIHZvaWQg
c2V0UGl4ZWxQcmVtdWx0aXBsaWVkUkdCQShSR0JBMzIqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCwg
dW5zaWduZWQgY2hhciYgbm9uVHJpdmlhbEFscGhhTWFzaykKIHsKICAgICB1bnNpZ25lZCBjaGFy
IGEgPSBwaXhlbFszXTsKICAgICB1bnNpZ25lZCBjaGFyIHIgPSBmYXN0RGl2aWRlQnkyNTUocGl4
ZWxbMF0gKiBhKTsKQEAgLTQ3MSw4ICs0NzEsNiBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93
QXZhaWxhYmxlKHVuc2lnCiAgICAgICAgICAgICBpbml0RnJhbWVCdWZmZXIobV9jdXJyZW50RnJh
bWUpOwogICAgICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgLy8gRm9yIFBOR3MsIHRoZSBmcmFt
ZSBhbHdheXMgZmlsbHMgdGhlIGVudGlyZSBpbWFnZS4KLSAgICAgICAgYnVmZmVyLnNldE9yaWdp
bmFsRnJhbWVSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSgpKSk7CiAgICAgfQogCiAgICAg
LyogbGlicG5nIGNvbW1lbnRzIChoZXJlIHRvIGV4cGxhaW4gd2hhdCBmb2xsb3dzKS4KQEAgLTUz
MSw3ICs1MjksNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnCiAg
ICAgfQogCiAgICAgLy8gV3JpdGUgdGhlIGRlY29kZWQgcm93IHBpeGVscyB0byB0aGUgZnJhbWUg
YnVmZmVyLgotICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogYWRkcmVzcyA9IGJ1ZmZlci5nZXRB
ZGRyKDAsIHkpOworICAgIFJHQkEzMiogYWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKDAsIHkpOwog
ICAgIGludCB3aWR0aCA9IHNjYWxlZFNpemUoKS53aWR0aCgpOwogICAgIHVuc2lnbmVkIGNoYXIg
bm9uVHJpdmlhbEFscGhhTWFzayA9IDA7CiAKQEAgLTg1NCw3ICs4NTIsNyBAQCB2b2lkIFBOR0lt
YWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9X
Tl9TQU1QTElORykKICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCByZWN0Lm1heFkoKSAtIHJl
Y3QueSgpOyArK3kpIHsKICAgICAgICAgICAgIHBuZ19ieXRlcCByb3cgPSBpbnRlcmxhY2VCdWZm
ZXIgKyAobV9zY2FsZWQgPyBtX3NjYWxlZFJvd3NbeV0gOiB5KSAqIGNvbG9yQ2hhbm5lbHMgKiBz
aXplKCkud2lkdGgoKTsKLSAgICAgICAgICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogYWRkcmVz
cyA9IGJ1ZmZlci5nZXRBZGRyKHJlY3QueCgpLCB5ICsgcmVjdC55KCkpOworICAgICAgICAgICAg
UkdCQTMyKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIocmVjdC54KCksIHkgKyByZWN0LnkoKSk7
CiAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHJlY3QubWF4WCgpIC0gcmVjdC54KCk7
ICsreCkgewogICAgICAgICAgICAgICAgIHBuZ19ieXRlcCBwaXhlbCA9IHJvdyArIChtX3NjYWxl
ZCA/IG1fc2NhbGVkQ29sdW1uc1t4XSA6IHgpICogY29sb3JDaGFubmVsczsKICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBhbHBoYSA9IGhhc0FscGhhID8gcGl4ZWxbM10gOiAyNTU7CkBAIC04NzAs
NyArODY4LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUoKQogICAgICAg
ICBwbmdfYnl0ZXAgcm93ID0gaW50ZXJsYWNlQnVmZmVyOwogICAgICAgICBmb3IgKGludCB5ID0g
cmVjdC55KCk7IHkgPCByZWN0Lm1heFkoKTsgKyt5LCByb3cgKz0gY29sb3JDaGFubmVscyAqIHNp
emUoKS53aWR0aCgpKSB7CiAgICAgICAgICAgICBwbmdfYnl0ZXAgcGl4ZWwgPSByb3c7Ci0gICAg
ICAgICAgICBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcihy
ZWN0LngoKSwgeSk7CisgICAgICAgICAgICBSR0JBMzIqIGFkZHJlc3MgPSBidWZmZXIuZ2V0QWRk
cihyZWN0LngoKSwgeSk7CiAgICAgICAgICAgICBmb3IgKGludCB4ID0gcmVjdC54KCk7IHggPCBy
ZWN0Lm1heFgoKTsgKyt4LCBwaXhlbCArPSBjb2xvckNoYW5uZWxzKSB7CiAgICAgICAgICAgICAg
ICAgdW5zaWduZWQgYWxwaGEgPSBoYXNBbHBoYSA/IHBpeGVsWzNdIDogMjU1OwogICAgICAgICAg
ICAgICAgIG5vblRyaXZpYWxBbHBoYSB8PSBhbHBoYSA8IDI1NTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9X
RUJQSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMyLDE0ICsxMzIsMTMgQEAgYm9vbCBXRUJQSW1hZ2VEZWNvZGVyOjpkZWNv
ZGUoYm9vbCBvbmx5UwogICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgICAgICBi
dWZmZXIuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIGJ1ZmZl
ci5zZXRIYXNBbHBoYShtX2hhc0FscGhhKTsKLSAgICAgICAgYnVmZmVyLnNldE9yaWdpbmFsRnJh
bWVSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSgpKSk7CiAgICAgfQogCiAgICAgaWYgKCFt
X2RlY29kZXIpIHsKICAgICAgICAgV0VCUF9DU1BfTU9ERSBtb2RlID0gb3V0cHV0TW9kZShtX2hh
c0FscGhhKTsKICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpCiAgICAgICAgICAgICBt
b2RlID0gb3V0cHV0TW9kZShmYWxzZSk7Ci0gICAgICAgIGludCByb3dTdHJpZGUgPSBzaXplKCku
d2lkdGgoKSAqIHNpemVvZihJbWFnZUZyYW1lOjpQaXhlbERhdGEpOworICAgICAgICBpbnQgcm93
U3RyaWRlID0gc2l6ZSgpLndpZHRoKCkgKiBzaXplb2YoUkdCQTMyKTsKICAgICAgICAgdWludDhf
dCogb3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyLmdldEFkZHIoMCwg
MCkpOwogICAgICAgICBpbnQgb3V0cHV0U2l6ZSA9IHNpemUoKS5oZWlnaHQoKSAqIHJvd1N0cmlk
ZTsKICAgICAgICAgbV9kZWNvZGVyID0gV2ViUElOZXdSR0IobW9kZSwgb3V0cHV0LCBvdXRwdXRT
aXplLCByb3dTdHJpZGUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288428</attachid>
            <date>2016-09-09 12:31:04 -0700</date>
            <delta_ts>2016-09-09 12:37:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159679-20160909122836.patch</filename>
            <type>text/plain</type>
            <size>43948</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTc1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg5IEBACisyMDE2LTA5LTA5ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSB0aGUg
cGl4ZWwgZGF0YSBvZiBJbWFnZUZyYW1lIHRvIGEgc2VwYXJhdGUgY2xhc3MgbmFtZWQgSW1hZ2VC
YWNraW5nU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1OTY3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE1vdmUgdGhlIHBpeGVsIGRhdGEgbWFuaXB1bGF0aW9uIHBhcnQgaW4gSW1hZ2VGcmFtZSBp
bnRvIGEgc2VwYXJhdGUgY2xhc3MKKyAgICAgICAgYW5kIGFsbG9jYXRlIGl0IG9uIGRlbWFuZC4K
KyAKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5j
bWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbkNhaXJvLmNtYWtlOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2hhbm5lbCk6Cisg
ICAgICAgIChXZWJDb3JlOjp1bnByZW11bHRpcGxpZWRDaGFubmVsKToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VQcmVtdWx0aXBsaWVkUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlVW5QcmVt
dWx0aXBsaWVkUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpjb2xvckZyb21QcmVtdWx0aXBsaWVk
QVJHQik6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OmZh
c3RNdWx0aXBseUJ5MjU1KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tp
bmdTdG9yZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OkltYWdlQmFja2lu
Z1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRGcmFtZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OnNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCYWNraW5nU3RvcmU6OmZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJhY2tpbmdTdG9yZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3Rv
cmU6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJhY2tpbmdTdG9yZTo6cmVw
ZWF0Rmlyc3RSb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OmF0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRSR0JBKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpvdmVyUkdCQSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJhY2tpbmdTdG9yZTo6aW5Cb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
YWNraW5nU3RvcmU6OmlzT3ZlclNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L05hdGl2ZUltYWdlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmF0aXZlSW1hZ2VIYXNBbHBo
YSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojp6ZXJvRmlsbEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRC
YWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRPcmlnaW5hbEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6OmNvcHlSb3dOVGltZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjphc05ld05hdGl2ZUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpoYXNCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZTo6b3JpZ2luYWxGcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
Z2V0QWRkcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRSR0JBKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om92ZXJSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2Rlcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRP
cmlnaW5hbEZyYW1lUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
OjpoYXNQaXhlbERhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
Zml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWU6OmRpdmlkZTI1NSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjp3aWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpoZWln
aHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjppc092ZXJTaXpl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1h
Z2VSZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6OmRlY29kZUJN
UCk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VCYWNraW5n
U3RvcmVDYWlyby5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3Rv
cmU6OmltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1h
Z2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6aGF2ZURl
Y29kZWRSb3cpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0lt
YWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhlbCk6CisgICAgICAgIChX
ZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c2V0UGl4ZWxSR0IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxSR0JBKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVsUHJlbXVsdGlwbGllZFJHQkEpOgorICAgICAgICAo
V2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6V0VCUEltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKwogMjAxNi0wOS0wOSAgQnJhZHkgRWlkc29u
ICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgU29mdC1saW5rIEdhbWVDb250cm9sbGVy
LmZyYW1ld29yay4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCShyZXZpc2lvbiAyMDU2
ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQkod29ya2luZyBjb3B5KQpA
QCAtMTgzLDEwICsxODMsOSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3gxMS9YVW5pcXVlUmVzb3VyY2UuY3BwCiAKKyAgICBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9JbWFnZUJhY2tpbmdTdG9yZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2ltYWdl
LWVuY29kZXJzL0pQRUdJbWFnZUVuY29kZXIuY3BwCiAKLSAgICBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKLQogICAgIHBsYXRmb3JtL25ldHdvcmsv
ZWZsL05ldHdvcmtTdGF0ZU5vdGlmaWVyRWZsLmNwcAogCiAgICAgcGxhdGZvcm0vbmV0d29yay9z
b3VwL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU291cC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtR1RLLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
R1RLLmNtYWtlCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdU
Sy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTU1LDcgKzE1NSw3IEBAIGxpc3QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCiAg
ICAgcGxhdGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5jcHAKIAotICAgIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCiAKICAgICBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9ndGsvU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2VHdGsuY3BwCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQkocmV2aXNpb24gMjA1Njg0KQorKysg
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAt
NDYsNyArNDYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAogCi0gICAgcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCisgICAgcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VCYWNraW5nU3RvcmVDYWlyby5jcHAKIAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU3R1Yi5jcHAKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMjc1LDYgKzIyNzUsNyBAQAogCQk1
NTVCODdFQzFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU1Qjg3RUExQ0FBRjBBQjAwMzQ5
NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLzsgfTsKIAkJNTU1Qjg3RUQxQ0FBRjBBQjAwMzQ5
NDI1IC8qIEltYWdlRGVjb2RlckNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cu
aCAqLzsgfTsKIAkJNTVBMzM2RjcxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUEzMzZGNjFEODIw
OUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLzsgfTsKKwkJNTVBMzM2RjkxRDgyMUUzQzAw
MjJDNEM3IC8qIEltYWdlQmFja2luZ1N0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NUEzMzZGODFEODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNr
aW5nU3RvcmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1NzA5RThDRDFENDEzRDQ3MDAzMjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5cHRvLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MDlFOENBMUQ0
MTNDRTMwMDMyNDRBQyAvKiBXZWJLaXRTdWJ0bGVDcnlwdG8uY3BwICovOyB9OwogCQk1NzA5RThD
RTFENDEzRDVCMDAzMjQ0QUMgLyogSlNXZWJLaXRTdWJ0bGVDcnlwdG9DdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFGRjhGNjYxODA3NDYw
ODAwMTMyNjc0IC8qIEpTV2ViS2l0U3VidGxlQ3J5cHRvQ3VzdG9tLmNwcCAqLzsgfTsKIAkJNTcw
OUU4Q0YxRDQxM0Q5QTAwMzI0NEFDIC8qIFdlYktpdFN1YnRsZUNyeXB0by5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcwOUU4Q0IxRDQxM0NFMzAwMzI0
NEFDIC8qIFdlYktpdFN1YnRsZUNyeXB0by5oICovOyB9OwpAQCAtOTI5MSw2ICs5MjkyLDcgQEAK
IAkJNTU1Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdl
RGVjb2RlckNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlRGVjb2Rl
ckNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1QTMzNkY2MUQ4MjA5RjQwMDIy
QzRDNyAvKiBOYXRpdmVJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBO
YXRpdmVJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NUEzMzZGODFEODIx
RTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW1hZ2VCYWNraW5nU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTVENDA4RjcxQTdDNjMxODAwQzc4NDUwIC8qIFNWR0ltYWdlQ2xpZW50cy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdJbWFnZUNsaWVudHMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcwOUU4Q0ExRDQxM0NFMzAwMzI0NEFDIC8qIFdlYktpdFN1
YnRsZUNyeXB0by5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJL
aXRTdWJ0bGVDcnlwdG8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzA5RThD
QjFENDEzQ0UzMDAzMjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5cHRvLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdFN1YnRsZUNyeXB0by5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjA3NjksNiArMjA3NzEsNyBAQAogCQkJCTM3OTkxOTk0MTIwMERERjQw
MEVBMDQxQyAvKiBXT0ZGRmlsZUZvcm1hdC5jcHAgKi8sCiAJCQkJMzc5OTE5OTUxMjAwRERGNDAw
RUEwNDFDIC8qIFdPRkZGaWxlRm9ybWF0LmggKi8sCiAJCQkJNTVBMzM2RjYxRDgyMDlGNDAwMjJD
NEM3IC8qIE5hdGl2ZUltYWdlLmggKi8sCisJCQkJNTVBMzM2RjgxRDgyMUUzQzAwMjJDNEM3IC8q
IEltYWdlQmFja2luZ1N0b3JlLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGdyYXBoaWNzOwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI2MzM5LDYgKzI2MzQyLDcgQEAKIAkJCQk1ODJD
QjA1MzFBNzhBMTRCMDBBRkZDQzQgLyogU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNUExRUE3RDE1MkJDRjA4MDA0RDAwQjYgLyogU2lt
cGxpZnlNYXJrdXBDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzJBN0YyMTFDNkU1NzE5
MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTU1QTMzNkY5
MUQ4MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzE3NDFBQUQxNjYzNjYwOTAwOEE1QjdFIC8qIFNpbXVsYXRlZENsaWNrT3B0aW9ucy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkQwMEQ3QTUxNEEzRjYxOTAwNzM0MDExIC8qIFNpbmNSZXNhbXBs
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMzI3RDYwMTFBMzNBMkIwMDRGOUQ2NSAvKiBTaW5r
RG9jdW1lbnQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSwx
NiBAQCBjb25zdCBSR0JBMzIgQ29sb3I6OnRyYW5zcGFyZW50Owogc3RhdGljIGNvbnN0IFJHQkEz
MiBsaWdodGVuZWRCbGFjayA9IDB4RkY1NDU0NTQ7CiBzdGF0aWMgY29uc3QgUkdCQTMyIGRhcmtl
bmVkV2hpdGUgPSAweEZGQUJBQkFCOwogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHByZW11bHRp
cGxpZWRDaGFubmVsKHVuc2lnbmVkIGMsIHVuc2lnbmVkIGEpCit7CisgICAgcmV0dXJuIGZhc3RE
aXZpZGVCeTI1NShjICogYSArIDI1NCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgdW5w
cmVtdWx0aXBsaWVkQ2hhbm5lbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBhKQoreworICAgIHJldHVy
biAoZmFzdE11bHRpcGx5QnkyNTUoYykgKyBhIC0gMSkgLyBhOworfQorCiBSR0JBMzIgbWFrZVJH
QihpbnQgciwgaW50IGcsIGludCBiKQogewogICAgIHJldHVybiAweEZGMDAwMDAwIHwgc3RkOjpt
YXgoMCwgc3RkOjptaW4ociwgMjU1KSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAy
NTUpKSA8PCA4IHwgc3RkOjptYXgoMCwgc3RkOjptaW4oYiwgMjU1KSk7CkBAIC01OSw2ICs2OSwx
NiBAQCBSR0JBMzIgbWFrZVJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50CiAgICAgcmV0dXJu
IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGEsIDI1NSkpIDw8IDI0IHwgc3RkOjptYXgoMCwgc3RkOjpt
aW4ociwgMjU1KSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAyNTUpKSA8PCA4IHwg
c3RkOjptYXgoMCwgc3RkOjptaW4oYiwgMjU1KSk7CiB9CiAKK1JHQkEzMiBtYWtlUHJlbXVsdGlw
bGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCit7CisgICAgcmV0dXJuIG1ha2VS
R0JBKHByZW11bHRpcGxpZWRDaGFubmVsKHIsIGEpLCBwcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBh
KSwgcHJlbXVsdGlwbGllZENoYW5uZWwoYiwgYSksIGEpOworfQorCitSR0JBMzIgbWFrZVVuUHJl
bXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCit7CisgICAgcmV0dXJu
IG1ha2VSR0JBKHVucHJlbXVsdGlwbGllZENoYW5uZWwociwgYSksIHVucHJlbXVsdGlwbGllZENo
YW5uZWwoZywgYSksIHVucHJlbXVsdGlwbGllZENoYW5uZWwoYiwgYSksIGEpOworfQorCiBzdGF0
aWMgaW50IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGZsb2F0IGYpCiB7CiAgICAgLy8gV2UgdXNlIGxy
b3VuZGYgYW5kIDI1NSBpbnN0ZWFkIG9mIG5leHRhZnRlcmYoMjU2LCAwKSB0byBtYXRjaCBDRydz
IHJvdW5kaW5nCkBAIC00ODIsMTQgKzUwMiw5IEBAIHZvaWQgQ29sb3I6OmdldEhTVihkb3VibGUm
IGh1ZSwgZG91YmxlJiAKIENvbG9yIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKFJHQkEzMiBw
aXhlbENvbG9yKQogewogICAgIGludCBhbHBoYSA9IGFscGhhQ2hhbm5lbChwaXhlbENvbG9yKTsK
LSAgICBpZiAoYWxwaGEgJiYgYWxwaGEgPCAyNTUpIHsKLSAgICAgICAgcmV0dXJuIENvbG9yOjpj
cmVhdGVVbmNoZWNrZWQoCi0gICAgICAgICAgICByZWRDaGFubmVsKHBpeGVsQ29sb3IpICogMjU1
IC8gYWxwaGEsCi0gICAgICAgICAgICBncmVlbkNoYW5uZWwocGl4ZWxDb2xvcikgKiAyNTUgLyBh
bHBoYSwKLSAgICAgICAgICAgIGJsdWVDaGFubmVsKHBpeGVsQ29sb3IpICogMjU1IC8gYWxwaGEs
Ci0gICAgICAgICAgICBhbHBoYSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBDb2xvcihw
aXhlbENvbG9yKTsKKyAgICBpZiAoYWxwaGEgJiYgYWxwaGEgPCAyNTUpCisgICAgICAgIHBpeGVs
Q29sb3IgPSBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShyZWRDaGFubmVsKHBpeGVsQ29sb3IpLCBn
cmVlbkNoYW5uZWwocGl4ZWxDb2xvciksIGJsdWVDaGFubmVsKHBpeGVsQ29sb3IpLCBhbHBoYSk7
CisgICAgcmV0dXJuIENvbG9yKHBpeGVsQ29sb3IpOwogfQogCiBSR0JBMzIgcHJlbXVsdGlwbGll
ZEFSR0JGcm9tQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpAQCAtNDk3LDE0ICs1MTIsMTAgQEAg
UkdCQTMyIHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKGNvbnN0IAogICAgIHVuc2lnbmVkIHBp
eGVsQ29sb3I7CiAKICAgICB1bnNpZ25lZCBhbHBoYSA9IGNvbG9yLmFscGhhKCk7Ci0gICAgaWYg
KGFscGhhIDwgMjU1KSB7Ci0gICAgICAgIHBpeGVsQ29sb3IgPSBDb2xvcjo6Y3JlYXRlVW5jaGVj
a2VkKAotICAgICAgICAgICAgZmFzdERpdmlkZUJ5MjU1KGNvbG9yLnJlZCgpICogYWxwaGEgKyAy
NTQpLAotICAgICAgICAgICAgZmFzdERpdmlkZUJ5MjU1KGNvbG9yLmdyZWVuKCkgKiBhbHBoYSAr
IDI1NCksCi0gICAgICAgICAgICBmYXN0RGl2aWRlQnkyNTUoY29sb3IuYmx1ZSgpICogYWxwaGEg
KyAyNTQpLAotICAgICAgICAgICAgYWxwaGEpLnJnYigpOwotICAgIH0gZWxzZQotICAgICAgICAg
cGl4ZWxDb2xvciA9IGNvbG9yLnJnYigpOworICAgIGlmIChhbHBoYSA8IDI1NSkKKyAgICAgICAg
cGl4ZWxDb2xvciA9IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShjb2xvci5yZWQoKSwgY29sb3IuZ3Jl
ZW4oKSwgY29sb3IuYmx1ZSgpLCBhbHBoYSk7CisgICAgZWxzZQorICAgICAgICBwaXhlbENvbG9y
ID0gY29sb3IucmdiKCk7CiAKICAgICByZXR1cm4gcGl4ZWxDb2xvcjsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjA1Njg0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5KQpA
QCAtNTUsNiArNTUsOSBAQCB0eXBlZGVmIHVuc2lnbmVkIFJHQkEzMjsgLy8gRGVwcmVjYXRlZDog
CiBXRUJDT1JFX0VYUE9SVCBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBiKTsKIFdF
QkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7
CiAKK1JHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50
IGEpOworUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIs
IGludCBhKTsKKwogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEo
UkdCQTMyIGNvbG9yLCBmbG9hdCBvdmVycmlkZUFscGhhKTsKIFdFQkNPUkVfRVhQT1JUIFJHQkEz
MiBjb2xvcldpdGhPdmVycmlkZUFscGhhKFJHQkEzMiBjb2xvciwgT3B0aW9uYWw8ZmxvYXQ+IG92
ZXJyaWRlQWxwaGEpOwogCkBAIC0yMTgsNiArMjIxLDcgQEAgQ29sb3IgYmxlbmQoY29uc3QgQ29s
b3ImIGZyb20sIGNvbnN0IENvbAogCiBpbnQgZGlmZmVyZW5jZVNxdWFyZWQoY29uc3QgQ29sb3Im
LCBjb25zdCBDb2xvciYpOwogCit1aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1aW50MTZfdCB2
YWx1ZSk7CiB1aW50MTZfdCBmYXN0RGl2aWRlQnkyNTUodWludDE2X3QpOwogCiAjaWYgVVNFKENH
KQpAQCAtMjkwLDYgKzI5NCwxMSBAQCBpbmxpbmUgdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JD
aGFubmVsCiAgICAgcmV0dXJuIHN0ZDo6bWF4KDAuZiwgc3RkOjptaW4oMjU1LmYsIHN0ZDo6cm91
bmQodmFsdWUpKSk7CiB9CiAKK2lubGluZSB1aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1aW50
MTZfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gKHZhbHVlIDw8IDgpIC0gdmFsdWU7Cit9CisKIGlu
bGluZSB1aW50MTZfdCBmYXN0RGl2aWRlQnkyNTUodWludDE2X3QgdmFsdWUpCiB7CiAgICAgLy8g
V2hpbGUgdGhpcyBpcyBhbiBhcHByb3hpbWF0ZSBhbGdvcml0aG0gZm9yIGRpdmlzaW9uIGJ5IDI1
NSwgaXQgZ2l2ZXMgcGVyZmVjdGx5IGFjY3VyYXRlIHJlc3VsdHMgZm9yIDE2LWJpdCB2YWx1ZXMu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9y
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QmFja2luZ1N0b3JlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZVB0ci5oIgorCisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQmFj
a2luZ1N0b3JlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQmFj
a2luZ1N0b3JlPiBjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFs
cGhhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8SW1hZ2VCYWNraW5n
U3RvcmU+KHNpemUsIHByZW11bHRpcGx5QWxwaGEpOworICAgIH0KKworICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8SW1hZ2VCYWNraW5nU3RvcmU+IGNyZWF0ZShjb25zdCBJbWFnZUJhY2tpbmdT
dG9yZSYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxJbWFn
ZUJhY2tpbmdTdG9yZT4ob3RoZXIpOworICAgIH0KKworICAgIEltYWdlQmFja2luZ1N0b3JlKGNv
bnN0IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSA9IHRydWUpCisgICAgICAg
IDogbV9wcmVtdWx0aXBseUFscGhhKHByZW11bHRpcGx5QWxwaGEpCisgICAgeworICAgICAgICBB
U1NFUlQoIXNpemUuaXNFbXB0eSgpKTsKKyAgICAgICAgc2V0U2l6ZShzaXplKTsKKyAgICB9CisK
KyAgICBJbWFnZUJhY2tpbmdTdG9yZShjb25zdCBJbWFnZUJhY2tpbmdTdG9yZSYgb3RoZXIpCisg
ICAgeworICAgICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgbV9waXhlbHMgPSBvdGhlci5tX3BpeGVsczsKKyAgICAgICAgbV9waXhlbHNQdHIg
PSBtX3BpeGVscy5kYXRhKCk7CisgICAgICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKKyAgICAg
ICAgbV9wcmVtdWx0aXBseUFscGhhID0gb3RoZXIubV9wcmVtdWx0aXBseUFscGhhOworICAgIH0K
KworICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlKCkgY29uc3Q7CisKKyAgICBib29sIHNldFNpemUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAgIGlmICghbV9waXhlbHMudHJ5UmVz
ZXJ2ZUNhcGFjaXR5KHNpemUuYXJlYSgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBtX3BpeGVscy5yZXNpemUoc2l6ZS5hcmVhKCkpOworICAgICAgICBtX3BpeGVsc1B0
ciA9IG1fcGl4ZWxzLmRhdGEoKTsKKyAgICAgICAgbV9zaXplID0gc2l6ZTsKKyAgICAgICAgbV9m
cmFtZVJlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIG1fc2l6ZSk7CisgICAgICAgIGNsZWFyKCk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZvaWQgc2V0RnJhbWVSZWN0KGNv
bnN0IEludFJlY3QmIGZyYW1lUmVjdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9zaXplLmlz
RW1wdHkoKSk7CisgICAgICAgIEFTU0VSVChpbkJvdW5kcyhmcmFtZVJlY3QpKTsKKyAgICAgICAg
bV9mcmFtZVJlY3QgPSBmcmFtZVJlY3Q7CisgICAgfQorCisgICAgSW50U2l6ZSBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgSW50UmVjdCBmcmFtZVJlY3QoKSBjb25zdCB7IHJl
dHVybiBtX2ZyYW1lUmVjdDsgfQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBt
ZW1zZXQobV9waXhlbHNQdHIsIDAsIG1fc2l6ZS5hcmVhKCkgKiBzaXplb2YoUkdCQTMyKSk7Cisg
ICAgfQorCisgICAgdm9pZCBjbGVhclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKKyAgICB7Cisg
ICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSB8fCAhaW5Cb3VuZHMocmVjdCkpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRo
KCkgKiBzaXplb2YoUkdCQTMyKTsKKyAgICAgICAgUkdCQTMyKiBzdGFydCA9IGF0KHJlY3QueCgp
LCByZWN0LnkoKSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdC5oZWlnaHQoKTsg
KytpKSB7CisgICAgICAgICAgICBtZW1zZXQoc3RhcnQsIDAsIHJlY3RXaWR0aEluQnl0ZXMpOwor
ICAgICAgICAgICAgc3RhcnQgKz0gbV9zaXplLndpZHRoKCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB2b2lkIHJlcGVhdEZpcnN0Um93KGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAgeworICAg
ICAgICBpZiAocmVjdC5pc0VtcHR5KCkgfHwgIWluQm91bmRzKHJlY3QpKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIHNpemVfdCByZWN0V2lkdGhJbkJ5dGVzID0gcmVjdC53aWR0aCgp
ICogc2l6ZW9mKFJHQkEzMik7CisgICAgICAgIFJHQkEzMiogc3JjID0gYXQocmVjdC54KCksIHJl
Y3QueSgpKTsKKyAgICAgICAgUkdCQTMyKiBkZXN0ID0gc3JjICsgbV9zaXplLndpZHRoKCk7Cisg
ICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgcmVjdC5oZWlnaHQoKTsgKytpKSB7CisgICAgICAg
ICAgICBtZW1jcHkoZGVzdCwgc3JjLCByZWN0V2lkdGhJbkJ5dGVzKTsKKyAgICAgICAgICAgIGRl
c3QgKz0gbV9zaXplLndpZHRoKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSR0JBMzIqIGF0
KGludCB4LCBpbnQgeSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BpeGVsc1B0ciAr
IHkgKiBtX3NpemUud2lkdGgoKSArIHg7CisgICAgfQorCisgICAgdm9pZCBzZXRSR0JBKGludCB4
LCBpbnQgeSwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkK
KyAgICB7CisgICAgICAgIHNldFJHQkEoYXQoeCwgeSksIHIsIGcsIGIsIGEpOworICAgIH0KKwor
ICAgIHZvaWQgc2V0UkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVu
c2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAgeworICAgICAgICBpZiAobV9wcmVtdWx0aXBseUFs
cGhhICYmICFhKQorICAgICAgICAgICAgKmRlc3QgPSAwOworICAgICAgICBlbHNlIGlmIChtX3By
ZW11bHRpcGx5QWxwaGEgJiYgYSA8IDI1NSkKKyAgICAgICAgICAgICpkZXN0ID0gbWFrZVByZW11
bHRpcGxpZWRSR0JBKHIsIGcsIGIsIGEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqZGVz
dCA9IG1ha2VSR0JBKHIsIGcsIGIsIGEpOworICAgIH0KKworICAgIHZvaWQgb3ZlclJHQkEoUkdC
QTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBh
KQorICAgIHsKKyAgICAgICAgaWYgKCFhKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGlmIChhID49IDI1NSB8fCAhYWxwaGFDaGFubmVsKCpkZXN0KSkgeworICAgICAgICAgICAgc2V0
UkdCQShkZXN0LCByLCBnLCBiLCBhKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKQorICAgICAgICAgICAgKmRlc3QgPSBt
YWtlUHJlbXVsdGlwbGllZFJHQkEocmVkQ2hhbm5lbCgqZGVzdCksIGdyZWVuQ2hhbm5lbCgqZGVz
dCksIGJsdWVDaGFubmVsKCpkZXN0KSwgYWxwaGFDaGFubmVsKCpkZXN0KSk7CisKKyAgICAgICAg
dW5zaWduZWQgZCA9IDI1NSAtIGE7CisKKyAgICAgICAgciA9IGZhc3REaXZpZGVCeTI1NShyICog
YSArIHJlZENoYW5uZWwoKmRlc3QpICogZCk7CisgICAgICAgIGcgPSBmYXN0RGl2aWRlQnkyNTUo
ZyAqIGEgKyBncmVlbkNoYW5uZWwoKmRlc3QpICogZCk7CisgICAgICAgIGIgPSBmYXN0RGl2aWRl
QnkyNTUoYiAqIGEgKyBibHVlQ2hhbm5lbCgqZGVzdCkgKiBkKTsKKyAgICAgICAgYSArPSBmYXN0
RGl2aWRlQnkyNTUoZCAqIGFscGhhQ2hhbm5lbCgqZGVzdCkpOworCisgICAgICAgIGlmIChtX3By
ZW11bHRpcGx5QWxwaGEpCisgICAgICAgICAgICAqZGVzdCA9IG1ha2VSR0JBKHIsIGcsIGIsIGEp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICAqZGVzdCA9IG1ha2VVblByZW11bHRpcGxpZWRS
R0JBKHIsIGcsIGIsIGEpOworICAgIH0KKworICAgIGJvb2wgaW5Cb3VuZHMoY29uc3QgSW50UmVj
dCYgcmVjdCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KCks
IG1fc2l6ZSkuY29udGFpbnMocmVjdCk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNPdmVy
U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQorICAgIHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVk
IGxvbmcgbG9uZyBNYXhQaXhlbHMgPSAoKDEgPDwgMjkpIC0gMSk7CisgICAgICAgIHVuc2lnbmVk
IGxvbmcgbG9uZyBwaXhlbHMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHNpemUu
d2lkdGgoKSkgKiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHNpemUuaGVpZ2h0KCkp
OworICAgICAgICByZXR1cm4gcGl4ZWxzID4gTWF4UGl4ZWxzOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBWZWN0b3I8UkdCQTMyPiBtX3BpeGVsczsKKyAgICBSR0JBMzIqIG1fcGl4ZWxzUHRyIHsg
bnVsbHB0ciB9OworICAgIEludFNpemUgbV9zaXplOworICAgIEludFJlY3QgbV9mcmFtZVJlY3Q7
IC8vIFRoaXMgd2lsbCBhbHdheXMganVzdCBiZSB0aGUgZW50aXJlIGJ1ZmZlciBleGNlcHQgZm9y
IEdJRiBhbmQgUE5HIGZyYW1lcworICAgIGJvb2wgbV9wcmVtdWx0aXBseUFscGhhIHsgdHJ1ZSB9
OworfTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0
aXZlSW1hZ2VDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NywxMCArNDcsMTAgQEAgSW50U2l6ZSBuYXRpdmVJbWFnZVNpemUoY29uc3QgTmF0
aXZlSW1hZwogICAgIHJldHVybiBpbWFnZSA/IEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGltYWdl
LmdldCgpKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSkpIDogSW50U2l6ZSgpOwogfQog
Ci1ib29sIG5hdGl2ZUltYWdlSGFzQWxwaGEoY29uc3QgTmF0aXZlSW1hZ2VQdHImKQorYm9vbCBu
YXRpdmVJbWFnZUhhc0FscGhhKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSkKIHsKLSAgICAv
LyBGSVhNRTogQW5zd2VyIGNvcnJlY3RseSB0aGUgcXVlc3Rpb246IGRvZXMgdGhlIENHSW1hZ2VS
ZWYgaGF2ZSBhbHBoYSBjaGFubm5lbD8KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBDR0ltYWdlQWxw
aGFJbmZvIGluZm8gPSBDR0ltYWdlR2V0QWxwaGFJbmZvKGltYWdlLmdldCgpKTsKKyAgICByZXR1
cm4gKGluZm8gPj0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSAmJiAoaW5mbyA8PSBr
Q0dJbWFnZUFscGhhRmlyc3QpOwogfQogCiBDb2xvciBuYXRpdmVJbWFnZVNpbmdsZVBpeGVsU29s
aWRDb2xvcihjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAJ
KHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw4ICsxNDEsOCBAQCBJ
bWFnZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QgCiAgICAgaWYgKHRoaXMgPT0g
Jm90aGVyKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAKLSAgICBjb3B5Qml0bWFwRGF0YShvdGhl
cik7Ci0gICAgc2V0T3JpZ2luYWxGcmFtZVJlY3Qob3RoZXIub3JpZ2luYWxGcmFtZVJlY3QoKSk7
CisgICAgc2V0QmFja2luZ1N0b3JlKG90aGVyLmJhY2tpbmdTdG9yZSgpKTsKKyAgICBzZXRIYXNB
bHBoYShvdGhlci5tX2hhc0FscGhhKTsKICAgICBzZXRTdGF0dXMob3RoZXIuc3RhdHVzKCkpOwog
ICAgIHNldER1cmF0aW9uKG90aGVyLmR1cmF0aW9uKCkpOwogICAgIHNldERpc3Bvc2FsTWV0aG9k
KG90aGVyLmRpc3Bvc2FsTWV0aG9kKCkpOwpAQCAtMTUyLDggKzE1Miw3IEBAIEltYWdlRnJhbWUm
IEltYWdlRnJhbWU6Om9wZXJhdG9yPShjb25zdCAKIAogdm9pZCBJbWFnZUZyYW1lOjpjbGVhclBp
eGVsRGF0YSgpCiB7Ci0gICAgbV9iYWNraW5nU3RvcmUuY2xlYXIoKTsKLSAgICBtX2J5dGVzID0g
MDsKKyAgICBtX2JhY2tpbmdTdG9yZSA9IG51bGxwdHI7CiAgICAgbV9zdGF0dXMgPSBGcmFtZUVt
cHR5OwogICAgIC8vIE5PVEU6IERvIG5vdCByZXNldCBvdGhlciBtZW1iZXJzIGhlcmU7IGNsZWFy
RnJhbWVCdWZmZXJDYWNoZSgpIGNhbGxzIHRoaXMKICAgICAvLyB0byBmcmVlIHRoZSBiaXRtYXAg
ZGF0YSwgYnV0IG90aGVyIGZ1bmN0aW9ucyBsaWtlIGluaXRGcmFtZUJ1ZmZlcigpIGFuZApAQCAt
MTYzLDUxICsxNjIsMzEgQEAgdm9pZCBJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSgpCiAKIHZv
aWQgSW1hZ2VGcmFtZTo6emVyb0ZpbGxQaXhlbERhdGEoKQogewotICAgIG1lbXNldChtX2J5dGVz
LCAwLCBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKSAqIHNpemVvZihQaXhlbERhdGEp
KTsKKyAgICBtX2JhY2tpbmdTdG9yZS0+Y2xlYXIoKTsKICAgICBtX2hhc0FscGhhID0gdHJ1ZTsK
IH0KIAogdm9pZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0KQogewotICAgIEFTU0VSVChJbnRSZWN0KEludFBvaW50KCksIG1fc2l6ZSkuY29udGFpbnMo
cmVjdCkpOwotCiAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBzaXplX3QgcmVjdFdpZHRoSW5CeXRlcyA9IHJlY3Qud2lkdGgoKSAqIHNpemVvZihQaXhlbERh
dGEpOwotICAgIFBpeGVsRGF0YSogc3RhcnQgPSBtX2J5dGVzICsgKHJlY3QueSgpICogd2lkdGgo
KSkgKyByZWN0LngoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QuaGVpZ2h0KCk7ICsr
aSkgewotICAgICAgICBtZW1zZXQoc3RhcnQsIDAsIHJlY3RXaWR0aEluQnl0ZXMpOwotICAgICAg
ICBzdGFydCArPSB3aWR0aCgpOwotICAgIH0KLQorICAgIG1fYmFja2luZ1N0b3JlLT5jbGVhclJl
Y3QocmVjdCk7CiAgICAgc2V0SGFzQWxwaGEodHJ1ZSk7CiB9CiAKLWJvb2wgSW1hZ2VGcmFtZTo6
Y29weUJpdG1hcERhdGEoY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpCit2b2lkIEltYWdlRnJhbWU6
OnNldEJhY2tpbmdTdG9yZShjb25zdCBJbWFnZUJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKQog
ewotICAgIGlmICh0aGlzID09ICZvdGhlcikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBt
X2JhY2tpbmdTdG9yZSA9IG90aGVyLm1fYmFja2luZ1N0b3JlOwotICAgIG1fYnl0ZXMgPSBtX2Jh
Y2tpbmdTdG9yZS5kYXRhKCk7Ci0gICAgbV9zaXplID0gb3RoZXIubV9zaXplOwotICAgIHNldEhh
c0FscGhhKG90aGVyLm1faGFzQWxwaGEpOwotICAgIHJldHVybiB0cnVlOworICAgIGlmIChiYWNr
aW5nU3RvcmUgPT0gbV9iYWNraW5nU3RvcmUpCisgICAgICAgIHJldHVybjsKKyAgICBtX2JhY2tp
bmdTdG9yZSA9IGJhY2tpbmdTdG9yZSA/IEltYWdlQmFja2luZ1N0b3JlOjpjcmVhdGUoKmJhY2tp
bmdTdG9yZSkgOiBudWxscHRyOwogfQogCiBib29sIEltYWdlRnJhbWU6OnNldFNpemUoaW50IG5l
d1dpZHRoLCBpbnQgbmV3SGVpZ2h0KQogewotICAgIEFTU0VSVCghd2lkdGgoKSAmJiAhaGVpZ2h0
KCkpOwotICAgIHNpemVfdCBiYWNraW5nU3RvcmVTaXplID0gbmV3V2lkdGggKiBuZXdIZWlnaHQ7
Ci0gICAgaWYgKCFtX2JhY2tpbmdTdG9yZS50cnlSZXNlcnZlQ2FwYWNpdHkoYmFja2luZ1N0b3Jl
U2l6ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2JhY2tpbmdTdG9yZS5yZXNpemUo
YmFja2luZ1N0b3JlU2l6ZSk7Ci0gICAgbV9ieXRlcyA9IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsK
LSAgICBtX3NpemUgPSBJbnRTaXplKG5ld1dpZHRoLCBuZXdIZWlnaHQpOwotCi0gICAgemVyb0Zp
bGxQaXhlbERhdGEoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBBU1NFUlQoIW1fYmFja2luZ1N0
b3JlKTsKKyAgICBtX2JhY2tpbmdTdG9yZSA9IEltYWdlQmFja2luZ1N0b3JlOjpjcmVhdGUoSW50
U2l6ZShuZXdXaWR0aCwgbmV3SGVpZ2h0KSwgbV9wcmVtdWx0aXBseUFscGhhKTsKKyAgICByZXR1
cm4gbV9iYWNraW5nU3RvcmU7CiB9CiAKIGJvb2wgSW1hZ2VGcmFtZTo6aGFzQWxwaGEoKSBjb25z
dApAQCAtMjIwLDYgKzE5OSwxMiBAQCB2b2lkIEltYWdlRnJhbWU6OnNldEhhc0FscGhhKGJvb2wg
YWxwaGEpCiAgICAgbV9oYXNBbHBoYSA9IGFscGhhOwogfQogCit2b2lkIHNldE9yaWdpbmFsRnJh
bWVSZWN0KGNvbnN0IEludFJlY3QmIGZyYW1lUmVjdCkKK3sKKyAgICBpZiAobV9iYWNraW5nU3Rv
cmUpCisgICAgICAgIG1fYmFja2luZ1N0b3JlLT5zZXRGcmFtZVJlY3QoZnJhbWVSZWN0KTsKK30K
Kwogdm9pZCBJbWFnZUZyYW1lOjpzZXRTdGF0dXMoRnJhbWVTdGF0dXMgc3RhdHVzKQogewogICAg
IG1fc3RhdHVzID0gc3RhdHVzOwpAQCAtMjg2LDcgKzI3MSw3IEBAIHVuc2lnbmVkIEltYWdlRGVj
b2Rlcjo6ZnJhbWVCeXRlc0F0SW5kZXgKICAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUo
KSA8PSBpbmRleCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgLy8gRklYTUU6IFVzZSB0aGUgZGlt
ZW5zaW9uIG9mIHRoZSByZXF1ZXN0ZWQgZnJhbWUuCi0gICAgcmV0dXJuIG1fc2l6ZS5hcmVhKCkg
KiBzaXplb2YoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKTsKKyAgICByZXR1cm4gbV9zaXplLmFyZWEo
KSAqIHNpemVvZihSR0JBMzIpOwogfQogCiBmbG9hdCBJbWFnZURlY29kZXI6OmZyYW1lRHVyYXRp
b25BdEluZGV4KHNpemVfdCBpbmRleCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAyMDU2ODQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNp
bmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW1hZ2VCYWNraW5nU3RvcmUuaCIKICNpbmNs
dWRlICJJbWFnZVNvdXJjZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRT
aXplLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKICNpbmNsdWRlICJTaGFyZWRCdWZm
ZXIuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtNTcsNyArNTksNiBAQCB1c2lu
ZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hhcj47CiAgICAgICAgICAgICBEaXNwb3NlT3Zlcndy
aXRlUHJldmlvdXMgIC8vIENsZWFyIGZyYW1lIHRvIHByZXZpb3VzIGZyYW1lYnVmZmVyCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRlbnRzCiAgICAgICAgIH07
Ci0gICAgICAgIHR5cGVkZWYgdW5zaWduZWQgUGl4ZWxEYXRhOwogCiAgICAgICAgIEltYWdlRnJh
bWUoKTsKIApAQCAtNzIsMTUyICs3Myw2OSBAQCB1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8
Y2hhcj47CiAgICAgICAgIHZvaWQgemVyb0ZpbGxQaXhlbERhdGEoKTsKICAgICAgICAgdm9pZCB6
ZXJvRmlsbEZyYW1lUmVjdChjb25zdCBJbnRSZWN0Jik7CiAKLSAgICAgICAgLy8gTWFrZXMgdGhp
cyBmcmFtZSBoYXZlIGFuIGluZGVwZW5kZW50IGNvcHkgb2YgdGhlIHByb3ZpZGVkIGltYWdlJ3MK
LSAgICAgICAgLy8gcGl4ZWwgZGF0YSwgc28gdGhhdCBtb2RpZmljYXRpb25zIGluIG9uZSBmcmFt
ZSBhcmUgbm90IHJlZmxlY3RlZCBpbgotICAgICAgICAvLyB0aGUgb3RoZXIuICBSZXR1cm5zIHdo
ZXRoZXIgdGhlIGNvcHkgc3VjY2VlZGVkLgotICAgICAgICBib29sIGNvcHlCaXRtYXBEYXRhKGNv
bnN0IEltYWdlRnJhbWUmKTsKLQogICAgICAgICAvLyBDb3BpZXMgdGhlIHBpeGVsIGRhdGEgYXQg
WyhzdGFydFgsIHN0YXJ0WSksIChlbmRYLCBzdGFydFkpKSB0byB0aGUKICAgICAgICAgLy8gc2Ft
ZSBYLWNvb3JkaW5hdGVzIG9uIGVhY2ggc3Vic2VxdWVudCByb3cgdXAgdG8gYnV0IG5vdCBpbmNs
dWRpbmcKICAgICAgICAgLy8gZW5kWS4KICAgICAgICAgdm9pZCBjb3B5Um93TlRpbWVzKGludCBz
dGFydFgsIGludCBlbmRYLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKICAgICAgICAgewotICAgICAg
ICAgICAgQVNTRVJUKHN0YXJ0WCA8IHdpZHRoKCkpOwotICAgICAgICAgICAgQVNTRVJUKGVuZFgg
PD0gd2lkdGgoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhcnRZIDwgaGVpZ2h0KCkpOwotICAg
ICAgICAgICAgQVNTRVJUKGVuZFkgPD0gaGVpZ2h0KCkpOwotICAgICAgICAgICAgY29uc3QgaW50
IHJvd0J5dGVzID0gKGVuZFggLSBzdGFydFgpICogc2l6ZW9mKFBpeGVsRGF0YSk7Ci0gICAgICAg
ICAgICBjb25zdCBQaXhlbERhdGEqIGNvbnN0IHN0YXJ0QWRkciA9IGdldEFkZHIoc3RhcnRYLCBz
dGFydFkpOwotICAgICAgICAgICAgZm9yIChpbnQgZGVzdFkgPSBzdGFydFkgKyAxOyBkZXN0WSA8
IGVuZFk7ICsrZGVzdFkpCi0gICAgICAgICAgICAgICAgbWVtY3B5KGdldEFkZHIoc3RhcnRYLCBk
ZXN0WSksIHN0YXJ0QWRkciwgcm93Qnl0ZXMpOworICAgICAgICAgICAgbV9iYWNraW5nU3RvcmUt
PnJlcGVhdEZpcnN0Um93KEludFJlY3Qoc3RhcnRYLCBzdGFydFksIGVuZFggLXN0YXJ0WCAsIGVu
ZFkgLSBzdGFydFkpKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEFsbG9jYXRlcyBzcGFjZSBm
b3IgdGhlIHBpeGVsIGRhdGEuICBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IHBpeGVscwogICAg
ICAgICAvLyBhcmUgd3JpdHRlbi4gIE11c3Qgb25seSBiZSBjYWxsZWQgb25jZS4gIFJldHVybnMg
d2hldGhlciBhbGxvY2F0aW9uCiAgICAgICAgIC8vIHN1Y2NlZWRlZC4KLSAgICAgICAgYm9vbCBz
ZXRTaXplKGludCBuZXdXaWR0aCwgaW50IG5ld0hlaWdodCk7CisgICAgICAgIGJvb2wgc2V0U2l6
ZShjb25zdCBJbnRTaXplJiwgYm9vbCBwcmVtdWx0aXBseUFscGhhKTsKKyAgICAgICAgSW50U2l6
ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nU3RvcmUtPnNpemUoKTsgfQogCiAgICAg
ICAgIC8vIFJldHVybnMgYSBjYWxsZXItb3duZWQgcG9pbnRlciB0byB0aGUgdW5kZXJseWluZyBu
YXRpdmUgaW1hZ2UgZGF0YS4KICAgICAgICAgLy8gKEFjdHVhbCB1c2U6IFRoaXMgcG9pbnRlciB3
aWxsIGJlIG93bmVkIGJ5IEJpdG1hcEltYWdlIGFuZCBmcmVlZCBpbgogICAgICAgICAvLyBGcmFt
ZURhdGE6OmNsZWFyKCkpLgotICAgICAgICBOYXRpdmVJbWFnZVB0ciBhc05ld05hdGl2ZUltYWdl
KCkgY29uc3Q7CisgICAgICAgIE5hdGl2ZUltYWdlUHRyIGFzTmV3TmF0aXZlSW1hZ2UoKSBjb25z
dCB7IHJldHVybiBtX2JhY2tpbmdTdG9yZS0+aW1hZ2UoKTsgfQogCisgICAgICAgIGlubGluZSBJ
bWFnZUJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5n
U3RvcmUgPyBtX2JhY2tpbmdTdG9yZS5nZXQoKSA6IG51bGxwdHI7IH0KKyAgICAgICAgaW5saW5l
IGJvb2wgaGFzQmFja2luZ1N0b3JlKCkgY29uc3QgeyByZXR1cm4gYmFja2luZ1N0b3JlKCk7IH0K
KyAgICAgICAgCiAgICAgICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdDsKLSAgICAgICAgY29uc3Qg
SW50UmVjdCYgb3JpZ2luYWxGcmFtZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX29yaWdpbmFsRnJh
bWVSZWN0OyB9CisgICAgICAgIGNvbnN0IEludFJlY3QmIG9yaWdpbmFsRnJhbWVSZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9iYWNraW5nU3RvcmUgPyBtX2JhY2tpbmdTdG9yZS0+ZnJhbWVSZWN0KCkg
OiBJbnRSZWN0KCk7IH0KICAgICAgICAgRnJhbWVTdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0dXM7IH0KICAgICAgICAgdW5zaWduZWQgZHVyYXRpb24oKSBjb25zdCB7IHJldHVy
biBtX2R1cmF0aW9uOyB9CiAgICAgICAgIEZyYW1lRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRo
b2QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3Bvc2FsTWV0aG9kOyB9CiAgICAgICAgIGJvb2wgcHJl
bXVsdGlwbHlBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlbXVsdGlwbHlBbHBoYTsgfQogCisg
ICAgICAgIHZvaWQgc2V0QmFja2luZ1N0b3JlKGNvbnN0IEltYWdlQmFja2luZ1N0b3JlKik7Cisg
ICAgICAgIAogICAgICAgICB2b2lkIHNldEhhc0FscGhhKGJvb2wgYWxwaGEpOwotICAgICAgICB2
b2lkIHNldE9yaWdpbmFsRnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIHIpIHsgbV9vcmlnaW5hbEZy
YW1lUmVjdCA9IHI7IH0KKyAgICAgICAgdm9pZCBzZXRPcmlnaW5hbEZyYW1lUmVjdChjb25zdCBJ
bnRSZWN0Jik7CiAgICAgICAgIHZvaWQgc2V0U3RhdHVzKEZyYW1lU3RhdHVzIHN0YXR1cyk7CiAg
ICAgICAgIHZvaWQgc2V0RHVyYXRpb24odW5zaWduZWQgZHVyYXRpb24pIHsgbV9kdXJhdGlvbiA9
IGR1cmF0aW9uOyB9CiAgICAgICAgIHZvaWQgc2V0RGlzcG9zYWxNZXRob2QoRnJhbWVEaXNwb3Nh
bE1ldGhvZCBtZXRob2QpIHsgbV9kaXNwb3NhbE1ldGhvZCA9IG1ldGhvZDsgfQogICAgICAgICB2
b2lkIHNldFByZW11bHRpcGx5QWxwaGEoYm9vbCBwcmVtdWx0aXBseUFscGhhKSB7IG1fcHJlbXVs
dGlwbHlBbHBoYSA9IHByZW11bHRpcGx5QWxwaGE7IH0KIAotICAgICAgICBpbmxpbmUgdm9pZCBz
ZXRSR0JBKGludCB4LCBpbnQgeSwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwg
dW5zaWduZWQgYSkKKyAgICAgICAgaW5saW5lIFJHQkEzMiogZ2V0QWRkcihpbnQgeCwgaW50IHkp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHNldFJHQkEoZ2V0QWRkcih4LCB5KSwgciwgZywgYiwg
YSk7CisgICAgICAgICAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUtPmF0KHgsIHkpOwogICAgICAg
ICB9CiAKLSAgICAgICAgaW5saW5lIFBpeGVsRGF0YSogZ2V0QWRkcihpbnQgeCwgaW50IHkpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2J5dGVzICsgKHkgKiB3aWR0aCgpKSArIHg7
Ci0gICAgICAgIH0KLQotICAgICAgICBpbmxpbmUgYm9vbCBoYXNQaXhlbERhdGEoKSBjb25zdAot
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9ieXRlczsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIFVzZSBmaXggcG9pbnQgbXVsdGlwbGllciBpbnN0ZWFkIG9mIGludGVnZXIgZGl2aXNp
b24gb3IgZmxvYXRpbmcgcG9pbnQgbWF0aC4KLSAgICAgICAgLy8gVGhpcyBtdWx0aXBsZXIgcHJv
ZHVjZXMgZXhhY3RseSB0aGUgc2FtZSByZXN1bHQgZm9yIGFsbCB2YWx1ZXMgaW4gcmFuZ2UgMCAt
IDI1NS4KLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZpeFBvaW50U2hpZnQgPSAyNDsK
LSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZpeFBvaW50TXVsdCA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkPigxLjAgLyAyNTUuMCAqICgxIDw8IGZpeFBvaW50U2hpZnQpKSArIDE7Ci0gICAg
ICAgIC8vIE11bHRpcGxpZXMgdW5zaWduZWQgdmFsdWUgYnkgZml4cG9pbnQgdmFsdWUgYW5kIGNv
bnZlcnRzIGJhY2sgdG8gdW5zaWduZWQuCi0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmaXhQb2lu
dFVuc2lnbmVkTXVsdGlwbHkodW5zaWduZWQgZml4ZWQsIHVuc2lnbmVkIHYpCisgICAgICAgIGlu
bGluZSB2b2lkIHNldFJHQkEoaW50IHgsIGludCB5LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1
bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gIChm
aXhlZCAqIHYpID4+IGZpeFBvaW50U2hpZnQ7CisgICAgICAgICAgICBtX2JhY2tpbmdTdG9yZS0+
c2V0UkdCQSh4LCB5LCByLCBnLCBiLCBhKTsKICAgICAgICAgfQotCi0gICAgICAgIGlubGluZSB2
b2lkIHNldFJHQkEoUGl4ZWxEYXRhKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNp
Z25lZCBiLCB1bnNpZ25lZCBhKQorICAgICAgICAKKyAgICAgICAgaW5saW5lIHZvaWQgc2V0UkdC
QShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2ln
bmVkIGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX3ByZW11bHRpcGx5QWxwaGEgJiYg
YSA8IDI1NSkgewotICAgICAgICAgICAgICAgIGlmICghYSkgewotICAgICAgICAgICAgICAgICAg
ICAqZGVzdCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBhbHBoYU11bHQgPSBhICogZml4UG9pbnRN
dWx0OwotICAgICAgICAgICAgICAgIHIgPSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkociwgYWxw
aGFNdWx0KTsKLSAgICAgICAgICAgICAgICBnID0gZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KGcs
IGFscGhhTXVsdCk7Ci0gICAgICAgICAgICAgICAgYiA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBs
eShiLCBhbHBoYU11bHQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3QgPSAoYSA8
PCAyNCB8IHIgPDwgMTYgfCBnIDw8IDggfCBiKTsKKyAgICAgICAgICAgIG1fYmFja2luZ1N0b3Jl
LT5zZXRSR0JBKGRlc3QsIHIsIGcsIGIsIGEpOwogICAgICAgICB9CiAKICNpZiBFTkFCTEUoQVBO
RykKLSAgICAgICAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBkaXZpZGUyNTUodW5zaWduZWQgYSkK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIChhICsgKGEgPj4gOCkgKyAxKSA+PiA4Owot
ICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5lIHZvaWQgb3ZlclJHQkEoUGl4ZWxEYXRhKiBkZXN0
LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgICAg
ICBpbmxpbmUgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVk
IGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICgh
YSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmIChhIDwgMjU1KSB7
Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgYURlc3QgPSAoKCpkZXN0KSA+PiAyNCkgJiAyNTU7
Ci0gICAgICAgICAgICAgICAgaWYgKGFEZXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIHJEZXN0ID0gKCgqZGVzdCkgPj4gMTYpICYgMjU1OwotICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBnRGVzdCA9ICgoKmRlc3QpID4+IDgpICYgMjU1OwotICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBiRGVzdCA9ICgqZGVzdCkgJiAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGFBdXggPSAyNTUgLSBhOwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fcHJlbXVs
dGlwbHlBbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgckRlc3QgPSBkaXZpZGUyNTUo
ckRlc3QgKiBhRGVzdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnRGVzdCA9IGRpdmlkZTI1
NShnRGVzdCAqIGFEZXN0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJEZXN0ID0gZGl2aWRl
MjU1KGJEZXN0ICogYURlc3QpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgICAgIHIgPSBkaXZpZGUyNTUociAqIGEgKyByRGVzdCAqIGFBdXgpOwotICAgICAgICAgICAg
ICAgICAgICBnID0gZGl2aWRlMjU1KGcgKiBhICsgZ0Rlc3QgKiBhQXV4KTsKLSAgICAgICAgICAg
ICAgICAgICAgYiA9IGRpdmlkZTI1NShiICogYSArIGJEZXN0ICogYUF1eCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGEgKz0gZGl2aWRlMjU1KGFEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
ID0gKHIgKiAyNTUgKyBhIC0gMSkgLyBhOwotICAgICAgICAgICAgICAgICAgICAgICAgZyA9IChn
ICogMjU1ICsgYSAtIDEpIC8gYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGIgPSAoYiAqIDI1
NSArIGEgLSAxKSAvIGE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSkgewotICAgICAgICAgICAgICAgICAgICByID0g
ZGl2aWRlMjU1KHIgKiBhKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IGRpdmlkZTI1NShnICog
YSk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSBkaXZpZGUyNTUoYiAqIGEpOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpkZXN0ID0gKGEgPDwgMjQgfCBy
IDw8IDE2IHwgZyA8PCA4IHwgYik7CisgICAgICAgICAgICBtX2JhY2tpbmdTdG9yZS0+b3ZlclJH
QkEoZGVzdCwgciwgZywgYiwgYSk7CiAgICAgICAgIH0KICNlbmRpZgogCiAgICAgcHJpdmF0ZToK
LSAgICAgICAgaW50IHdpZHRoKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJu
IG1fc2l6ZS53aWR0aCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3NpemUuaGVpZ2h0KCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBWZWN0b3I8UGl4ZWxEYXRhPiBtX2JhY2tpbmdTdG9yZTsKLSAgICAgICAg
UGl4ZWxEYXRhKiBtX2J5dGVzOyAvLyBUaGUgbWVtb3J5IGlzIGJhY2tlZCBieSBtX2JhY2tpbmdT
dG9yZS4KLSAgICAgICAgSW50U2l6ZSBtX3NpemU7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJ
bWFnZUJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CiAgICAgICAgIGJvb2wgbV9oYXNBbHBo
YTsKLSAgICAgICAgSW50UmVjdCBtX29yaWdpbmFsRnJhbWVSZWN0OyAvLyBUaGlzIHdpbGwgYWx3
YXlzIGp1c3QgYmUgdGhlIGVudGlyZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGJ1ZmZlciBleGNlcHQgZm9yIEdJRiBmcmFtZXMgd2hvc2UKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBvcmlnaW5hbCByZWN0IHdhcyBzbWFsbGVyIHRoYW4g
dGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3ZlcmFsbCBpbWFn
ZSBzaXplLgogICAgICAgICBGcmFtZVN0YXR1cyBtX3N0YXR1czsKICAgICAgICAgdW5zaWduZWQg
bV9kdXJhdGlvbjsKICAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBtX2Rpc3Bvc2FsTWV0aG9k
OwpAQCAtMjg3LDExICsyMDUsMTEgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+
OwogCiAgICAgICAgIC8vIFJldHVybnMgd2hldGhlciB0aGUgc2l6ZSBpcyBsZWdhbCAoaS5lLiBu
b3QgZ29pbmcgdG8gcmVzdWx0IGluCiAgICAgICAgIC8vIG92ZXJmbG93IGVsc2V3aGVyZSkuICBJ
ZiBub3QsIG1hcmtzIGRlY29kaW5nIGFzIGZhaWxlZC4KLSAgICAgICAgdmlydHVhbCBib29sIHNl
dFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKKyAgICAgICAgdmlydHVhbCBi
b29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICAgICAgewotICAgICAgICAgICAg
aWYgKGlzT3ZlclNpemUod2lkdGgsIGhlaWdodCkpCisgICAgICAgICAgICBpZiAoSW1hZ2VCYWNr
aW5nU3RvcmU6OmlzT3ZlclNpemUoc2l6ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEZh
aWxlZCgpOwotICAgICAgICAgICAgbV9zaXplID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAg
ICAgICAgICAgIG1fc2l6ZSA9IHNpemU7CiAgICAgICAgICAgICBtX3NpemVBdmFpbGFibGUgPSB0
cnVlOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTM4NiwxNSArMzA0
LDYgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICBJbWFnZU9y
aWVudGF0aW9uIG1fb3JpZW50YXRpb247CiAKICAgICBwcml2YXRlOgotICAgICAgICAvLyBTb21l
IGNvZGUgcGF0aHMgY29tcHV0ZSB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UgYXMgIndpZHRoICogaGVp
Z2h0ICogNCIKLSAgICAgICAgLy8gYW5kIHJldHVybiBpdCBhcyBhIChzaWduZWQpIGludC4gIEF2
b2lkIG92ZXJmbG93LgotICAgICAgICBzdGF0aWMgYm9vbCBpc092ZXJTaXplKHVuc2lnbmVkIHdp
ZHRoLCB1bnNpZ25lZCBoZWlnaHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxv
bmcgbG9uZyB0b3RhbF9zaXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPih3aWR0
aCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc3RhdGljX2Nh
c3Q8dW5zaWduZWQgbG9uZyBsb25nPihoZWlnaHQpOwotICAgICAgICAgICAgcmV0dXJuIHRvdGFs
X3NpemUgPiAoKDEgPDwgMjkpIC0gMSk7Ci0gICAgICAgIH0KLQogICAgICAgICBJbnRTaXplIG1f
c2l6ZTsKICAgICAgICAgYm9vbCBtX3NpemVBdmFpbGFibGUgeyBmYWxzZSB9OwogI2lmIEVOQUJM
RShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRl
ci5jcHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDkg
Kzg2LDYgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6ZGVjb2RlQk1QKGJvb2wgb25seQogICAgICAg
ICAvLyB0aGVzZSAwcyBjb3VsZCBhY3R1YWxseSBzaG93IHRocm91Z2guCiAgICAgICAgIG1fYnVm
ZmVyLT5zZXRIYXNBbHBoYShmYWxzZSk7CiAKLSAgICAgICAgLy8gRm9yIEJNUHMsIHRoZSBmcmFt
ZSBhbHdheXMgZmlsbHMgdGhlIGVudGlyZSBpbWFnZS4KLSAgICAgICAgbV9idWZmZXItPnNldE9y
aWdpbmFsRnJhbWVSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgbV9wYXJlbnQtPnNpemUoKSkpOwot
CiAgICAgICAgIGlmICghbV9pc1RvcERvd24pCiAgICAgICAgICAgICBtX2Nvb3JkLnNldFkobV9w
YXJlbnQtPnNpemUoKS5oZWlnaHQoKSAtIDEpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3JlQ2Fpcm8uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2Nh
aXJvL0ltYWdlQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3JlQ2Fp
cm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJJbWFnZUJhY2tpbmdTdG9yZS5oIgorCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJhY2tpbmdTdG9yZTo6aW1hZ2Uo
KSBjb25zdAoreworICAgIHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0
ZV9mb3JfZGF0YSgKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oY29u
c3RfY2FzdDxSR0JBMzIqPihtX3BpeGVsc1B0cikpLAorICAgICAgICBDQUlST19GT1JNQVRfQVJH
QjMyLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpLCBzaXplKCkud2lkdGgoKSAqIHNp
emVvZihSR0JBMzIpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dp
Zi9HSUZJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjEzLDEwICsyMTMsMTAgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmhhdmVE
ZWNvZGVkUm93KHVucwogCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgaWYgbmVjZXNzYXJ5
LgogICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4
XTsKLSAgICBpZiAoKChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkg
JiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkgfHwgIWJ1ZmZlci5oYXNQaXhlbERhdGEo
KSkKKyAgICBpZiAoKChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkg
JiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkgfHwgIWJ1ZmZlci5oYXNCYWNraW5nU3Rv
cmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRh
KiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHhCZWdpbiwgeUJlZ2luKTsKKyAgICBS
R0JBMzIqIGN1cnJlbnRBZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoeEJlZ2luLCB5QmVnaW4pOwog
ICAgIC8vIFdyaXRlIG9uZSByb3cncyB3b3J0aCBvZiBkYXRhIGludG8gdGhlIGZyYW1lLiAgCiAg
ICAgZm9yIChpbnQgeCA9IHhCZWdpbjsgeCA8IHhFbmQ7ICsreCkgewogICAgICAgICBjb25zdCB1
bnNpZ25lZCBjaGFyIHNvdXJjZVZhbHVlID0gcm93QnVmZmVyWyhtX3NjYWxlZCA/IG1fc2NhbGVk
Q29sdW1uc1t4XSA6IHgpIC0gZnJhbWVDb250ZXh0LT54T2Zmc2V0XTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBl
Zy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTUxLDcgKzU1MSw3IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6c2V0
RmFpbGVkKCkKIH0KIAogdGVtcGxhdGUgPEpfQ09MT1JfU1BBQ0UgY29sb3JTcGFjZT4KLXZvaWQg
c2V0UGl4ZWwoSW1hZ2VGcmFtZSYgYnVmZmVyLCBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGN1cnJl
bnRBZGRyZXNzLCBKU0FNUEFSUkFZIHNhbXBsZXMsIGludCBjb2x1bW4pCit2b2lkIHNldFBpeGVs
KEltYWdlRnJhbWUmIGJ1ZmZlciwgUkdCQTMyKiBjdXJyZW50QWRkcmVzcywgSlNBTVBBUlJBWSBz
YW1wbGVzLCBpbnQgY29sdW1uKQogewogICAgIEpTQU1QTEUqIGpzYW1wbGUgPSAqc2FtcGxlcyAr
IGNvbHVtbiAqIChjb2xvclNwYWNlID09IEpDU19SR0IgPyAzIDogNCk7CiAKQEAgLTU5NCw3ICs1
OTQsNyBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcyhJCiAgICAgICAg
IGlmIChkZXN0WSA8IDApCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBJbWFnZUZy
YW1lOjpQaXhlbERhdGEqIGN1cnJlbnRBZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoMCwgZGVzdFkp
OworICAgICAgICBSR0JBMzIqIGN1cnJlbnRBZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoMCwgZGVz
dFkpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKICAgICAgICAg
ICAgIHNldFBpeGVsPGNvbG9yU3BhY2U+KGJ1ZmZlciwgY3VycmVudEFkZHJlc3MsIHNhbXBsZXMs
IGlzU2NhbGVkID8gbV9zY2FsZWRDb2x1bW5zW3hdIDogeCk7CiAgICAgICAgICAgICArK2N1cnJl
bnRBZGRyZXNzOwpAQCAtNjIzLDkgKzYyMyw2IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0
cHV0U2NhbmxpbmVzKCkKICAgICAgICAgLy8gVGhlIGJ1ZmZlciBpcyB0cmFuc3BhcmVudCBvdXRz
aWRlIHRoZSBkZWNvZGVkIGFyZWEgd2hpbGUgdGhlIGltYWdlIGlzCiAgICAgICAgIC8vIGxvYWRp
bmcuIFRoZSBjb21wbGV0ZWQgaW1hZ2Ugd2lsbCBiZSBtYXJrZWQgZnVsbHkgb3BhcXVlIGluIGpw
ZWdDb21wbGV0ZSgpLgogICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEodHJ1ZSk7Ci0KLSAgICAg
ICAgLy8gRm9yIEpQRUdzLCB0aGUgZnJhbWUgYWx3YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2Uu
Ci0gICAgICAgIGJ1ZmZlci5zZXRPcmlnaW5hbEZyYW1lUmVjdChJbnRSZWN0KEludFBvaW50KCks
IHNpemUoKSkpOwogICAgIH0KIAogICAgIGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QqIGluZm8gPSBt
X3JlYWRlci0+aW5mbygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAJKHJldmlz
aW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Bu
Zy9QTkdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTEsMTkgKzQxMSwxOSBA
QCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKICAgICB9CiB9CiAKLXN0
YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJHQihJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGRlc3Qs
IHBuZ19ieXRlcCBwaXhlbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJHQihSR0JBMzIq
IGRlc3QsIHBuZ19ieXRlcCBwaXhlbCkKIHsKICAgICAqZGVzdCA9IDB4RkYwMDAwMDBVIHwgcGl4
ZWxbMF0gPDwgMTYgfCBwaXhlbFsxXSA8PCA4IHwgcGl4ZWxbMl07CiB9CiAKLXN0YXRpYyBpbmxp
bmUgdm9pZCBzZXRQaXhlbFJHQkEoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBkZXN0LCBwbmdfYnl0
ZXAgcGl4ZWwsIHVuc2lnbmVkIGNoYXImIG5vblRyaXZpYWxBbHBoYU1hc2spCitzdGF0aWMgaW5s
aW5lIHZvaWQgc2V0UGl4ZWxSR0JBKFJHQkEzMiogZGVzdCwgcG5nX2J5dGVwIHBpeGVsLCB1bnNp
Z25lZCBjaGFyJiBub25Ucml2aWFsQWxwaGFNYXNrKQogewogICAgIHVuc2lnbmVkIGNoYXIgYSA9
IHBpeGVsWzNdOwogICAgICpkZXN0ID0gYSA8PCAyNCB8IHBpeGVsWzBdIDw8IDE2IHwgcGl4ZWxb
MV0gPDwgOCB8IHBpeGVsWzJdOwogICAgIG5vblRyaXZpYWxBbHBoYU1hc2sgfD0gKDI1NSAtIGEp
OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxQcmVtdWx0aXBsaWVkUkdCQShJbWFn
ZUZyYW1lOjpQaXhlbERhdGEqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCwgdW5zaWduZWQgY2hhciYg
bm9uVHJpdmlhbEFscGhhTWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFByZW11bHRp
cGxpZWRSR0JBKFJHQkEzMiogZGVzdCwgcG5nX2J5dGVwIHBpeGVsLCB1bnNpZ25lZCBjaGFyJiBu
b25Ucml2aWFsQWxwaGFNYXNrKQogewogICAgIHVuc2lnbmVkIGNoYXIgYSA9IHBpeGVsWzNdOwog
ICAgIHVuc2lnbmVkIGNoYXIgciA9IGZhc3REaXZpZGVCeTI1NShwaXhlbFswXSAqIGEpOwpAQCAt
NDcxLDggKzQ3MSw2IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWcK
ICAgICAgICAgICAgIGluaXRGcmFtZUJ1ZmZlcihtX2N1cnJlbnRGcmFtZSk7CiAgICAgICAgIGVs
c2UKICNlbmRpZgotICAgICAgICAvLyBGb3IgUE5HcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0
aGUgZW50aXJlIGltYWdlLgotICAgICAgICBidWZmZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50
UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKTsKICAgICB9CiAKICAgICAvKiBsaWJwbmcgY29tbWVu
dHMgKGhlcmUgdG8gZXhwbGFpbiB3aGF0IGZvbGxvd3MpLgpAQCAtNTMxLDcgKzUyOSw3IEBAIHZv
aWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWcKICAgICB9CiAKICAgICAvLyBX
cml0ZSB0aGUgZGVjb2RlZCByb3cgcGl4ZWxzIHRvIHRoZSBmcmFtZSBidWZmZXIuCi0gICAgSW1h
Z2VGcmFtZTo6UGl4ZWxEYXRhKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoMCwgeSk7CisgICAg
UkdCQTMyKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoMCwgeSk7CiAgICAgaW50IHdpZHRoID0g
c2NhbGVkU2l6ZSgpLndpZHRoKCk7CiAgICAgdW5zaWduZWQgY2hhciBub25Ucml2aWFsQWxwaGFN
YXNrID0gMDsKIApAQCAtODU0LDcgKzg1Miw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpmcmFt
ZUNvbXBsZXRlKCkKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQogICAg
ICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHJlY3QubWF4WSgpIC0gcmVjdC55KCk7ICsreSkgewog
ICAgICAgICAgICAgcG5nX2J5dGVwIHJvdyA9IGludGVybGFjZUJ1ZmZlciArIChtX3NjYWxlZCA/
IG1fc2NhbGVkUm93c1t5XSA6IHkpICogY29sb3JDaGFubmVscyAqIHNpemUoKS53aWR0aCgpOwot
ICAgICAgICAgICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBhZGRyZXNzID0gYnVmZmVyLmdldEFk
ZHIocmVjdC54KCksIHkgKyByZWN0LnkoKSk7CisgICAgICAgICAgICBSR0JBMzIqIGFkZHJlc3Mg
PSBidWZmZXIuZ2V0QWRkcihyZWN0LngoKSwgeSArIHJlY3QueSgpKTsKICAgICAgICAgICAgIGZv
ciAoaW50IHggPSAwOyB4IDwgcmVjdC5tYXhYKCkgLSByZWN0LngoKTsgKyt4KSB7CiAgICAgICAg
ICAgICAgICAgcG5nX2J5dGVwIHBpeGVsID0gcm93ICsgKG1fc2NhbGVkID8gbV9zY2FsZWRDb2x1
bW5zW3hdIDogeCkgKiBjb2xvckNoYW5uZWxzOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFs
cGhhID0gaGFzQWxwaGEgPyBwaXhlbFszXSA6IDI1NTsKQEAgLTg3MCw3ICs4NjgsNyBAQCB2b2lk
IFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAgICAgICAgIHBuZ19ieXRlcCByb3cg
PSBpbnRlcmxhY2VCdWZmZXI7CiAgICAgICAgIGZvciAoaW50IHkgPSByZWN0LnkoKTsgeSA8IHJl
Y3QubWF4WSgpOyArK3ksIHJvdyArPSBjb2xvckNoYW5uZWxzICogc2l6ZSgpLndpZHRoKCkpIHsK
ICAgICAgICAgICAgIHBuZ19ieXRlcCBwaXhlbCA9IHJvdzsKLSAgICAgICAgICAgIEltYWdlRnJh
bWU6OlBpeGVsRGF0YSogYWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHJlY3QueCgpLCB5KTsKKyAg
ICAgICAgICAgIFJHQkEzMiogYWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHJlY3QueCgpLCB5KTsK
ICAgICAgICAgICAgIGZvciAoaW50IHggPSByZWN0LngoKTsgeCA8IHJlY3QubWF4WCgpOyArK3gs
IHBpeGVsICs9IGNvbG9yQ2hhbm5lbHMpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhbHBo
YSA9IGhhc0FscGhhID8gcGl4ZWxbM10gOiAyNTU7CiAgICAgICAgICAgICAgICAgbm9uVHJpdmlh
bEFscGhhIHw9IGFscGhhIDwgMjU1OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIu
Y3BwCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIs
MTQgKzEzMiwxMyBAQCBib29sIFdFQlBJbWFnZURlY29kZXI6OmRlY29kZShib29sIG9ubHlTCiAg
ICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMo
SW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKG1f
aGFzQWxwaGEpOwotICAgICAgICBidWZmZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJ
bnRQb2ludCgpLCBzaXplKCkpKTsKICAgICB9CiAKICAgICBpZiAoIW1fZGVjb2RlcikgewogICAg
ICAgICBXRUJQX0NTUF9NT0RFIG1vZGUgPSBvdXRwdXRNb2RlKG1faGFzQWxwaGEpOwogICAgICAg
ICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkKICAgICAgICAgICAgIG1vZGUgPSBvdXRwdXRNb2Rl
KGZhbHNlKTsKLSAgICAgICAgaW50IHJvd1N0cmlkZSA9IHNpemUoKS53aWR0aCgpICogc2l6ZW9m
KEltYWdlRnJhbWU6OlBpeGVsRGF0YSk7CisgICAgICAgIGludCByb3dTdHJpZGUgPSBzaXplKCku
d2lkdGgoKSAqIHNpemVvZihSR0JBMzIpOwogICAgICAgICB1aW50OF90KiBvdXRwdXQgPSByZWlu
dGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIuZ2V0QWRkcigwLCAwKSk7CiAgICAgICAgIGlu
dCBvdXRwdXRTaXplID0gc2l6ZSgpLmhlaWdodCgpICogcm93U3RyaWRlOwogICAgICAgICBtX2Rl
Y29kZXIgPSBXZWJQSU5ld1JHQihtb2RlLCBvdXRwdXQsIG91dHB1dFNpemUsIHJvd1N0cmlkZSk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288429</attachid>
            <date>2016-09-09 12:37:50 -0700</date>
            <delta_ts>2016-09-09 16:17:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159679-20160909123522.patch</filename>
            <type>text/plain</type>
            <size>43945</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTc1NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg5IEBACisyMDE2LTA5LTA5ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSB0aGUg
cGl4ZWwgZGF0YSBvZiBJbWFnZUZyYW1lIHRvIGEgc2VwYXJhdGUgY2xhc3MgbmFtZWQgSW1hZ2VC
YWNraW5nU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1OTY3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE1vdmUgdGhlIHBpeGVsIGRhdGEgbWFuaXB1bGF0aW9uIHBhcnQgaW4gSW1hZ2VGcmFtZSBp
bnRvIGEgc2VwYXJhdGUgY2xhc3MKKyAgICAgICAgYW5kIGFsbG9jYXRlIGl0IG9uIGRlbWFuZC4K
KyAKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5j
bWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbkNhaXJvLmNtYWtlOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2hhbm5lbCk6Cisg
ICAgICAgIChXZWJDb3JlOjp1bnByZW11bHRpcGxpZWRDaGFubmVsKToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VQcmVtdWx0aXBsaWVkUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlVW5QcmVt
dWx0aXBsaWVkUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpjb2xvckZyb21QcmVtdWx0aXBsaWVk
QVJHQik6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OmZh
c3RNdWx0aXBseUJ5MjU1KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tp
bmdTdG9yZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OkltYWdlQmFja2lu
Z1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRGcmFtZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OnNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCYWNraW5nU3RvcmU6OmZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJhY2tpbmdTdG9yZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3Rv
cmU6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJhY2tpbmdTdG9yZTo6cmVw
ZWF0Rmlyc3RSb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OmF0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRSR0JBKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpvdmVyUkdCQSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJhY2tpbmdTdG9yZTo6aW5Cb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
YWNraW5nU3RvcmU6OmlzT3ZlclNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L05hdGl2ZUltYWdlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmF0aXZlSW1hZ2VIYXNBbHBo
YSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojp6ZXJvRmlsbEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRC
YWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRPcmlnaW5hbEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6OmNvcHlSb3dOVGltZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjphc05ld05hdGl2ZUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpoYXNCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZTo6b3JpZ2luYWxGcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
Z2V0QWRkcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRSR0JBKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om92ZXJSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2Rlcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRP
cmlnaW5hbEZyYW1lUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
OjpoYXNQaXhlbERhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
Zml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWU6OmRpdmlkZTI1NSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjp3aWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpoZWln
aHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjppc092ZXJTaXpl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1h
Z2VSZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6OmRlY29kZUJN
UCk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VCYWNraW5n
U3RvcmVDYWlyby5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3Rv
cmU6OmltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1h
Z2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6aGF2ZURl
Y29kZWRSb3cpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0lt
YWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhlbCk6CisgICAgICAgIChX
ZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMpOgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6c2V0UGl4ZWxSR0IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxSR0JBKToK
KyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVsUHJlbXVsdGlwbGllZFJHQkEpOgorICAgICAgICAo
V2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6V0VCUEltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKwogMjAxNi0wOS0wOSAgQnJhZHkgRWlkc29u
ICA8YmVpZHNvbkBhcHBsZS5jb20+CiAKICAgICAgICAgU29mdC1saW5rIEdhbWVDb250cm9sbGVy
LmZyYW1ld29yay4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCShyZXZpc2lvbiAyMDU2
ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQkod29ya2luZyBjb3B5KQpA
QCAtMTgzLDEwICsxODMsOSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3gxMS9YVW5pcXVlUmVzb3VyY2UuY3BwCiAKKyAgICBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9JbWFnZUJhY2tpbmdTdG9yZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2ltYWdl
LWVuY29kZXJzL0pQRUdJbWFnZUVuY29kZXIuY3BwCiAKLSAgICBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKLQogICAgIHBsYXRmb3JtL25ldHdvcmsv
ZWZsL05ldHdvcmtTdGF0ZU5vdGlmaWVyRWZsLmNwcAogCiAgICAgcGxhdGZvcm0vbmV0d29yay9z
b3VwL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU291cC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtR1RLLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
R1RLLmNtYWtlCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdU
Sy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTU1LDcgKzE1NSw3IEBAIGxpc3QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCiAg
ICAgcGxhdGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5jcHAKIAotICAgIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCiAKICAgICBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9ndGsvU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2VHdGsuY3BwCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQkocmV2aXNpb24gMjA1Njg0KQorKysg
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAt
NDYsNyArNDYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAogCi0gICAgcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCisgICAgcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VCYWNraW5nU3RvcmVDYWlyby5jcHAKIAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU3R1Yi5jcHAKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMjc1LDYgKzIyNzUsNyBAQAogCQk1
NTVCODdFQzFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU1Qjg3RUExQ0FBRjBBQjAwMzQ5
NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLzsgfTsKIAkJNTU1Qjg3RUQxQ0FBRjBBQjAwMzQ5
NDI1IC8qIEltYWdlRGVjb2RlckNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cu
aCAqLzsgfTsKIAkJNTVBMzM2RjcxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUEzMzZGNjFEODIw
OUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLzsgfTsKKwkJNTVBMzM2RjkxRDgyMUUzQzAw
MjJDNEM3IC8qIEltYWdlQmFja2luZ1N0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NUEzMzZGODFEODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNr
aW5nU3RvcmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1NzA5RThDRDFENDEzRDQ3MDAzMjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5cHRvLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MDlFOENBMUQ0
MTNDRTMwMDMyNDRBQyAvKiBXZWJLaXRTdWJ0bGVDcnlwdG8uY3BwICovOyB9OwogCQk1NzA5RThD
RTFENDEzRDVCMDAzMjQ0QUMgLyogSlNXZWJLaXRTdWJ0bGVDcnlwdG9DdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFGRjhGNjYxODA3NDYw
ODAwMTMyNjc0IC8qIEpTV2ViS2l0U3VidGxlQ3J5cHRvQ3VzdG9tLmNwcCAqLzsgfTsKIAkJNTcw
OUU4Q0YxRDQxM0Q5QTAwMzI0NEFDIC8qIFdlYktpdFN1YnRsZUNyeXB0by5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcwOUU4Q0IxRDQxM0NFMzAwMzI0
NEFDIC8qIFdlYktpdFN1YnRsZUNyeXB0by5oICovOyB9OwpAQCAtOTI5MSw2ICs5MjkyLDcgQEAK
IAkJNTU1Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdl
RGVjb2RlckNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlRGVjb2Rl
ckNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1QTMzNkY2MUQ4MjA5RjQwMDIy
QzRDNyAvKiBOYXRpdmVJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBO
YXRpdmVJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NUEzMzZGODFEODIx
RTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW1hZ2VCYWNraW5nU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTVENDA4RjcxQTdDNjMxODAwQzc4NDUwIC8qIFNWR0ltYWdlQ2xpZW50cy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdJbWFnZUNsaWVudHMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcwOUU4Q0ExRDQxM0NFMzAwMzI0NEFDIC8qIFdlYktpdFN1
YnRsZUNyeXB0by5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJL
aXRTdWJ0bGVDcnlwdG8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzA5RThD
QjFENDEzQ0UzMDAzMjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5cHRvLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdFN1YnRsZUNyeXB0by5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjA3NjksNiArMjA3NzEsNyBAQAogCQkJCTM3OTkxOTk0MTIwMERERjQw
MEVBMDQxQyAvKiBXT0ZGRmlsZUZvcm1hdC5jcHAgKi8sCiAJCQkJMzc5OTE5OTUxMjAwRERGNDAw
RUEwNDFDIC8qIFdPRkZGaWxlRm9ybWF0LmggKi8sCiAJCQkJNTVBMzM2RjYxRDgyMDlGNDAwMjJD
NEM3IC8qIE5hdGl2ZUltYWdlLmggKi8sCisJCQkJNTVBMzM2RjgxRDgyMUUzQzAwMjJDNEM3IC8q
IEltYWdlQmFja2luZ1N0b3JlLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGdyYXBoaWNzOwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI2MzM5LDYgKzI2MzQyLDcgQEAKIAkJCQk1ODJD
QjA1MzFBNzhBMTRCMDBBRkZDQzQgLyogU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNUExRUE3RDE1MkJDRjA4MDA0RDAwQjYgLyogU2lt
cGxpZnlNYXJrdXBDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzJBN0YyMTFDNkU1NzE5
MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTU1QTMzNkY5
MUQ4MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzE3NDFBQUQxNjYzNjYwOTAwOEE1QjdFIC8qIFNpbXVsYXRlZENsaWNrT3B0aW9ucy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkQwMEQ3QTUxNEEzRjYxOTAwNzM0MDExIC8qIFNpbmNSZXNhbXBs
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMzI3RDYwMTFBMzNBMkIwMDRGOUQ2NSAvKiBTaW5r
RG9jdW1lbnQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSwx
NiBAQCBjb25zdCBSR0JBMzIgQ29sb3I6OnRyYW5zcGFyZW50Owogc3RhdGljIGNvbnN0IFJHQkEz
MiBsaWdodGVuZWRCbGFjayA9IDB4RkY1NDU0NTQ7CiBzdGF0aWMgY29uc3QgUkdCQTMyIGRhcmtl
bmVkV2hpdGUgPSAweEZGQUJBQkFCOwogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHByZW11bHRp
cGxpZWRDaGFubmVsKHVuc2lnbmVkIGMsIHVuc2lnbmVkIGEpCit7CisgICAgcmV0dXJuIGZhc3RE
aXZpZGVCeTI1NShjICogYSArIDI1NCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgdW5w
cmVtdWx0aXBsaWVkQ2hhbm5lbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBhKQoreworICAgIHJldHVy
biAoZmFzdE11bHRpcGx5QnkyNTUoYykgKyBhIC0gMSkgLyBhOworfQorCiBSR0JBMzIgbWFrZVJH
QihpbnQgciwgaW50IGcsIGludCBiKQogewogICAgIHJldHVybiAweEZGMDAwMDAwIHwgc3RkOjpt
YXgoMCwgc3RkOjptaW4ociwgMjU1KSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAy
NTUpKSA8PCA4IHwgc3RkOjptYXgoMCwgc3RkOjptaW4oYiwgMjU1KSk7CkBAIC01OSw2ICs2OSwx
NiBAQCBSR0JBMzIgbWFrZVJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50CiAgICAgcmV0dXJu
IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGEsIDI1NSkpIDw8IDI0IHwgc3RkOjptYXgoMCwgc3RkOjpt
aW4ociwgMjU1KSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAyNTUpKSA8PCA4IHwg
c3RkOjptYXgoMCwgc3RkOjptaW4oYiwgMjU1KSk7CiB9CiAKK1JHQkEzMiBtYWtlUHJlbXVsdGlw
bGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCit7CisgICAgcmV0dXJuIG1ha2VS
R0JBKHByZW11bHRpcGxpZWRDaGFubmVsKHIsIGEpLCBwcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBh
KSwgcHJlbXVsdGlwbGllZENoYW5uZWwoYiwgYSksIGEpOworfQorCitSR0JBMzIgbWFrZVVuUHJl
bXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCit7CisgICAgcmV0dXJu
IG1ha2VSR0JBKHVucHJlbXVsdGlwbGllZENoYW5uZWwociwgYSksIHVucHJlbXVsdGlwbGllZENo
YW5uZWwoZywgYSksIHVucHJlbXVsdGlwbGllZENoYW5uZWwoYiwgYSksIGEpOworfQorCiBzdGF0
aWMgaW50IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGZsb2F0IGYpCiB7CiAgICAgLy8gV2UgdXNlIGxy
b3VuZGYgYW5kIDI1NSBpbnN0ZWFkIG9mIG5leHRhZnRlcmYoMjU2LCAwKSB0byBtYXRjaCBDRydz
IHJvdW5kaW5nCkBAIC00ODIsMTQgKzUwMiw5IEBAIHZvaWQgQ29sb3I6OmdldEhTVihkb3VibGUm
IGh1ZSwgZG91YmxlJiAKIENvbG9yIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKFJHQkEzMiBw
aXhlbENvbG9yKQogewogICAgIGludCBhbHBoYSA9IGFscGhhQ2hhbm5lbChwaXhlbENvbG9yKTsK
LSAgICBpZiAoYWxwaGEgJiYgYWxwaGEgPCAyNTUpIHsKLSAgICAgICAgcmV0dXJuIENvbG9yOjpj
cmVhdGVVbmNoZWNrZWQoCi0gICAgICAgICAgICByZWRDaGFubmVsKHBpeGVsQ29sb3IpICogMjU1
IC8gYWxwaGEsCi0gICAgICAgICAgICBncmVlbkNoYW5uZWwocGl4ZWxDb2xvcikgKiAyNTUgLyBh
bHBoYSwKLSAgICAgICAgICAgIGJsdWVDaGFubmVsKHBpeGVsQ29sb3IpICogMjU1IC8gYWxwaGEs
Ci0gICAgICAgICAgICBhbHBoYSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBDb2xvcihw
aXhlbENvbG9yKTsKKyAgICBpZiAoYWxwaGEgJiYgYWxwaGEgPCAyNTUpCisgICAgICAgIHBpeGVs
Q29sb3IgPSBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShyZWRDaGFubmVsKHBpeGVsQ29sb3IpLCBn
cmVlbkNoYW5uZWwocGl4ZWxDb2xvciksIGJsdWVDaGFubmVsKHBpeGVsQ29sb3IpLCBhbHBoYSk7
CisgICAgcmV0dXJuIENvbG9yKHBpeGVsQ29sb3IpOwogfQogCiBSR0JBMzIgcHJlbXVsdGlwbGll
ZEFSR0JGcm9tQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpAQCAtNDk3LDE0ICs1MTIsMTAgQEAg
UkdCQTMyIHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKGNvbnN0IAogICAgIHVuc2lnbmVkIHBp
eGVsQ29sb3I7CiAKICAgICB1bnNpZ25lZCBhbHBoYSA9IGNvbG9yLmFscGhhKCk7Ci0gICAgaWYg
KGFscGhhIDwgMjU1KSB7Ci0gICAgICAgIHBpeGVsQ29sb3IgPSBDb2xvcjo6Y3JlYXRlVW5jaGVj
a2VkKAotICAgICAgICAgICAgZmFzdERpdmlkZUJ5MjU1KGNvbG9yLnJlZCgpICogYWxwaGEgKyAy
NTQpLAotICAgICAgICAgICAgZmFzdERpdmlkZUJ5MjU1KGNvbG9yLmdyZWVuKCkgKiBhbHBoYSAr
IDI1NCksCi0gICAgICAgICAgICBmYXN0RGl2aWRlQnkyNTUoY29sb3IuYmx1ZSgpICogYWxwaGEg
KyAyNTQpLAotICAgICAgICAgICAgYWxwaGEpLnJnYigpOwotICAgIH0gZWxzZQotICAgICAgICAg
cGl4ZWxDb2xvciA9IGNvbG9yLnJnYigpOworICAgIGlmIChhbHBoYSA8IDI1NSkKKyAgICAgICAg
cGl4ZWxDb2xvciA9IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShjb2xvci5yZWQoKSwgY29sb3IuZ3Jl
ZW4oKSwgY29sb3IuYmx1ZSgpLCBhbHBoYSk7CisgICAgZWxzZQorICAgICAgICBwaXhlbENvbG9y
ID0gY29sb3IucmdiKCk7CiAKICAgICByZXR1cm4gcGl4ZWxDb2xvcjsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjA1Njg0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5KQpA
QCAtNTUsNiArNTUsOSBAQCB0eXBlZGVmIHVuc2lnbmVkIFJHQkEzMjsgLy8gRGVwcmVjYXRlZDog
CiBXRUJDT1JFX0VYUE9SVCBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBiKTsKIFdF
QkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7
CiAKK1JHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50
IGEpOworUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIs
IGludCBhKTsKKwogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEo
UkdCQTMyIGNvbG9yLCBmbG9hdCBvdmVycmlkZUFscGhhKTsKIFdFQkNPUkVfRVhQT1JUIFJHQkEz
MiBjb2xvcldpdGhPdmVycmlkZUFscGhhKFJHQkEzMiBjb2xvciwgT3B0aW9uYWw8ZmxvYXQ+IG92
ZXJyaWRlQWxwaGEpOwogCkBAIC0yMTgsNiArMjIxLDcgQEAgQ29sb3IgYmxlbmQoY29uc3QgQ29s
b3ImIGZyb20sIGNvbnN0IENvbAogCiBpbnQgZGlmZmVyZW5jZVNxdWFyZWQoY29uc3QgQ29sb3Im
LCBjb25zdCBDb2xvciYpOwogCit1aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1aW50MTZfdCB2
YWx1ZSk7CiB1aW50MTZfdCBmYXN0RGl2aWRlQnkyNTUodWludDE2X3QpOwogCiAjaWYgVVNFKENH
KQpAQCAtMjkwLDYgKzI5NCwxMSBAQCBpbmxpbmUgdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JD
aGFubmVsCiAgICAgcmV0dXJuIHN0ZDo6bWF4KDAuZiwgc3RkOjptaW4oMjU1LmYsIHN0ZDo6cm91
bmQodmFsdWUpKSk7CiB9CiAKK2lubGluZSB1aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1aW50
MTZfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gKHZhbHVlIDw8IDgpIC0gdmFsdWU7Cit9CisKIGlu
bGluZSB1aW50MTZfdCBmYXN0RGl2aWRlQnkyNTUodWludDE2X3QgdmFsdWUpCiB7CiAgICAgLy8g
V2hpbGUgdGhpcyBpcyBhbiBhcHByb3hpbWF0ZSBhbGdvcml0aG0gZm9yIGRpdmlzaW9uIGJ5IDI1
NSwgaXQgZ2l2ZXMgcGVyZmVjdGx5IGFjY3VyYXRlIHJlc3VsdHMgZm9yIDE2LWJpdCB2YWx1ZXMu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9y
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QmFja2luZ1N0b3JlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgorCisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQmFja2lu
Z1N0b3JlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQmFja2lu
Z1N0b3JlPiBjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhh
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8SW1hZ2VCYWNraW5nU3Rv
cmU+KHNpemUsIHByZW11bHRpcGx5QWxwaGEpOworICAgIH0KKworICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCYWNraW5nU3RvcmU+IGNyZWF0ZShjb25zdCBJbWFnZUJhY2tpbmdTdG9y
ZSYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxJbWFnZUJh
Y2tpbmdTdG9yZT4ob3RoZXIpOworICAgIH0KKworICAgIEltYWdlQmFja2luZ1N0b3JlKGNvbnN0
IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSA9IHRydWUpCisgICAgICAgIDog
bV9wcmVtdWx0aXBseUFscGhhKHByZW11bHRpcGx5QWxwaGEpCisgICAgeworICAgICAgICBBU1NF
UlQoIXNpemUuaXNFbXB0eSgpKTsKKyAgICAgICAgc2V0U2l6ZShzaXplKTsKKyAgICB9CisKKyAg
ICBJbWFnZUJhY2tpbmdTdG9yZShjb25zdCBJbWFnZUJhY2tpbmdTdG9yZSYgb3RoZXIpCisgICAg
eworICAgICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgbV9waXhlbHMgPSBvdGhlci5tX3BpeGVsczsKKyAgICAgICAgbV9waXhlbHNQdHIgPSBt
X3BpeGVscy5kYXRhKCk7CisgICAgICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKKyAgICAgICAg
bV9wcmVtdWx0aXBseUFscGhhID0gb3RoZXIubV9wcmVtdWx0aXBseUFscGhhOworICAgIH0KKwor
ICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlKCkgY29uc3Q7CisKKyAgICBib29sIHNldFNpemUoY29u
c3QgSW50U2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAgIGlmICghbV9waXhlbHMudHJ5UmVzZXJ2
ZUNhcGFjaXR5KHNpemUuYXJlYSgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBtX3BpeGVscy5yZXNpemUoc2l6ZS5hcmVhKCkpOworICAgICAgICBtX3BpeGVsc1B0ciA9
IG1fcGl4ZWxzLmRhdGEoKTsKKyAgICAgICAgbV9zaXplID0gc2l6ZTsKKyAgICAgICAgbV9mcmFt
ZVJlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIG1fc2l6ZSk7CisgICAgICAgIGNsZWFyKCk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0
IEludFJlY3QmIGZyYW1lUmVjdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9zaXplLmlzRW1w
dHkoKSk7CisgICAgICAgIEFTU0VSVChpbkJvdW5kcyhmcmFtZVJlY3QpKTsKKyAgICAgICAgbV9m
cmFtZVJlY3QgPSBmcmFtZVJlY3Q7CisgICAgfQorCisgICAgSW50U2l6ZSBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplOyB9CisgICAgSW50UmVjdCBmcmFtZVJlY3QoKSBjb25zdCB7IHJldHVy
biBtX2ZyYW1lUmVjdDsgfQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtZW1z
ZXQobV9waXhlbHNQdHIsIDAsIG1fc2l6ZS5hcmVhKCkgKiBzaXplb2YoUkdCQTMyKSk7CisgICAg
fQorCisgICAgdm9pZCBjbGVhclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKKyAgICB7CisgICAg
ICAgIGlmIChyZWN0LmlzRW1wdHkoKSB8fCAhaW5Cb3VuZHMocmVjdCkpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkg
KiBzaXplb2YoUkdCQTMyKTsKKyAgICAgICAgUkdCQTMyKiBzdGFydCA9IGF0KHJlY3QueCgpLCBy
ZWN0LnkoKSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdC5oZWlnaHQoKTsgKytp
KSB7CisgICAgICAgICAgICBtZW1zZXQoc3RhcnQsIDAsIHJlY3RXaWR0aEluQnl0ZXMpOworICAg
ICAgICAgICAgc3RhcnQgKz0gbV9zaXplLndpZHRoKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB2b2lkIHJlcGVhdEZpcnN0Um93KGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAgeworICAgICAg
ICBpZiAocmVjdC5pc0VtcHR5KCkgfHwgIWluQm91bmRzKHJlY3QpKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIHNpemVfdCByZWN0V2lkdGhJbkJ5dGVzID0gcmVjdC53aWR0aCgpICog
c2l6ZW9mKFJHQkEzMik7CisgICAgICAgIFJHQkEzMiogc3JjID0gYXQocmVjdC54KCksIHJlY3Qu
eSgpKTsKKyAgICAgICAgUkdCQTMyKiBkZXN0ID0gc3JjICsgbV9zaXplLndpZHRoKCk7CisgICAg
ICAgIGZvciAoaW50IGkgPSAxOyBpIDwgcmVjdC5oZWlnaHQoKTsgKytpKSB7CisgICAgICAgICAg
ICBtZW1jcHkoZGVzdCwgc3JjLCByZWN0V2lkdGhJbkJ5dGVzKTsKKyAgICAgICAgICAgIGRlc3Qg
Kz0gbV9zaXplLndpZHRoKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSR0JBMzIqIGF0KGlu
dCB4LCBpbnQgeSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BpeGVsc1B0ciArIHkg
KiBtX3NpemUud2lkdGgoKSArIHg7CisgICAgfQorCisgICAgdm9pZCBzZXRSR0JBKGludCB4LCBp
bnQgeSwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKKyAg
ICB7CisgICAgICAgIHNldFJHQkEoYXQoeCwgeSksIHIsIGcsIGIsIGEpOworICAgIH0KKworICAg
IHZvaWQgc2V0UkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2ln
bmVkIGIsIHVuc2lnbmVkIGEpCisgICAgeworICAgICAgICBpZiAobV9wcmVtdWx0aXBseUFscGhh
ICYmICFhKQorICAgICAgICAgICAgKmRlc3QgPSAwOworICAgICAgICBlbHNlIGlmIChtX3ByZW11
bHRpcGx5QWxwaGEgJiYgYSA8IDI1NSkKKyAgICAgICAgICAgICpkZXN0ID0gbWFrZVByZW11bHRp
cGxpZWRSR0JBKHIsIGcsIGIsIGEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqZGVzdCA9
IG1ha2VSR0JBKHIsIGcsIGIsIGEpOworICAgIH0KKworICAgIHZvaWQgb3ZlclJHQkEoUkdCQTMy
KiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQor
ICAgIHsKKyAgICAgICAgaWYgKCFhKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlm
IChhID49IDI1NSB8fCAhYWxwaGFDaGFubmVsKCpkZXN0KSkgeworICAgICAgICAgICAgc2V0UkdC
QShkZXN0LCByLCBnLCBiLCBhKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKQorICAgICAgICAgICAgKmRlc3QgPSBtYWtl
UHJlbXVsdGlwbGllZFJHQkEocmVkQ2hhbm5lbCgqZGVzdCksIGdyZWVuQ2hhbm5lbCgqZGVzdCks
IGJsdWVDaGFubmVsKCpkZXN0KSwgYWxwaGFDaGFubmVsKCpkZXN0KSk7CisKKyAgICAgICAgdW5z
aWduZWQgZCA9IDI1NSAtIGE7CisKKyAgICAgICAgciA9IGZhc3REaXZpZGVCeTI1NShyICogYSAr
IHJlZENoYW5uZWwoKmRlc3QpICogZCk7CisgICAgICAgIGcgPSBmYXN0RGl2aWRlQnkyNTUoZyAq
IGEgKyBncmVlbkNoYW5uZWwoKmRlc3QpICogZCk7CisgICAgICAgIGIgPSBmYXN0RGl2aWRlQnky
NTUoYiAqIGEgKyBibHVlQ2hhbm5lbCgqZGVzdCkgKiBkKTsKKyAgICAgICAgYSArPSBmYXN0RGl2
aWRlQnkyNTUoZCAqIGFscGhhQ2hhbm5lbCgqZGVzdCkpOworCisgICAgICAgIGlmIChtX3ByZW11
bHRpcGx5QWxwaGEpCisgICAgICAgICAgICAqZGVzdCA9IG1ha2VSR0JBKHIsIGcsIGIsIGEpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICAqZGVzdCA9IG1ha2VVblByZW11bHRpcGxpZWRSR0JB
KHIsIGcsIGIsIGEpOworICAgIH0KKworICAgIGJvb2wgaW5Cb3VuZHMoY29uc3QgSW50UmVjdCYg
cmVjdCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KCksIG1f
c2l6ZSkuY29udGFpbnMocmVjdCk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNPdmVyU2l6
ZShjb25zdCBJbnRTaXplJiBzaXplKQorICAgIHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxv
bmcgbG9uZyBNYXhQaXhlbHMgPSAoKDEgPDwgMjkpIC0gMSk7CisgICAgICAgIHVuc2lnbmVkIGxv
bmcgbG9uZyBwaXhlbHMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHNpemUud2lk
dGgoKSkgKiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHNpemUuaGVpZ2h0KCkpOwor
ICAgICAgICByZXR1cm4gcGl4ZWxzID4gTWF4UGl4ZWxzOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBWZWN0b3I8UkdCQTMyPiBtX3BpeGVsczsKKyAgICBSR0JBMzIqIG1fcGl4ZWxzUHRyIHsgbnVs
bHB0ciB9OworICAgIEludFNpemUgbV9zaXplOworICAgIEludFJlY3QgbV9mcmFtZVJlY3Q7IC8v
IFRoaXMgd2lsbCBhbHdheXMganVzdCBiZSB0aGUgZW50aXJlIGJ1ZmZlciBleGNlcHQgZm9yIEdJ
RiBhbmQgUE5HIGZyYW1lcworICAgIGJvb2wgbV9wcmVtdWx0aXBseUFscGhhIHsgdHJ1ZSB9Owor
fTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZl
SW1hZ2VDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NywxMCArNDcsMTAgQEAgSW50U2l6ZSBuYXRpdmVJbWFnZVNpemUoY29uc3QgTmF0aXZl
SW1hZwogICAgIHJldHVybiBpbWFnZSA/IEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGltYWdlLmdl
dCgpKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSkpIDogSW50U2l6ZSgpOwogfQogCi1i
b29sIG5hdGl2ZUltYWdlSGFzQWxwaGEoY29uc3QgTmF0aXZlSW1hZ2VQdHImKQorYm9vbCBuYXRp
dmVJbWFnZUhhc0FscGhhKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSkKIHsKLSAgICAvLyBG
SVhNRTogQW5zd2VyIGNvcnJlY3RseSB0aGUgcXVlc3Rpb246IGRvZXMgdGhlIENHSW1hZ2VSZWYg
aGF2ZSBhbHBoYSBjaGFubm5lbD8KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBDR0ltYWdlQWxwaGFJ
bmZvIGluZm8gPSBDR0ltYWdlR2V0QWxwaGFJbmZvKGltYWdlLmdldCgpKTsKKyAgICByZXR1cm4g
KGluZm8gPj0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSAmJiAoaW5mbyA8PSBrQ0dJ
bWFnZUFscGhhRmlyc3QpOwogfQogCiBDb2xvciBuYXRpdmVJbWFnZVNpbmdsZVBpeGVsU29saWRD
b2xvcihjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAJKHJl
dmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw4ICsxNDEsOCBAQCBJbWFn
ZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QgCiAgICAgaWYgKHRoaXMgPT0gJm90
aGVyKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAKLSAgICBjb3B5Qml0bWFwRGF0YShvdGhlcik7
Ci0gICAgc2V0T3JpZ2luYWxGcmFtZVJlY3Qob3RoZXIub3JpZ2luYWxGcmFtZVJlY3QoKSk7Cisg
ICAgc2V0QmFja2luZ1N0b3JlKG90aGVyLmJhY2tpbmdTdG9yZSgpKTsKKyAgICBzZXRIYXNBbHBo
YShvdGhlci5tX2hhc0FscGhhKTsKICAgICBzZXRTdGF0dXMob3RoZXIuc3RhdHVzKCkpOwogICAg
IHNldER1cmF0aW9uKG90aGVyLmR1cmF0aW9uKCkpOwogICAgIHNldERpc3Bvc2FsTWV0aG9kKG90
aGVyLmRpc3Bvc2FsTWV0aG9kKCkpOwpAQCAtMTUyLDggKzE1Miw3IEBAIEltYWdlRnJhbWUmIElt
YWdlRnJhbWU6Om9wZXJhdG9yPShjb25zdCAKIAogdm9pZCBJbWFnZUZyYW1lOjpjbGVhclBpeGVs
RGF0YSgpCiB7Ci0gICAgbV9iYWNraW5nU3RvcmUuY2xlYXIoKTsKLSAgICBtX2J5dGVzID0gMDsK
KyAgICBtX2JhY2tpbmdTdG9yZSA9IG51bGxwdHI7CiAgICAgbV9zdGF0dXMgPSBGcmFtZUVtcHR5
OwogICAgIC8vIE5PVEU6IERvIG5vdCByZXNldCBvdGhlciBtZW1iZXJzIGhlcmU7IGNsZWFyRnJh
bWVCdWZmZXJDYWNoZSgpIGNhbGxzIHRoaXMKICAgICAvLyB0byBmcmVlIHRoZSBiaXRtYXAgZGF0
YSwgYnV0IG90aGVyIGZ1bmN0aW9ucyBsaWtlIGluaXRGcmFtZUJ1ZmZlcigpIGFuZApAQCAtMTYz
LDUxICsxNjIsMzEgQEAgdm9pZCBJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSgpCiAKIHZvaWQg
SW1hZ2VGcmFtZTo6emVyb0ZpbGxQaXhlbERhdGEoKQogewotICAgIG1lbXNldChtX2J5dGVzLCAw
LCBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKSAqIHNpemVvZihQaXhlbERhdGEpKTsK
KyAgICBtX2JhY2tpbmdTdG9yZS0+Y2xlYXIoKTsKICAgICBtX2hhc0FscGhhID0gdHJ1ZTsKIH0K
IAogdm9pZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiByZWN0
KQogewotICAgIEFTU0VSVChJbnRSZWN0KEludFBvaW50KCksIG1fc2l6ZSkuY29udGFpbnMocmVj
dCkpOwotCiAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBz
aXplX3QgcmVjdFdpZHRoSW5CeXRlcyA9IHJlY3Qud2lkdGgoKSAqIHNpemVvZihQaXhlbERhdGEp
OwotICAgIFBpeGVsRGF0YSogc3RhcnQgPSBtX2J5dGVzICsgKHJlY3QueSgpICogd2lkdGgoKSkg
KyByZWN0LngoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QuaGVpZ2h0KCk7ICsraSkg
ewotICAgICAgICBtZW1zZXQoc3RhcnQsIDAsIHJlY3RXaWR0aEluQnl0ZXMpOwotICAgICAgICBz
dGFydCArPSB3aWR0aCgpOwotICAgIH0KLQorICAgIG1fYmFja2luZ1N0b3JlLT5jbGVhclJlY3Qo
cmVjdCk7CiAgICAgc2V0SGFzQWxwaGEodHJ1ZSk7CiB9CiAKLWJvb2wgSW1hZ2VGcmFtZTo6Y29w
eUJpdG1hcERhdGEoY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpCit2b2lkIEltYWdlRnJhbWU6OnNl
dEJhY2tpbmdTdG9yZShjb25zdCBJbWFnZUJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKQogewot
ICAgIGlmICh0aGlzID09ICZvdGhlcikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBtX2Jh
Y2tpbmdTdG9yZSA9IG90aGVyLm1fYmFja2luZ1N0b3JlOwotICAgIG1fYnl0ZXMgPSBtX2JhY2tp
bmdTdG9yZS5kYXRhKCk7Ci0gICAgbV9zaXplID0gb3RoZXIubV9zaXplOwotICAgIHNldEhhc0Fs
cGhhKG90aGVyLm1faGFzQWxwaGEpOwotICAgIHJldHVybiB0cnVlOworICAgIGlmIChiYWNraW5n
U3RvcmUgPT0gbV9iYWNraW5nU3RvcmUpCisgICAgICAgIHJldHVybjsKKyAgICBtX2JhY2tpbmdT
dG9yZSA9IGJhY2tpbmdTdG9yZSA/IEltYWdlQmFja2luZ1N0b3JlOjpjcmVhdGUoKmJhY2tpbmdT
dG9yZSkgOiBudWxscHRyOwogfQogCiBib29sIEltYWdlRnJhbWU6OnNldFNpemUoaW50IG5ld1dp
ZHRoLCBpbnQgbmV3SGVpZ2h0KQogewotICAgIEFTU0VSVCghd2lkdGgoKSAmJiAhaGVpZ2h0KCkp
OwotICAgIHNpemVfdCBiYWNraW5nU3RvcmVTaXplID0gbmV3V2lkdGggKiBuZXdIZWlnaHQ7Ci0g
ICAgaWYgKCFtX2JhY2tpbmdTdG9yZS50cnlSZXNlcnZlQ2FwYWNpdHkoYmFja2luZ1N0b3JlU2l6
ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2JhY2tpbmdTdG9yZS5yZXNpemUoYmFj
a2luZ1N0b3JlU2l6ZSk7Ci0gICAgbV9ieXRlcyA9IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsKLSAg
ICBtX3NpemUgPSBJbnRTaXplKG5ld1dpZHRoLCBuZXdIZWlnaHQpOwotCi0gICAgemVyb0ZpbGxQ
aXhlbERhdGEoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBBU1NFUlQoIW1fYmFja2luZ1N0b3Jl
KTsKKyAgICBtX2JhY2tpbmdTdG9yZSA9IEltYWdlQmFja2luZ1N0b3JlOjpjcmVhdGUoSW50U2l6
ZShuZXdXaWR0aCwgbmV3SGVpZ2h0KSwgbV9wcmVtdWx0aXBseUFscGhhKTsKKyAgICByZXR1cm4g
bV9iYWNraW5nU3RvcmU7CiB9CiAKIGJvb2wgSW1hZ2VGcmFtZTo6aGFzQWxwaGEoKSBjb25zdApA
QCAtMjIwLDYgKzE5OSwxMiBAQCB2b2lkIEltYWdlRnJhbWU6OnNldEhhc0FscGhhKGJvb2wgYWxw
aGEpCiAgICAgbV9oYXNBbHBoYSA9IGFscGhhOwogfQogCit2b2lkIHNldE9yaWdpbmFsRnJhbWVS
ZWN0KGNvbnN0IEludFJlY3QmIGZyYW1lUmVjdCkKK3sKKyAgICBpZiAobV9iYWNraW5nU3RvcmUp
CisgICAgICAgIG1fYmFja2luZ1N0b3JlLT5zZXRGcmFtZVJlY3QoZnJhbWVSZWN0KTsKK30KKwog
dm9pZCBJbWFnZUZyYW1lOjpzZXRTdGF0dXMoRnJhbWVTdGF0dXMgc3RhdHVzKQogewogICAgIG1f
c3RhdHVzID0gc3RhdHVzOwpAQCAtMjg2LDcgKzI3MSw3IEBAIHVuc2lnbmVkIEltYWdlRGVjb2Rl
cjo6ZnJhbWVCeXRlc0F0SW5kZXgKICAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKSA8
PSBpbmRleCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgLy8gRklYTUU6IFVzZSB0aGUgZGltZW5z
aW9uIG9mIHRoZSByZXF1ZXN0ZWQgZnJhbWUuCi0gICAgcmV0dXJuIG1fc2l6ZS5hcmVhKCkgKiBz
aXplb2YoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKTsKKyAgICByZXR1cm4gbV9zaXplLmFyZWEoKSAq
IHNpemVvZihSR0JBMzIpOwogfQogCiBmbG9hdCBJbWFnZURlY29kZXI6OmZyYW1lRHVyYXRpb25B
dEluZGV4KHNpemVfdCBpbmRleCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAyMDU2ODQpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNs
dWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW1hZ2VCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRl
ICJJbWFnZVNvdXJjZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXpl
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtNTcsNyArNTksNiBAQCB1c2luZyBD
b2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hhcj47CiAgICAgICAgICAgICBEaXNwb3NlT3ZlcndyaXRl
UHJldmlvdXMgIC8vIENsZWFyIGZyYW1lIHRvIHByZXZpb3VzIGZyYW1lYnVmZmVyCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRlbnRzCiAgICAgICAgIH07Ci0g
ICAgICAgIHR5cGVkZWYgdW5zaWduZWQgUGl4ZWxEYXRhOwogCiAgICAgICAgIEltYWdlRnJhbWUo
KTsKIApAQCAtNzIsMTUyICs3Myw2OSBAQCB1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hh
cj47CiAgICAgICAgIHZvaWQgemVyb0ZpbGxQaXhlbERhdGEoKTsKICAgICAgICAgdm9pZCB6ZXJv
RmlsbEZyYW1lUmVjdChjb25zdCBJbnRSZWN0Jik7CiAKLSAgICAgICAgLy8gTWFrZXMgdGhpcyBm
cmFtZSBoYXZlIGFuIGluZGVwZW5kZW50IGNvcHkgb2YgdGhlIHByb3ZpZGVkIGltYWdlJ3MKLSAg
ICAgICAgLy8gcGl4ZWwgZGF0YSwgc28gdGhhdCBtb2RpZmljYXRpb25zIGluIG9uZSBmcmFtZSBh
cmUgbm90IHJlZmxlY3RlZCBpbgotICAgICAgICAvLyB0aGUgb3RoZXIuICBSZXR1cm5zIHdoZXRo
ZXIgdGhlIGNvcHkgc3VjY2VlZGVkLgotICAgICAgICBib29sIGNvcHlCaXRtYXBEYXRhKGNvbnN0
IEltYWdlRnJhbWUmKTsKLQogICAgICAgICAvLyBDb3BpZXMgdGhlIHBpeGVsIGRhdGEgYXQgWyhz
dGFydFgsIHN0YXJ0WSksIChlbmRYLCBzdGFydFkpKSB0byB0aGUKICAgICAgICAgLy8gc2FtZSBY
LWNvb3JkaW5hdGVzIG9uIGVhY2ggc3Vic2VxdWVudCByb3cgdXAgdG8gYnV0IG5vdCBpbmNsdWRp
bmcKICAgICAgICAgLy8gZW5kWS4KICAgICAgICAgdm9pZCBjb3B5Um93TlRpbWVzKGludCBzdGFy
dFgsIGludCBlbmRYLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKICAgICAgICAgewotICAgICAgICAg
ICAgQVNTRVJUKHN0YXJ0WCA8IHdpZHRoKCkpOwotICAgICAgICAgICAgQVNTRVJUKGVuZFggPD0g
d2lkdGgoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhcnRZIDwgaGVpZ2h0KCkpOwotICAgICAg
ICAgICAgQVNTRVJUKGVuZFkgPD0gaGVpZ2h0KCkpOwotICAgICAgICAgICAgY29uc3QgaW50IHJv
d0J5dGVzID0gKGVuZFggLSBzdGFydFgpICogc2l6ZW9mKFBpeGVsRGF0YSk7Ci0gICAgICAgICAg
ICBjb25zdCBQaXhlbERhdGEqIGNvbnN0IHN0YXJ0QWRkciA9IGdldEFkZHIoc3RhcnRYLCBzdGFy
dFkpOwotICAgICAgICAgICAgZm9yIChpbnQgZGVzdFkgPSBzdGFydFkgKyAxOyBkZXN0WSA8IGVu
ZFk7ICsrZGVzdFkpCi0gICAgICAgICAgICAgICAgbWVtY3B5KGdldEFkZHIoc3RhcnRYLCBkZXN0
WSksIHN0YXJ0QWRkciwgcm93Qnl0ZXMpOworICAgICAgICAgICAgbV9iYWNraW5nU3RvcmUtPnJl
cGVhdEZpcnN0Um93KEludFJlY3Qoc3RhcnRYLCBzdGFydFksIGVuZFggLXN0YXJ0WCAsIGVuZFkg
LSBzdGFydFkpKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEFsbG9jYXRlcyBzcGFjZSBmb3Ig
dGhlIHBpeGVsIGRhdGEuICBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IHBpeGVscwogICAgICAg
ICAvLyBhcmUgd3JpdHRlbi4gIE11c3Qgb25seSBiZSBjYWxsZWQgb25jZS4gIFJldHVybnMgd2hl
dGhlciBhbGxvY2F0aW9uCiAgICAgICAgIC8vIHN1Y2NlZWRlZC4KLSAgICAgICAgYm9vbCBzZXRT
aXplKGludCBuZXdXaWR0aCwgaW50IG5ld0hlaWdodCk7CisgICAgICAgIGJvb2wgc2V0U2l6ZShj
b25zdCBJbnRTaXplJiwgYm9vbCBwcmVtdWx0aXBseUFscGhhKTsKKyAgICAgICAgSW50U2l6ZSBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nU3RvcmUtPnNpemUoKTsgfQogCiAgICAgICAg
IC8vIFJldHVybnMgYSBjYWxsZXItb3duZWQgcG9pbnRlciB0byB0aGUgdW5kZXJseWluZyBuYXRp
dmUgaW1hZ2UgZGF0YS4KICAgICAgICAgLy8gKEFjdHVhbCB1c2U6IFRoaXMgcG9pbnRlciB3aWxs
IGJlIG93bmVkIGJ5IEJpdG1hcEltYWdlIGFuZCBmcmVlZCBpbgogICAgICAgICAvLyBGcmFtZURh
dGE6OmNsZWFyKCkpLgotICAgICAgICBOYXRpdmVJbWFnZVB0ciBhc05ld05hdGl2ZUltYWdlKCkg
Y29uc3Q7CisgICAgICAgIE5hdGl2ZUltYWdlUHRyIGFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdCB7
IHJldHVybiBtX2JhY2tpbmdTdG9yZS0+aW1hZ2UoKTsgfQogCisgICAgICAgIGlubGluZSBJbWFn
ZUJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nU3Rv
cmUgPyBtX2JhY2tpbmdTdG9yZS5nZXQoKSA6IG51bGxwdHI7IH0KKyAgICAgICAgaW5saW5lIGJv
b2wgaGFzQmFja2luZ1N0b3JlKCkgY29uc3QgeyByZXR1cm4gYmFja2luZ1N0b3JlKCk7IH0KKyAg
ICAgICAgCiAgICAgICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdDsKLSAgICAgICAgY29uc3QgSW50
UmVjdCYgb3JpZ2luYWxGcmFtZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX29yaWdpbmFsRnJhbWVS
ZWN0OyB9CisgICAgICAgIGNvbnN0IEludFJlY3QmIG9yaWdpbmFsRnJhbWVSZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9iYWNraW5nU3RvcmUgPyBtX2JhY2tpbmdTdG9yZS0+ZnJhbWVSZWN0KCkgOiBJ
bnRSZWN0KCk7IH0KICAgICAgICAgRnJhbWVTdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4g
bV9zdGF0dXM7IH0KICAgICAgICAgdW5zaWduZWQgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBt
X2R1cmF0aW9uOyB9CiAgICAgICAgIEZyYW1lRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2Qo
KSBjb25zdCB7IHJldHVybiBtX2Rpc3Bvc2FsTWV0aG9kOyB9CiAgICAgICAgIGJvb2wgcHJlbXVs
dGlwbHlBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlbXVsdGlwbHlBbHBoYTsgfQogCisgICAg
ICAgIHZvaWQgc2V0QmFja2luZ1N0b3JlKGNvbnN0IEltYWdlQmFja2luZ1N0b3JlKik7CisgICAg
ICAgIAogICAgICAgICB2b2lkIHNldEhhc0FscGhhKGJvb2wgYWxwaGEpOwotICAgICAgICB2b2lk
IHNldE9yaWdpbmFsRnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIHIpIHsgbV9vcmlnaW5hbEZyYW1l
UmVjdCA9IHI7IH0KKyAgICAgICAgdm9pZCBzZXRPcmlnaW5hbEZyYW1lUmVjdChjb25zdCBJbnRS
ZWN0Jik7CiAgICAgICAgIHZvaWQgc2V0U3RhdHVzKEZyYW1lU3RhdHVzIHN0YXR1cyk7CiAgICAg
ICAgIHZvaWQgc2V0RHVyYXRpb24odW5zaWduZWQgZHVyYXRpb24pIHsgbV9kdXJhdGlvbiA9IGR1
cmF0aW9uOyB9CiAgICAgICAgIHZvaWQgc2V0RGlzcG9zYWxNZXRob2QoRnJhbWVEaXNwb3NhbE1l
dGhvZCBtZXRob2QpIHsgbV9kaXNwb3NhbE1ldGhvZCA9IG1ldGhvZDsgfQogICAgICAgICB2b2lk
IHNldFByZW11bHRpcGx5QWxwaGEoYm9vbCBwcmVtdWx0aXBseUFscGhhKSB7IG1fcHJlbXVsdGlw
bHlBbHBoYSA9IHByZW11bHRpcGx5QWxwaGE7IH0KIAotICAgICAgICBpbmxpbmUgdm9pZCBzZXRS
R0JBKGludCB4LCBpbnQgeSwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5z
aWduZWQgYSkKKyAgICAgICAgaW5saW5lIFJHQkEzMiogZ2V0QWRkcihpbnQgeCwgaW50IHkpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIHNldFJHQkEoZ2V0QWRkcih4LCB5KSwgciwgZywgYiwgYSk7
CisgICAgICAgICAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUtPmF0KHgsIHkpOwogICAgICAgICB9
CiAKLSAgICAgICAgaW5saW5lIFBpeGVsRGF0YSogZ2V0QWRkcihpbnQgeCwgaW50IHkpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2J5dGVzICsgKHkgKiB3aWR0aCgpKSArIHg7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpbmxpbmUgYm9vbCBoYXNQaXhlbERhdGEoKSBjb25zdAotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9ieXRlczsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIFVzZSBmaXggcG9pbnQgbXVsdGlwbGllciBpbnN0ZWFkIG9mIGludGVnZXIgZGl2aXNpb24g
b3IgZmxvYXRpbmcgcG9pbnQgbWF0aC4KLSAgICAgICAgLy8gVGhpcyBtdWx0aXBsZXIgcHJvZHVj
ZXMgZXhhY3RseSB0aGUgc2FtZSByZXN1bHQgZm9yIGFsbCB2YWx1ZXMgaW4gcmFuZ2UgMCAtIDI1
NS4KLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZpeFBvaW50U2hpZnQgPSAyNDsKLSAg
ICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZpeFBvaW50TXVsdCA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPigxLjAgLyAyNTUuMCAqICgxIDw8IGZpeFBvaW50U2hpZnQpKSArIDE7Ci0gICAgICAg
IC8vIE11bHRpcGxpZXMgdW5zaWduZWQgdmFsdWUgYnkgZml4cG9pbnQgdmFsdWUgYW5kIGNvbnZl
cnRzIGJhY2sgdG8gdW5zaWduZWQuCi0gICAgICAgIHN0YXRpYyB1bnNpZ25lZCBmaXhQb2ludFVu
c2lnbmVkTXVsdGlwbHkodW5zaWduZWQgZml4ZWQsIHVuc2lnbmVkIHYpCisgICAgICAgIGlubGlu
ZSB2b2lkIHNldFJHQkEoaW50IHgsIGludCB5LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNp
Z25lZCBiLCB1bnNpZ25lZCBhKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gIChmaXhl
ZCAqIHYpID4+IGZpeFBvaW50U2hpZnQ7CisgICAgICAgICAgICBtX2JhY2tpbmdTdG9yZS0+c2V0
UkdCQSh4LCB5LCByLCBnLCBiLCBhKTsKICAgICAgICAgfQotCi0gICAgICAgIGlubGluZSB2b2lk
IHNldFJHQkEoUGl4ZWxEYXRhKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25l
ZCBiLCB1bnNpZ25lZCBhKQorICAgICAgICAKKyAgICAgICAgaW5saW5lIHZvaWQgc2V0UkdCQShS
R0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVk
IGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX3ByZW11bHRpcGx5QWxwaGEgJiYgYSA8
IDI1NSkgewotICAgICAgICAgICAgICAgIGlmICghYSkgewotICAgICAgICAgICAgICAgICAgICAq
ZGVzdCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBhbHBoYU11bHQgPSBhICogZml4UG9pbnRNdWx0
OwotICAgICAgICAgICAgICAgIHIgPSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkociwgYWxwaGFN
dWx0KTsKLSAgICAgICAgICAgICAgICBnID0gZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KGcsIGFs
cGhhTXVsdCk7Ci0gICAgICAgICAgICAgICAgYiA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShi
LCBhbHBoYU11bHQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3QgPSAoYSA8PCAy
NCB8IHIgPDwgMTYgfCBnIDw8IDggfCBiKTsKKyAgICAgICAgICAgIG1fYmFja2luZ1N0b3JlLT5z
ZXRSR0JBKGRlc3QsIHIsIGcsIGIsIGEpOwogICAgICAgICB9CiAKICNpZiBFTkFCTEUoQVBORykK
LSAgICAgICAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBkaXZpZGUyNTUodW5zaWduZWQgYSkKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIChhICsgKGEgPj4gOCkgKyAxKSA+PiA4OwotICAg
ICAgICB9Ci0KLSAgICAgICAgaW5saW5lIHZvaWQgb3ZlclJHQkEoUGl4ZWxEYXRhKiBkZXN0LCB1
bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgICAgICBp
bmxpbmUgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcs
IHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICghYSkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmIChhIDwgMjU1KSB7Ci0g
ICAgICAgICAgICAgICAgdW5zaWduZWQgYURlc3QgPSAoKCpkZXN0KSA+PiAyNCkgJiAyNTU7Ci0g
ICAgICAgICAgICAgICAgaWYgKGFEZXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IHJEZXN0ID0gKCgqZGVzdCkgPj4gMTYpICYgMjU1OwotICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBnRGVzdCA9ICgoKmRlc3QpID4+IDgpICYgMjU1OwotICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBiRGVzdCA9ICgqZGVzdCkgJiAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGFBdXggPSAyNTUgLSBhOwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlw
bHlBbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgckRlc3QgPSBkaXZpZGUyNTUockRl
c3QgKiBhRGVzdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnRGVzdCA9IGRpdmlkZTI1NShn
RGVzdCAqIGFEZXN0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJEZXN0ID0gZGl2aWRlMjU1
KGJEZXN0ICogYURlc3QpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIHIgPSBkaXZpZGUyNTUociAqIGEgKyByRGVzdCAqIGFBdXgpOwotICAgICAgICAgICAgICAg
ICAgICBnID0gZGl2aWRlMjU1KGcgKiBhICsgZ0Rlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAg
ICAgICAgYiA9IGRpdmlkZTI1NShiICogYSArIGJEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGEgKz0gZGl2aWRlMjU1KGFEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghbV9wcmVtdWx0aXBseUFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByID0g
KHIgKiAyNTUgKyBhIC0gMSkgLyBhOwotICAgICAgICAgICAgICAgICAgICAgICAgZyA9IChnICog
MjU1ICsgYSAtIDEpIC8gYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGIgPSAoYiAqIDI1NSAr
IGEgLSAxKSAvIGE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSkgewotICAgICAgICAgICAgICAgICAgICByID0gZGl2
aWRlMjU1KHIgKiBhKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IGRpdmlkZTI1NShnICogYSk7
Ci0gICAgICAgICAgICAgICAgICAgIGIgPSBkaXZpZGUyNTUoYiAqIGEpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpkZXN0ID0gKGEgPDwgMjQgfCByIDw8
IDE2IHwgZyA8PCA4IHwgYik7CisgICAgICAgICAgICBtX2JhY2tpbmdTdG9yZS0+b3ZlclJHQkEo
ZGVzdCwgciwgZywgYiwgYSk7CiAgICAgICAgIH0KICNlbmRpZgogCiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgaW50IHdpZHRoKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1f
c2l6ZS53aWR0aCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3NpemUuaGVpZ2h0KCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBWZWN0b3I8UGl4ZWxEYXRhPiBtX2JhY2tpbmdTdG9yZTsKLSAgICAgICAgUGl4
ZWxEYXRhKiBtX2J5dGVzOyAvLyBUaGUgbWVtb3J5IGlzIGJhY2tlZCBieSBtX2JhY2tpbmdTdG9y
ZS4KLSAgICAgICAgSW50U2l6ZSBtX3NpemU7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CiAgICAgICAgIGJvb2wgbV9oYXNBbHBoYTsK
LSAgICAgICAgSW50UmVjdCBtX29yaWdpbmFsRnJhbWVSZWN0OyAvLyBUaGlzIHdpbGwgYWx3YXlz
IGp1c3QgYmUgdGhlIGVudGlyZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGJ1ZmZlciBleGNlcHQgZm9yIEdJRiBmcmFtZXMgd2hvc2UKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBvcmlnaW5hbCByZWN0IHdhcyBzbWFsbGVyIHRoYW4gdGhl
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3ZlcmFsbCBpbWFnZSBz
aXplLgogICAgICAgICBGcmFtZVN0YXR1cyBtX3N0YXR1czsKICAgICAgICAgdW5zaWduZWQgbV9k
dXJhdGlvbjsKICAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBtX2Rpc3Bvc2FsTWV0aG9kOwpA
QCAtMjg3LDExICsyMDUsMTEgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+Owog
CiAgICAgICAgIC8vIFJldHVybnMgd2hldGhlciB0aGUgc2l6ZSBpcyBsZWdhbCAoaS5lLiBub3Qg
Z29pbmcgdG8gcmVzdWx0IGluCiAgICAgICAgIC8vIG92ZXJmbG93IGVsc2V3aGVyZSkuICBJZiBu
b3QsIG1hcmtzIGRlY29kaW5nIGFzIGZhaWxlZC4KLSAgICAgICAgdmlydHVhbCBib29sIHNldFNp
emUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKKyAgICAgICAgdmlydHVhbCBib29s
IHNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICAgICAgewotICAgICAgICAgICAgaWYg
KGlzT3ZlclNpemUod2lkdGgsIGhlaWdodCkpCisgICAgICAgICAgICBpZiAoSW1hZ2VCYWNraW5n
U3RvcmU6OmlzT3ZlclNpemUoc2l6ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxl
ZCgpOwotICAgICAgICAgICAgbV9zaXplID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAg
ICAgICAgIG1fc2l6ZSA9IHNpemU7CiAgICAgICAgICAgICBtX3NpemVBdmFpbGFibGUgPSB0cnVl
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTM4NiwxNSArMzA0LDYg
QEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICBJbWFnZU9yaWVu
dGF0aW9uIG1fb3JpZW50YXRpb247CiAKICAgICBwcml2YXRlOgotICAgICAgICAvLyBTb21lIGNv
ZGUgcGF0aHMgY29tcHV0ZSB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UgYXMgIndpZHRoICogaGVpZ2h0
ICogNCIKLSAgICAgICAgLy8gYW5kIHJldHVybiBpdCBhcyBhIChzaWduZWQpIGludC4gIEF2b2lk
IG92ZXJmbG93LgotICAgICAgICBzdGF0aWMgYm9vbCBpc092ZXJTaXplKHVuc2lnbmVkIHdpZHRo
LCB1bnNpZ25lZCBoZWlnaHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcg
bG9uZyB0b3RhbF9zaXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPih3aWR0aCkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc3RhdGljX2Nhc3Q8
dW5zaWduZWQgbG9uZyBsb25nPihoZWlnaHQpOwotICAgICAgICAgICAgcmV0dXJuIHRvdGFsX3Np
emUgPiAoKDEgPDwgMjkpIC0gMSk7Ci0gICAgICAgIH0KLQogICAgICAgICBJbnRTaXplIG1fc2l6
ZTsKICAgICAgICAgYm9vbCBtX3NpemVBdmFpbGFibGUgeyBmYWxzZSB9OwogI2lmIEVOQUJMRShJ
TUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5j
cHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDkgKzg2
LDYgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6ZGVjb2RlQk1QKGJvb2wgb25seQogICAgICAgICAv
LyB0aGVzZSAwcyBjb3VsZCBhY3R1YWxseSBzaG93IHRocm91Z2guCiAgICAgICAgIG1fYnVmZmVy
LT5zZXRIYXNBbHBoYShmYWxzZSk7CiAKLSAgICAgICAgLy8gRm9yIEJNUHMsIHRoZSBmcmFtZSBh
bHdheXMgZmlsbHMgdGhlIGVudGlyZSBpbWFnZS4KLSAgICAgICAgbV9idWZmZXItPnNldE9yaWdp
bmFsRnJhbWVSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgbV9wYXJlbnQtPnNpemUoKSkpOwotCiAg
ICAgICAgIGlmICghbV9pc1RvcERvd24pCiAgICAgICAgICAgICBtX2Nvb3JkLnNldFkobV9wYXJl
bnQtPnNpemUoKS5oZWlnaHQoKSAtIDEpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJv
L0ltYWdlQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3JlQ2Fpcm8u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJbWFnZUJhY2tpbmdTdG9yZS5oIgorCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJhY2tpbmdTdG9yZTo6aW1hZ2UoKSBj
b25zdAoreworICAgIHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9m
b3JfZGF0YSgKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oY29uc3Rf
Y2FzdDxSR0JBMzIqPihtX3BpeGVsc1B0cikpLAorICAgICAgICBDQUlST19GT1JNQVRfQVJHQjMy
LCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpLCBzaXplKCkud2lkdGgoKSAqIHNpemVv
ZihSR0JBMzIpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9H
SUZJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjEzLDEwICsyMTMsMTAgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNv
ZGVkUm93KHVucwogCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgaWYgbmVjZXNzYXJ5Lgog
ICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUluZGV4XTsK
LSAgICBpZiAoKChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgJiYg
IWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkgfHwgIWJ1ZmZlci5oYXNQaXhlbERhdGEoKSkK
KyAgICBpZiAoKChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgJiYg
IWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkgfHwgIWJ1ZmZlci5oYXNCYWNraW5nU3RvcmUo
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBj
dXJyZW50QWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHhCZWdpbiwgeUJlZ2luKTsKKyAgICBSR0JB
MzIqIGN1cnJlbnRBZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoeEJlZ2luLCB5QmVnaW4pOwogICAg
IC8vIFdyaXRlIG9uZSByb3cncyB3b3J0aCBvZiBkYXRhIGludG8gdGhlIGZyYW1lLiAgCiAgICAg
Zm9yIChpbnQgeCA9IHhCZWdpbjsgeCA8IHhFbmQ7ICsreCkgewogICAgICAgICBjb25zdCB1bnNp
Z25lZCBjaGFyIHNvdXJjZVZhbHVlID0gcm93QnVmZmVyWyhtX3NjYWxlZCA/IG1fc2NhbGVkQ29s
dW1uc1t4XSA6IHgpIC0gZnJhbWVDb250ZXh0LT54T2Zmc2V0XTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9K
UEVHSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUxLDcgKzU1MSw3IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6c2V0RmFp
bGVkKCkKIH0KIAogdGVtcGxhdGUgPEpfQ09MT1JfU1BBQ0UgY29sb3JTcGFjZT4KLXZvaWQgc2V0
UGl4ZWwoSW1hZ2VGcmFtZSYgYnVmZmVyLCBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGN1cnJlbnRB
ZGRyZXNzLCBKU0FNUEFSUkFZIHNhbXBsZXMsIGludCBjb2x1bW4pCit2b2lkIHNldFBpeGVsKElt
YWdlRnJhbWUmIGJ1ZmZlciwgUkdCQTMyKiBjdXJyZW50QWRkcmVzcywgSlNBTVBBUlJBWSBzYW1w
bGVzLCBpbnQgY29sdW1uKQogewogICAgIEpTQU1QTEUqIGpzYW1wbGUgPSAqc2FtcGxlcyArIGNv
bHVtbiAqIChjb2xvclNwYWNlID09IEpDU19SR0IgPyAzIDogNCk7CiAKQEAgLTU5NCw3ICs1OTQs
NyBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcyhJCiAgICAgICAgIGlm
IChkZXN0WSA8IDApCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBJbWFnZUZyYW1l
OjpQaXhlbERhdGEqIGN1cnJlbnRBZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoMCwgZGVzdFkpOwor
ICAgICAgICBSR0JBMzIqIGN1cnJlbnRBZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoMCwgZGVzdFkp
OwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKICAgICAgICAgICAg
IHNldFBpeGVsPGNvbG9yU3BhY2U+KGJ1ZmZlciwgY3VycmVudEFkZHJlc3MsIHNhbXBsZXMsIGlz
U2NhbGVkID8gbV9zY2FsZWRDb2x1bW5zW3hdIDogeCk7CiAgICAgICAgICAgICArK2N1cnJlbnRB
ZGRyZXNzOwpAQCAtNjIzLDkgKzYyMyw2IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0
U2NhbmxpbmVzKCkKICAgICAgICAgLy8gVGhlIGJ1ZmZlciBpcyB0cmFuc3BhcmVudCBvdXRzaWRl
IHRoZSBkZWNvZGVkIGFyZWEgd2hpbGUgdGhlIGltYWdlIGlzCiAgICAgICAgIC8vIGxvYWRpbmcu
IFRoZSBjb21wbGV0ZWQgaW1hZ2Ugd2lsbCBiZSBtYXJrZWQgZnVsbHkgb3BhcXVlIGluIGpwZWdD
b21wbGV0ZSgpLgogICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEodHJ1ZSk7Ci0KLSAgICAgICAg
Ly8gRm9yIEpQRUdzLCB0aGUgZnJhbWUgYWx3YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2UuCi0g
ICAgICAgIGJ1ZmZlci5zZXRPcmlnaW5hbEZyYW1lUmVjdChJbnRSZWN0KEludFBvaW50KCksIHNp
emUoKSkpOwogICAgIH0KIAogICAgIGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QqIGluZm8gPSBtX3Jl
YWRlci0+aW5mbygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9u
IDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9Q
TkdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTEsMTkgKzQxMSwxOSBAQCB2
b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKICAgICB9CiB9CiAKLXN0YXRp
YyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJHQihJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGRlc3QsIHBu
Z19ieXRlcCBwaXhlbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJHQihSR0JBMzIqIGRl
c3QsIHBuZ19ieXRlcCBwaXhlbCkKIHsKICAgICAqZGVzdCA9IDB4RkYwMDAwMDBVIHwgcGl4ZWxb
MF0gPDwgMTYgfCBwaXhlbFsxXSA8PCA4IHwgcGl4ZWxbMl07CiB9CiAKLXN0YXRpYyBpbmxpbmUg
dm9pZCBzZXRQaXhlbFJHQkEoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBkZXN0LCBwbmdfYnl0ZXAg
cGl4ZWwsIHVuc2lnbmVkIGNoYXImIG5vblRyaXZpYWxBbHBoYU1hc2spCitzdGF0aWMgaW5saW5l
IHZvaWQgc2V0UGl4ZWxSR0JBKFJHQkEzMiogZGVzdCwgcG5nX2J5dGVwIHBpeGVsLCB1bnNpZ25l
ZCBjaGFyJiBub25Ucml2aWFsQWxwaGFNYXNrKQogewogICAgIHVuc2lnbmVkIGNoYXIgYSA9IHBp
eGVsWzNdOwogICAgICpkZXN0ID0gYSA8PCAyNCB8IHBpeGVsWzBdIDw8IDE2IHwgcGl4ZWxbMV0g
PDwgOCB8IHBpeGVsWzJdOwogICAgIG5vblRyaXZpYWxBbHBoYU1hc2sgfD0gKDI1NSAtIGEpOwog
fQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxQcmVtdWx0aXBsaWVkUkdCQShJbWFnZUZy
YW1lOjpQaXhlbERhdGEqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCwgdW5zaWduZWQgY2hhciYgbm9u
VHJpdmlhbEFscGhhTWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFByZW11bHRpcGxp
ZWRSR0JBKFJHQkEzMiogZGVzdCwgcG5nX2J5dGVwIHBpeGVsLCB1bnNpZ25lZCBjaGFyJiBub25U
cml2aWFsQWxwaGFNYXNrKQogewogICAgIHVuc2lnbmVkIGNoYXIgYSA9IHBpeGVsWzNdOwogICAg
IHVuc2lnbmVkIGNoYXIgciA9IGZhc3REaXZpZGVCeTI1NShwaXhlbFswXSAqIGEpOwpAQCAtNDcx
LDggKzQ3MSw2IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWcKICAg
ICAgICAgICAgIGluaXRGcmFtZUJ1ZmZlcihtX2N1cnJlbnRGcmFtZSk7CiAgICAgICAgIGVsc2UK
ICNlbmRpZgotICAgICAgICAvLyBGb3IgUE5HcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUg
ZW50aXJlIGltYWdlLgotICAgICAgICBidWZmZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVj
dChJbnRQb2ludCgpLCBzaXplKCkpKTsKICAgICB9CiAKICAgICAvKiBsaWJwbmcgY29tbWVudHMg
KGhlcmUgdG8gZXhwbGFpbiB3aGF0IGZvbGxvd3MpLgpAQCAtNTMxLDcgKzUyOSw3IEBAIHZvaWQg
UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWcKICAgICB9CiAKICAgICAvLyBXcml0
ZSB0aGUgZGVjb2RlZCByb3cgcGl4ZWxzIHRvIHRoZSBmcmFtZSBidWZmZXIuCi0gICAgSW1hZ2VG
cmFtZTo6UGl4ZWxEYXRhKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoMCwgeSk7CisgICAgUkdC
QTMyKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoMCwgeSk7CiAgICAgaW50IHdpZHRoID0gc2Nh
bGVkU2l6ZSgpLndpZHRoKCk7CiAgICAgdW5zaWduZWQgY2hhciBub25Ucml2aWFsQWxwaGFNYXNr
ID0gMDsKIApAQCAtODU0LDcgKzg1Miw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNv
bXBsZXRlKCkKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQogICAgICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IHJlY3QubWF4WSgpIC0gcmVjdC55KCk7ICsreSkgewogICAg
ICAgICAgICAgcG5nX2J5dGVwIHJvdyA9IGludGVybGFjZUJ1ZmZlciArIChtX3NjYWxlZCA/IG1f
c2NhbGVkUm93c1t5XSA6IHkpICogY29sb3JDaGFubmVscyAqIHNpemUoKS53aWR0aCgpOwotICAg
ICAgICAgICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIo
cmVjdC54KCksIHkgKyByZWN0LnkoKSk7CisgICAgICAgICAgICBSR0JBMzIqIGFkZHJlc3MgPSBi
dWZmZXIuZ2V0QWRkcihyZWN0LngoKSwgeSArIHJlY3QueSgpKTsKICAgICAgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgcmVjdC5tYXhYKCkgLSByZWN0LngoKTsgKyt4KSB7CiAgICAgICAgICAg
ICAgICAgcG5nX2J5dGVwIHBpeGVsID0gcm93ICsgKG1fc2NhbGVkID8gbV9zY2FsZWRDb2x1bW5z
W3hdIDogeCkgKiBjb2xvckNoYW5uZWxzOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFscGhh
ID0gaGFzQWxwaGEgPyBwaXhlbFszXSA6IDI1NTsKQEAgLTg3MCw3ICs4NjgsNyBAQCB2b2lkIFBO
R0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAgICAgICAgIHBuZ19ieXRlcCByb3cgPSBp
bnRlcmxhY2VCdWZmZXI7CiAgICAgICAgIGZvciAoaW50IHkgPSByZWN0LnkoKTsgeSA8IHJlY3Qu
bWF4WSgpOyArK3ksIHJvdyArPSBjb2xvckNoYW5uZWxzICogc2l6ZSgpLndpZHRoKCkpIHsKICAg
ICAgICAgICAgIHBuZ19ieXRlcCBwaXhlbCA9IHJvdzsKLSAgICAgICAgICAgIEltYWdlRnJhbWU6
OlBpeGVsRGF0YSogYWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHJlY3QueCgpLCB5KTsKKyAgICAg
ICAgICAgIFJHQkEzMiogYWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHJlY3QueCgpLCB5KTsKICAg
ICAgICAgICAgIGZvciAoaW50IHggPSByZWN0LngoKTsgeCA8IHJlY3QubWF4WCgpOyArK3gsIHBp
eGVsICs9IGNvbG9yQ2hhbm5lbHMpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9
IGhhc0FscGhhID8gcGl4ZWxbM10gOiAyNTU7CiAgICAgICAgICAgICAgICAgbm9uVHJpdmlhbEFs
cGhhIHw9IGFscGhhIDwgMjU1OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3Bw
CShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzIsMTQg
KzEzMiwxMyBAQCBib29sIFdFQlBJbWFnZURlY29kZXI6OmRlY29kZShib29sIG9ubHlTCiAgICAg
ICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMoSW1h
Z2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKG1faGFz
QWxwaGEpOwotICAgICAgICBidWZmZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQ
b2ludCgpLCBzaXplKCkpKTsKICAgICB9CiAKICAgICBpZiAoIW1fZGVjb2RlcikgewogICAgICAg
ICBXRUJQX0NTUF9NT0RFIG1vZGUgPSBvdXRwdXRNb2RlKG1faGFzQWxwaGEpOwogICAgICAgICBp
ZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkKICAgICAgICAgICAgIG1vZGUgPSBvdXRwdXRNb2RlKGZh
bHNlKTsKLSAgICAgICAgaW50IHJvd1N0cmlkZSA9IHNpemUoKS53aWR0aCgpICogc2l6ZW9mKElt
YWdlRnJhbWU6OlBpeGVsRGF0YSk7CisgICAgICAgIGludCByb3dTdHJpZGUgPSBzaXplKCkud2lk
dGgoKSAqIHNpemVvZihSR0JBMzIpOwogICAgICAgICB1aW50OF90KiBvdXRwdXQgPSByZWludGVy
cHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIuZ2V0QWRkcigwLCAwKSk7CiAgICAgICAgIGludCBv
dXRwdXRTaXplID0gc2l6ZSgpLmhlaWdodCgpICogcm93U3RyaWRlOwogICAgICAgICBtX2RlY29k
ZXIgPSBXZWJQSU5ld1JHQihtb2RlLCBvdXRwdXQsIG91dHB1dFNpemUsIHJvd1N0cmlkZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288447</attachid>
            <date>2016-09-09 16:18:00 -0700</date>
            <delta_ts>2016-09-09 17:02:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159679-20160909161531.patch</filename>
            <type>text/plain</type>
            <size>45600</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTc3MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkxIEBACisyMDE2LTA5LTA5ICBTYWlkIEFi
b3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSB0aGUg
cGl4ZWwgZGF0YSBvZiBJbWFnZUZyYW1lIHRvIGEgc2VwYXJhdGUgY2xhc3MgbmFtZWQgSW1hZ2VC
YWNraW5nU3RvcmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1OTY3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIE1vdmUgdGhlIHBpeGVsIGRhdGEgbWFuaXB1bGF0aW9uIHBhcnQgaW4gSW1hZ2VGcmFtZSBp
bnRvIGEgc2VwYXJhdGUgY2xhc3MKKyAgICAgICAgYW5kIGFsbG9jYXRlIGl0IG9uIGRlbWFuZC4K
KworICAgICAgICAqIFBsYXRmb3JtRWZsLmNtYWtlOgorICAgICAgICAqIFBsYXRmb3JtR1RLLmNt
YWtlOgorICAgICAgICAqIFBsYXRmb3JtV2luQ2Fpcm8uY21ha2U6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L0NvbG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxpZWRDaGFubmVsKToKKyAg
ICAgICAgKFdlYkNvcmU6OnVucHJlbXVsdGlwbGllZENoYW5uZWwpOgorICAgICAgICAoV2ViQ29y
ZTo6bWFrZVByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VVblByZW11
bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbG9yRnJvbVByZW11bHRpcGxpZWRB
UkdCKToKKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6ZmFz
dE11bHRpcGx5QnkyNTUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2lu
Z1N0b3JlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJhY2tpbmdTdG9yZTo6SW1hZ2VCYWNraW5n
U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OnNldFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OnNldEZyYW1lUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUJhY2tpbmdTdG9yZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJhY2tpbmdTdG9yZTo6ZnJhbWVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QmFja2luZ1N0b3JlOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJhY2tpbmdTdG9y
ZTo6Y2xlYXJSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpyZXBl
YXRGaXJzdFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJhY2tpbmdTdG9yZTo6YXQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OnNldFJHQkEpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6Om92ZXJSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQmFja2luZ1N0b3JlOjppbkJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJh
Y2tpbmdTdG9yZTo6aXNPdmVyU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
TmF0aXZlSW1hZ2VDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpuYXRpdmVJbWFnZUhhc0FscGhh
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWU6Onplcm9GaWxsUGl4ZWxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6
Onplcm9GaWxsRnJhbWVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldEJh
Y2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldE9yaWdpbmFsRnJhbWVSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRGVjb2Rlcjo6ZnJhbWVCeXRlc0F0SW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6Y29weUJpdG1hcERhdGEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFt
ZTo6Y29weVJvd05UaW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1hZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6YmFja2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRnJhbWU6Omhhc0JhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjpvcmlnaW5hbEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpn
ZXRBZGRyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldFJHQkEpOgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6b3ZlclJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VEZWNvZGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldE9y
aWdpbmFsRnJhbWVSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6
Omhhc1BpeGVsRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpm
aXhQb2ludFVuc2lnbmVkTXVsdGlwbHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6ZGl2aWRlMjU1KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6OndpZHRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmhlaWdo
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmlzT3ZlclNpemUp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFn
ZVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6ZGVjb2RlQk1Q
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZUJhY2tpbmdT
dG9yZUNhaXJvLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJhY2tpbmdTdG9y
ZTo6aW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVj
b2RlZFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1
ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VE
ZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVsKToKKyAgICAgICAgKFdlYkNv
cmU6OkpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcyk6CisgICAgICAgICogcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpzZXRQaXhlbFJHQik6CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhlbFJHQkEpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxQcmVtdWx0aXBsaWVkUkdCQSk6CisgICAgICAgIChXZWJD
b3JlOjpQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
TkdJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpQTkdJ
bWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXRUJQ
SW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorCiAyMDE2LTA5LTA5ICBNeWxlcyBDLiBNYXhmaWVsZCAg
PG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHVudXNlZCBtZW1iZXIgb2Yg
R2x5cGhCdWZmZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCShyZXZpc2lvbiAyMDU2
ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQkod29ya2luZyBjb3B5KQpA
QCAtMTgzLDEwICsxODMsOSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3gxMS9YVW5pcXVlUmVzb3VyY2UuY3BwCiAKKyAgICBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9JbWFnZUJhY2tpbmdTdG9yZUNhaXJvLmNwcAogICAgIHBsYXRmb3JtL2ltYWdl
LWVuY29kZXJzL0pQRUdJbWFnZUVuY29kZXIuY3BwCiAKLSAgICBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKLQogICAgIHBsYXRmb3JtL25ldHdvcmsv
ZWZsL05ldHdvcmtTdGF0ZU5vdGlmaWVyRWZsLmNwcAogCiAgICAgcGxhdGZvcm0vbmV0d29yay9z
b3VwL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU291cC5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtR1RLLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3Jt
R1RLLmNtYWtlCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdU
Sy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTU1LDcgKzE1NSw3IEBAIGxpc3QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCiAg
ICAgcGxhdGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5jcHAKIAotICAgIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAorICAgIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCiAKICAgICBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9ndGsvU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2VHdGsuY3BwCiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQkocmV2aXNpb24gMjA1Njg0KQorKysg
U291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAt
NDYsNyArNDYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAogCi0gICAgcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCisgICAgcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VCYWNraW5nU3RvcmVDYWlyby5jcHAKIAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU3R1Yi5jcHAKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMjc1LDYgKzIyNzUsNyBAQAogCQk1
NTVCODdFQzFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU1Qjg3RUExQ0FBRjBBQjAwMzQ5
NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLzsgfTsKIAkJNTU1Qjg3RUQxQ0FBRjBBQjAwMzQ5
NDI1IC8qIEltYWdlRGVjb2RlckNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cu
aCAqLzsgfTsKIAkJNTVBMzM2RjcxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUEzMzZGNjFEODIw
OUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLzsgfTsKKwkJNTVBMzM2RjkxRDgyMUUzQzAw
MjJDNEM3IC8qIEltYWdlQmFja2luZ1N0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA1NUEzMzZGODFEODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNr
aW5nU3RvcmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk1NzA5RThDRDFENDEzRDQ3MDAzMjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5cHRvLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MDlFOENBMUQ0
MTNDRTMwMDMyNDRBQyAvKiBXZWJLaXRTdWJ0bGVDcnlwdG8uY3BwICovOyB9OwogCQk1NzA5RThD
RTFENDEzRDVCMDAzMjQ0QUMgLyogSlNXZWJLaXRTdWJ0bGVDcnlwdG9DdXN0b20uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFGRjhGNjYxODA3NDYw
ODAwMTMyNjc0IC8qIEpTV2ViS2l0U3VidGxlQ3J5cHRvQ3VzdG9tLmNwcCAqLzsgfTsKIAkJNTcw
OUU4Q0YxRDQxM0Q5QTAwMzI0NEFDIC8qIFdlYktpdFN1YnRsZUNyeXB0by5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcwOUU4Q0IxRDQxM0NFMzAwMzI0
NEFDIC8qIFdlYktpdFN1YnRsZUNyeXB0by5oICovOyB9OwpAQCAtOTI5MSw2ICs5MjkyLDcgQEAK
IAkJNTU1Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdl
RGVjb2RlckNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlRGVjb2Rl
ckNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1QTMzNkY2MUQ4MjA5RjQwMDIy
QzRDNyAvKiBOYXRpdmVJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBO
YXRpdmVJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NUEzMzZGODFEODIx
RTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW1hZ2VCYWNraW5nU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNTVENDA4RjcxQTdDNjMxODAwQzc4NDUwIC8qIFNWR0ltYWdlQ2xpZW50cy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdJbWFnZUNsaWVudHMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcwOUU4Q0ExRDQxM0NFMzAwMzI0NEFDIC8qIFdlYktpdFN1
YnRsZUNyeXB0by5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJL
aXRTdWJ0bGVDcnlwdG8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzA5RThD
QjFENDEzQ0UzMDAzMjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5cHRvLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdFN1YnRsZUNyeXB0by5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMjA3NjksNiArMjA3NzEsNyBAQAogCQkJCTM3OTkxOTk0MTIwMERERjQw
MEVBMDQxQyAvKiBXT0ZGRmlsZUZvcm1hdC5jcHAgKi8sCiAJCQkJMzc5OTE5OTUxMjAwRERGNDAw
RUEwNDFDIC8qIFdPRkZGaWxlRm9ybWF0LmggKi8sCiAJCQkJNTVBMzM2RjYxRDgyMDlGNDAwMjJD
NEM3IC8qIE5hdGl2ZUltYWdlLmggKi8sCisJCQkJNTVBMzM2RjgxRDgyMUUzQzAwMjJDNEM3IC8q
IEltYWdlQmFja2luZ1N0b3JlLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGdyYXBoaWNzOwogCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI2MzM5LDYgKzI2MzQyLDcgQEAKIAkJCQk1ODJD
QjA1MzFBNzhBMTRCMDBBRkZDQzQgLyogU2ltcGxlTGluZUxheW91dFRleHRGcmFnbWVudEl0ZXJh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNUExRUE3RDE1MkJDRjA4MDA0RDAwQjYgLyogU2lt
cGxpZnlNYXJrdXBDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzJBN0YyMTFDNkU1NzE5
MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTU1QTMzNkY5
MUQ4MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMzE3NDFBQUQxNjYzNjYwOTAwOEE1QjdFIC8qIFNpbXVsYXRlZENsaWNrT3B0aW9ucy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkQwMEQ3QTUxNEEzRjYxOTAwNzM0MDExIC8qIFNpbmNSZXNhbXBs
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMzI3RDYwMTFBMzNBMkIwMDRGOUQ2NSAvKiBTaW5r
RG9jdW1lbnQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSwx
NiBAQCBjb25zdCBSR0JBMzIgQ29sb3I6OnRyYW5zcGFyZW50Owogc3RhdGljIGNvbnN0IFJHQkEz
MiBsaWdodGVuZWRCbGFjayA9IDB4RkY1NDU0NTQ7CiBzdGF0aWMgY29uc3QgUkdCQTMyIGRhcmtl
bmVkV2hpdGUgPSAweEZGQUJBQkFCOwogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHByZW11bHRp
cGxpZWRDaGFubmVsKHVuc2lnbmVkIGMsIHVuc2lnbmVkIGEpCit7CisgICAgcmV0dXJuIGZhc3RE
aXZpZGVCeTI1NShjICogYSArIDI1NCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgdW5w
cmVtdWx0aXBsaWVkQ2hhbm5lbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBhKQoreworICAgIHJldHVy
biAoZmFzdE11bHRpcGx5QnkyNTUoYykgKyBhIC0gMSkgLyBhOworfQorCiBSR0JBMzIgbWFrZVJH
QihpbnQgciwgaW50IGcsIGludCBiKQogewogICAgIHJldHVybiAweEZGMDAwMDAwIHwgc3RkOjpt
YXgoMCwgc3RkOjptaW4ociwgMjU1KSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAy
NTUpKSA8PCA4IHwgc3RkOjptYXgoMCwgc3RkOjptaW4oYiwgMjU1KSk7CkBAIC01OSw2ICs2OSwx
NiBAQCBSR0JBMzIgbWFrZVJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50CiAgICAgcmV0dXJu
IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGEsIDI1NSkpIDw8IDI0IHwgc3RkOjptYXgoMCwgc3RkOjpt
aW4ociwgMjU1KSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAyNTUpKSA8PCA4IHwg
c3RkOjptYXgoMCwgc3RkOjptaW4oYiwgMjU1KSk7CiB9CiAKK1JHQkEzMiBtYWtlUHJlbXVsdGlw
bGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCit7CisgICAgcmV0dXJuIG1ha2VS
R0JBKHByZW11bHRpcGxpZWRDaGFubmVsKHIsIGEpLCBwcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBh
KSwgcHJlbXVsdGlwbGllZENoYW5uZWwoYiwgYSksIGEpOworfQorCitSR0JBMzIgbWFrZVVuUHJl
bXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCit7CisgICAgcmV0dXJu
IG1ha2VSR0JBKHVucHJlbXVsdGlwbGllZENoYW5uZWwociwgYSksIHVucHJlbXVsdGlwbGllZENo
YW5uZWwoZywgYSksIHVucHJlbXVsdGlwbGllZENoYW5uZWwoYiwgYSksIGEpOworfQorCiBzdGF0
aWMgaW50IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGZsb2F0IGYpCiB7CiAgICAgLy8gV2UgdXNlIGxy
b3VuZGYgYW5kIDI1NSBpbnN0ZWFkIG9mIG5leHRhZnRlcmYoMjU2LCAwKSB0byBtYXRjaCBDRydz
IHJvdW5kaW5nCkBAIC00ODIsMTQgKzUwMiw5IEBAIHZvaWQgQ29sb3I6OmdldEhTVihkb3VibGUm
IGh1ZSwgZG91YmxlJiAKIENvbG9yIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdCKFJHQkEzMiBw
aXhlbENvbG9yKQogewogICAgIGludCBhbHBoYSA9IGFscGhhQ2hhbm5lbChwaXhlbENvbG9yKTsK
LSAgICBpZiAoYWxwaGEgJiYgYWxwaGEgPCAyNTUpIHsKLSAgICAgICAgcmV0dXJuIENvbG9yOjpj
cmVhdGVVbmNoZWNrZWQoCi0gICAgICAgICAgICByZWRDaGFubmVsKHBpeGVsQ29sb3IpICogMjU1
IC8gYWxwaGEsCi0gICAgICAgICAgICBncmVlbkNoYW5uZWwocGl4ZWxDb2xvcikgKiAyNTUgLyBh
bHBoYSwKLSAgICAgICAgICAgIGJsdWVDaGFubmVsKHBpeGVsQ29sb3IpICogMjU1IC8gYWxwaGEs
Ci0gICAgICAgICAgICBhbHBoYSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldHVybiBDb2xvcihw
aXhlbENvbG9yKTsKKyAgICBpZiAoYWxwaGEgJiYgYWxwaGEgPCAyNTUpCisgICAgICAgIHBpeGVs
Q29sb3IgPSBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShyZWRDaGFubmVsKHBpeGVsQ29sb3IpLCBn
cmVlbkNoYW5uZWwocGl4ZWxDb2xvciksIGJsdWVDaGFubmVsKHBpeGVsQ29sb3IpLCBhbHBoYSk7
CisgICAgcmV0dXJuIENvbG9yKHBpeGVsQ29sb3IpOwogfQogCiBSR0JBMzIgcHJlbXVsdGlwbGll
ZEFSR0JGcm9tQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpAQCAtNDk3LDE0ICs1MTIsMTAgQEAg
UkdCQTMyIHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKGNvbnN0IAogICAgIHVuc2lnbmVkIHBp
eGVsQ29sb3I7CiAKICAgICB1bnNpZ25lZCBhbHBoYSA9IGNvbG9yLmFscGhhKCk7Ci0gICAgaWYg
KGFscGhhIDwgMjU1KSB7Ci0gICAgICAgIHBpeGVsQ29sb3IgPSBDb2xvcjo6Y3JlYXRlVW5jaGVj
a2VkKAotICAgICAgICAgICAgZmFzdERpdmlkZUJ5MjU1KGNvbG9yLnJlZCgpICogYWxwaGEgKyAy
NTQpLAotICAgICAgICAgICAgZmFzdERpdmlkZUJ5MjU1KGNvbG9yLmdyZWVuKCkgKiBhbHBoYSAr
IDI1NCksCi0gICAgICAgICAgICBmYXN0RGl2aWRlQnkyNTUoY29sb3IuYmx1ZSgpICogYWxwaGEg
KyAyNTQpLAotICAgICAgICAgICAgYWxwaGEpLnJnYigpOwotICAgIH0gZWxzZQotICAgICAgICAg
cGl4ZWxDb2xvciA9IGNvbG9yLnJnYigpOworICAgIGlmIChhbHBoYSA8IDI1NSkKKyAgICAgICAg
cGl4ZWxDb2xvciA9IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShjb2xvci5yZWQoKSwgY29sb3IuZ3Jl
ZW4oKSwgY29sb3IuYmx1ZSgpLCBhbHBoYSk7CisgICAgZWxzZQorICAgICAgICBwaXhlbENvbG9y
ID0gY29sb3IucmdiKCk7CiAKICAgICByZXR1cm4gcGl4ZWxDb2xvcjsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjA1Njg0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2luZyBjb3B5KQpA
QCAtNTUsNiArNTUsOSBAQCB0eXBlZGVmIHVuc2lnbmVkIFJHQkEzMjsgLy8gRGVwcmVjYXRlZDog
CiBXRUJDT1JFX0VYUE9SVCBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBiKTsKIFdF
QkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7
CiAKK1JHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50
IGEpOworUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIs
IGludCBhKTsKKwogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEo
UkdCQTMyIGNvbG9yLCBmbG9hdCBvdmVycmlkZUFscGhhKTsKIFdFQkNPUkVfRVhQT1JUIFJHQkEz
MiBjb2xvcldpdGhPdmVycmlkZUFscGhhKFJHQkEzMiBjb2xvciwgT3B0aW9uYWw8ZmxvYXQ+IG92
ZXJyaWRlQWxwaGEpOwogCkBAIC0yMTgsNiArMjIxLDcgQEAgQ29sb3IgYmxlbmQoY29uc3QgQ29s
b3ImIGZyb20sIGNvbnN0IENvbAogCiBpbnQgZGlmZmVyZW5jZVNxdWFyZWQoY29uc3QgQ29sb3Im
LCBjb25zdCBDb2xvciYpOwogCit1aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1aW50MTZfdCB2
YWx1ZSk7CiB1aW50MTZfdCBmYXN0RGl2aWRlQnkyNTUodWludDE2X3QpOwogCiAjaWYgVVNFKENH
KQpAQCAtMjkwLDYgKzI5NCwxMSBAQCBpbmxpbmUgdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JD
aGFubmVsCiAgICAgcmV0dXJuIHN0ZDo6bWF4KDAuZiwgc3RkOjptaW4oMjU1LmYsIHN0ZDo6cm91
bmQodmFsdWUpKSk7CiB9CiAKK2lubGluZSB1aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1aW50
MTZfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gKHZhbHVlIDw8IDgpIC0gdmFsdWU7Cit9CisKIGlu
bGluZSB1aW50MTZfdCBmYXN0RGl2aWRlQnkyNTUodWludDE2X3QgdmFsdWUpCiB7CiAgICAgLy8g
V2hpbGUgdGhpcyBpcyBhbiBhcHByb3hpbWF0ZSBhbGdvcml0aG0gZm9yIGRpdmlzaW9uIGJ5IDI1
NSwgaXQgZ2l2ZXMgcGVyZmVjdGx5IGFjY3VyYXRlIHJlc3VsdHMgZm9yIDE2LWJpdCB2YWx1ZXMu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9y
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdl
QmFja2luZ1N0b3JlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2lu
Y2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgorCisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEltYWdlQmFja2lu
Z1N0b3JlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQmFja2lu
Z1N0b3JlPiBjcmVhdGUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhh
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8SW1hZ2VCYWNraW5nU3Rv
cmU+KHNpemUsIHByZW11bHRpcGx5QWxwaGEpOworICAgIH0KKworICAgIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8SW1hZ2VCYWNraW5nU3RvcmU+IGNyZWF0ZShjb25zdCBJbWFnZUJhY2tpbmdTdG9y
ZSYgb3RoZXIpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxJbWFnZUJh
Y2tpbmdTdG9yZT4ob3RoZXIpOworICAgIH0KKworICAgIEltYWdlQmFja2luZ1N0b3JlKGNvbnN0
IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSA9IHRydWUpCisgICAgICAgIDog
bV9wcmVtdWx0aXBseUFscGhhKHByZW11bHRpcGx5QWxwaGEpCisgICAgeworICAgICAgICBBU1NF
UlQoIXNpemUuaXNFbXB0eSgpKTsKKyAgICAgICAgc2V0U2l6ZShzaXplKTsKKyAgICB9CisKKyAg
ICBJbWFnZUJhY2tpbmdTdG9yZShjb25zdCBJbWFnZUJhY2tpbmdTdG9yZSYgb3RoZXIpCisgICAg
eworICAgICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgbV9waXhlbHMgPSBvdGhlci5tX3BpeGVsczsKKyAgICAgICAgbV9waXhlbHNQdHIgPSBt
X3BpeGVscy5kYXRhKCk7CisgICAgICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKKyAgICAgICAg
bV9wcmVtdWx0aXBseUFscGhhID0gb3RoZXIubV9wcmVtdWx0aXBseUFscGhhOworICAgIH0KKwor
ICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlKCkgY29uc3Q7CisKKyAgICBib29sIHNldFNpemUoY29u
c3QgSW50U2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAgIGlmICghbV9waXhlbHMudHJ5UmVzZXJ2
ZUNhcGFjaXR5KHNpemUuYXJlYSgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBtX3BpeGVscy5yZXNpemUoc2l6ZS5hcmVhKCkpOworICAgICAgICBtX3BpeGVsc1B0ciA9
IG1fcGl4ZWxzLmRhdGEoKTsKKyAgICAgICAgbV9zaXplID0gc2l6ZTsKKyAgICAgICAgbV9mcmFt
ZVJlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIG1fc2l6ZSk7CisgICAgICAgIGNsZWFyKCk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0
IEludFJlY3QmIGZyYW1lUmVjdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9zaXplLmlzRW1w
dHkoKSk7CisgICAgICAgIEFTU0VSVChpbkJvdW5kcyhmcmFtZVJlY3QpKTsKKyAgICAgICAgbV9m
cmFtZVJlY3QgPSBmcmFtZVJlY3Q7CisgICAgfQorCisgICAgSW50U2l6ZSBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9zaXplOyB9CisgICAgSW50UmVjdCBmcmFtZVJlY3QoKSBjb25zdCB7IHJldHVy
biBtX2ZyYW1lUmVjdDsgfQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBtZW1z
ZXQobV9waXhlbHNQdHIsIDAsIG1fc2l6ZS5hcmVhKCkgKiBzaXplb2YoUkdCQTMyKSk7CisgICAg
fQorCisgICAgdm9pZCBjbGVhclJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKKyAgICB7CisgICAg
ICAgIGlmIChyZWN0LmlzRW1wdHkoKSB8fCAhaW5Cb3VuZHMocmVjdCkpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkg
KiBzaXplb2YoUkdCQTMyKTsKKyAgICAgICAgUkdCQTMyKiBzdGFydCA9IGF0KHJlY3QueCgpLCBy
ZWN0LnkoKSk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVjdC5oZWlnaHQoKTsgKytp
KSB7CisgICAgICAgICAgICBtZW1zZXQoc3RhcnQsIDAsIHJlY3RXaWR0aEluQnl0ZXMpOworICAg
ICAgICAgICAgc3RhcnQgKz0gbV9zaXplLndpZHRoKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB2b2lkIHJlcGVhdEZpcnN0Um93KGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAgeworICAgICAg
ICBpZiAocmVjdC5pc0VtcHR5KCkgfHwgIWluQm91bmRzKHJlY3QpKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIHNpemVfdCByZWN0V2lkdGhJbkJ5dGVzID0gcmVjdC53aWR0aCgpICog
c2l6ZW9mKFJHQkEzMik7CisgICAgICAgIFJHQkEzMiogc3JjID0gYXQocmVjdC54KCksIHJlY3Qu
eSgpKTsKKyAgICAgICAgUkdCQTMyKiBkZXN0ID0gc3JjICsgbV9zaXplLndpZHRoKCk7CisgICAg
ICAgIGZvciAoaW50IGkgPSAxOyBpIDwgcmVjdC5oZWlnaHQoKTsgKytpKSB7CisgICAgICAgICAg
ICBtZW1jcHkoZGVzdCwgc3JjLCByZWN0V2lkdGhJbkJ5dGVzKTsKKyAgICAgICAgICAgIGRlc3Qg
Kz0gbV9zaXplLndpZHRoKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSR0JBMzIqIGF0KGlu
dCB4LCBpbnQgeSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3BpeGVsc1B0ciArIHkg
KiBtX3NpemUud2lkdGgoKSArIHg7CisgICAgfQorCisgICAgdm9pZCBzZXRSR0JBKGludCB4LCBp
bnQgeSwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKKyAg
ICB7CisgICAgICAgIHNldFJHQkEoYXQoeCwgeSksIHIsIGcsIGIsIGEpOworICAgIH0KKworICAg
IHZvaWQgc2V0UkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2ln
bmVkIGIsIHVuc2lnbmVkIGEpCisgICAgeworICAgICAgICBpZiAobV9wcmVtdWx0aXBseUFscGhh
ICYmICFhKQorICAgICAgICAgICAgKmRlc3QgPSAwOworICAgICAgICBlbHNlIGlmIChtX3ByZW11
bHRpcGx5QWxwaGEgJiYgYSA8IDI1NSkKKyAgICAgICAgICAgICpkZXN0ID0gbWFrZVByZW11bHRp
cGxpZWRSR0JBKHIsIGcsIGIsIGEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqZGVzdCA9
IG1ha2VSR0JBKHIsIGcsIGIsIGEpOworICAgIH0KKworICAgIHZvaWQgb3ZlclJHQkEoUkdCQTMy
KiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQor
ICAgIHsKKyAgICAgICAgaWYgKCFhKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlm
IChhID49IDI1NSB8fCAhYWxwaGFDaGFubmVsKCpkZXN0KSkgeworICAgICAgICAgICAgc2V0UkdC
QShkZXN0LCByLCBnLCBiLCBhKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKQorICAgICAgICAgICAgKmRlc3QgPSBtYWtl
UHJlbXVsdGlwbGllZFJHQkEocmVkQ2hhbm5lbCgqZGVzdCksIGdyZWVuQ2hhbm5lbCgqZGVzdCks
IGJsdWVDaGFubmVsKCpkZXN0KSwgYWxwaGFDaGFubmVsKCpkZXN0KSk7CisKKyAgICAgICAgdW5z
aWduZWQgZCA9IDI1NSAtIGE7CisKKyAgICAgICAgciA9IGZhc3REaXZpZGVCeTI1NShyICogYSAr
IHJlZENoYW5uZWwoKmRlc3QpICogZCk7CisgICAgICAgIGcgPSBmYXN0RGl2aWRlQnkyNTUoZyAq
IGEgKyBncmVlbkNoYW5uZWwoKmRlc3QpICogZCk7CisgICAgICAgIGIgPSBmYXN0RGl2aWRlQnky
NTUoYiAqIGEgKyBibHVlQ2hhbm5lbCgqZGVzdCkgKiBkKTsKKyAgICAgICAgYSArPSBmYXN0RGl2
aWRlQnkyNTUoZCAqIGFscGhhQ2hhbm5lbCgqZGVzdCkpOworCisgICAgICAgIGlmIChtX3ByZW11
bHRpcGx5QWxwaGEpCisgICAgICAgICAgICAqZGVzdCA9IG1ha2VSR0JBKHIsIGcsIGIsIGEpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICAqZGVzdCA9IG1ha2VVblByZW11bHRpcGxpZWRSR0JB
KHIsIGcsIGIsIGEpOworICAgIH0KKworICAgIGJvb2wgaW5Cb3VuZHMoY29uc3QgSW50UmVjdCYg
cmVjdCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KCksIG1f
c2l6ZSkuY29udGFpbnMocmVjdCk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNPdmVyU2l6
ZShjb25zdCBJbnRTaXplJiBzaXplKQorICAgIHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGxv
bmcgbG9uZyBNYXhQaXhlbHMgPSAoKDEgPDwgMjkpIC0gMSk7CisgICAgICAgIHVuc2lnbmVkIGxv
bmcgbG9uZyBwaXhlbHMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHNpemUud2lk
dGgoKSkgKiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHNpemUuaGVpZ2h0KCkpOwor
ICAgICAgICByZXR1cm4gcGl4ZWxzID4gTWF4UGl4ZWxzOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBWZWN0b3I8UkdCQTMyPiBtX3BpeGVsczsKKyAgICBSR0JBMzIqIG1fcGl4ZWxzUHRyIHsgbnVs
bHB0ciB9OworICAgIEludFNpemUgbV9zaXplOworICAgIEludFJlY3QgbV9mcmFtZVJlY3Q7IC8v
IFRoaXMgd2lsbCBhbHdheXMganVzdCBiZSB0aGUgZW50aXJlIGJ1ZmZlciBleGNlcHQgZm9yIEdJ
RiBhbmQgUE5HIGZyYW1lcworICAgIGJvb2wgbV9wcmVtdWx0aXBseUFscGhhIHsgdHJ1ZSB9Owor
fTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZl
SW1hZ2VDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NywxMCArNDcsMTAgQEAgSW50U2l6ZSBuYXRpdmVJbWFnZVNpemUoY29uc3QgTmF0aXZl
SW1hZwogICAgIHJldHVybiBpbWFnZSA/IEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGltYWdlLmdl
dCgpKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZS5nZXQoKSkpIDogSW50U2l6ZSgpOwogfQogCi1i
b29sIG5hdGl2ZUltYWdlSGFzQWxwaGEoY29uc3QgTmF0aXZlSW1hZ2VQdHImKQorYm9vbCBuYXRp
dmVJbWFnZUhhc0FscGhhKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSkKIHsKLSAgICAvLyBG
SVhNRTogQW5zd2VyIGNvcnJlY3RseSB0aGUgcXVlc3Rpb246IGRvZXMgdGhlIENHSW1hZ2VSZWYg
aGF2ZSBhbHBoYSBjaGFubm5lbD8KLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBDR0ltYWdlQWxwaGFJ
bmZvIGluZm8gPSBDR0ltYWdlR2V0QWxwaGFJbmZvKGltYWdlLmdldCgpKTsKKyAgICByZXR1cm4g
KGluZm8gPj0ga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0KSAmJiAoaW5mbyA8PSBrQ0dJ
bWFnZUFscGhhRmlyc3QpOwogfQogCiBDb2xvciBuYXRpdmVJbWFnZVNpbmdsZVBpeGVsU29saWRD
b2xvcihjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAJKHJl
dmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw4ICsxNDEsOCBAQCBJbWFn
ZUZyYW1lJiBJbWFnZUZyYW1lOjpvcGVyYXRvcj0oY29uc3QgCiAgICAgaWYgKHRoaXMgPT0gJm90
aGVyKQogICAgICAgICByZXR1cm4gKnRoaXM7CiAKLSAgICBjb3B5Qml0bWFwRGF0YShvdGhlcik7
Ci0gICAgc2V0T3JpZ2luYWxGcmFtZVJlY3Qob3RoZXIub3JpZ2luYWxGcmFtZVJlY3QoKSk7Cisg
ICAgc2V0QmFja2luZ1N0b3JlKG90aGVyLmJhY2tpbmdTdG9yZSgpKTsKKyAgICBzZXRIYXNBbHBo
YShvdGhlci5tX2hhc0FscGhhKTsKICAgICBzZXRTdGF0dXMob3RoZXIuc3RhdHVzKCkpOwogICAg
IHNldER1cmF0aW9uKG90aGVyLmR1cmF0aW9uKCkpOwogICAgIHNldERpc3Bvc2FsTWV0aG9kKG90
aGVyLmRpc3Bvc2FsTWV0aG9kKCkpOwpAQCAtMTUyLDggKzE1Miw3IEBAIEltYWdlRnJhbWUmIElt
YWdlRnJhbWU6Om9wZXJhdG9yPShjb25zdCAKIAogdm9pZCBJbWFnZUZyYW1lOjpjbGVhclBpeGVs
RGF0YSgpCiB7Ci0gICAgbV9iYWNraW5nU3RvcmUuY2xlYXIoKTsKLSAgICBtX2J5dGVzID0gMDsK
KyAgICBtX2JhY2tpbmdTdG9yZSA9IG51bGxwdHI7CiAgICAgbV9zdGF0dXMgPSBGcmFtZUVtcHR5
OwogICAgIC8vIE5PVEU6IERvIG5vdCByZXNldCBvdGhlciBtZW1iZXJzIGhlcmU7IGNsZWFyRnJh
bWVCdWZmZXJDYWNoZSgpIGNhbGxzIHRoaXMKICAgICAvLyB0byBmcmVlIHRoZSBiaXRtYXAgZGF0
YSwgYnV0IG90aGVyIGZ1bmN0aW9ucyBsaWtlIGluaXRGcmFtZUJ1ZmZlcigpIGFuZApAQCAtMTYz
LDUxICsxNjIsMzEgQEAgdm9pZCBJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSgpCiAKIHZvaWQg
SW1hZ2VGcmFtZTo6emVyb0ZpbGxQaXhlbERhdGEoKQogewotICAgIG1lbXNldChtX2J5dGVzLCAw
LCBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQoKSAqIHNpemVvZihQaXhlbERhdGEpKTsK
KyAgICBtX2JhY2tpbmdTdG9yZS0+Y2xlYXIoKTsKICAgICBtX2hhc0FscGhhID0gdHJ1ZTsKIH0K
IAogdm9pZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiByZWN0
KQogewotICAgIEFTU0VSVChJbnRSZWN0KEludFBvaW50KCksIG1fc2l6ZSkuY29udGFpbnMocmVj
dCkpOwotCiAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBz
aXplX3QgcmVjdFdpZHRoSW5CeXRlcyA9IHJlY3Qud2lkdGgoKSAqIHNpemVvZihQaXhlbERhdGEp
OwotICAgIFBpeGVsRGF0YSogc3RhcnQgPSBtX2J5dGVzICsgKHJlY3QueSgpICogd2lkdGgoKSkg
KyByZWN0LngoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QuaGVpZ2h0KCk7ICsraSkg
ewotICAgICAgICBtZW1zZXQoc3RhcnQsIDAsIHJlY3RXaWR0aEluQnl0ZXMpOwotICAgICAgICBz
dGFydCArPSB3aWR0aCgpOwotICAgIH0KLQorICAgIG1fYmFja2luZ1N0b3JlLT5jbGVhclJlY3Qo
cmVjdCk7CiAgICAgc2V0SGFzQWxwaGEodHJ1ZSk7CiB9CiAKLWJvb2wgSW1hZ2VGcmFtZTo6Y29w
eUJpdG1hcERhdGEoY29uc3QgSW1hZ2VGcmFtZSYgb3RoZXIpCit2b2lkIEltYWdlRnJhbWU6OnNl
dEJhY2tpbmdTdG9yZShjb25zdCBJbWFnZUJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKQogewot
ICAgIGlmICh0aGlzID09ICZvdGhlcikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBtX2Jh
Y2tpbmdTdG9yZSA9IG90aGVyLm1fYmFja2luZ1N0b3JlOwotICAgIG1fYnl0ZXMgPSBtX2JhY2tp
bmdTdG9yZS5kYXRhKCk7Ci0gICAgbV9zaXplID0gb3RoZXIubV9zaXplOwotICAgIHNldEhhc0Fs
cGhhKG90aGVyLm1faGFzQWxwaGEpOwotICAgIHJldHVybiB0cnVlOworICAgIGlmIChiYWNraW5n
U3RvcmUgPT0gbV9iYWNraW5nU3RvcmUpCisgICAgICAgIHJldHVybjsKKyAgICBtX2JhY2tpbmdT
dG9yZSA9IGJhY2tpbmdTdG9yZSA/IEltYWdlQmFja2luZ1N0b3JlOjpjcmVhdGUoKmJhY2tpbmdT
dG9yZSkgOiBudWxscHRyOwogfQogCiBib29sIEltYWdlRnJhbWU6OnNldFNpemUoaW50IG5ld1dp
ZHRoLCBpbnQgbmV3SGVpZ2h0KQogewotICAgIEFTU0VSVCghd2lkdGgoKSAmJiAhaGVpZ2h0KCkp
OwotICAgIHNpemVfdCBiYWNraW5nU3RvcmVTaXplID0gbmV3V2lkdGggKiBuZXdIZWlnaHQ7Ci0g
ICAgaWYgKCFtX2JhY2tpbmdTdG9yZS50cnlSZXNlcnZlQ2FwYWNpdHkoYmFja2luZ1N0b3JlU2l6
ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX2JhY2tpbmdTdG9yZS5yZXNpemUoYmFj
a2luZ1N0b3JlU2l6ZSk7Ci0gICAgbV9ieXRlcyA9IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsKLSAg
ICBtX3NpemUgPSBJbnRTaXplKG5ld1dpZHRoLCBuZXdIZWlnaHQpOwotCi0gICAgemVyb0ZpbGxQ
aXhlbERhdGEoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBBU1NFUlQoIW1fYmFja2luZ1N0b3Jl
KTsKKyAgICBtX2JhY2tpbmdTdG9yZSA9IEltYWdlQmFja2luZ1N0b3JlOjpjcmVhdGUoSW50U2l6
ZShuZXdXaWR0aCwgbmV3SGVpZ2h0KSwgbV9wcmVtdWx0aXBseUFscGhhKTsKKyAgICByZXR1cm4g
bV9iYWNraW5nU3RvcmU7CiB9CiAKIGJvb2wgSW1hZ2VGcmFtZTo6aGFzQWxwaGEoKSBjb25zdApA
QCAtMjIwLDYgKzE5OSwxMiBAQCB2b2lkIEltYWdlRnJhbWU6OnNldEhhc0FscGhhKGJvb2wgYWxw
aGEpCiAgICAgbV9oYXNBbHBoYSA9IGFscGhhOwogfQogCit2b2lkIHNldE9yaWdpbmFsRnJhbWVS
ZWN0KGNvbnN0IEludFJlY3QmIGZyYW1lUmVjdCkKK3sKKyAgICBpZiAobV9iYWNraW5nU3RvcmUp
CisgICAgICAgIG1fYmFja2luZ1N0b3JlLT5zZXRGcmFtZVJlY3QoZnJhbWVSZWN0KTsKK30KKwog
dm9pZCBJbWFnZUZyYW1lOjpzZXRTdGF0dXMoRnJhbWVTdGF0dXMgc3RhdHVzKQogewogICAgIG1f
c3RhdHVzID0gc3RhdHVzOwpAQCAtMjg2LDcgKzI3MSw3IEBAIHVuc2lnbmVkIEltYWdlRGVjb2Rl
cjo6ZnJhbWVCeXRlc0F0SW5kZXgKICAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKSA8
PSBpbmRleCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgLy8gRklYTUU6IFVzZSB0aGUgZGltZW5z
aW9uIG9mIHRoZSByZXF1ZXN0ZWQgZnJhbWUuCi0gICAgcmV0dXJuIG1fc2l6ZS5hcmVhKCkgKiBz
aXplb2YoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKTsKKyAgICByZXR1cm4gbV9zaXplLmFyZWEoKSAq
IHNpemVvZihSR0JBMzIpOwogfQogCiBmbG9hdCBJbWFnZURlY29kZXI6OmZyYW1lRHVyYXRpb25B
dEluZGV4KHNpemVfdCBpbmRleCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAyMDU2ODQpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNs
dWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW1hZ2VCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRl
ICJJbWFnZVNvdXJjZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXpl
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtNTcsNyArNTksNiBAQCB1c2luZyBD
b2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hhcj47CiAgICAgICAgICAgICBEaXNwb3NlT3ZlcndyaXRl
UHJldmlvdXMgIC8vIENsZWFyIGZyYW1lIHRvIHByZXZpb3VzIGZyYW1lYnVmZmVyCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRlbnRzCiAgICAgICAgIH07Ci0g
ICAgICAgIHR5cGVkZWYgdW5zaWduZWQgUGl4ZWxEYXRhOwogCiAgICAgICAgIEltYWdlRnJhbWUo
KTsKIApAQCAtNzIsMTUyICs3Myw2OSBAQCB1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hh
cj47CiAgICAgICAgIHZvaWQgemVyb0ZpbGxQaXhlbERhdGEoKTsKICAgICAgICAgdm9pZCB6ZXJv
RmlsbEZyYW1lUmVjdChjb25zdCBJbnRSZWN0Jik7CiAKLSAgICAgICAgLy8gTWFrZXMgdGhpcyBm
cmFtZSBoYXZlIGFuIGluZGVwZW5kZW50IGNvcHkgb2YgdGhlIHByb3ZpZGVkIGltYWdlJ3MKLSAg
ICAgICAgLy8gcGl4ZWwgZGF0YSwgc28gdGhhdCBtb2RpZmljYXRpb25zIGluIG9uZSBmcmFtZSBh
cmUgbm90IHJlZmxlY3RlZCBpbgotICAgICAgICAvLyB0aGUgb3RoZXIuICBSZXR1cm5zIHdoZXRo
ZXIgdGhlIGNvcHkgc3VjY2VlZGVkLgotICAgICAgICBib29sIGNvcHlCaXRtYXBEYXRhKGNvbnN0
IEltYWdlRnJhbWUmKTsKLQogICAgICAgICAvLyBDb3BpZXMgdGhlIHBpeGVsIGRhdGEgYXQgWyhz
dGFydFgsIHN0YXJ0WSksIChlbmRYLCBzdGFydFkpKSB0byB0aGUKICAgICAgICAgLy8gc2FtZSBY
LWNvb3JkaW5hdGVzIG9uIGVhY2ggc3Vic2VxdWVudCByb3cgdXAgdG8gYnV0IG5vdCBpbmNsdWRp
bmcKICAgICAgICAgLy8gZW5kWS4KICAgICAgICAgdm9pZCBjb3B5Um93TlRpbWVzKGludCBzdGFy
dFgsIGludCBlbmRYLCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKICAgICAgICAgewotICAgICAgICAg
ICAgQVNTRVJUKHN0YXJ0WCA8IHdpZHRoKCkpOwotICAgICAgICAgICAgQVNTRVJUKGVuZFggPD0g
d2lkdGgoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhcnRZIDwgaGVpZ2h0KCkpOwotICAgICAg
ICAgICAgQVNTRVJUKGVuZFkgPD0gaGVpZ2h0KCkpOwotICAgICAgICAgICAgY29uc3QgaW50IHJv
d0J5dGVzID0gKGVuZFggLSBzdGFydFgpICogc2l6ZW9mKFBpeGVsRGF0YSk7Ci0gICAgICAgICAg
ICBjb25zdCBQaXhlbERhdGEqIGNvbnN0IHN0YXJ0QWRkciA9IGdldEFkZHIoc3RhcnRYLCBzdGFy
dFkpOwotICAgICAgICAgICAgZm9yIChpbnQgZGVzdFkgPSBzdGFydFkgKyAxOyBkZXN0WSA8IGVu
ZFk7ICsrZGVzdFkpCi0gICAgICAgICAgICAgICAgbWVtY3B5KGdldEFkZHIoc3RhcnRYLCBkZXN0
WSksIHN0YXJ0QWRkciwgcm93Qnl0ZXMpOworICAgICAgICAgICAgbV9iYWNraW5nU3RvcmUtPnJl
cGVhdEZpcnN0Um93KEludFJlY3Qoc3RhcnRYLCBzdGFydFksIGVuZFggLXN0YXJ0WCAsIGVuZFkg
LSBzdGFydFkpKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEFsbG9jYXRlcyBzcGFjZSBmb3Ig
dGhlIHBpeGVsIGRhdGEuICBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IHBpeGVscwogICAgICAg
ICAvLyBhcmUgd3JpdHRlbi4gIE11c3Qgb25seSBiZSBjYWxsZWQgb25jZS4gIFJldHVybnMgd2hl
dGhlciBhbGxvY2F0aW9uCiAgICAgICAgIC8vIHN1Y2NlZWRlZC4KLSAgICAgICAgYm9vbCBzZXRT
aXplKGludCBuZXdXaWR0aCwgaW50IG5ld0hlaWdodCk7CisgICAgICAgIGJvb2wgc2V0U2l6ZShj
b25zdCBJbnRTaXplJiwgYm9vbCBwcmVtdWx0aXBseUFscGhhKTsKKyAgICAgICAgSW50U2l6ZSBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nU3RvcmUtPnNpemUoKTsgfQogCiAgICAgICAg
IC8vIFJldHVybnMgYSBjYWxsZXItb3duZWQgcG9pbnRlciB0byB0aGUgdW5kZXJseWluZyBuYXRp
dmUgaW1hZ2UgZGF0YS4KICAgICAgICAgLy8gKEFjdHVhbCB1c2U6IFRoaXMgcG9pbnRlciB3aWxs
IGJlIG93bmVkIGJ5IEJpdG1hcEltYWdlIGFuZCBmcmVlZCBpbgogICAgICAgICAvLyBGcmFtZURh
dGE6OmNsZWFyKCkpLgotICAgICAgICBOYXRpdmVJbWFnZVB0ciBhc05ld05hdGl2ZUltYWdlKCkg
Y29uc3Q7CisgICAgICAgIE5hdGl2ZUltYWdlUHRyIGFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdCB7
IHJldHVybiBtX2JhY2tpbmdTdG9yZS0+aW1hZ2UoKTsgfQogCisgICAgICAgIGlubGluZSBJbWFn
ZUJhY2tpbmdTdG9yZSogYmFja2luZ1N0b3JlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nU3Rv
cmUgPyBtX2JhY2tpbmdTdG9yZS5nZXQoKSA6IG51bGxwdHI7IH0KKyAgICAgICAgaW5saW5lIGJv
b2wgaGFzQmFja2luZ1N0b3JlKCkgY29uc3QgeyByZXR1cm4gYmFja2luZ1N0b3JlKCk7IH0KKyAg
ICAgICAgCiAgICAgICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdDsKLSAgICAgICAgY29uc3QgSW50
UmVjdCYgb3JpZ2luYWxGcmFtZVJlY3QoKSBjb25zdCB7IHJldHVybiBtX29yaWdpbmFsRnJhbWVS
ZWN0OyB9CisgICAgICAgIEludFJlY3Qgb3JpZ2luYWxGcmFtZVJlY3QoKSBjb25zdCB7IHJldHVy
biBtX2JhY2tpbmdTdG9yZSA/IG1fYmFja2luZ1N0b3JlLT5mcmFtZVJlY3QoKSA6IEludFJlY3Qo
KTsgfQogICAgICAgICBGcmFtZVN0YXR1cyBzdGF0dXMoKSBjb25zdCB7IHJldHVybiBtX3N0YXR1
czsgfQogICAgICAgICB1bnNpZ25lZCBkdXJhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZHVyYXRp
b247IH0KICAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCgpIGNvbnN0
IHsgcmV0dXJuIG1fZGlzcG9zYWxNZXRob2Q7IH0KICAgICAgICAgYm9vbCBwcmVtdWx0aXBseUFs
cGhhKCkgY29uc3QgeyByZXR1cm4gbV9wcmVtdWx0aXBseUFscGhhOyB9CiAKKyAgICAgICAgdm9p
ZCBzZXRCYWNraW5nU3RvcmUoY29uc3QgSW1hZ2VCYWNraW5nU3RvcmUqKTsKKyAgICAgICAgCiAg
ICAgICAgIHZvaWQgc2V0SGFzQWxwaGEoYm9vbCBhbHBoYSk7Ci0gICAgICAgIHZvaWQgc2V0T3Jp
Z2luYWxGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgcikgeyBtX29yaWdpbmFsRnJhbWVSZWN0ID0g
cjsgfQorICAgICAgICB2b2lkIHNldE9yaWdpbmFsRnJhbWVSZWN0KGNvbnN0IEludFJlY3QmKTsK
ICAgICAgICAgdm9pZCBzZXRTdGF0dXMoRnJhbWVTdGF0dXMgc3RhdHVzKTsKICAgICAgICAgdm9p
ZCBzZXREdXJhdGlvbih1bnNpZ25lZCBkdXJhdGlvbikgeyBtX2R1cmF0aW9uID0gZHVyYXRpb247
IH0KICAgICAgICAgdm9pZCBzZXREaXNwb3NhbE1ldGhvZChGcmFtZURpc3Bvc2FsTWV0aG9kIG1l
dGhvZCkgeyBtX2Rpc3Bvc2FsTWV0aG9kID0gbWV0aG9kOyB9CiAgICAgICAgIHZvaWQgc2V0UHJl
bXVsdGlwbHlBbHBoYShib29sIHByZW11bHRpcGx5QWxwaGEpIHsgbV9wcmVtdWx0aXBseUFscGhh
ID0gcHJlbXVsdGlwbHlBbHBoYTsgfQogCi0gICAgICAgIGlubGluZSB2b2lkIHNldFJHQkEoaW50
IHgsIGludCB5LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBh
KQotICAgICAgICB7Ci0gICAgICAgICAgICBzZXRSR0JBKGdldEFkZHIoeCwgeSksIHIsIGcsIGIs
IGEpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5lIFBpeGVsRGF0YSogZ2V0QWRkcihpbnQg
eCwgaW50IHkpCisgICAgICAgIGlubGluZSBSR0JBMzIqIGdldEFkZHIoaW50IHgsIGludCB5KQog
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9ieXRlcyArICh5ICogd2lkdGgoKSkgKyB4
OworICAgICAgICAgICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlLT5hdCh4LCB5KTsKICAgICAgICAg
fQogCi0gICAgICAgIGlubGluZSBib29sIGhhc1BpeGVsRGF0YSgpIGNvbnN0Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBtX2J5dGVzOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gVXNl
IGZpeCBwb2ludCBtdWx0aXBsaWVyIGluc3RlYWQgb2YgaW50ZWdlciBkaXZpc2lvbiBvciBmbG9h
dGluZyBwb2ludCBtYXRoLgotICAgICAgICAvLyBUaGlzIG11bHRpcGxlciBwcm9kdWNlcyBleGFj
dGx5IHRoZSBzYW1lIHJlc3VsdCBmb3IgYWxsIHZhbHVlcyBpbiByYW5nZSAwIC0gMjU1LgotICAg
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZml4UG9pbnRTaGlmdCA9IDI0OwotICAgICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgZml4UG9pbnRNdWx0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KDEuMCAvIDI1NS4wICogKDEgPDwgZml4UG9pbnRTaGlmdCkpICsgMTsKLSAgICAgICAgLy8gTXVs
dGlwbGllcyB1bnNpZ25lZCB2YWx1ZSBieSBmaXhwb2ludCB2YWx1ZSBhbmQgY29udmVydHMgYmFj
ayB0byB1bnNpZ25lZC4KLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGZpeFBvaW50VW5zaWduZWRN
dWx0aXBseSh1bnNpZ25lZCBmaXhlZCwgdW5zaWduZWQgdikKKyAgICAgICAgaW5saW5lIHZvaWQg
c2V0UkdCQShpbnQgeCwgaW50IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIs
IHVuc2lnbmVkIGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAgKGZpeGVkICogdikg
Pj4gZml4UG9pbnRTaGlmdDsKKyAgICAgICAgICAgIG1fYmFja2luZ1N0b3JlLT5zZXRSR0JBKHgs
IHksIHIsIGcsIGIsIGEpOwogICAgICAgICB9CiAKLSAgICAgICAgaW5saW5lIHZvaWQgc2V0UkdC
QShQaXhlbERhdGEqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVu
c2lnbmVkIGEpCisgICAgICAgIGlubGluZSB2b2lkIHNldFJHQkEoUkdCQTMyKiBkZXN0LCB1bnNp
Z25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAobV9wcmVtdWx0aXBseUFscGhhICYmIGEgPCAyNTUpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoIWEpIHsKLSAgICAgICAgICAgICAgICAgICAgKmRlc3QgPSAwOwotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgdW5zaWduZWQgYWxwaGFNdWx0ID0gYSAqIGZpeFBvaW50TXVsdDsKLSAgICAgICAgICAgICAg
ICByID0gZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KHIsIGFscGhhTXVsdCk7Ci0gICAgICAgICAg
ICAgICAgZyA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShnLCBhbHBoYU11bHQpOwotICAgICAg
ICAgICAgICAgIGIgPSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkoYiwgYWxwaGFNdWx0KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICpkZXN0ID0gKGEgPDwgMjQgfCByIDw8IDE2IHwgZyA8
PCA4IHwgYik7CisgICAgICAgICAgICBtX2JhY2tpbmdTdG9yZS0+c2V0UkdCQShkZXN0LCByLCBn
LCBiLCBhKTsKICAgICAgICAgfQogCiAjaWYgRU5BQkxFKEFQTkcpCi0gICAgICAgIHN0YXRpYyBp
bmxpbmUgdW5zaWduZWQgZGl2aWRlMjU1KHVuc2lnbmVkIGEpCisgICAgICAgIGlubGluZSB2b2lk
IG92ZXJSR0JBKFJHQkEzMiogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQg
YiwgdW5zaWduZWQgYSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIChhICsgKGEgPj4g
OCkgKyAxKSA+PiA4OwotICAgICAgICB9Ci0KLSAgICAgICAgaW5saW5lIHZvaWQgb3ZlclJHQkEo
UGl4ZWxEYXRhKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNp
Z25lZCBhKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIWEpCi0gICAgICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgICAgICBpZiAoYSA8IDI1NSkgewotICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGFEZXN0ID0gKCgqZGVzdCkgPj4gMjQpICYgMjU1OwotICAgICAgICAgICAgICAgIGlm
IChhRGVzdCkgewotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCByRGVzdCA9ICgoKmRlc3Qp
ID4+IDE2KSAmIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZ0Rlc3QgPSAoKCpk
ZXN0KSA+PiA4KSAmIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYkRlc3QgPSAo
KmRlc3QpICYgMjU1OwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhQXV4ID0gMjU1IC0g
YTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHJEZXN0ID0gZGl2aWRlMjU1KHJEZXN0ICogYURlc3QpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgZ0Rlc3QgPSBkaXZpZGUyNTUoZ0Rlc3QgKiBhRGVzdCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBiRGVzdCA9IGRpdmlkZTI1NShiRGVzdCAqIGFEZXN0KTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICByID0gZGl2aWRlMjU1
KHIgKiBhICsgckRlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IGRpdmlkZTI1
NShnICogYSArIGdEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSBkaXZpZGUy
NTUoYiAqIGEgKyBiRGVzdCAqIGFBdXgpOwotICAgICAgICAgICAgICAgICAgICBhICs9IGRpdmlk
ZTI1NShhRGVzdCAqIGFBdXgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlw
bHlBbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgciA9IChyICogMjU1ICsgYSAtIDEp
IC8gYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGcgPSAoZyAqIDI1NSArIGEgLSAxKSAvIGE7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBiID0gKGIgKiAyNTUgKyBhIC0gMSkgLyBhOwotICAg
ICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3ByZW11bHRp
cGx5QWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgciA9IGRpdmlkZTI1NShyICogYSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGcgPSBkaXZpZGUyNTUoZyAqIGEpOwotICAgICAgICAgICAgICAg
ICAgICBiID0gZGl2aWRlMjU1KGIgKiBhKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAqZGVzdCA9IChhIDw8IDI0IHwgciA8PCAxNiB8IGcgPDwgOCB8IGIp
OworICAgICAgICAgICAgbV9iYWNraW5nU3RvcmUtPm92ZXJSR0JBKGRlc3QsIHIsIGcsIGIsIGEp
OwogICAgICAgICB9CiAjZW5kaWYKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIGludCB3aWR0aCgp
IGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3NpemUud2lkdGgoKTsKLSAg
ICAgICAgfQotCi0gICAgICAgIGludCBoZWlnaHQoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAg
ICAgICByZXR1cm4gbV9zaXplLmhlaWdodCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgVmVjdG9y
PFBpeGVsRGF0YT4gbV9iYWNraW5nU3RvcmU7Ci0gICAgICAgIFBpeGVsRGF0YSogbV9ieXRlczsg
Ly8gVGhlIG1lbW9yeSBpcyBiYWNrZWQgYnkgbV9iYWNraW5nU3RvcmUuCi0gICAgICAgIEludFNp
emUgbV9zaXplOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCYWNraW5nU3RvcmU+IG1f
YmFja2luZ1N0b3JlOwogICAgICAgICBib29sIG1faGFzQWxwaGE7Ci0gICAgICAgIEludFJlY3Qg
bV9vcmlnaW5hbEZyYW1lUmVjdDsgLy8gVGhpcyB3aWxsIGFsd2F5cyBqdXN0IGJlIHRoZSBlbnRp
cmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBidWZmZXIgZXhjZXB0
IGZvciBHSUYgZnJhbWVzIHdob3NlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gb3JpZ2luYWwgcmVjdCB3YXMgc21hbGxlciB0aGFuIHRoZQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIG92ZXJhbGwgaW1hZ2Ugc2l6ZS4KICAgICAgICAgRnJh
bWVTdGF0dXMgbV9zdGF0dXM7CiAgICAgICAgIHVuc2lnbmVkIG1fZHVyYXRpb247CiAgICAgICAg
IEZyYW1lRGlzcG9zYWxNZXRob2QgbV9kaXNwb3NhbE1ldGhvZDsKQEAgLTI4NywxMSArMjA1LDEx
IEBAIHVzaW5nIENvbG9yUHJvZmlsZSA9IFZlY3RvcjxjaGFyPjsKIAogICAgICAgICAvLyBSZXR1
cm5zIHdoZXRoZXIgdGhlIHNpemUgaXMgbGVnYWwgKGkuZS4gbm90IGdvaW5nIHRvIHJlc3VsdCBp
bgogICAgICAgICAvLyBvdmVyZmxvdyBlbHNld2hlcmUpLiAgSWYgbm90LCBtYXJrcyBkZWNvZGlu
ZyBhcyBmYWlsZWQuCi0gICAgICAgIHZpcnR1YWwgYm9vbCBzZXRTaXplKHVuc2lnbmVkIHdpZHRo
LCB1bnNpZ25lZCBoZWlnaHQpCisgICAgICAgIHZpcnR1YWwgYm9vbCBzZXRTaXplKGNvbnN0IElu
dFNpemUmIHNpemUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChpc092ZXJTaXplKHdpZHRo
LCBoZWlnaHQpKQorICAgICAgICAgICAgaWYgKEltYWdlQmFja2luZ1N0b3JlOjppc092ZXJTaXpl
KHNpemUpKQogICAgICAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKLSAgICAgICAgICAg
IG1fc2l6ZSA9IEludFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgICAgICAgICBtX3NpemUgPSBz
aXplOwogICAgICAgICAgICAgbV9zaXplQXZhaWxhYmxlID0gdHJ1ZTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CkBAIC0zODYsMTUgKzMwNCw2IEBAIHVzaW5nIENvbG9yUHJv
ZmlsZSA9IFZlY3RvcjxjaGFyPjsKICAgICAgICAgSW1hZ2VPcmllbnRhdGlvbiBtX29yaWVudGF0
aW9uOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgLy8gU29tZSBjb2RlIHBhdGhzIGNvbXB1dGUg
dGhlIHNpemUgb2YgdGhlIGltYWdlIGFzICJ3aWR0aCAqIGhlaWdodCAqIDQiCi0gICAgICAgIC8v
IGFuZCByZXR1cm4gaXQgYXMgYSAoc2lnbmVkKSBpbnQuICBBdm9pZCBvdmVyZmxvdy4KLSAgICAg
ICAgc3RhdGljIGJvb2wgaXNPdmVyU2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0
KQotICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxfc2l6ZSA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4od2lkdGgpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9u
Zz4oaGVpZ2h0KTsKLSAgICAgICAgICAgIHJldHVybiB0b3RhbF9zaXplID4gKCgxIDw8IDI5KSAt
IDEpOwotICAgICAgICB9Ci0KICAgICAgICAgSW50U2l6ZSBtX3NpemU7CiAgICAgICAgIGJvb2wg
bV9zaXplQXZhaWxhYmxlIHsgZmFsc2UgfTsKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dO
X1NBTVBMSU5HKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Ym1wL0JNUEltYWdlUmVhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCShyZXZpc2lvbiAyMDU2
ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1h
Z2VSZWFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Niw5ICs4Niw2IEBAIGJvb2wgQk1QSW1h
Z2VSZWFkZXI6OmRlY29kZUJNUChib29sIG9ubHkKICAgICAgICAgLy8gdGhlc2UgMHMgY291bGQg
YWN0dWFsbHkgc2hvdyB0aHJvdWdoLgogICAgICAgICBtX2J1ZmZlci0+c2V0SGFzQWxwaGEoZmFs
c2UpOwogCi0gICAgICAgIC8vIEZvciBCTVBzLCB0aGUgZnJhbWUgYWx3YXlzIGZpbGxzIHRoZSBl
bnRpcmUgaW1hZ2UuCi0gICAgICAgIG1fYnVmZmVyLT5zZXRPcmlnaW5hbEZyYW1lUmVjdChJbnRS
ZWN0KEludFBvaW50KCksIG1fcGFyZW50LT5zaXplKCkpKTsKLQogICAgICAgICBpZiAoIW1faXNU
b3BEb3duKQogICAgICAgICAgICAgbV9jb29yZC5zZXRZKG1fcGFyZW50LT5zaXplKCkuaGVpZ2h0
KCkgLSAxKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9JbWFnZUJhY2tpbmdTdG9yZUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZUJhY2tpbmdTdG9y
ZUNhaXJvLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9jYWlyby9JbWFnZUJhY2tpbmdTdG9yZUNhaXJvLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCYWNraW5nU3Rv
cmUuaCIKKworI2luY2x1ZGUgPGNhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTmF0
aXZlSW1hZ2VQdHIgSW1hZ2VCYWNraW5nU3RvcmU6OmltYWdlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gYWRvcHRSZWYoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoCisgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGNvbnN0X2Nhc3Q8UkdCQTMyKj4obV9w
aXhlbHNQdHIpKSwKKyAgICAgICAgQ0FJUk9fRk9STUFUX0FSR0IzMiwgc2l6ZSgpLndpZHRoKCks
IHNpemUoKS5oZWlnaHQoKSwgc2l6ZSgpLndpZHRoKCkgKiBzaXplb2YoUkdCQTMyKSkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNw
cAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMywxMCAr
MjEzLDEwIEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnMKIAogICAg
IC8vIEluaXRpYWxpemUgdGhlIGZyYW1lIGlmIG5lY2Vzc2FyeS4KICAgICBJbWFnZUZyYW1lJiBi
dWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07Ci0gICAgaWYgKCgoYnVmZmVy
LnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIo
ZnJhbWVJbmRleCkpIHx8ICFidWZmZXIuaGFzUGl4ZWxEYXRhKCkpCisgICAgaWYgKCgoYnVmZmVy
LnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIo
ZnJhbWVJbmRleCkpIHx8ICFidWZmZXIuaGFzQmFja2luZ1N0b3JlKCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogY3VycmVudEFkZHJlc3MgPSBi
dWZmZXIuZ2V0QWRkcih4QmVnaW4sIHlCZWdpbik7CisgICAgUkdCQTMyKiBjdXJyZW50QWRkcmVz
cyA9IGJ1ZmZlci5nZXRBZGRyKHhCZWdpbiwgeUJlZ2luKTsKICAgICAvLyBXcml0ZSBvbmUgcm93
J3Mgd29ydGggb2YgZGF0YSBpbnRvIHRoZSBmcmFtZS4gIAogICAgIGZvciAoaW50IHggPSB4QmVn
aW47IHggPCB4RW5kOyArK3gpIHsKICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBzb3VyY2VW
YWx1ZSA9IHJvd0J1ZmZlclsobV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4KSAtIGZy
YW1lQ29udGV4dC0+eE9mZnNldF07CkBAIC0zODcsNyArMzg3LDcgQEAgYm9vbCBHSUZJbWFnZURl
Y29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bgogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
Ly8gV2Ugd2FudCB0byBjbGVhciB0aGUgcHJldmlvdXMgZnJhbWUgdG8gdHJhbnNwYXJlbnQsIHdp
dGhvdXQKICAgICAgICAgICAgIC8vIGFmZmVjdGluZyBwaXhlbHMgaW4gdGhlIGltYWdlIG91dHNp
ZGUgb2YgdGhlIGZyYW1lLgotICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcHJldlJlY3QgPSBw
cmV2QnVmZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgpOworICAgICAgICAgICAgSW50UmVjdCBwcmV2
UmVjdCA9IHByZXZCdWZmZXItPm9yaWdpbmFsRnJhbWVSZWN0KCk7CiAgICAgICAgICAgICBjb25z
dCBJbnRTaXplJiBidWZmZXJTaXplID0gc2NhbGVkU2l6ZSgpOwogICAgICAgICAgICAgaWYgKCFm
cmFtZUluZGV4IHx8IHByZXZSZWN0LmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVk
U2l6ZSgpKSkpIHsKICAgICAgICAgICAgICAgICAvLyBDbGVhcmluZyB0aGUgZmlyc3QgZnJhbWUs
IG9yIGEgZnJhbWUgdGhlIHNpemUgb2YgdGhlIHdob2xlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0lt
YWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU1MSw3ICs1NTEsNyBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6OnNldEZhaWxlZCgp
CiB9CiAKIHRlbXBsYXRlIDxKX0NPTE9SX1NQQUNFIGNvbG9yU3BhY2U+Ci12b2lkIHNldFBpeGVs
KEltYWdlRnJhbWUmIGJ1ZmZlciwgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBjdXJyZW50QWRkcmVz
cywgSlNBTVBBUlJBWSBzYW1wbGVzLCBpbnQgY29sdW1uKQordm9pZCBzZXRQaXhlbChJbWFnZUZy
YW1lJiBidWZmZXIsIFJHQkEzMiogY3VycmVudEFkZHJlc3MsIEpTQU1QQVJSQVkgc2FtcGxlcywg
aW50IGNvbHVtbikKIHsKICAgICBKU0FNUExFKiBqc2FtcGxlID0gKnNhbXBsZXMgKyBjb2x1bW4g
KiAoY29sb3JTcGFjZSA9PSBKQ1NfUkdCID8gMyA6IDQpOwogCkBAIC01OTQsNyArNTk0LDcgQEAg
Ym9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoSQogICAgICAgICBpZiAoZGVz
dFkgPCAwKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgSW1hZ2VGcmFtZTo6UGl4
ZWxEYXRhKiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKDAsIGRlc3RZKTsKKyAgICAg
ICAgUkdCQTMyKiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKDAsIGRlc3RZKTsKICAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgKyt4KSB7CiAgICAgICAgICAgICBzZXRQ
aXhlbDxjb2xvclNwYWNlPihidWZmZXIsIGN1cnJlbnRBZGRyZXNzLCBzYW1wbGVzLCBpc1NjYWxl
ZCA/IG1fc2NhbGVkQ29sdW1uc1t4XSA6IHgpOwogICAgICAgICAgICAgKytjdXJyZW50QWRkcmVz
czsKQEAgLTYyMyw5ICs2MjMsNiBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5s
aW5lcygpCiAgICAgICAgIC8vIFRoZSBidWZmZXIgaXMgdHJhbnNwYXJlbnQgb3V0c2lkZSB0aGUg
ZGVjb2RlZCBhcmVhIHdoaWxlIHRoZSBpbWFnZSBpcwogICAgICAgICAvLyBsb2FkaW5nLiBUaGUg
Y29tcGxldGVkIGltYWdlIHdpbGwgYmUgbWFya2VkIGZ1bGx5IG9wYXF1ZSBpbiBqcGVnQ29tcGxl
dGUoKS4KICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKHRydWUpOwotCi0gICAgICAgIC8vIEZv
ciBKUEVHcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgotICAgICAg
ICBidWZmZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkp
KTsKICAgICB9CiAKICAgICBqcGVnX2RlY29tcHJlc3Nfc3RydWN0KiBpbmZvID0gbV9yZWFkZXIt
PmluZm8oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Bu
Zy9QTkdJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiAyMDU2
ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1h
Z2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDExLDE5ICs0MTEsMTkgQEAgdm9pZCBQ
TkdJbWFnZURlY29kZXI6OmhlYWRlckF2YWlsYWJsZSgpCiAgICAgfQogfQogCi1zdGF0aWMgaW5s
aW5lIHZvaWQgc2V0UGl4ZWxSR0IoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBkZXN0LCBwbmdfYnl0
ZXAgcGl4ZWwpCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxSR0IoUkdCQTMyKiBkZXN0LCBw
bmdfYnl0ZXAgcGl4ZWwpCiB7CiAgICAgKmRlc3QgPSAweEZGMDAwMDAwVSB8IHBpeGVsWzBdIDw8
IDE2IHwgcGl4ZWxbMV0gPDwgOCB8IHBpeGVsWzJdOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQg
c2V0UGl4ZWxSR0JBKEltYWdlRnJhbWU6OlBpeGVsRGF0YSogZGVzdCwgcG5nX2J5dGVwIHBpeGVs
LCB1bnNpZ25lZCBjaGFyJiBub25Ucml2aWFsQWxwaGFNYXNrKQorc3RhdGljIGlubGluZSB2b2lk
IHNldFBpeGVsUkdCQShSR0JBMzIqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCwgdW5zaWduZWQgY2hh
ciYgbm9uVHJpdmlhbEFscGhhTWFzaykKIHsKICAgICB1bnNpZ25lZCBjaGFyIGEgPSBwaXhlbFsz
XTsKICAgICAqZGVzdCA9IGEgPDwgMjQgfCBwaXhlbFswXSA8PCAxNiB8IHBpeGVsWzFdIDw8IDgg
fCBwaXhlbFsyXTsKICAgICBub25Ucml2aWFsQWxwaGFNYXNrIHw9ICgyNTUgLSBhKTsKIH0KIAot
c3RhdGljIGlubGluZSB2b2lkIHNldFBpeGVsUHJlbXVsdGlwbGllZFJHQkEoSW1hZ2VGcmFtZTo6
UGl4ZWxEYXRhKiBkZXN0LCBwbmdfYnl0ZXAgcGl4ZWwsIHVuc2lnbmVkIGNoYXImIG5vblRyaXZp
YWxBbHBoYU1hc2spCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxQcmVtdWx0aXBsaWVkUkdC
QShSR0JBMzIqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCwgdW5zaWduZWQgY2hhciYgbm9uVHJpdmlh
bEFscGhhTWFzaykKIHsKICAgICB1bnNpZ25lZCBjaGFyIGEgPSBwaXhlbFszXTsKICAgICB1bnNp
Z25lZCBjaGFyIHIgPSBmYXN0RGl2aWRlQnkyNTUocGl4ZWxbMF0gKiBhKTsKQEAgLTQ3MSw4ICs0
NzEsNiBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnCiAgICAgICAg
ICAgICBpbml0RnJhbWVCdWZmZXIobV9jdXJyZW50RnJhbWUpOwogICAgICAgICBlbHNlCiAjZW5k
aWYKLSAgICAgICAgLy8gRm9yIFBOR3MsIHRoZSBmcmFtZSBhbHdheXMgZmlsbHMgdGhlIGVudGly
ZSBpbWFnZS4KLSAgICAgICAgYnVmZmVyLnNldE9yaWdpbmFsRnJhbWVSZWN0KEludFJlY3QoSW50
UG9pbnQoKSwgc2l6ZSgpKSk7CiAgICAgfQogCiAgICAgLyogbGlicG5nIGNvbW1lbnRzIChoZXJl
IHRvIGV4cGxhaW4gd2hhdCBmb2xsb3dzKS4KQEAgLTUzMSw3ICs1MjksNyBAQCB2b2lkIFBOR0lt
YWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnCiAgICAgfQogCiAgICAgLy8gV3JpdGUgdGhl
IGRlY29kZWQgcm93IHBpeGVscyB0byB0aGUgZnJhbWUgYnVmZmVyLgotICAgIEltYWdlRnJhbWU6
OlBpeGVsRGF0YSogYWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKDAsIHkpOworICAgIFJHQkEzMiog
YWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKDAsIHkpOwogICAgIGludCB3aWR0aCA9IHNjYWxlZFNp
emUoKS53aWR0aCgpOwogICAgIHVuc2lnbmVkIGNoYXIgbm9uVHJpdmlhbEFscGhhTWFzayA9IDA7
CiAKQEAgLTgyMCw3ICs4MTgsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVm
ZmVyKHNpCiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gV2Ugd2FudCB0byBjbGVhciB0aGUgcHJl
dmlvdXMgZnJhbWUgdG8gdHJhbnNwYXJlbnQsIHdpdGhvdXQKICAgICAgICAgLy8gYWZmZWN0aW5n
IHBpeGVscyBpbiB0aGUgaW1hZ2Ugb3V0c2lkZSBvZiB0aGUgZnJhbWUuCi0gICAgICAgIGNvbnN0
IEludFJlY3QmIHByZXZSZWN0ID0gcHJldkJ1ZmZlci0+b3JpZ2luYWxGcmFtZVJlY3QoKTsKKyAg
ICAgICAgSW50UmVjdCBwcmV2UmVjdCA9IHByZXZCdWZmZXItPm9yaWdpbmFsRnJhbWVSZWN0KCk7
CiAgICAgICAgIGlmICghZnJhbWVJbmRleCB8fCBwcmV2UmVjdC5jb250YWlucyhJbnRSZWN0KElu
dFBvaW50KCksIHNjYWxlZFNpemUoKSkpKSB7CiAgICAgICAgICAgICAvLyBDbGVhcmluZyB0aGUg
Zmlyc3QgZnJhbWUsIG9yIGEgZnJhbWUgdGhlIHNpemUgb2YgdGhlIHdob2xlCiAgICAgICAgICAg
ICAvLyBpbWFnZSwgcmVzdWx0cyBpbiBhIGNvbXBsZXRlbHkgZW1wdHkgaW1hZ2UuCkBAIC04NDQs
NyArODQyLDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUoKQogICAgIHBu
Z19ieXRlcCBpbnRlcmxhY2VCdWZmZXIgPSBtX3JlYWRlci0+aW50ZXJsYWNlQnVmZmVyKCk7CiAK
ICAgICBpZiAobV9jdXJyZW50RnJhbWUgJiYgaW50ZXJsYWNlQnVmZmVyKSB7Ci0gICAgICAgIGNv
bnN0IEludFJlY3QmIHJlY3QgPSBidWZmZXIub3JpZ2luYWxGcmFtZVJlY3QoKTsKKyAgICAgICAg
SW50UmVjdCByZWN0ID0gYnVmZmVyLm9yaWdpbmFsRnJhbWVSZWN0KCk7CiAgICAgICAgIGJvb2wg
aGFzQWxwaGEgPSBtX3JlYWRlci0+aGFzQWxwaGEoKTsKICAgICAgICAgdW5zaWduZWQgY29sb3JD
aGFubmVscyA9IGhhc0FscGhhID8gNCA6IDM7CiAgICAgICAgIGJvb2wgbm9uVHJpdmlhbEFscGhh
ID0gZmFsc2U7CkBAIC04NTQsNyArODUyLDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmZyYW1l
Q29tcGxldGUoKQogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCiAgICAg
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcmVjdC5tYXhZKCkgLSByZWN0LnkoKTsgKyt5KSB7CiAg
ICAgICAgICAgICBwbmdfYnl0ZXAgcm93ID0gaW50ZXJsYWNlQnVmZmVyICsgKG1fc2NhbGVkID8g
bV9zY2FsZWRSb3dzW3ldIDogeSkgKiBjb2xvckNoYW5uZWxzICogc2l6ZSgpLndpZHRoKCk7Ci0g
ICAgICAgICAgICBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGFkZHJlc3MgPSBidWZmZXIuZ2V0QWRk
cihyZWN0LngoKSwgeSArIHJlY3QueSgpKTsKKyAgICAgICAgICAgIFJHQkEzMiogYWRkcmVzcyA9
IGJ1ZmZlci5nZXRBZGRyKHJlY3QueCgpLCB5ICsgcmVjdC55KCkpOwogICAgICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCByZWN0Lm1heFgoKSAtIHJlY3QueCgpOyArK3gpIHsKICAgICAgICAg
ICAgICAgICBwbmdfYnl0ZXAgcGl4ZWwgPSByb3cgKyAobV9zY2FsZWQgPyBtX3NjYWxlZENvbHVt
bnNbeF0gOiB4KSAqIGNvbG9yQ2hhbm5lbHM7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgYWxw
aGEgPSBoYXNBbHBoYSA/IHBpeGVsWzNdIDogMjU1OwpAQCAtODcwLDcgKzg2OCw3IEBAIHZvaWQg
UE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKCkKICAgICAgICAgcG5nX2J5dGVwIHJvdyA9
IGludGVybGFjZUJ1ZmZlcjsKICAgICAgICAgZm9yIChpbnQgeSA9IHJlY3QueSgpOyB5IDwgcmVj
dC5tYXhZKCk7ICsreSwgcm93ICs9IGNvbG9yQ2hhbm5lbHMgKiBzaXplKCkud2lkdGgoKSkgewog
ICAgICAgICAgICAgcG5nX2J5dGVwIHBpeGVsID0gcm93OwotICAgICAgICAgICAgSW1hZ2VGcmFt
ZTo6UGl4ZWxEYXRhKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIocmVjdC54KCksIHkpOworICAg
ICAgICAgICAgUkdCQTMyKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIocmVjdC54KCksIHkpOwog
ICAgICAgICAgICAgZm9yIChpbnQgeCA9IHJlY3QueCgpOyB4IDwgcmVjdC5tYXhYKCk7ICsreCwg
cGl4ZWwgKz0gY29sb3JDaGFubmVscykgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFscGhh
ID0gaGFzQWxwaGEgPyBwaXhlbFszXSA6IDI1NTsKICAgICAgICAgICAgICAgICBub25Ucml2aWFs
QWxwaGEgfD0gYWxwaGEgPCAyNTU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5j
cHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMiwx
NCArMTMyLDEzIEBAIGJvb2wgV0VCUEltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgb25seVMKICAg
ICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKICAgICAgICAgYnVmZmVyLnNldFN0YXR1cyhJ
bWFnZUZyYW1lOjpGcmFtZVBhcnRpYWwpOwogICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEobV9o
YXNBbHBoYSk7Ci0gICAgICAgIGJ1ZmZlci5zZXRPcmlnaW5hbEZyYW1lUmVjdChJbnRSZWN0KElu
dFBvaW50KCksIHNpemUoKSkpOwogICAgIH0KIAogICAgIGlmICghbV9kZWNvZGVyKSB7CiAgICAg
ICAgIFdFQlBfQ1NQX01PREUgbW9kZSA9IG91dHB1dE1vZGUobV9oYXNBbHBoYSk7CiAgICAgICAg
IGlmICghbV9wcmVtdWx0aXBseUFscGhhKQogICAgICAgICAgICAgbW9kZSA9IG91dHB1dE1vZGUo
ZmFsc2UpOwotICAgICAgICBpbnQgcm93U3RyaWRlID0gc2l6ZSgpLndpZHRoKCkgKiBzaXplb2Yo
SW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKTsKKyAgICAgICAgaW50IHJvd1N0cmlkZSA9IHNpemUoKS53
aWR0aCgpICogc2l6ZW9mKFJHQkEzMik7CiAgICAgICAgIHVpbnQ4X3QqIG91dHB1dCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGJ1ZmZlci5nZXRBZGRyKDAsIDApKTsKICAgICAgICAgaW50
IG91dHB1dFNpemUgPSBzaXplKCkuaGVpZ2h0KCkgKiByb3dTdHJpZGU7CiAgICAgICAgIG1fZGVj
b2RlciA9IFdlYlBJTmV3UkdCKG1vZGUsIG91dHB1dCwgb3V0cHV0U2l6ZSwgcm93U3RyaWRlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288451</attachid>
            <date>2016-09-09 17:02:32 -0700</date>
            <delta_ts>2016-09-09 17:40:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159679-20160909170004.patch</filename>
            <type>text/plain</type>
            <size>57269</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTc3NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNiBAQAorMjAxNi0wOS0wOSAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgdGhl
IHBpeGVsIGRhdGEgb2YgSW1hZ2VGcmFtZSB0byBhIHNlcGFyYXRlIGNsYXNzIG5hbWVkIEltYWdl
QmFja2luZ1N0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTk2NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNb3ZlIHRoZSBwaXhlbCBkYXRhIG1hbmlwdWxhdGlvbiBwYXJ0IGluIEltYWdlRnJhbWUg
aW50byBhIHNlcGFyYXRlIGNsYXNzCisgICAgICAgIGFuZCBhbGxvY2F0ZSBpdCBvbiBkZW1hbmQu
CisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5j
bWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbkNhaXJvLmNtYWtlOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2hhbm5lbCk6Cisg
ICAgICAgIChXZWJDb3JlOjp1bnByZW11bHRpcGxpZWRDaGFubmVsKToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VQcmVtdWx0aXBsaWVkUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlVW5QcmVt
dWx0aXBsaWVkUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpjb2xvckZyb21QcmVtdWx0aXBsaWVk
QVJHQik6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OmZh
c3RNdWx0aXBseUJ5MjU1KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tp
bmdTdG9yZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OkltYWdlQmFja2lu
Z1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRGcmFtZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OnNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCYWNraW5nU3RvcmU6OmZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJhY2tpbmdTdG9yZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3Rv
cmU6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJhY2tpbmdTdG9yZTo6cmVw
ZWF0Rmlyc3RSb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OmF0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRSR0JBKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpvdmVyUkdCQSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJhY2tpbmdTdG9yZTo6aW5Cb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
YWNraW5nU3RvcmU6OmlzT3ZlclNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L05hdGl2ZUltYWdlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmF0aXZlSW1hZ2VIYXNBbHBo
YSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojp6ZXJvRmlsbEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRC
YWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRPcmlnaW5hbEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6OmNvcHlSb3dOVGltZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjphc05ld05hdGl2ZUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpoYXNCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZTo6b3JpZ2luYWxGcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
Z2V0QWRkcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRSR0JBKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om92ZXJSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2Rlcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRP
cmlnaW5hbEZyYW1lUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
OjpoYXNQaXhlbERhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
Zml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWU6OmRpdmlkZTI1NSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjp3aWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpoZWln
aHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjppc092ZXJTaXpl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1h
Z2VSZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6OmRlY29kZUJN
UCk6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc0luZm9IZWFkZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0
b3JlQ2Fpcm8uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3Jl
OjppbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdl
RGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OnNldFNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcik6CisgICAg
ICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHA6Cisg
ICAgICAgIChHSUZJbWFnZVJlYWRlcjo6cGFyc2UpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SUNP
SW1hZ2VEZWNvZGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rl
cjo6cHJvY2Vzc0RpcmVjdG9yeUVudHJpZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlBFR0ltYWdlUmVhZGVyOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0lt
YWdlRGVjb2Rlcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhlbCk6CisgICAg
ICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldFBpeGVsUkdCKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVsUkdCQSk6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRQaXhlbFByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKFdlYkNv
cmU6OlBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBO
R0ltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0lt
YWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXRUJQ
SW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorCiAyMDE2LTA5LTA5ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVVJMUGFyc2VyIHNob3VsZCBjb252
ZXJ0IEFTQ0lJIGhvc3RzIHRvIGxvd2VyY2FzZQpJbmRleDogU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1FZmwuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21h
a2UJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtl
CSh3b3JraW5nIGNvcHkpCkBAIC0xODMsMTAgKzE4Myw5IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVf
U09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3gxMS9QbGF0Zm9ybURpc3BsYXlYMTEuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MveDExL1hVbmlxdWVSZXNvdXJjZS5jcHAKIAorICAgIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCiAg
ICAgcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvSlBFR0ltYWdlRW5jb2Rlci5jcHAKIAotICAgIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAotCiAgICAg
cGxhdGZvcm0vbmV0d29yay9lZmwvTmV0d29ya1N0YXRlTm90aWZpZXJFZmwuY3BwCiAKICAgICBw
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VTb3VwLmNwcApJbmRl
eDogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNyArMTU1LDcg
QEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3RrL1RlbXBvcmFy
eUxpbmtTdHVicy5jcHAKICAgICBwbGF0Zm9ybS9ndGsvVXNlckFnZW50R3RrLmNwcAogCi0gICAg
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCisgICAg
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VCYWNraW5nU3RvcmVDYWlyby5jcHAK
IAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2d0ay9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJj
ZUd0ay5jcHAKIApJbmRleDogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCShyZXZp
c2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNF
UwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5k
YXRpb24uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ2Fpcm9X
aW4uY3BwCiAKLSAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJD
YWlyby5jcHAKKyAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZUJhY2tpbmdT
dG9yZUNhaXJvLmNwcAogCiAgICAgcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Np
b25TdHViLmNwcAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIyNzUs
NiArMjI3NSw3IEBACiAJCTU1NUI4N0VDMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJD
Ry5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTVC
ODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovOyB9OwogCQk1NTVC
ODdFRDFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1NUI4N0VCMUNBQUYwQUIwMDM0OTQyNSAv
KiBJbWFnZURlY29kZXJDRy5oICovOyB9OwogCQk1NUEzMzZGNzFEODIwOUY0MDAyMkM0QzcgLyog
TmF0aXZlSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU1QTMzNkY2MUQ4MjA5RjQwMDIyQzRDNyAvKiBOYXRpdmVJbWFnZS5oICovOyB9OworCQk1
NUEzMzZGOTFEODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1QTMzNkY4MUQ4MjFFM0MwMDIy
QzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTU3MDlFOENEMUQ0MTNENDcwMDMyNDRBQyAvKiBXZWJLaXRT
dWJ0bGVDcnlwdG8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTcwOUU4Q0ExRDQxM0NFMzAwMzI0NEFDIC8qIFdlYktpdFN1YnRsZUNyeXB0by5jcHAg
Ki87IH07CiAJCTU3MDlFOENFMUQ0MTNENUIwMDMyNDRBQyAvKiBKU1dlYktpdFN1YnRsZUNyeXB0
b0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMUZGOEY2NjE4MDc0NjA4MDAxMzI2NzQgLyogSlNXZWJLaXRTdWJ0bGVDcnlwdG9DdXN0b20u
Y3BwICovOyB9OwogCQk1NzA5RThDRjFENDEzRDlBMDAzMjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5
cHRvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzA5
RThDQjFENDEzQ0UzMDAzMjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5cHRvLmggKi87IH07CkBAIC05
MjkxLDYgKzkyOTIsNyBAQAogCQk1NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNv
ZGVyQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VEZWNv
ZGVyQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTVCODdFQjFDQUFGMEFC
MDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSW1hZ2VEZWNvZGVyQ0cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVB
MzM2RjYxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5hdGl2ZUltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTU1QTMzNkY4MUQ4MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJhY2tpbmdTdG9yZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1NUQ0MDhGNzFBN0M2MzE4MDBDNzg0NTAgLyogU1ZHSW1h
Z2VDbGllbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ltYWdlQ2xp
ZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzA5RThDQTFENDEzQ0UzMDAz
MjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5cHRvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYktpdFN1YnRsZUNyeXB0by5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTU3MDlFOENCMUQ0MTNDRTMwMDMyNDRBQyAvKiBXZWJLaXRTdWJ0bGVDcnlwdG8u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViS2l0U3VidGxlQ3J5cHRvLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDc2OSw2ICsyMDc3MSw3IEBACiAJCQkJ
Mzc5OTE5OTQxMjAwRERGNDAwRUEwNDFDIC8qIFdPRkZGaWxlRm9ybWF0LmNwcCAqLywKIAkJCQkz
Nzk5MTk5NTEyMDBEREY0MDBFQTA0MUMgLyogV09GRkZpbGVGb3JtYXQuaCAqLywKIAkJCQk1NUEz
MzZGNjFEODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLywKKwkJCQk1NUEzMzZGODFE
ODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCAqLywKIAkJCSk7CiAJCQlwYXRo
ID0gZ3JhcGhpY3M7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjYzMzksNiArMjYz
NDIsNyBAQAogCQkJCTU4MkNCMDUzMUE3OEExNEIwMEFGRkNDNCAvKiBTaW1wbGVMaW5lTGF5b3V0
VGV4dEZyYWdtZW50SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1QTFFQTdEMTUyQkNG
MDgwMDREMDBCNiAvKiBTaW1wbGlmeU1hcmt1cENvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTU3MkE3RjIxMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNTVBMzM2RjkxRDgyMUUzQzAwMjJDNEM3IC8qIEltYWdlQmFja2luZ1N0b3JlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzMTc0MUFBRDE2NjM2NjA5MDA4QTVCN0UgLyogU2ltdWxhdGVk
Q2xpY2tPcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDAwRDdBNTE0QTNGNjE5MDA3MzQw
MTEgLyogU2luY1Jlc2FtcGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEzMjdENjAxMUEzM0Ey
QjAwNEY5RDY1IC8qIFNpbmtEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyMDU2ODQpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDYgKzQ5LDE2IEBAIGNvbnN0IFJHQkEzMiBDb2xvcjo6dHJhbnNwYXJlbnQ7CiBz
dGF0aWMgY29uc3QgUkdCQTMyIGxpZ2h0ZW5lZEJsYWNrID0gMHhGRjU0NTQ1NDsKIHN0YXRpYyBj
b25zdCBSR0JBMzIgZGFya2VuZWRXaGl0ZSA9IDB4RkZBQkFCQUI7CiAKK3N0YXRpYyBpbmxpbmUg
dW5zaWduZWQgcHJlbXVsdGlwbGllZENoYW5uZWwodW5zaWduZWQgYywgdW5zaWduZWQgYSkKK3sK
KyAgICByZXR1cm4gZmFzdERpdmlkZUJ5MjU1KGMgKiBhICsgMjU0KTsKK30KKworc3RhdGljIGlu
bGluZSB1bnNpZ25lZCB1bnByZW11bHRpcGxpZWRDaGFubmVsKHVuc2lnbmVkIGMsIHVuc2lnbmVk
IGEpCit7CisgICAgcmV0dXJuIChmYXN0TXVsdGlwbHlCeTI1NShjKSArIGEgLSAxKSAvIGE7Cit9
CisKIFJHQkEzMiBtYWtlUkdCKGludCByLCBpbnQgZywgaW50IGIpCiB7CiAgICAgcmV0dXJuIDB4
RkYwMDAwMDAgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihyLCAyNTUpKSA8PCAxNiB8IHN0ZDo6bWF4
KDAsIHN0ZDo6bWluKGcsIDI1NSkpIDw8IDggfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihiLCAyNTUp
KTsKQEAgLTU5LDYgKzY5LDE2IEBAIFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcsIGludCBi
LCBpbnQKICAgICByZXR1cm4gc3RkOjptYXgoMCwgc3RkOjptaW4oYSwgMjU1KSkgPDwgMjQgfCBz
dGQ6Om1heCgwLCBzdGQ6Om1pbihyLCAyNTUpKSA8PCAxNiB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWlu
KGcsIDI1NSkpIDw8IDggfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihiLCAyNTUpKTsKIH0KIAorUkdC
QTMyIG1ha2VQcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKK3sK
KyAgICByZXR1cm4gbWFrZVJHQkEocHJlbXVsdGlwbGllZENoYW5uZWwociwgYSksIHByZW11bHRp
cGxpZWRDaGFubmVsKGcsIGEpLCBwcmVtdWx0aXBsaWVkQ2hhbm5lbChiLCBhKSwgYSk7Cit9CisK
K1JHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQg
YSkKK3sKKyAgICByZXR1cm4gbWFrZVJHQkEodW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChyLCBhKSwg
dW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBhKSwgdW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChiLCBh
KSwgYSk7Cit9CisKIHN0YXRpYyBpbnQgY29sb3JGbG9hdFRvUkdCQUJ5dGUoZmxvYXQgZikKIHsK
ICAgICAvLyBXZSB1c2UgbHJvdW5kZiBhbmQgMjU1IGluc3RlYWQgb2YgbmV4dGFmdGVyZigyNTYs
IDApIHRvIG1hdGNoIENHJ3Mgcm91bmRpbmcKQEAgLTQ4MiwxNCArNTAyLDkgQEAgdm9pZCBDb2xv
cjo6Z2V0SFNWKGRvdWJsZSYgaHVlLCBkb3VibGUmIAogQ29sb3IgY29sb3JGcm9tUHJlbXVsdGlw
bGllZEFSR0IoUkdCQTMyIHBpeGVsQ29sb3IpCiB7CiAgICAgaW50IGFscGhhID0gYWxwaGFDaGFu
bmVsKHBpeGVsQ29sb3IpOwotICAgIGlmIChhbHBoYSAmJiBhbHBoYSA8IDI1NSkgewotICAgICAg
ICByZXR1cm4gQ29sb3I6OmNyZWF0ZVVuY2hlY2tlZCgKLSAgICAgICAgICAgIHJlZENoYW5uZWwo
cGl4ZWxDb2xvcikgKiAyNTUgLyBhbHBoYSwKLSAgICAgICAgICAgIGdyZWVuQ2hhbm5lbChwaXhl
bENvbG9yKSAqIDI1NSAvIGFscGhhLAotICAgICAgICAgICAgYmx1ZUNoYW5uZWwocGl4ZWxDb2xv
cikgKiAyNTUgLyBhbHBoYSwKLSAgICAgICAgICAgIGFscGhhKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgcmV0dXJuIENvbG9yKHBpeGVsQ29sb3IpOworICAgIGlmIChhbHBoYSAmJiBhbHBoYSA8IDI1
NSkKKyAgICAgICAgcGl4ZWxDb2xvciA9IG1ha2VVblByZW11bHRpcGxpZWRSR0JBKHJlZENoYW5u
ZWwocGl4ZWxDb2xvciksIGdyZWVuQ2hhbm5lbChwaXhlbENvbG9yKSwgYmx1ZUNoYW5uZWwocGl4
ZWxDb2xvciksIGFscGhhKTsKKyAgICByZXR1cm4gQ29sb3IocGl4ZWxDb2xvcik7CiB9CiAKIFJH
QkEzMiBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihjb25zdCBDb2xvciYgY29sb3IpCkBAIC00
OTcsMTQgKzUxMiwxMCBAQCBSR0JBMzIgcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IoY29uc3Qg
CiAgICAgdW5zaWduZWQgcGl4ZWxDb2xvcjsKIAogICAgIHVuc2lnbmVkIGFscGhhID0gY29sb3Iu
YWxwaGEoKTsKLSAgICBpZiAoYWxwaGEgPCAyNTUpIHsKLSAgICAgICAgcGl4ZWxDb2xvciA9IENv
bG9yOjpjcmVhdGVVbmNoZWNrZWQoCi0gICAgICAgICAgICBmYXN0RGl2aWRlQnkyNTUoY29sb3Iu
cmVkKCkgKiBhbHBoYSArIDI1NCksCi0gICAgICAgICAgICBmYXN0RGl2aWRlQnkyNTUoY29sb3Iu
Z3JlZW4oKSAqIGFscGhhICsgMjU0KSwKLSAgICAgICAgICAgIGZhc3REaXZpZGVCeTI1NShjb2xv
ci5ibHVlKCkgKiBhbHBoYSArIDI1NCksCi0gICAgICAgICAgICBhbHBoYSkucmdiKCk7Ci0gICAg
fSBlbHNlCi0gICAgICAgICBwaXhlbENvbG9yID0gY29sb3IucmdiKCk7CisgICAgaWYgKGFscGhh
IDwgMjU1KQorICAgICAgICBwaXhlbENvbG9yID0gbWFrZVByZW11bHRpcGxpZWRSR0JBKGNvbG9y
LnJlZCgpLCBjb2xvci5ncmVlbigpLCBjb2xvci5ibHVlKCksIGFscGhhKTsKKyAgICBlbHNlCisg
ICAgICAgIHBpeGVsQ29sb3IgPSBjb2xvci5yZ2IoKTsKIAogICAgIHJldHVybiBwaXhlbENvbG9y
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZp
c2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw5IEBAIHR5cGVkZWYgdW5zaWduZWQgUkdCQTMy
OyAvLyBEZXByZWNhdGVkOiAKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlUkdCKGludCByLCBp
bnQgZywgaW50IGIpOwogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VSR0JBKGludCByLCBpbnQg
ZywgaW50IGIsIGludCBhKTsKIAorUkdCQTMyIG1ha2VQcmVtdWx0aXBsaWVkUkdCQShpbnQgciwg
aW50IGcsIGludCBiLCBpbnQgYSk7CitSR0JBMzIgbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEoaW50
IHIsIGludCBnLCBpbnQgYiwgaW50IGEpOworCiBXRUJDT1JFX0VYUE9SVCBSR0JBMzIgY29sb3JX
aXRoT3ZlcnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIGZsb2F0IG92ZXJyaWRlQWxwaGEpOwogV0VC
Q09SRV9FWFBPUlQgUkdCQTMyIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoUkdCQTMyIGNvbG9yLCBP
cHRpb25hbDxmbG9hdD4gb3ZlcnJpZGVBbHBoYSk7CiAKQEAgLTIxOCw2ICsyMjEsNyBAQCBDb2xv
ciBibGVuZChjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sCiAKIGludCBkaWZmZXJlbmNlU3F1
YXJlZChjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7CiAKK3VpbnQxNl90IGZhc3RNdWx0aXBs
eUJ5MjU1KHVpbnQxNl90IHZhbHVlKTsKIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1aW50MTZf
dCk7CiAKICNpZiBVU0UoQ0cpCkBAIC0yOTAsNiArMjk0LDExIEBAIGlubGluZSB1aW50OF90IHJv
dW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwKICAgICByZXR1cm4gc3RkOjptYXgoMC5mLCBzdGQ6Om1p
bigyNTUuZiwgc3RkOjpyb3VuZCh2YWx1ZSkpKTsKIH0KIAoraW5saW5lIHVpbnQxNl90IGZhc3RN
dWx0aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVlKQoreworICAgIHJldHVybiAodmFsdWUgPDwgOCkg
LSB2YWx1ZTsKK30KKwogaW5saW5lIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1aW50MTZfdCB2
YWx1ZSkKIHsKICAgICAvLyBXaGlsZSB0aGlzIGlzIGFuIGFwcHJveGltYXRlIGFsZ29yaXRobSBm
b3IgZGl2aXNpb24gYnkgMjU1LCBpdCBnaXZlcyBwZXJmZWN0bHkgYWNjdXJhdGUgcmVzdWx0cyBm
b3IgMTYtYml0IHZhbHVlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQmFja2luZ1N0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdl
LmgiCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgSW1hZ2VCYWNraW5nU3RvcmUgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCYWNraW5nU3RvcmU+IGNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBib29s
IHByZW11bHRpcGx5QWxwaGEpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1
ZTxJbWFnZUJhY2tpbmdTdG9yZT4oc2l6ZSwgcHJlbXVsdGlwbHlBbHBoYSk7CisgICAgfQorCisg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJhY2tpbmdTdG9yZT4gY3JlYXRlKGNvbnN0
IEltYWdlQmFja2luZ1N0b3JlJiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6Om1h
a2VfdW5pcXVlPEltYWdlQmFja2luZ1N0b3JlPihvdGhlcik7CisgICAgfQorCisgICAgSW1hZ2VC
YWNraW5nU3RvcmUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhID0g
dHJ1ZSkKKyAgICAgICAgOiBtX3ByZW11bHRpcGx5QWxwaGEocHJlbXVsdGlwbHlBbHBoYSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghc2l6ZS5pc0VtcHR5KCkpOworICAgICAgICBzZXRTaXplKHNp
emUpOworICAgIH0KKworICAgIEltYWdlQmFja2luZ1N0b3JlKGNvbnN0IEltYWdlQmFja2luZ1N0
b3JlJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICh0aGlzID09ICZvdGhlcikKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBtX3BpeGVscyA9IG90aGVyLm1fcGl4ZWxzOworICAgICAg
ICBtX3BpeGVsc1B0ciA9IG1fcGl4ZWxzLmRhdGEoKTsKKyAgICAgICAgbV9zaXplID0gb3RoZXIu
bV9zaXplOworICAgICAgICBtX3ByZW11bHRpcGx5QWxwaGEgPSBvdGhlci5tX3ByZW11bHRpcGx5
QWxwaGE7CisgICAgfQorCisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2UoKSBjb25zdDsKKworICAg
IGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQorICAgIHsKKyAgICAgICAgaWYgKCFt
X3BpeGVscy50cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZS5hcmVhKCkpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIG1fcGl4ZWxzLnJlc2l6ZShzaXplLmFyZWEoKSk7CisgICAg
ICAgIG1fcGl4ZWxzUHRyID0gbV9waXhlbHMuZGF0YSgpOworICAgICAgICBtX3NpemUgPSBzaXpl
OworICAgICAgICBtX2ZyYW1lUmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXplKTsKKyAg
ICAgICAgY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBz
ZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgZnJhbWVSZWN0KQorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFtX3NpemUuaXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKGluQm91bmRzKGZyYW1lUmVj
dCkpOworICAgICAgICBtX2ZyYW1lUmVjdCA9IGZyYW1lUmVjdDsKKyAgICB9CisKKyAgICBJbnRT
aXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBJbnRSZWN0IGZyYW1lUmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0OyB9CisKKyAgICB2b2lkIGNsZWFyKCkKKyAg
ICB7CisgICAgICAgIG1lbXNldChtX3BpeGVsc1B0ciwgMCwgbV9zaXplLmFyZWEoKSAqIHNpemVv
ZihSR0JBMzIpKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHJlY3QuaXNFbXB0eSgpIHx8ICFpbkJvdW5kcyhyZWN0
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzaXplX3QgcmVjdFdpZHRoSW5CeXRl
cyA9IHJlY3Qud2lkdGgoKSAqIHNpemVvZihSR0JBMzIpOworICAgICAgICBSR0JBMzIqIHN0YXJ0
ID0gYXQocmVjdC54KCksIHJlY3QueSgpKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBy
ZWN0LmhlaWdodCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1lbXNldChzdGFydCwgMCwgcmVjdFdp
ZHRoSW5CeXRlcyk7CisgICAgICAgICAgICBzdGFydCArPSBtX3NpemUud2lkdGgoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHZvaWQgcmVwZWF0Rmlyc3RSb3coY29uc3QgSW50UmVjdCYgcmVj
dCkKKyAgICB7CisgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSB8fCAhaW5Cb3VuZHMocmVjdCkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMg
PSByZWN0LndpZHRoKCkgKiBzaXplb2YoUkdCQTMyKTsKKyAgICAgICAgUkdCQTMyKiBzcmMgPSBh
dChyZWN0LngoKSwgcmVjdC55KCkpOworICAgICAgICBSR0JBMzIqIGRlc3QgPSBzcmMgKyBtX3Np
emUud2lkdGgoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCByZWN0LmhlaWdodCgpOyAr
K2kpIHsKKyAgICAgICAgICAgIG1lbWNweShkZXN0LCBzcmMsIHJlY3RXaWR0aEluQnl0ZXMpOwor
ICAgICAgICAgICAgZGVzdCArPSBtX3NpemUud2lkdGgoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIFJHQkEzMiogYXQoaW50IHgsIGludCB5KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fcGl4ZWxzUHRyICsgeSAqIG1fc2l6ZS53aWR0aCgpICsgeDsKKyAgICB9CisKKyAgICB2b2lk
IHNldFJHQkEoaW50IHgsIGludCB5LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBi
LCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgc2V0UkdCQShhdCh4LCB5KSwgciwgZywgYiwg
YSk7CisgICAgfQorCisgICAgdm9pZCBzZXRSR0JBKFJHQkEzMiogZGVzdCwgdW5zaWduZWQgciwg
dW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKKyAgICB7CisgICAgICAgIGlmICht
X3ByZW11bHRpcGx5QWxwaGEgJiYgIWEpCisgICAgICAgICAgICAqZGVzdCA9IDA7CisgICAgICAg
IGVsc2UgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAmJiBhIDwgMjU1KQorICAgICAgICAgICAgKmRl
c3QgPSBtYWtlUHJlbXVsdGlwbGllZFJHQkEociwgZywgYiwgYSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICpkZXN0ID0gbWFrZVJHQkEociwgZywgYiwgYSk7CisgICAgfQorCisgICAgdm9p
ZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVk
IGIsIHVuc2lnbmVkIGEpCisgICAgeworICAgICAgICBpZiAoIWEpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgaWYgKGEgPj0gMjU1IHx8ICFhbHBoYUNoYW5uZWwoKmRlc3QpKSB7Cisg
ICAgICAgICAgICBzZXRSR0JBKGRlc3QsIHIsIGcsIGIsIGEpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpCisgICAgICAg
ICAgICAqZGVzdCA9IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShyZWRDaGFubmVsKCpkZXN0KSwgZ3Jl
ZW5DaGFubmVsKCpkZXN0KSwgYmx1ZUNoYW5uZWwoKmRlc3QpLCBhbHBoYUNoYW5uZWwoKmRlc3Qp
KTsKKworICAgICAgICB1bnNpZ25lZCBkID0gMjU1IC0gYTsKKworICAgICAgICByID0gZmFzdERp
dmlkZUJ5MjU1KHIgKiBhICsgcmVkQ2hhbm5lbCgqZGVzdCkgKiBkKTsKKyAgICAgICAgZyA9IGZh
c3REaXZpZGVCeTI1NShnICogYSArIGdyZWVuQ2hhbm5lbCgqZGVzdCkgKiBkKTsKKyAgICAgICAg
YiA9IGZhc3REaXZpZGVCeTI1NShiICogYSArIGJsdWVDaGFubmVsKCpkZXN0KSAqIGQpOworICAg
ICAgICBhICs9IGZhc3REaXZpZGVCeTI1NShkICogYWxwaGFDaGFubmVsKCpkZXN0KSk7CisKKyAg
ICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSkKKyAgICAgICAgICAgICpkZXN0ID0gbWFrZVJH
QkEociwgZywgYiwgYSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpkZXN0ID0gbWFrZVVu
UHJlbXVsdGlwbGllZFJHQkEociwgZywgYiwgYSk7CisgICAgfQorCisgICAgYm9vbCBpbkJvdW5k
cyhjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEludFJl
Y3QoSW50UG9pbnQoKSwgbV9zaXplKS5jb250YWlucyhyZWN0KTsKKyAgICB9CisKKyAgICBzdGF0
aWMgYm9vbCBpc092ZXJTaXplKGNvbnN0IEludFNpemUmIHNpemUpCisgICAgeworICAgICAgICBz
dGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIE1heFBpeGVscyA9ICgoMSA8PCAyOSkgLSAxKTsKKyAg
ICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHBpeGVscyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv
bmcgbG9uZz4oc2l6ZS53aWR0aCgpKSAqIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4o
c2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIHJldHVybiBwaXhlbHMgPiBNYXhQaXhlbHM7CisgICAg
fQorCitwcml2YXRlOgorICAgIFZlY3RvcjxSR0JBMzI+IG1fcGl4ZWxzOworICAgIFJHQkEzMiog
bV9waXhlbHNQdHIgeyBudWxscHRyIH07CisgICAgSW50U2l6ZSBtX3NpemU7CisgICAgSW50UmVj
dCBtX2ZyYW1lUmVjdDsgLy8gVGhpcyB3aWxsIGFsd2F5cyBqdXN0IGJlIHRoZSBlbnRpcmUgYnVm
ZmVyIGV4Y2VwdCBmb3IgR0lGIGFuZCBQTkcgZnJhbWVzCisgICAgYm9vbCBtX3ByZW11bHRpcGx5
QWxwaGEgeyB0cnVlIH07Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAkocmV2aXNpb24gMjA1Njg0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEwICs0NywxMCBAQCBJbnRTaXplIG5hdGl2ZUltYWdl
U2l6ZShjb25zdCBOYXRpdmVJbWFnCiAgICAgcmV0dXJuIGltYWdlID8gSW50U2l6ZShDR0ltYWdl
R2V0V2lkdGgoaW1hZ2UuZ2V0KCkpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSkgOiBJ
bnRTaXplKCk7CiB9CiAKLWJvb2wgbmF0aXZlSW1hZ2VIYXNBbHBoYShjb25zdCBOYXRpdmVJbWFn
ZVB0ciYpCitib29sIG5hdGl2ZUltYWdlSGFzQWxwaGEoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGlt
YWdlKQogewotICAgIC8vIEZJWE1FOiBBbnN3ZXIgY29ycmVjdGx5IHRoZSBxdWVzdGlvbjogZG9l
cyB0aGUgQ0dJbWFnZVJlZiBoYXZlIGFscGhhIGNoYW5ubmVsPwotICAgIHJldHVybiB0cnVlOwor
ICAgIENHSW1hZ2VBbHBoYUluZm8gaW5mbyA9IENHSW1hZ2VHZXRBbHBoYUluZm8oaW1hZ2UuZ2V0
KCkpOworICAgIHJldHVybiAoaW5mbyA+PSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Qp
ICYmIChpbmZvIDw9IGtDR0ltYWdlQWxwaGFGaXJzdCk7CiB9CiAKIENvbG9yIG5hdGl2ZUltYWdl
U2luZ2xlUGl4ZWxTb2xpZENvbG9yKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQx
LDggKzE0MSw4IEBAIEltYWdlRnJhbWUmIEltYWdlRnJhbWU6Om9wZXJhdG9yPShjb25zdCAKICAg
ICBpZiAodGhpcyA9PSAmb3RoZXIpCiAgICAgICAgIHJldHVybiAqdGhpczsKIAotICAgIGNvcHlC
aXRtYXBEYXRhKG90aGVyKTsKLSAgICBzZXRPcmlnaW5hbEZyYW1lUmVjdChvdGhlci5vcmlnaW5h
bEZyYW1lUmVjdCgpKTsKKyAgICBzZXRCYWNraW5nU3RvcmUob3RoZXIuYmFja2luZ1N0b3JlKCkp
OworICAgIHNldEhhc0FscGhhKG90aGVyLm1faGFzQWxwaGEpOwogICAgIHNldFN0YXR1cyhvdGhl
ci5zdGF0dXMoKSk7CiAgICAgc2V0RHVyYXRpb24ob3RoZXIuZHVyYXRpb24oKSk7CiAgICAgc2V0
RGlzcG9zYWxNZXRob2Qob3RoZXIuZGlzcG9zYWxNZXRob2QoKSk7CkBAIC0xNTIsOCArMTUyLDcg
QEAgSW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0IAogCiB2b2lkIEltYWdl
RnJhbWU6OmNsZWFyUGl4ZWxEYXRhKCkKIHsKLSAgICBtX2JhY2tpbmdTdG9yZS5jbGVhcigpOwot
ICAgIG1fYnl0ZXMgPSAwOworICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKICAgICBtX3N0
YXR1cyA9IEZyYW1lRW1wdHk7CiAgICAgLy8gTk9URTogRG8gbm90IHJlc2V0IG90aGVyIG1lbWJl
cnMgaGVyZTsgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKCkgY2FsbHMgdGhpcwogICAgIC8vIHRvIGZy
ZWUgdGhlIGJpdG1hcCBkYXRhLCBidXQgb3RoZXIgZnVuY3Rpb25zIGxpa2UgaW5pdEZyYW1lQnVm
ZmVyKCkgYW5kCkBAIC0xNjMsNTEgKzE2MiwzMSBAQCB2b2lkIEltYWdlRnJhbWU6OmNsZWFyUGl4
ZWxEYXRhKCkKIAogdm9pZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSgpCiB7Ci0gICAg
bWVtc2V0KG1fYnl0ZXMsIDAsIG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgpICogc2l6
ZW9mKFBpeGVsRGF0YSkpOworICAgIG1fYmFja2luZ1N0b3JlLT5jbGVhcigpOwogICAgIG1faGFz
QWxwaGEgPSB0cnVlOwogfQogCiB2b2lkIEltYWdlRnJhbWU6Onplcm9GaWxsRnJhbWVSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgQVNTRVJUKEludFJlY3QoSW50UG9pbnQoKSwgbV9z
aXplKS5jb250YWlucyhyZWN0KSk7Ci0KICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHNpemVfdCByZWN0V2lkdGhJbkJ5dGVzID0gcmVjdC53aWR0aCgpICog
c2l6ZW9mKFBpeGVsRGF0YSk7Ci0gICAgUGl4ZWxEYXRhKiBzdGFydCA9IG1fYnl0ZXMgKyAocmVj
dC55KCkgKiB3aWR0aCgpKSArIHJlY3QueCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVj
dC5oZWlnaHQoKTsgKytpKSB7Ci0gICAgICAgIG1lbXNldChzdGFydCwgMCwgcmVjdFdpZHRoSW5C
eXRlcyk7Ci0gICAgICAgIHN0YXJ0ICs9IHdpZHRoKCk7Ci0gICAgfQotCisgICAgbV9iYWNraW5n
U3RvcmUtPmNsZWFyUmVjdChyZWN0KTsKICAgICBzZXRIYXNBbHBoYSh0cnVlKTsKIH0KIAotYm9v
bCBJbWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YShjb25zdCBJbWFnZUZyYW1lJiBvdGhlcikKK3Zv
aWQgSW1hZ2VGcmFtZTo6c2V0QmFja2luZ1N0b3JlKGNvbnN0IEltYWdlQmFja2luZ1N0b3JlKiBi
YWNraW5nU3RvcmUpCiB7Ci0gICAgaWYgKHRoaXMgPT0gJm90aGVyKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIG1fYmFja2luZ1N0b3JlID0gb3RoZXIubV9iYWNraW5nU3RvcmU7Ci0gICAg
bV9ieXRlcyA9IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsKLSAgICBtX3NpemUgPSBvdGhlci5tX3Np
emU7Ci0gICAgc2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgaWYgKGJhY2tpbmdTdG9yZSA9PSBtX2JhY2tpbmdTdG9yZSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fYmFja2luZ1N0b3JlID0gYmFja2luZ1N0b3JlID8gSW1hZ2VCYWNraW5nU3RvcmU6
OmNyZWF0ZSgqYmFja2luZ1N0b3JlKSA6IG51bGxwdHI7CiB9CiAKLWJvb2wgSW1hZ2VGcmFtZTo6
c2V0U2l6ZShpbnQgbmV3V2lkdGgsIGludCBuZXdIZWlnaHQpCitib29sIEltYWdlRnJhbWU6OnNl
dFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBBU1NFUlQoIXdpZHRoKCkgJiYgIWhl
aWdodCgpKTsKLSAgICBzaXplX3QgYmFja2luZ1N0b3JlU2l6ZSA9IG5ld1dpZHRoICogbmV3SGVp
Z2h0OwotICAgIGlmICghbV9iYWNraW5nU3RvcmUudHJ5UmVzZXJ2ZUNhcGFjaXR5KGJhY2tpbmdT
dG9yZVNpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9iYWNraW5nU3RvcmUucmVz
aXplKGJhY2tpbmdTdG9yZVNpemUpOwotICAgIG1fYnl0ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRh
KCk7Ci0gICAgbV9zaXplID0gSW50U2l6ZShuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKLQotICAgIHpl
cm9GaWxsUGl4ZWxEYXRhKCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgQVNTRVJUKCFtX2JhY2tp
bmdTdG9yZSk7CisgICAgbV9iYWNraW5nU3RvcmUgPSBJbWFnZUJhY2tpbmdTdG9yZTo6Y3JlYXRl
KHNpemUsIG1fcHJlbXVsdGlwbHlBbHBoYSk7CisgICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlOwog
fQogCiBib29sIEltYWdlRnJhbWU6Omhhc0FscGhhKCkgY29uc3QKQEAgLTIyMCw2ICsxOTksMTIg
QEAgdm9pZCBJbWFnZUZyYW1lOjpzZXRIYXNBbHBoYShib29sIGFscGhhKQogICAgIG1faGFzQWxw
aGEgPSBhbHBoYTsKIH0KIAordm9pZCBzZXRPcmlnaW5hbEZyYW1lUmVjdChjb25zdCBJbnRSZWN0
JiBmcmFtZVJlY3QpCit7CisgICAgaWYgKG1fYmFja2luZ1N0b3JlKQorICAgICAgICBtX2JhY2tp
bmdTdG9yZS0+c2V0RnJhbWVSZWN0KGZyYW1lUmVjdCk7Cit9CisKIHZvaWQgSW1hZ2VGcmFtZTo6
c2V0U3RhdHVzKEZyYW1lU3RhdHVzIHN0YXR1cykKIHsKICAgICBtX3N0YXR1cyA9IHN0YXR1czsK
QEAgLTI4Niw3ICsyNzEsNyBAQCB1bnNpZ25lZCBJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdElu
ZGV4CiAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgPD0gaW5kZXgpCiAgICAgICAg
IHJldHVybiAwOwogICAgIC8vIEZJWE1FOiBVc2UgdGhlIGRpbWVuc2lvbiBvZiB0aGUgcmVxdWVz
dGVkIGZyYW1lLgotICAgIHJldHVybiBtX3NpemUuYXJlYSgpICogc2l6ZW9mKEltYWdlRnJhbWU6
OlBpeGVsRGF0YSk7CisgICAgcmV0dXJuIG1fc2l6ZS5hcmVhKCkgKiBzaXplb2YoUkdCQTMyKTsK
IH0KIAogZmxvYXQgSW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5k
ZXgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURl
Y29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9JbWFnZURlY29kZXIuaAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDggKzI4LDEwIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiSW50UmVjdC5oIgor
I2luY2x1ZGUgIkltYWdlQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIK
KyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtU2NyZWVuLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KQEAgLTU3LDcgKzU5LDYgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVj
dG9yPGNoYXI+OwogICAgICAgICAgICAgRGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzICAvLyBDbGVh
ciBmcmFtZSB0byBwcmV2aW91cyBmcmFtZWJ1ZmZlcgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBjb250ZW50cwogICAgICAgICB9OwotICAgICAgICB0eXBlZGVmIHVu
c2lnbmVkIFBpeGVsRGF0YTsKIAogICAgICAgICBJbWFnZUZyYW1lKCk7CiAKQEAgLTcyLDE1MiAr
NzMsNjkgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICB2b2lk
IHplcm9GaWxsUGl4ZWxEYXRhKCk7CiAgICAgICAgIHZvaWQgemVyb0ZpbGxGcmFtZVJlY3QoY29u
c3QgSW50UmVjdCYpOwogCi0gICAgICAgIC8vIE1ha2VzIHRoaXMgZnJhbWUgaGF2ZSBhbiBpbmRl
cGVuZGVudCBjb3B5IG9mIHRoZSBwcm92aWRlZCBpbWFnZSdzCi0gICAgICAgIC8vIHBpeGVsIGRh
dGEsIHNvIHRoYXQgbW9kaWZpY2F0aW9ucyBpbiBvbmUgZnJhbWUgYXJlIG5vdCByZWZsZWN0ZWQg
aW4KLSAgICAgICAgLy8gdGhlIG90aGVyLiAgUmV0dXJucyB3aGV0aGVyIHRoZSBjb3B5IHN1Y2Nl
ZWRlZC4KLSAgICAgICAgYm9vbCBjb3B5Qml0bWFwRGF0YShjb25zdCBJbWFnZUZyYW1lJik7Ci0K
ICAgICAgICAgLy8gQ29waWVzIHRoZSBwaXhlbCBkYXRhIGF0IFsoc3RhcnRYLCBzdGFydFkpLCAo
ZW5kWCwgc3RhcnRZKSkgdG8gdGhlCiAgICAgICAgIC8vIHNhbWUgWC1jb29yZGluYXRlcyBvbiBl
YWNoIHN1YnNlcXVlbnQgcm93IHVwIHRvIGJ1dCBub3QgaW5jbHVkaW5nCiAgICAgICAgIC8vIGVu
ZFkuCiAgICAgICAgIHZvaWQgY29weVJvd05UaW1lcyhpbnQgc3RhcnRYLCBpbnQgZW5kWCwgaW50
IHN0YXJ0WSwgaW50IGVuZFkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChzdGFydFgg
PCB3aWR0aCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChlbmRYIDw9IHdpZHRoKCkpOwotICAgICAg
ICAgICAgQVNTRVJUKHN0YXJ0WSA8IGhlaWdodCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChlbmRZ
IDw9IGhlaWdodCgpKTsKLSAgICAgICAgICAgIGNvbnN0IGludCByb3dCeXRlcyA9IChlbmRYIC0g
c3RhcnRYKSAqIHNpemVvZihQaXhlbERhdGEpOwotICAgICAgICAgICAgY29uc3QgUGl4ZWxEYXRh
KiBjb25zdCBzdGFydEFkZHIgPSBnZXRBZGRyKHN0YXJ0WCwgc3RhcnRZKTsKLSAgICAgICAgICAg
IGZvciAoaW50IGRlc3RZID0gc3RhcnRZICsgMTsgZGVzdFkgPCBlbmRZOyArK2Rlc3RZKQotICAg
ICAgICAgICAgICAgIG1lbWNweShnZXRBZGRyKHN0YXJ0WCwgZGVzdFkpLCBzdGFydEFkZHIsIHJv
d0J5dGVzKTsKKyAgICAgICAgICAgIG1fYmFja2luZ1N0b3JlLT5yZXBlYXRGaXJzdFJvdyhJbnRS
ZWN0KHN0YXJ0WCwgc3RhcnRZLCBlbmRYIC1zdGFydFggLCBlbmRZIC0gc3RhcnRZKSk7CiAgICAg
ICAgIH0KIAogICAgICAgICAvLyBBbGxvY2F0ZXMgc3BhY2UgZm9yIHRoZSBwaXhlbCBkYXRhLiAg
TXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBwaXhlbHMKICAgICAgICAgLy8gYXJlIHdyaXR0ZW4u
ICBNdXN0IG9ubHkgYmUgY2FsbGVkIG9uY2UuICBSZXR1cm5zIHdoZXRoZXIgYWxsb2NhdGlvbgog
ICAgICAgICAvLyBzdWNjZWVkZWQuCi0gICAgICAgIGJvb2wgc2V0U2l6ZShpbnQgbmV3V2lkdGgs
IGludCBuZXdIZWlnaHQpOworICAgICAgICBib29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYpOwor
ICAgICAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmdTdG9yZS0+c2l6
ZSgpOyB9CiAKICAgICAgICAgLy8gUmV0dXJucyBhIGNhbGxlci1vd25lZCBwb2ludGVyIHRvIHRo
ZSB1bmRlcmx5aW5nIG5hdGl2ZSBpbWFnZSBkYXRhLgogICAgICAgICAvLyAoQWN0dWFsIHVzZTog
VGhpcyBwb2ludGVyIHdpbGwgYmUgb3duZWQgYnkgQml0bWFwSW1hZ2UgYW5kIGZyZWVkIGluCiAg
ICAgICAgIC8vIEZyYW1lRGF0YTo6Y2xlYXIoKSkuCi0gICAgICAgIE5hdGl2ZUltYWdlUHRyIGFz
TmV3TmF0aXZlSW1hZ2UoKSBjb25zdDsKKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIgYXNOZXdOYXRp
dmVJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlLT5pbWFnZSgpOyB9CiAKKyAg
ICAgICAgaW5saW5lIEltYWdlQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUoKSBjb25zdCB7IHJl
dHVybiBtX2JhY2tpbmdTdG9yZSA/IG1fYmFja2luZ1N0b3JlLmdldCgpIDogbnVsbHB0cjsgfQor
ICAgICAgICBpbmxpbmUgYm9vbCBoYXNCYWNraW5nU3RvcmUoKSBjb25zdCB7IHJldHVybiBiYWNr
aW5nU3RvcmUoKTsgfQorICAgICAgICAKICAgICAgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0Owot
ICAgICAgICBjb25zdCBJbnRSZWN0JiBvcmlnaW5hbEZyYW1lUmVjdCgpIGNvbnN0IHsgcmV0dXJu
IG1fb3JpZ2luYWxGcmFtZVJlY3Q7IH0KKyAgICAgICAgSW50UmVjdCBvcmlnaW5hbEZyYW1lUmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlID8gbV9iYWNraW5nU3RvcmUtPmZyYW1l
UmVjdCgpIDogSW50UmVjdCgpOyB9CiAgICAgICAgIEZyYW1lU3RhdHVzIHN0YXR1cygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdHVzOyB9CiAgICAgICAgIHVuc2lnbmVkIGR1cmF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9kdXJhdGlvbjsgfQogICAgICAgICBGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bv
c2FsTWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9kaXNwb3NhbE1ldGhvZDsgfQogICAgICAgICBi
b29sIHByZW11bHRpcGx5QWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3ByZW11bHRpcGx5QWxwaGE7
IH0KIAorICAgICAgICB2b2lkIHNldEJhY2tpbmdTdG9yZShjb25zdCBJbWFnZUJhY2tpbmdTdG9y
ZSopOworICAgICAgICAKICAgICAgICAgdm9pZCBzZXRIYXNBbHBoYShib29sIGFscGhhKTsKLSAg
ICAgICAgdm9pZCBzZXRPcmlnaW5hbEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiByKSB7IG1fb3Jp
Z2luYWxGcmFtZVJlY3QgPSByOyB9CisgICAgICAgIHZvaWQgc2V0T3JpZ2luYWxGcmFtZVJlY3Qo
Y29uc3QgSW50UmVjdCYpOwogICAgICAgICB2b2lkIHNldFN0YXR1cyhGcmFtZVN0YXR1cyBzdGF0
dXMpOwogICAgICAgICB2b2lkIHNldER1cmF0aW9uKHVuc2lnbmVkIGR1cmF0aW9uKSB7IG1fZHVy
YXRpb24gPSBkdXJhdGlvbjsgfQogICAgICAgICB2b2lkIHNldERpc3Bvc2FsTWV0aG9kKEZyYW1l
RGlzcG9zYWxNZXRob2QgbWV0aG9kKSB7IG1fZGlzcG9zYWxNZXRob2QgPSBtZXRob2Q7IH0KICAg
ICAgICAgdm9pZCBzZXRQcmVtdWx0aXBseUFscGhhKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkgeyBt
X3ByZW11bHRpcGx5QWxwaGEgPSBwcmVtdWx0aXBseUFscGhhOyB9CiAKLSAgICAgICAgaW5saW5l
IHZvaWQgc2V0UkdCQShpbnQgeCwgaW50IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2ln
bmVkIGIsIHVuc2lnbmVkIGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNldFJHQkEoZ2V0QWRk
cih4LCB5KSwgciwgZywgYiwgYSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmxpbmUgUGl4ZWxE
YXRhKiBnZXRBZGRyKGludCB4LCBpbnQgeSkKKyAgICAgICAgaW5saW5lIFJHQkEzMiogZ2V0QWRk
cihpbnQgeCwgaW50IHkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2J5dGVzICsg
KHkgKiB3aWR0aCgpKSArIHg7CisgICAgICAgICAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUtPmF0
KHgsIHkpOwogICAgICAgICB9CiAKLSAgICAgICAgaW5saW5lIGJvb2wgaGFzUGl4ZWxEYXRhKCkg
Y29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXM7Ci0gICAgICAgIH0K
LQotICAgICAgICAvLyBVc2UgZml4IHBvaW50IG11bHRpcGxpZXIgaW5zdGVhZCBvZiBpbnRlZ2Vy
IGRpdmlzaW9uIG9yIGZsb2F0aW5nIHBvaW50IG1hdGguCi0gICAgICAgIC8vIFRoaXMgbXVsdGlw
bGVyIHByb2R1Y2VzIGV4YWN0bHkgdGhlIHNhbWUgcmVzdWx0IGZvciBhbGwgdmFsdWVzIGluIHJh
bmdlIDAgLSAyNTUuCi0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmaXhQb2ludFNoaWZ0
ID0gMjQ7Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmaXhQb2ludE11bHQgPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oMS4wIC8gMjU1LjAgKiAoMSA8PCBmaXhQb2ludFNoaWZ0KSkgKyAx
OwotICAgICAgICAvLyBNdWx0aXBsaWVzIHVuc2lnbmVkIHZhbHVlIGJ5IGZpeHBvaW50IHZhbHVl
IGFuZCBjb252ZXJ0cyBiYWNrIHRvIHVuc2lnbmVkLgotICAgICAgICBzdGF0aWMgdW5zaWduZWQg
Zml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KHVuc2lnbmVkIGZpeGVkLCB1bnNpZ25lZCB2KQorICAg
ICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKGludCB4LCBpbnQgeSwgdW5zaWduZWQgciwgdW5zaWdu
ZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuICAoZml4ZWQgKiB2KSA+PiBmaXhQb2ludFNoaWZ0OworICAgICAgICAgICAgbV9iYWNraW5n
U3RvcmUtPnNldFJHQkEoeCwgeSwgciwgZywgYiwgYSk7CiAgICAgICAgIH0KIAotICAgICAgICBp
bmxpbmUgdm9pZCBzZXRSR0JBKFBpeGVsRGF0YSogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQg
ZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKKyAgICAgICAgaW5saW5lIHZvaWQgc2V0UkdCQShS
R0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVk
IGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX3ByZW11bHRpcGx5QWxwaGEgJiYgYSA8
IDI1NSkgewotICAgICAgICAgICAgICAgIGlmICghYSkgewotICAgICAgICAgICAgICAgICAgICAq
ZGVzdCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBhbHBoYU11bHQgPSBhICogZml4UG9pbnRNdWx0
OwotICAgICAgICAgICAgICAgIHIgPSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkociwgYWxwaGFN
dWx0KTsKLSAgICAgICAgICAgICAgICBnID0gZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KGcsIGFs
cGhhTXVsdCk7Ci0gICAgICAgICAgICAgICAgYiA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShi
LCBhbHBoYU11bHQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3QgPSAoYSA8PCAy
NCB8IHIgPDwgMTYgfCBnIDw8IDggfCBiKTsKKyAgICAgICAgICAgIG1fYmFja2luZ1N0b3JlLT5z
ZXRSR0JBKGRlc3QsIHIsIGcsIGIsIGEpOwogICAgICAgICB9CiAKICNpZiBFTkFCTEUoQVBORykK
LSAgICAgICAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBkaXZpZGUyNTUodW5zaWduZWQgYSkKKyAg
ICAgICAgaW5saW5lIHZvaWQgb3ZlclJHQkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNp
Z25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQogICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gKGEgKyAoYSA+PiA4KSArIDEpID4+IDg7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmxp
bmUgdm9pZCBvdmVyUkdCQShQaXhlbERhdGEqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcs
IHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghYSkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmIChhIDwgMjU1KSB7Ci0g
ICAgICAgICAgICAgICAgdW5zaWduZWQgYURlc3QgPSAoKCpkZXN0KSA+PiAyNCkgJiAyNTU7Ci0g
ICAgICAgICAgICAgICAgaWYgKGFEZXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IHJEZXN0ID0gKCgqZGVzdCkgPj4gMTYpICYgMjU1OwotICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBnRGVzdCA9ICgoKmRlc3QpID4+IDgpICYgMjU1OwotICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBiRGVzdCA9ICgqZGVzdCkgJiAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGFBdXggPSAyNTUgLSBhOwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlw
bHlBbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgckRlc3QgPSBkaXZpZGUyNTUockRl
c3QgKiBhRGVzdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnRGVzdCA9IGRpdmlkZTI1NShn
RGVzdCAqIGFEZXN0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJEZXN0ID0gZGl2aWRlMjU1
KGJEZXN0ICogYURlc3QpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIHIgPSBkaXZpZGUyNTUociAqIGEgKyByRGVzdCAqIGFBdXgpOwotICAgICAgICAgICAgICAg
ICAgICBnID0gZGl2aWRlMjU1KGcgKiBhICsgZ0Rlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAg
ICAgICAgYiA9IGRpdmlkZTI1NShiICogYSArIGJEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGEgKz0gZGl2aWRlMjU1KGFEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghbV9wcmVtdWx0aXBseUFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByID0g
KHIgKiAyNTUgKyBhIC0gMSkgLyBhOwotICAgICAgICAgICAgICAgICAgICAgICAgZyA9IChnICog
MjU1ICsgYSAtIDEpIC8gYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGIgPSAoYiAqIDI1NSAr
IGEgLSAxKSAvIGE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSkgewotICAgICAgICAgICAgICAgICAgICByID0gZGl2
aWRlMjU1KHIgKiBhKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IGRpdmlkZTI1NShnICogYSk7
Ci0gICAgICAgICAgICAgICAgICAgIGIgPSBkaXZpZGUyNTUoYiAqIGEpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpkZXN0ID0gKGEgPDwgMjQgfCByIDw8
IDE2IHwgZyA8PCA4IHwgYik7CisgICAgICAgICAgICBtX2JhY2tpbmdTdG9yZS0+b3ZlclJHQkEo
ZGVzdCwgciwgZywgYiwgYSk7CiAgICAgICAgIH0KICNlbmRpZgogCiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgaW50IHdpZHRoKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1f
c2l6ZS53aWR0aCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3NpemUuaGVpZ2h0KCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBWZWN0b3I8UGl4ZWxEYXRhPiBtX2JhY2tpbmdTdG9yZTsKLSAgICAgICAgUGl4
ZWxEYXRhKiBtX2J5dGVzOyAvLyBUaGUgbWVtb3J5IGlzIGJhY2tlZCBieSBtX2JhY2tpbmdTdG9y
ZS4KLSAgICAgICAgSW50U2l6ZSBtX3NpemU7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CiAgICAgICAgIGJvb2wgbV9oYXNBbHBoYTsK
LSAgICAgICAgSW50UmVjdCBtX29yaWdpbmFsRnJhbWVSZWN0OyAvLyBUaGlzIHdpbGwgYWx3YXlz
IGp1c3QgYmUgdGhlIGVudGlyZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGJ1ZmZlciBleGNlcHQgZm9yIEdJRiBmcmFtZXMgd2hvc2UKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBvcmlnaW5hbCByZWN0IHdhcyBzbWFsbGVyIHRoYW4gdGhl
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3ZlcmFsbCBpbWFnZSBz
aXplLgogICAgICAgICBGcmFtZVN0YXR1cyBtX3N0YXR1czsKICAgICAgICAgdW5zaWduZWQgbV9k
dXJhdGlvbjsKICAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBtX2Rpc3Bvc2FsTWV0aG9kOwpA
QCAtMjg3LDExICsyMDUsMTEgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+Owog
CiAgICAgICAgIC8vIFJldHVybnMgd2hldGhlciB0aGUgc2l6ZSBpcyBsZWdhbCAoaS5lLiBub3Qg
Z29pbmcgdG8gcmVzdWx0IGluCiAgICAgICAgIC8vIG92ZXJmbG93IGVsc2V3aGVyZSkuICBJZiBu
b3QsIG1hcmtzIGRlY29kaW5nIGFzIGZhaWxlZC4KLSAgICAgICAgdmlydHVhbCBib29sIHNldFNp
emUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKKyAgICAgICAgdmlydHVhbCBib29s
IHNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICAgICAgewotICAgICAgICAgICAgaWYg
KGlzT3ZlclNpemUod2lkdGgsIGhlaWdodCkpCisgICAgICAgICAgICBpZiAoSW1hZ2VCYWNraW5n
U3RvcmU6OmlzT3ZlclNpemUoc2l6ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxl
ZCgpOwotICAgICAgICAgICAgbV9zaXplID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAg
ICAgICAgIG1fc2l6ZSA9IHNpemU7CiAgICAgICAgICAgICBtX3NpemVBdmFpbGFibGUgPSB0cnVl
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTM4NiwxNSArMzA0LDYg
QEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICBJbWFnZU9yaWVu
dGF0aW9uIG1fb3JpZW50YXRpb247CiAKICAgICBwcml2YXRlOgotICAgICAgICAvLyBTb21lIGNv
ZGUgcGF0aHMgY29tcHV0ZSB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UgYXMgIndpZHRoICogaGVpZ2h0
ICogNCIKLSAgICAgICAgLy8gYW5kIHJldHVybiBpdCBhcyBhIChzaWduZWQpIGludC4gIEF2b2lk
IG92ZXJmbG93LgotICAgICAgICBzdGF0aWMgYm9vbCBpc092ZXJTaXplKHVuc2lnbmVkIHdpZHRo
LCB1bnNpZ25lZCBoZWlnaHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcg
bG9uZyB0b3RhbF9zaXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPih3aWR0aCkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc3RhdGljX2Nhc3Q8
dW5zaWduZWQgbG9uZyBsb25nPihoZWlnaHQpOwotICAgICAgICAgICAgcmV0dXJuIHRvdGFsX3Np
emUgPiAoKDEgPDwgMjkpIC0gMSk7Ci0gICAgICAgIH0KLQogICAgICAgICBJbnRTaXplIG1fc2l6
ZTsKICAgICAgICAgYm9vbCBtX3NpemVBdmFpbGFibGUgeyBmYWxzZSB9OwogI2lmIEVOQUJMRShJ
TUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5j
cHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4
LDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6ZGVjb2RlQk1QKGJvb2wgb25seQogICAgIC8vIElu
aXRpYWxpemUgdGhlIGZyYW1lYnVmZmVyIGlmIG5lZWRlZC4KICAgICBBU1NFUlQobV9idWZmZXIp
OyAgLy8gUGFyZW50IHNob3VsZCBzZXQgdGhpcyBiZWZvcmUgYXNraW5nIHVzIHRvIGRlY29kZSEK
ICAgICBpZiAobV9idWZmZXItPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpIHsK
LSAgICAgICAgaWYgKCFtX2J1ZmZlci0+c2V0U2l6ZShtX3BhcmVudC0+c2l6ZSgpLndpZHRoKCks
IG1fcGFyZW50LT5zaXplKCkuaGVpZ2h0KCkpKQorICAgICAgICBpZiAoIW1fYnVmZmVyLT5zZXRT
aXplKG1fcGFyZW50LT5zaXplKCkpKQogICAgICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5zZXRG
YWlsZWQoKTsgLy8gVW5hYmxlIHRvIGFsbG9jYXRlLgogICAgICAgICBtX2J1ZmZlci0+c2V0U3Rh
dHVzKEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIC8vIHNldFNpemUoKSBjYWxs
cyBlcmFzZUFSR0IoKSwgd2hpY2ggcmVzZXRzIHRoZSBhbHBoYSBmbGFnLCBzbyB3ZSBmb3JjZQpA
QCAtODYsOSArODYsNiBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpkZWNvZGVCTVAoYm9vbCBvbmx5
CiAgICAgICAgIC8vIHRoZXNlIDBzIGNvdWxkIGFjdHVhbGx5IHNob3cgdGhyb3VnaC4KICAgICAg
ICAgbV9idWZmZXItPnNldEhhc0FscGhhKGZhbHNlKTsKIAotICAgICAgICAvLyBGb3IgQk1Qcywg
dGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgotICAgICAgICBtX2J1ZmZl
ci0+c2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBtX3BhcmVudC0+c2l6
ZSgpKSk7Ci0KICAgICAgICAgaWYgKCFtX2lzVG9wRG93bikKICAgICAgICAgICAgIG1fY29vcmQu
c2V0WShtX3BhcmVudC0+c2l6ZSgpLmhlaWdodCgpIC0gMSk7CiAgICAgfQpAQCAtMTcxLDcgKzE2
OCw3IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NJbmZvSGVhZGVyKCkKICAgICAgICAg
cmV0dXJuIG1fcGFyZW50LT5zZXRGYWlsZWQoKTsKIAogICAgIC8vIFNldCBvdXIgc2l6ZS4KLSAg
ICBpZiAoIW1fcGFyZW50LT5zZXRTaXplKG1faW5mb0hlYWRlci5iaVdpZHRoLCBtX2luZm9IZWFk
ZXIuYmlIZWlnaHQpKQorICAgIGlmICghbV9wYXJlbnQtPnNldFNpemUoSW50U2l6ZShtX2luZm9I
ZWFkZXIuYmlXaWR0aCwgbV9pbmZvSGVhZGVyLmJpSGVpZ2h0KSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIC8vIEZvciBwYWxldHRlZCBpbWFnZXMsIGJpdG1hcHMgY2FuIHNldCBiaUNs
clVzZWQgdG8gMCB0byBtZWFuICJhbGwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFj
a2luZ1N0b3JlQ2Fpcm8uY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJh
Y2tpbmdTdG9yZS5oIgorCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJhY2tpbmdTdG9yZTo6aW1hZ2UoKSBjb25zdAorewor
ICAgIHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgK
KyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oY29uc3RfY2FzdDxSR0JB
MzIqPihtX3BpeGVsc1B0cikpLAorICAgICAgICBDQUlST19GT1JNQVRfQVJHQjMyLCBzaXplKCku
d2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpLCBzaXplKCkud2lkdGgoKSAqIHNpemVvZihSR0JBMzIp
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURl
Y29kZXIuY3BwCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjAsMTIgKzYwLDEyIEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQog
ICAgIHJldHVybiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwogfQogCi1ib29sIEdJ
RkltYWdlRGVjb2Rlcjo6c2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQor
Ym9vbCBHSUZJbWFnZURlY29kZXI6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAg
ICBpZiAoSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSAmJiBzaXplKCkgPT0gSW50U2l6
ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICBpZiAoSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUo
KSAmJiB0aGlzLT5zaXplKCkgPT0gc2l6ZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBp
ZiAoIUltYWdlRGVjb2Rlcjo6c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICBpZiAoIUltYWdl
RGVjb2Rlcjo6c2V0U2l6ZShzaXplKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcHJl
cGFyZVNjYWxlRGF0YUlmTmVjZXNzYXJ5KCk7CkBAIC0yMTMsMTAgKzIxMywxMCBAQCBib29sIEdJ
RkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3codW5zCiAKICAgICAvLyBJbml0aWFsaXplIHRo
ZSBmcmFtZSBpZiBuZWNlc3NhcnkuCiAgICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1
ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOwotICAgIGlmICgoKGJ1ZmZlci5zdGF0dXMoKSA9PSBJbWFn
ZUZyYW1lOjpGcmFtZUVtcHR5KSAmJiAhaW5pdEZyYW1lQnVmZmVyKGZyYW1lSW5kZXgpKSB8fCAh
YnVmZmVyLmhhc1BpeGVsRGF0YSgpKQorICAgIGlmICgoKGJ1ZmZlci5zdGF0dXMoKSA9PSBJbWFn
ZUZyYW1lOjpGcmFtZUVtcHR5KSAmJiAhaW5pdEZyYW1lQnVmZmVyKGZyYW1lSW5kZXgpKSB8fCAh
YnVmZmVyLmhhc0JhY2tpbmdTdG9yZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJ
bWFnZUZyYW1lOjpQaXhlbERhdGEqIGN1cnJlbnRBZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoeEJl
Z2luLCB5QmVnaW4pOworICAgIFJHQkEzMiogY3VycmVudEFkZHJlc3MgPSBidWZmZXIuZ2V0QWRk
cih4QmVnaW4sIHlCZWdpbik7CiAgICAgLy8gV3JpdGUgb25lIHJvdydzIHdvcnRoIG9mIGRhdGEg
aW50byB0aGUgZnJhbWUuICAKICAgICBmb3IgKGludCB4ID0geEJlZ2luOyB4IDwgeEVuZDsgKyt4
KSB7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgc291cmNlVmFsdWUgPSByb3dCdWZmZXJb
KG1fc2NhbGVkID8gbV9zY2FsZWRDb2x1bW5zW3hdIDogeCkgLSBmcmFtZUNvbnRleHQtPnhPZmZz
ZXRdOwpAQCAtMzYxLDcgKzM2MSw3IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVC
dWZmZXIodW4KIAogICAgIGlmICghZnJhbWVJbmRleCkgewogICAgICAgICAvLyBUaGlzIGlzIHRo
ZSBmaXJzdCBmcmFtZSwgc28gd2UncmUgbm90IHJlbHlpbmcgb24gYW55IHByZXZpb3VzIGRhdGEu
Ci0gICAgICAgIGlmICghYnVmZmVyLT5zZXRTaXplKHNjYWxlZFNpemUoKS53aWR0aCgpLCBzY2Fs
ZWRTaXplKCkuaGVpZ2h0KCkpKQorICAgICAgICBpZiAoIWJ1ZmZlci0+c2V0U2l6ZShzY2FsZWRT
aXplKCkpKQogICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIC8vIFRoZSBzdGFydGluZyBzdGF0ZSBmb3IgdGhpcyBmcmFtZSBkZXBlbmRzIG9uIHRo
ZSBwcmV2aW91cyBmcmFtZSdzCkBAIC0zODcsMTIgKzM4NywxMiBAQCBib29sIEdJRkltYWdlRGVj
b2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAv
LyBXZSB3YW50IHRvIGNsZWFyIHRoZSBwcmV2aW91cyBmcmFtZSB0byB0cmFuc3BhcmVudCwgd2l0
aG91dAogICAgICAgICAgICAgLy8gYWZmZWN0aW5nIHBpeGVscyBpbiB0aGUgaW1hZ2Ugb3V0c2lk
ZSBvZiB0aGUgZnJhbWUuCi0gICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBwcmV2UmVjdCA9IHBy
ZXZCdWZmZXItPm9yaWdpbmFsRnJhbWVSZWN0KCk7CisgICAgICAgICAgICBJbnRSZWN0IHByZXZS
ZWN0ID0gcHJldkJ1ZmZlci0+b3JpZ2luYWxGcmFtZVJlY3QoKTsKICAgICAgICAgICAgIGNvbnN0
IEludFNpemUmIGJ1ZmZlclNpemUgPSBzY2FsZWRTaXplKCk7CiAgICAgICAgICAgICBpZiAoIWZy
YW1lSW5kZXggfHwgcHJldlJlY3QuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzY2FsZWRT
aXplKCkpKSkgewogICAgICAgICAgICAgICAgIC8vIENsZWFyaW5nIHRoZSBmaXJzdCBmcmFtZSwg
b3IgYSBmcmFtZSB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUKICAgICAgICAgICAgICAgICAvLyBpbWFn
ZSwgcmVzdWx0cyBpbiBhIGNvbXBsZXRlbHkgZW1wdHkgaW1hZ2UuCi0gICAgICAgICAgICAgICAg
aWYgKCFidWZmZXItPnNldFNpemUoYnVmZmVyU2l6ZS53aWR0aCgpLCBidWZmZXJTaXplLmhlaWdo
dCgpKSkKKyAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlci0+c2V0U2l6ZShidWZmZXJTaXplKSkK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAvLyBDb3B5IHRoZSB3aG9sZSBwcmV2aW91cyBidWZmZXIs
IHRoZW4gY2xlYXIganVzdCBpdHMgZnJhbWUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5o
CShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24o
KSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiZ2lmIjsgfQogICAgICAgICB2b2lkIHNldERhdGEo
U2hhcmVkQnVmZmVyJiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkgb3ZlcnJpZGU7CiAgICAg
ICAgIGJvb2wgaXNTaXplQXZhaWxhYmxlKCkgb3ZlcnJpZGU7Ci0gICAgICAgIGJvb2wgc2V0U2l6
ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KSBvdmVycmlkZTsKKyAgICAgICAgYm9v
bCBzZXRTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKICAgICAgICAgc2l6ZV90IGZyYW1l
Q291bnQoKSBvdmVycmlkZTsKICAgICAgICAgaW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0IG92
ZXJyaWRlOwogICAgICAgICBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGlu
ZGV4KSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAkocmV2aXNpb24g
MjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJ
RkltYWdlUmVhZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ3LDcgKzQ0Nyw3IEBAIGJvb2wg
R0lGSW1hZ2VSZWFkZXI6OnBhcnNlKHNpemVfdCBkYXRhUG8KIAogICAgICAgICAgICAgLy8gQ0FM
TEJBQ0s6IEluZm9ybSB0aGUgZGVjb2RlcnBsdWdpbiBvZiBvdXIgc2l6ZS4KICAgICAgICAgICAg
IC8vIE5vdGU6IEEgc3Vic2VxdWVudCBmcmFtZSBtaWdodCBoYXZlIGRpbWVuc2lvbnMgbGFyZ2Vy
IHRoYW4gdGhlICJzY3JlZW4iIGRpbWVuc2lvbnMuCi0gICAgICAgICAgICBpZiAobV9jbGllbnQg
JiYgIW1fY2xpZW50LT5zZXRTaXplKG1fc2NyZWVuV2lkdGgsIG1fc2NyZWVuSGVpZ2h0KSkKKyAg
ICAgICAgICAgIGlmIChtX2NsaWVudCAmJiAhbV9jbGllbnQtPnNldFNpemUoSW50U2l6ZShtX3Nj
cmVlbldpZHRoLCBtX3NjcmVlbkhlaWdodCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgICAgICAgICAgbV9zY3JlZW5CZ2NvbG9yID0gY3VycmVudENvbXBvbmVudFs1XTsK
QEAgLTY2NCw3ICs2NjQsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpwYXJzZShzaXplX3QgZGF0
YVBvCiAgICAgICAgICAgICAgICAgeU9mZnNldCA9IDA7CiAKICAgICAgICAgICAgICAgICAvLyBD
QUxMQkFDSzogSW5mb3JtIHRoZSBkZWNvZGVycGx1Z2luIG9mIG91ciBzaXplLgotICAgICAgICAg
ICAgICAgIGlmIChtX2NsaWVudCAmJiAhbV9jbGllbnQtPnNldFNpemUobV9zY3JlZW5XaWR0aCwg
bV9zY3JlZW5IZWlnaHQpKQorICAgICAgICAgICAgICAgIGlmIChtX2NsaWVudCAmJiAhbV9jbGll
bnQtPnNldFNpemUoSW50U2l6ZShtX3NjcmVlbldpZHRoLCBtX3NjcmVlbkhlaWdodCkpKQogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2ljby9JQ09JbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODgsMTEgKzg4LDExIEBAIEludFNpemUgSUNPSW1hZ2VEZWNvZGVyOjpm
cmFtZVNpemVBdEluZGUKICAgICByZXR1cm4gKGluZGV4ICYmIChpbmRleCA8IG1fZGlyRW50cmll
cy5zaXplKCkpKSA/IG1fZGlyRW50cmllc1tpbmRleF0ubV9zaXplIDogc2l6ZSgpOwogfQogCi1i
b29sIElDT0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVp
Z2h0KQorYm9vbCBJQ09JbWFnZURlY29kZXI6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkK
IHsKICAgICAvLyBUaGUgc2l6ZSBjYWxjdWxhdGVkIGluc2lkZSB0aGUgQk1QSW1hZ2VSZWFkZXIg
aGFkIGJldHRlciBtYXRjaCB0aGUgb25lIGluCiAgICAgLy8gdGhlIGljb24gZGlyZWN0b3J5Lgot
ICAgIHJldHVybiBtX2ZyYW1lU2l6ZS5pc0VtcHR5KCkgPyBJbWFnZURlY29kZXI6OnNldFNpemUo
d2lkdGgsIGhlaWdodCkgOiAoKEludFNpemUod2lkdGgsIGhlaWdodCkgPT0gbV9mcmFtZVNpemUp
IHx8IHNldEZhaWxlZCgpKTsKKyAgICByZXR1cm4gbV9mcmFtZVNpemUuaXNFbXB0eSgpID8gSW1h
Z2VEZWNvZGVyOjpzZXRTaXplKHNpemUpIDogKHNpemUgPT0gbV9mcmFtZVNpemUpIHx8IHNldEZh
aWxlZCgpKTsKIH0KIAogc2l6ZV90IElDT0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCgpCkBAIC0y
NzksNyArMjc5LDcgQEAgYm9vbCBJQ09JbWFnZURlY29kZXI6OnByb2Nlc3NEaXJlY3RvcnlFbgog
ICAgIGNvbnN0IEljb25EaXJlY3RvcnlFbnRyeSYgZGlyRW50cnkgPSBtX2RpckVudHJpZXMuZmly
c3QoKTsKICAgICAvLyBUZWNobmljYWxseSwgdGhpcyBuZXh0IGNhbGwgc2hvdWxkbid0IGJlIGFi
bGUgdG8gZmFpbCwgc2luY2UgdGhlIHdpZHRoCiAgICAgLy8gYW5kIGhlaWdodCBoZXJlIGFyZSBl
YWNoIDw9IDI1NiwgYW5kIHxtX2ZyYW1lU2l6ZXwgaXMgZW1wdHkuCi0gICAgcmV0dXJuIHNldFNp
emUoZGlyRW50cnkubV9zaXplLndpZHRoKCksIGRpckVudHJ5Lm1fc2l6ZS5oZWlnaHQoKSk7Cisg
ICAgcmV0dXJuIHNldFNpemUoZGlyRW50cnkubV9zaXplKTsKIH0KIAogSUNPSW1hZ2VEZWNvZGVy
OjpJY29uRGlyZWN0b3J5RW50cnkgSUNPSW1hZ2VEZWNvZGVyOjpyZWFkRGlyZWN0b3J5RW50cnko
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0lt
YWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaAkocmV2aXNpb24gMjA1Njg0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBvdmVycmlkZTsKICAgICAgICAgSW50U2l6ZSBz
aXplKCkgb3ZlcnJpZGU7CiAgICAgICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRleChzaXplX3Qs
IFN1YnNhbXBsaW5nTGV2ZWwpIG92ZXJyaWRlOwotICAgICAgICBib29sIHNldFNpemUodW5zaWdu
ZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkgb3ZlcnJpZGU7CisgICAgICAgIGJvb2wgc2V0U2l6
ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7CiAgICAgICAgIHNpemVfdCBmcmFtZUNvdW50KCkg
b3ZlcnJpZGU7CiAgICAgICAgIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3Qp
IG92ZXJyaWRlOwogICAgICAgICAvLyBDQVVUSU9OOiBzZXRGYWlsZWQoKSBkZWxldGVzIGFsbCBy
ZWFkZXJzIGFuZCBkZWNvZGVycy4gIEJlIGNhcmVmdWwgdG8KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVH
SW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzIyLDcgKzMyMiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fc3RhdGUgPSBK
UEVHX1NUQVJUX0RFQ09NUFJFU1M7CiAKICAgICAgICAgICAgIC8vIFdlIGNhbiBmaWxsIGluIHRo
ZSBzaXplIG5vdyB0aGF0IHRoZSBoZWFkZXIgaXMgYXZhaWxhYmxlLgotICAgICAgICAgICAgaWYg
KCFtX2RlY29kZXItPnNldFNpemUobV9pbmZvLmltYWdlX3dpZHRoLCBtX2luZm8uaW1hZ2VfaGVp
Z2h0KSkKKyAgICAgICAgICAgIGlmICghbV9kZWNvZGVyLT5zZXRTaXplKEludFNpemUobV9pbmZv
LmltYWdlX3dpZHRoLCBtX2luZm8uaW1hZ2VfaGVpZ2h0KSkpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBtX2RlY29kZXItPnNldE9yaWVudGF0aW9uKHJlYWRJ
bWFnZU9yaWVudGF0aW9uKGluZm8oKSkpOwpAQCAtNTE5LDkgKzUxOSw5IEBAIGJvb2wgSlBFR0lt
YWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkKICAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjpp
c1NpemVBdmFpbGFibGUoKTsKIH0KIAotYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHVu
c2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCitib29sIEpQRUdJbWFnZURlY29kZXI6OnNl
dFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBpZiAoIUltYWdlRGVjb2Rlcjo6c2V0
U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICBpZiAoIUltYWdlRGVjb2Rlcjo6c2V0U2l6ZShzaXpl
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcHJlcGFyZVNjYWxlRGF0YUlmTmVjZXNz
YXJ5KCk7CkBAIC01NTEsNyArNTUxLDcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpzZXRGYWls
ZWQoKQogfQogCiB0ZW1wbGF0ZSA8Sl9DT0xPUl9TUEFDRSBjb2xvclNwYWNlPgotdm9pZCBzZXRQ
aXhlbChJbWFnZUZyYW1lJiBidWZmZXIsIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogY3VycmVudEFk
ZHJlc3MsIEpTQU1QQVJSQVkgc2FtcGxlcywgaW50IGNvbHVtbikKK3ZvaWQgc2V0UGl4ZWwoSW1h
Z2VGcmFtZSYgYnVmZmVyLCBSR0JBMzIqIGN1cnJlbnRBZGRyZXNzLCBKU0FNUEFSUkFZIHNhbXBs
ZXMsIGludCBjb2x1bW4pCiB7CiAgICAgSlNBTVBMRSoganNhbXBsZSA9ICpzYW1wbGVzICsgY29s
dW1uICogKGNvbG9yU3BhY2UgPT0gSkNTX1JHQiA/IDMgOiA0KTsKIApAQCAtNTk0LDcgKzU5NCw3
IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKEkKICAgICAgICAgaWYg
KGRlc3RZIDwgMCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEltYWdlRnJhbWU6
OlBpeGVsRGF0YSogY3VycmVudEFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcigwLCBkZXN0WSk7Cisg
ICAgICAgIFJHQkEzMiogY3VycmVudEFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcigwLCBkZXN0WSk7
CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7ICsreCkgewogICAgICAgICAgICAg
c2V0UGl4ZWw8Y29sb3JTcGFjZT4oYnVmZmVyLCBjdXJyZW50QWRkcmVzcywgc2FtcGxlcywgaXNT
Y2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4KTsKICAgICAgICAgICAgICsrY3VycmVudEFk
ZHJlc3M7CkBAIC02MTcsMTUgKzYxNywxMiBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1
dFNjYW5saW5lcygpCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWVidWZmZXIgaWYgbmVlZGVk
LgogICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKICAgICBp
ZiAoYnVmZmVyLnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpIHsKLSAgICAgICAg
aWYgKCFidWZmZXIuc2V0U2l6ZShzY2FsZWRTaXplKCkud2lkdGgoKSwgc2NhbGVkU2l6ZSgpLmhl
aWdodCgpKSkKKyAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzY2FsZWRTaXplKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgICAgICBidWZmZXIuc2V0U3RhdHVzKElt
YWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIC8vIFRoZSBidWZmZXIgaXMgdHJhbnNw
YXJlbnQgb3V0c2lkZSB0aGUgZGVjb2RlZCBhcmVhIHdoaWxlIHRoZSBpbWFnZSBpcwogICAgICAg
ICAvLyBsb2FkaW5nLiBUaGUgY29tcGxldGVkIGltYWdlIHdpbGwgYmUgbWFya2VkIGZ1bGx5IG9w
YXF1ZSBpbiBqcGVnQ29tcGxldGUoKS4KICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKHRydWUp
OwotCi0gICAgICAgIC8vIEZvciBKUEVHcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50
aXJlIGltYWdlLgotICAgICAgICBidWZmZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJ
bnRQb2ludCgpLCBzaXplKCkpKTsKICAgICB9CiAKICAgICBqcGVnX2RlY29tcHJlc3Nfc3RydWN0
KiBpbmZvID0gbV9yZWFkZXItPmluZm8oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rl
ci5oCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyAr
NTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIEltYWdlRGVjb2RlcgogICAg
ICAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAi
anBnIjsgfQogICAgICAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIG92ZXJyaWRlOwotICAgICAg
ICBib29sIHNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkgb3ZlcnJpZGU7
CisgICAgICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7CiAgICAgICAg
IEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpIG92ZXJyaWRlOwog
ICAgICAgICAvLyBDQVVUSU9OOiBzZXRGYWlsZWQoKSBkZWxldGVzIHxtX3JlYWRlcnwuICBCZSBj
YXJlZnVsIHRvIGF2b2lkCiAgICAgICAgIC8vIGFjY2Vzc2luZyBkZWxldGVkIG1lbW9yeSwgZXNw
ZWNpYWxseSB3aGVuIGNhbGxpbmcgdGhpcyBmcm9tIGluc2lkZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0lt
YWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMzUsOSArMjM1LDkgQEAgYm9vbCBQTkdJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJs
ZSgpCiAgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCk7CiB9CiAKLWJv
b2wgUE5HSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWln
aHQpCitib29sIFBOR0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQog
ewotICAgIGlmICghSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHdpZHRoLCBoZWlnaHQpKQorICAgIGlm
ICghSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHNpemUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
ICAgICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKQEAgLTI5NSw3ICsyOTUsNyBAQCB2
b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKICAgICAvLyB3aWxsIGNlYXNl
IHRvIGV4aXN0LiAgTm90ZSB0aGF0IHdlJ2xsIHN0aWxsIHByb3Blcmx5IHNldCB0aGUgZmFpbHVy
ZSBmbGFnCiAgICAgLy8gaW4gdGhpcyBjYXNlIGFzIHNvb24gYXMgd2UgbG9uZ2ptcCgpLgogICAg
IG1fZG9Ob3RoaW5nT25GYWlsdXJlID0gdHJ1ZTsKLSAgICBib29sIHJlc3VsdCA9IHNldFNpemUo
d2lkdGgsIGhlaWdodCk7CisgICAgYm9vbCByZXN1bHQgPSBzZXRTaXplKEludFNpemUod2lkdGgs
IGhlaWdodCkpOwogICAgIG1fZG9Ob3RoaW5nT25GYWlsdXJlID0gZmFsc2U7CiAgICAgaWYgKCFy
ZXN1bHQpIHsKICAgICAgICAgbG9uZ2ptcChKTVBCVUYocG5nKSwgMSk7CkBAIC00MTEsMTkgKzQx
MSwxOSBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKICAgICB9CiB9
CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJHQihJbWFnZUZyYW1lOjpQaXhlbERhdGEq
IGRlc3QsIHBuZ19ieXRlcCBwaXhlbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJHQihS
R0JBMzIqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCkKIHsKICAgICAqZGVzdCA9IDB4RkYwMDAwMDBV
IHwgcGl4ZWxbMF0gPDwgMTYgfCBwaXhlbFsxXSA8PCA4IHwgcGl4ZWxbMl07CiB9CiAKLXN0YXRp
YyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJHQkEoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBkZXN0LCBw
bmdfYnl0ZXAgcGl4ZWwsIHVuc2lnbmVkIGNoYXImIG5vblRyaXZpYWxBbHBoYU1hc2spCitzdGF0
aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxSR0JBKFJHQkEzMiogZGVzdCwgcG5nX2J5dGVwIHBpeGVs
LCB1bnNpZ25lZCBjaGFyJiBub25Ucml2aWFsQWxwaGFNYXNrKQogewogICAgIHVuc2lnbmVkIGNo
YXIgYSA9IHBpeGVsWzNdOwogICAgICpkZXN0ID0gYSA8PCAyNCB8IHBpeGVsWzBdIDw8IDE2IHwg
cGl4ZWxbMV0gPDwgOCB8IHBpeGVsWzJdOwogICAgIG5vblRyaXZpYWxBbHBoYU1hc2sgfD0gKDI1
NSAtIGEpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxQcmVtdWx0aXBsaWVkUkdC
QShJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCwgdW5zaWduZWQg
Y2hhciYgbm9uVHJpdmlhbEFscGhhTWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFBy
ZW11bHRpcGxpZWRSR0JBKFJHQkEzMiogZGVzdCwgcG5nX2J5dGVwIHBpeGVsLCB1bnNpZ25lZCBj
aGFyJiBub25Ucml2aWFsQWxwaGFNYXNrKQogewogICAgIHVuc2lnbmVkIGNoYXIgYSA9IHBpeGVs
WzNdOwogICAgIHVuc2lnbmVkIGNoYXIgciA9IGZhc3REaXZpZGVCeTI1NShwaXhlbFswXSAqIGEp
OwpAQCAtNDQ3LDcgKzQ0Nyw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUo
dW5zaWcKICAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbbV9jdXJy
ZW50RnJhbWVdOwogICAgIGlmIChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVF
bXB0eSkgewogICAgICAgICBwbmdfc3RydWN0cCBwbmcgPSBtX3JlYWRlci0+cG5nUHRyKCk7Ci0g
ICAgICAgIGlmICghYnVmZmVyLnNldFNpemUoc2NhbGVkU2l6ZSgpLndpZHRoKCksIHNjYWxlZFNp
emUoKS5oZWlnaHQoKSkpIHsKKyAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzY2FsZWRTaXpl
KCkpKSB7CiAgICAgICAgICAgICBsb25nam1wKEpNUEJVRihwbmcpLCAxKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQpAQCAtNDcxLDggKzQ3MSw2IEBAIHZvaWQgUE5HSW1hZ2VEZWNv
ZGVyOjpyb3dBdmFpbGFibGUodW5zaWcKICAgICAgICAgICAgIGluaXRGcmFtZUJ1ZmZlcihtX2N1
cnJlbnRGcmFtZSk7CiAgICAgICAgIGVsc2UKICNlbmRpZgotICAgICAgICAvLyBGb3IgUE5Hcywg
dGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgotICAgICAgICBidWZmZXIu
c2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKTsKICAgICB9
CiAKICAgICAvKiBsaWJwbmcgY29tbWVudHMgKGhlcmUgdG8gZXhwbGFpbiB3aGF0IGZvbGxvd3Mp
LgpAQCAtNTMxLDcgKzUyOSw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUo
dW5zaWcKICAgICB9CiAKICAgICAvLyBXcml0ZSB0aGUgZGVjb2RlZCByb3cgcGl4ZWxzIHRvIHRo
ZSBmcmFtZSBidWZmZXIuCi0gICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBhZGRyZXNzID0gYnVm
ZmVyLmdldEFkZHIoMCwgeSk7CisgICAgUkdCQTMyKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIo
MCwgeSk7CiAgICAgaW50IHdpZHRoID0gc2NhbGVkU2l6ZSgpLndpZHRoKCk7CiAgICAgdW5zaWdu
ZWQgY2hhciBub25Ucml2aWFsQWxwaGFNYXNrID0gMDsKIApAQCAtODIwLDcgKzgxOCw3IEBAIHZv
aWQgUE5HSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIoc2kKICAgICB9IGVsc2UgewogICAg
ICAgICAvLyBXZSB3YW50IHRvIGNsZWFyIHRoZSBwcmV2aW91cyBmcmFtZSB0byB0cmFuc3BhcmVu
dCwgd2l0aG91dAogICAgICAgICAvLyBhZmZlY3RpbmcgcGl4ZWxzIGluIHRoZSBpbWFnZSBvdXRz
aWRlIG9mIHRoZSBmcmFtZS4KLSAgICAgICAgY29uc3QgSW50UmVjdCYgcHJldlJlY3QgPSBwcmV2
QnVmZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgpOworICAgICAgICBJbnRSZWN0IHByZXZSZWN0ID0g
cHJldkJ1ZmZlci0+b3JpZ2luYWxGcmFtZVJlY3QoKTsKICAgICAgICAgaWYgKCFmcmFtZUluZGV4
IHx8IHByZXZSZWN0LmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkp
IHsKICAgICAgICAgICAgIC8vIENsZWFyaW5nIHRoZSBmaXJzdCBmcmFtZSwgb3IgYSBmcmFtZSB0
aGUgc2l6ZSBvZiB0aGUgd2hvbGUKICAgICAgICAgICAgIC8vIGltYWdlLCByZXN1bHRzIGluIGEg
Y29tcGxldGVseSBlbXB0eSBpbWFnZS4KQEAgLTg0NCw3ICs4NDIsNyBAQCB2b2lkIFBOR0ltYWdl
RGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAgICAgcG5nX2J5dGVwIGludGVybGFjZUJ1ZmZlciA9
IG1fcmVhZGVyLT5pbnRlcmxhY2VCdWZmZXIoKTsKIAogICAgIGlmIChtX2N1cnJlbnRGcmFtZSAm
JiBpbnRlcmxhY2VCdWZmZXIpIHsKLSAgICAgICAgY29uc3QgSW50UmVjdCYgcmVjdCA9IGJ1ZmZl
ci5vcmlnaW5hbEZyYW1lUmVjdCgpOworICAgICAgICBJbnRSZWN0IHJlY3QgPSBidWZmZXIub3Jp
Z2luYWxGcmFtZVJlY3QoKTsKICAgICAgICAgYm9vbCBoYXNBbHBoYSA9IG1fcmVhZGVyLT5oYXNB
bHBoYSgpOwogICAgICAgICB1bnNpZ25lZCBjb2xvckNoYW5uZWxzID0gaGFzQWxwaGEgPyA0IDog
MzsKICAgICAgICAgYm9vbCBub25Ucml2aWFsQWxwaGEgPSBmYWxzZTsKQEAgLTg1NCw3ICs4NTIs
NyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAjaWYgRU5BQkxFKElN
QUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBy
ZWN0Lm1heFkoKSAtIHJlY3QueSgpOyArK3kpIHsKICAgICAgICAgICAgIHBuZ19ieXRlcCByb3cg
PSBpbnRlcmxhY2VCdWZmZXIgKyAobV9zY2FsZWQgPyBtX3NjYWxlZFJvd3NbeV0gOiB5KSAqIGNv
bG9yQ2hhbm5lbHMgKiBzaXplKCkud2lkdGgoKTsKLSAgICAgICAgICAgIEltYWdlRnJhbWU6OlBp
eGVsRGF0YSogYWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHJlY3QueCgpLCB5ICsgcmVjdC55KCkp
OworICAgICAgICAgICAgUkdCQTMyKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIocmVjdC54KCks
IHkgKyByZWN0LnkoKSk7CiAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHJlY3QubWF4
WCgpIC0gcmVjdC54KCk7ICsreCkgewogICAgICAgICAgICAgICAgIHBuZ19ieXRlcCBwaXhlbCA9
IHJvdyArIChtX3NjYWxlZCA/IG1fc2NhbGVkQ29sdW1uc1t4XSA6IHgpICogY29sb3JDaGFubmVs
czsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IGhhc0FscGhhID8gcGl4ZWxbM10g
OiAyNTU7CkBAIC04NzAsNyArODY4LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmZyYW1lQ29t
cGxldGUoKQogICAgICAgICBwbmdfYnl0ZXAgcm93ID0gaW50ZXJsYWNlQnVmZmVyOwogICAgICAg
ICBmb3IgKGludCB5ID0gcmVjdC55KCk7IHkgPCByZWN0Lm1heFkoKTsgKyt5LCByb3cgKz0gY29s
b3JDaGFubmVscyAqIHNpemUoKS53aWR0aCgpKSB7CiAgICAgICAgICAgICBwbmdfYnl0ZXAgcGl4
ZWwgPSByb3c7Ci0gICAgICAgICAgICBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGFkZHJlc3MgPSBi
dWZmZXIuZ2V0QWRkcihyZWN0LngoKSwgeSk7CisgICAgICAgICAgICBSR0JBMzIqIGFkZHJlc3Mg
PSBidWZmZXIuZ2V0QWRkcihyZWN0LngoKSwgeSk7CiAgICAgICAgICAgICBmb3IgKGludCB4ID0g
cmVjdC54KCk7IHggPCByZWN0Lm1heFgoKTsgKyt4LCBwaXhlbCArPSBjb2xvckNoYW5uZWxzKSB7
CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBoYXNBbHBoYSA/IHBpeGVsWzNdIDog
MjU1OwogICAgICAgICAgICAgICAgIG5vblRyaXZpYWxBbHBoYSB8PSBhbHBoYSA8IDI1NTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURl
Y29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IGludCByZXBldGl0aW9uQ291bnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3BsYXlDb3Vu
dC0xOyB9CiAjZW5kaWYKICAgICAgICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBvdmVycmlkZTsK
LSAgICAgICAgYm9vbCBzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpIG92
ZXJyaWRlOworICAgICAgICBib29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwog
ICAgICAgICBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KSBvdmVy
cmlkZTsKICAgICAgICAgLy8gQ0FVVElPTjogc2V0RmFpbGVkKCkgZGVsZXRlcyB8bV9yZWFkZXJ8
LiAgQmUgY2FyZWZ1bCB0byBhdm9pZAogICAgICAgICAvLyBhY2Nlc3NpbmcgZGVsZXRlZCBtZW1v
cnksIGVzcGVjaWFsbHkgd2hlbiBjYWxsaW5nIHRoaXMgZnJvbSBpbnNpZGUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
d2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIGJvb2wgV0VCUEltYWdlRGVjb2Rlcjo6
ZGVjb2RlKGJvb2wgb25seVMKICAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKICAgICAg
ICAgbV9oYXNBbHBoYSA9IGZhbHNlOwogI2VuZGlmCi0gICAgICAgIGlmICghc2V0U2l6ZSh3aWR0
aCwgaGVpZ2h0KSkKKyAgICAgICAgaWYgKCFzZXRTaXplKEludFNpemUod2lkdGgsIGhlaWdodCkp
KQogICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgIH0KIApAQCAtMTI4LDE4ICsx
MjgsMTcgQEAgYm9vbCBXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBvbmx5UwogICAgIEFT
U0VSVChidWZmZXIuc3RhdHVzKCkgIT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSk7CiAKICAg
ICBpZiAoYnVmZmVyLnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpIHsKLSAgICAg
ICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSkK
KyAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzaXplKCkpKQogICAgICAgICAgICAgcmV0dXJu
IHNldEZhaWxlZCgpOwogICAgICAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1l
UGFydGlhbCk7CiAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShtX2hhc0FscGhhKTsKLSAgICAg
ICAgYnVmZmVyLnNldE9yaWdpbmFsRnJhbWVSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSgp
KSk7CiAgICAgfQogCiAgICAgaWYgKCFtX2RlY29kZXIpIHsKICAgICAgICAgV0VCUF9DU1BfTU9E
RSBtb2RlID0gb3V0cHV0TW9kZShtX2hhc0FscGhhKTsKICAgICAgICAgaWYgKCFtX3ByZW11bHRp
cGx5QWxwaGEpCiAgICAgICAgICAgICBtb2RlID0gb3V0cHV0TW9kZShmYWxzZSk7Ci0gICAgICAg
IGludCByb3dTdHJpZGUgPSBzaXplKCkud2lkdGgoKSAqIHNpemVvZihJbWFnZUZyYW1lOjpQaXhl
bERhdGEpOworICAgICAgICBpbnQgcm93U3RyaWRlID0gc2l6ZSgpLndpZHRoKCkgKiBzaXplb2Yo
UkdCQTMyKTsKICAgICAgICAgdWludDhfdCogb3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4oYnVmZmVyLmdldEFkZHIoMCwgMCkpOwogICAgICAgICBpbnQgb3V0cHV0U2l6ZSA9IHNp
emUoKS5oZWlnaHQoKSAqIHJvd1N0cmlkZTsKICAgICAgICAgbV9kZWNvZGVyID0gV2ViUElOZXdS
R0IobW9kZSwgb3V0cHV0LCBvdXRwdXRTaXplLCByb3dTdHJpZGUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288459</attachid>
            <date>2016-09-09 17:40:55 -0700</date>
            <delta_ts>2016-09-09 17:50:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159679-20160909173826.patch</filename>
            <type>text/plain</type>
            <size>57293</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTc3NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNiBAQAorMjAxNi0wOS0wOSAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgdGhl
IHBpeGVsIGRhdGEgb2YgSW1hZ2VGcmFtZSB0byBhIHNlcGFyYXRlIGNsYXNzIG5hbWVkIEltYWdl
QmFja2luZ1N0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTk2NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNb3ZlIHRoZSBwaXhlbCBkYXRhIG1hbmlwdWxhdGlvbiBwYXJ0IGluIEltYWdlRnJhbWUg
aW50byBhIHNlcGFyYXRlIGNsYXNzCisgICAgICAgIGFuZCBhbGxvY2F0ZSBpdCBvbiBkZW1hbmQu
CisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5j
bWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbkNhaXJvLmNtYWtlOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2hhbm5lbCk6Cisg
ICAgICAgIChXZWJDb3JlOjp1bnByZW11bHRpcGxpZWRDaGFubmVsKToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VQcmVtdWx0aXBsaWVkUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlVW5QcmVt
dWx0aXBsaWVkUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpjb2xvckZyb21QcmVtdWx0aXBsaWVk
QVJHQik6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OmZh
c3RNdWx0aXBseUJ5MjU1KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tp
bmdTdG9yZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OkltYWdlQmFja2lu
Z1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRGcmFtZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OnNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCYWNraW5nU3RvcmU6OmZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJhY2tpbmdTdG9yZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3Rv
cmU6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJhY2tpbmdTdG9yZTo6cmVw
ZWF0Rmlyc3RSb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OmF0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRSR0JBKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpvdmVyUkdCQSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJhY2tpbmdTdG9yZTo6aW5Cb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
YWNraW5nU3RvcmU6OmlzT3ZlclNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L05hdGl2ZUltYWdlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmF0aXZlSW1hZ2VIYXNBbHBo
YSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojp6ZXJvRmlsbEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRC
YWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpzZXRPcmlnaW5hbEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJh
bWU6OmNvcHlSb3dOVGltZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2l6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjphc05ld05hdGl2ZUltYWdlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmJhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpoYXNCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZTo6b3JpZ2luYWxGcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
Z2V0QWRkcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRSR0JBKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om92ZXJSR0JBKToKKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRGVjb2Rlcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRP
cmlnaW5hbEZyYW1lUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
OjpoYXNQaXhlbERhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6
Zml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWU6OmRpdmlkZTI1NSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjp3aWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpoZWln
aHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjppc092ZXJTaXpl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1h
Z2VSZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6OmRlY29kZUJN
UCk6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc0luZm9IZWFkZXIp
OgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0
b3JlQ2Fpcm8uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3Jl
OjppbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdl
RGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OnNldFNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcik6CisgICAg
ICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHA6Cisg
ICAgICAgIChHSUZJbWFnZVJlYWRlcjo6cGFyc2UpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SUNP
SW1hZ2VEZWNvZGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rl
cjo6cHJvY2Vzc0RpcmVjdG9yeUVudHJpZXMpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlBFR0ltYWdlUmVhZGVyOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0lt
YWdlRGVjb2Rlcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhlbCk6CisgICAg
ICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMpOgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdl
YkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNv
cmU6OnNldFBpeGVsUkdCKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVsUkdCQSk6CisgICAg
ICAgIChXZWJDb3JlOjpzZXRQaXhlbFByZW11bHRpcGxpZWRSR0JBKToKKyAgICAgICAgKFdlYkNv
cmU6OlBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBO
R0ltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0lt
YWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXRUJQ
SW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorCiAyMDE2LTA5LTA5ICBBbGV4IENocmlzdGVuc2VuICA8
YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVVJMUGFyc2VyIHNob3VsZCBjb252
ZXJ0IEFTQ0lJIGhvc3RzIHRvIGxvd2VyY2FzZQpJbmRleDogU291cmNlL1dlYkNvcmUvUGxhdGZv
cm1FZmwuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21h
a2UJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtl
CSh3b3JraW5nIGNvcHkpCkBAIC0xODMsMTAgKzE4Myw5IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVf
U09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3gxMS9QbGF0Zm9ybURpc3BsYXlYMTEuY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MveDExL1hVbmlxdWVSZXNvdXJjZS5jcHAKIAorICAgIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCiAg
ICAgcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvSlBFR0ltYWdlRW5jb2Rlci5jcHAKIAotICAgIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAotCiAgICAg
cGxhdGZvcm0vbmV0d29yay9lZmwvTmV0d29ya1N0YXRlTm90aWZpZXJFZmwuY3BwCiAKICAgICBw
bGF0Zm9ybS9uZXR3b3JrL3NvdXAvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VTb3VwLmNwcApJbmRl
eDogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNyArMTU1LDcg
QEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3RrL1RlbXBvcmFy
eUxpbmtTdHVicy5jcHAKICAgICBwbGF0Zm9ybS9ndGsvVXNlckFnZW50R3RrLmNwcAogCi0gICAg
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCisgICAg
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VCYWNraW5nU3RvcmVDYWlyby5jcHAK
IAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2d0ay9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJj
ZUd0ay5jcHAKIApJbmRleDogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCShyZXZp
c2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNF
UwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5k
YXRpb24uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ2Fpcm9X
aW4uY3BwCiAKLSAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJD
YWlyby5jcHAKKyAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZUJhY2tpbmdT
dG9yZUNhaXJvLmNwcAogCiAgICAgcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Np
b25TdHViLmNwcAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIyNzUs
NiArMjI3NSw3IEBACiAJCTU1NUI4N0VDMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJD
Ry5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTVC
ODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovOyB9OwogCQk1NTVC
ODdFRDFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1NUI4N0VCMUNBQUYwQUIwMDM0OTQyNSAv
KiBJbWFnZURlY29kZXJDRy5oICovOyB9OwogCQk1NUEzMzZGNzFEODIwOUY0MDAyMkM0QzcgLyog
TmF0aXZlSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDU1QTMzNkY2MUQ4MjA5RjQwMDIyQzRDNyAvKiBOYXRpdmVJbWFnZS5oICovOyB9OworCQk1
NUEzMzZGOTFEODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1QTMzNkY4MUQ4MjFFM0MwMDIy
QzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTU3MDlFOENEMUQ0MTNENDcwMDMyNDRBQyAvKiBXZWJLaXRT
dWJ0bGVDcnlwdG8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTcwOUU4Q0ExRDQxM0NFMzAwMzI0NEFDIC8qIFdlYktpdFN1YnRsZUNyeXB0by5jcHAg
Ki87IH07CiAJCTU3MDlFOENFMUQ0MTNENUIwMDMyNDRBQyAvKiBKU1dlYktpdFN1YnRsZUNyeXB0
b0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMUZGOEY2NjE4MDc0NjA4MDAxMzI2NzQgLyogSlNXZWJLaXRTdWJ0bGVDcnlwdG9DdXN0b20u
Y3BwICovOyB9OwogCQk1NzA5RThDRjFENDEzRDlBMDAzMjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5
cHRvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzA5
RThDQjFENDEzQ0UzMDAzMjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5cHRvLmggKi87IH07CkBAIC05
MjkxLDYgKzkyOTIsNyBAQAogCQk1NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNv
ZGVyQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VEZWNv
ZGVyQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTVCODdFQjFDQUFGMEFC
MDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSW1hZ2VEZWNvZGVyQ0cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVB
MzM2RjYxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IE5hdGl2ZUltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTU1QTMzNkY4MUQ4MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJhY2tpbmdTdG9yZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1NUQ0MDhGNzFBN0M2MzE4MDBDNzg0NTAgLyogU1ZHSW1h
Z2VDbGllbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ltYWdlQ2xp
ZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzA5RThDQTFENDEzQ0UzMDAz
MjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5cHRvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdlYktpdFN1YnRsZUNyeXB0by5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTU3MDlFOENCMUQ0MTNDRTMwMDMyNDRBQyAvKiBXZWJLaXRTdWJ0bGVDcnlwdG8u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViS2l0U3VidGxlQ3J5cHRvLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDc2OSw2ICsyMDc3MSw3IEBACiAJCQkJ
Mzc5OTE5OTQxMjAwRERGNDAwRUEwNDFDIC8qIFdPRkZGaWxlRm9ybWF0LmNwcCAqLywKIAkJCQkz
Nzk5MTk5NTEyMDBEREY0MDBFQTA0MUMgLyogV09GRkZpbGVGb3JtYXQuaCAqLywKIAkJCQk1NUEz
MzZGNjFEODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLywKKwkJCQk1NUEzMzZGODFE
ODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCAqLywKIAkJCSk7CiAJCQlwYXRo
ID0gZ3JhcGhpY3M7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjYzMzksNiArMjYz
NDIsNyBAQAogCQkJCTU4MkNCMDUzMUE3OEExNEIwMEFGRkNDNCAvKiBTaW1wbGVMaW5lTGF5b3V0
VGV4dEZyYWdtZW50SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1QTFFQTdEMTUyQkNG
MDgwMDREMDBCNiAvKiBTaW1wbGlmeU1hcmt1cENvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTU3MkE3RjIxMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNTVBMzM2RjkxRDgyMUUzQzAwMjJDNEM3IC8qIEltYWdlQmFja2luZ1N0b3JlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkzMTc0MUFBRDE2NjM2NjA5MDA4QTVCN0UgLyogU2ltdWxhdGVk
Q2xpY2tPcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDAwRDdBNTE0QTNGNjE5MDA3MzQw
MTEgLyogU2luY1Jlc2FtcGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEzMjdENjAxMUEzM0Ey
QjAwNEY5RDY1IC8qIFNpbmtEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyMDU2ODQpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDYgKzQ5LDE2IEBAIGNvbnN0IFJHQkEzMiBDb2xvcjo6dHJhbnNwYXJlbnQ7CiBz
dGF0aWMgY29uc3QgUkdCQTMyIGxpZ2h0ZW5lZEJsYWNrID0gMHhGRjU0NTQ1NDsKIHN0YXRpYyBj
b25zdCBSR0JBMzIgZGFya2VuZWRXaGl0ZSA9IDB4RkZBQkFCQUI7CiAKK3N0YXRpYyBpbmxpbmUg
dW5zaWduZWQgcHJlbXVsdGlwbGllZENoYW5uZWwodW5zaWduZWQgYywgdW5zaWduZWQgYSkKK3sK
KyAgICByZXR1cm4gZmFzdERpdmlkZUJ5MjU1KGMgKiBhICsgMjU0KTsKK30KKworc3RhdGljIGlu
bGluZSB1bnNpZ25lZCB1bnByZW11bHRpcGxpZWRDaGFubmVsKHVuc2lnbmVkIGMsIHVuc2lnbmVk
IGEpCit7CisgICAgcmV0dXJuIChmYXN0TXVsdGlwbHlCeTI1NShjKSArIGEgLSAxKSAvIGE7Cit9
CisKIFJHQkEzMiBtYWtlUkdCKGludCByLCBpbnQgZywgaW50IGIpCiB7CiAgICAgcmV0dXJuIDB4
RkYwMDAwMDAgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihyLCAyNTUpKSA8PCAxNiB8IHN0ZDo6bWF4
KDAsIHN0ZDo6bWluKGcsIDI1NSkpIDw8IDggfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihiLCAyNTUp
KTsKQEAgLTU5LDYgKzY5LDE2IEBAIFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcsIGludCBi
LCBpbnQKICAgICByZXR1cm4gc3RkOjptYXgoMCwgc3RkOjptaW4oYSwgMjU1KSkgPDwgMjQgfCBz
dGQ6Om1heCgwLCBzdGQ6Om1pbihyLCAyNTUpKSA8PCAxNiB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWlu
KGcsIDI1NSkpIDw8IDggfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihiLCAyNTUpKTsKIH0KIAorUkdC
QTMyIG1ha2VQcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKK3sK
KyAgICByZXR1cm4gbWFrZVJHQkEocHJlbXVsdGlwbGllZENoYW5uZWwociwgYSksIHByZW11bHRp
cGxpZWRDaGFubmVsKGcsIGEpLCBwcmVtdWx0aXBsaWVkQ2hhbm5lbChiLCBhKSwgYSk7Cit9CisK
K1JHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQg
YSkKK3sKKyAgICByZXR1cm4gbWFrZVJHQkEodW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChyLCBhKSwg
dW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBhKSwgdW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChiLCBh
KSwgYSk7Cit9CisKIHN0YXRpYyBpbnQgY29sb3JGbG9hdFRvUkdCQUJ5dGUoZmxvYXQgZikKIHsK
ICAgICAvLyBXZSB1c2UgbHJvdW5kZiBhbmQgMjU1IGluc3RlYWQgb2YgbmV4dGFmdGVyZigyNTYs
IDApIHRvIG1hdGNoIENHJ3Mgcm91bmRpbmcKQEAgLTQ4MiwxNCArNTAyLDkgQEAgdm9pZCBDb2xv
cjo6Z2V0SFNWKGRvdWJsZSYgaHVlLCBkb3VibGUmIAogQ29sb3IgY29sb3JGcm9tUHJlbXVsdGlw
bGllZEFSR0IoUkdCQTMyIHBpeGVsQ29sb3IpCiB7CiAgICAgaW50IGFscGhhID0gYWxwaGFDaGFu
bmVsKHBpeGVsQ29sb3IpOwotICAgIGlmIChhbHBoYSAmJiBhbHBoYSA8IDI1NSkgewotICAgICAg
ICByZXR1cm4gQ29sb3I6OmNyZWF0ZVVuY2hlY2tlZCgKLSAgICAgICAgICAgIHJlZENoYW5uZWwo
cGl4ZWxDb2xvcikgKiAyNTUgLyBhbHBoYSwKLSAgICAgICAgICAgIGdyZWVuQ2hhbm5lbChwaXhl
bENvbG9yKSAqIDI1NSAvIGFscGhhLAotICAgICAgICAgICAgYmx1ZUNoYW5uZWwocGl4ZWxDb2xv
cikgKiAyNTUgLyBhbHBoYSwKLSAgICAgICAgICAgIGFscGhhKTsKLSAgICB9IGVsc2UKLSAgICAg
ICAgcmV0dXJuIENvbG9yKHBpeGVsQ29sb3IpOworICAgIGlmIChhbHBoYSAmJiBhbHBoYSA8IDI1
NSkKKyAgICAgICAgcGl4ZWxDb2xvciA9IG1ha2VVblByZW11bHRpcGxpZWRSR0JBKHJlZENoYW5u
ZWwocGl4ZWxDb2xvciksIGdyZWVuQ2hhbm5lbChwaXhlbENvbG9yKSwgYmx1ZUNoYW5uZWwocGl4
ZWxDb2xvciksIGFscGhhKTsKKyAgICByZXR1cm4gQ29sb3IocGl4ZWxDb2xvcik7CiB9CiAKIFJH
QkEzMiBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihjb25zdCBDb2xvciYgY29sb3IpCkBAIC00
OTcsMTQgKzUxMiwxMCBAQCBSR0JBMzIgcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IoY29uc3Qg
CiAgICAgdW5zaWduZWQgcGl4ZWxDb2xvcjsKIAogICAgIHVuc2lnbmVkIGFscGhhID0gY29sb3Iu
YWxwaGEoKTsKLSAgICBpZiAoYWxwaGEgPCAyNTUpIHsKLSAgICAgICAgcGl4ZWxDb2xvciA9IENv
bG9yOjpjcmVhdGVVbmNoZWNrZWQoCi0gICAgICAgICAgICBmYXN0RGl2aWRlQnkyNTUoY29sb3Iu
cmVkKCkgKiBhbHBoYSArIDI1NCksCi0gICAgICAgICAgICBmYXN0RGl2aWRlQnkyNTUoY29sb3Iu
Z3JlZW4oKSAqIGFscGhhICsgMjU0KSwKLSAgICAgICAgICAgIGZhc3REaXZpZGVCeTI1NShjb2xv
ci5ibHVlKCkgKiBhbHBoYSArIDI1NCksCi0gICAgICAgICAgICBhbHBoYSkucmdiKCk7Ci0gICAg
fSBlbHNlCi0gICAgICAgICBwaXhlbENvbG9yID0gY29sb3IucmdiKCk7CisgICAgaWYgKGFscGhh
IDwgMjU1KQorICAgICAgICBwaXhlbENvbG9yID0gbWFrZVByZW11bHRpcGxpZWRSR0JBKGNvbG9y
LnJlZCgpLCBjb2xvci5ncmVlbigpLCBjb2xvci5ibHVlKCksIGFscGhhKTsKKyAgICBlbHNlCisg
ICAgICAgIHBpeGVsQ29sb3IgPSBjb2xvci5yZ2IoKTsKIAogICAgIHJldHVybiBwaXhlbENvbG9y
OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZp
c2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw5IEBAIHR5cGVkZWYgdW5zaWduZWQgUkdCQTMy
OyAvLyBEZXByZWNhdGVkOiAKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlUkdCKGludCByLCBp
bnQgZywgaW50IGIpOwogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VSR0JBKGludCByLCBpbnQg
ZywgaW50IGIsIGludCBhKTsKIAorUkdCQTMyIG1ha2VQcmVtdWx0aXBsaWVkUkdCQShpbnQgciwg
aW50IGcsIGludCBiLCBpbnQgYSk7CitSR0JBMzIgbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEoaW50
IHIsIGludCBnLCBpbnQgYiwgaW50IGEpOworCiBXRUJDT1JFX0VYUE9SVCBSR0JBMzIgY29sb3JX
aXRoT3ZlcnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIGZsb2F0IG92ZXJyaWRlQWxwaGEpOwogV0VC
Q09SRV9FWFBPUlQgUkdCQTMyIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoUkdCQTMyIGNvbG9yLCBP
cHRpb25hbDxmbG9hdD4gb3ZlcnJpZGVBbHBoYSk7CiAKQEAgLTIxOCw2ICsyMjEsNyBAQCBDb2xv
ciBibGVuZChjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sCiAKIGludCBkaWZmZXJlbmNlU3F1
YXJlZChjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7CiAKK3VpbnQxNl90IGZhc3RNdWx0aXBs
eUJ5MjU1KHVpbnQxNl90IHZhbHVlKTsKIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1aW50MTZf
dCk7CiAKICNpZiBVU0UoQ0cpCkBAIC0yOTAsNiArMjk0LDExIEBAIGlubGluZSB1aW50OF90IHJv
dW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwKICAgICByZXR1cm4gc3RkOjptYXgoMC5mLCBzdGQ6Om1p
bigyNTUuZiwgc3RkOjpyb3VuZCh2YWx1ZSkpKTsKIH0KIAoraW5saW5lIHVpbnQxNl90IGZhc3RN
dWx0aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVlKQoreworICAgIHJldHVybiAodmFsdWUgPDwgOCkg
LSB2YWx1ZTsKK30KKwogaW5saW5lIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1aW50MTZfdCB2
YWx1ZSkKIHsKICAgICAvLyBXaGlsZSB0aGlzIGlzIGFuIGFwcHJveGltYXRlIGFsZ29yaXRobSBm
b3IgZGl2aXNpb24gYnkgMjU1LCBpdCBnaXZlcyBwZXJmZWN0bHkgYWNjdXJhdGUgcmVzdWx0cyBm
b3IgMTYtYml0IHZhbHVlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ltYWdlQmFja2luZ1N0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdl
LmgiCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgSW1hZ2VCYWNraW5nU3RvcmUgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1
ZV9wdHI8SW1hZ2VCYWNraW5nU3RvcmU+IGNyZWF0ZShjb25zdCBJbnRTaXplJiBzaXplLCBib29s
IHByZW11bHRpcGx5QWxwaGEpCisgICAgeworICAgICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1
ZTxJbWFnZUJhY2tpbmdTdG9yZT4oc2l6ZSwgcHJlbXVsdGlwbHlBbHBoYSk7CisgICAgfQorCisg
ICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJhY2tpbmdTdG9yZT4gY3JlYXRlKGNvbnN0
IEltYWdlQmFja2luZ1N0b3JlJiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6Om1h
a2VfdW5pcXVlPEltYWdlQmFja2luZ1N0b3JlPihvdGhlcik7CisgICAgfQorCisgICAgSW1hZ2VC
YWNraW5nU3RvcmUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhID0g
dHJ1ZSkKKyAgICAgICAgOiBtX3ByZW11bHRpcGx5QWxwaGEocHJlbXVsdGlwbHlBbHBoYSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghc2l6ZS5pc0VtcHR5KCkpOworICAgICAgICBzZXRTaXplKHNp
emUpOworICAgIH0KKworICAgIEltYWdlQmFja2luZ1N0b3JlKGNvbnN0IEltYWdlQmFja2luZ1N0
b3JlJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICh0aGlzID09ICZvdGhlcikKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBtX3BpeGVscyA9IG90aGVyLm1fcGl4ZWxzOworICAgICAg
ICBtX3BpeGVsc1B0ciA9IG1fcGl4ZWxzLmRhdGEoKTsKKyAgICAgICAgbV9zaXplID0gb3RoZXIu
bV9zaXplOworICAgICAgICBtX3ByZW11bHRpcGx5QWxwaGEgPSBvdGhlci5tX3ByZW11bHRpcGx5
QWxwaGE7CisgICAgfQorCisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2UoKSBjb25zdDsKKworICAg
IGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQorICAgIHsKKyAgICAgICAgaWYgKCFt
X3BpeGVscy50cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZS5hcmVhKCkpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIG1fcGl4ZWxzLnJlc2l6ZShzaXplLmFyZWEoKSk7CisgICAg
ICAgIG1fcGl4ZWxzUHRyID0gbV9waXhlbHMuZGF0YSgpOworICAgICAgICBtX3NpemUgPSBzaXpl
OworICAgICAgICBtX2ZyYW1lUmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXplKTsKKyAg
ICAgICAgY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBz
ZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgZnJhbWVSZWN0KQorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFtX3NpemUuaXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKGluQm91bmRzKGZyYW1lUmVj
dCkpOworICAgICAgICBtX2ZyYW1lUmVjdCA9IGZyYW1lUmVjdDsKKyAgICB9CisKKyAgICBJbnRT
aXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBJbnRSZWN0IGZyYW1lUmVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0OyB9CisKKyAgICB2b2lkIGNsZWFyKCkKKyAg
ICB7CisgICAgICAgIG1lbXNldChtX3BpeGVsc1B0ciwgMCwgbV9zaXplLmFyZWEoKSAqIHNpemVv
ZihSR0JBMzIpKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHJlY3QuaXNFbXB0eSgpIHx8ICFpbkJvdW5kcyhyZWN0
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzaXplX3QgcmVjdFdpZHRoSW5CeXRl
cyA9IHJlY3Qud2lkdGgoKSAqIHNpemVvZihSR0JBMzIpOworICAgICAgICBSR0JBMzIqIHN0YXJ0
ID0gYXQocmVjdC54KCksIHJlY3QueSgpKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBy
ZWN0LmhlaWdodCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1lbXNldChzdGFydCwgMCwgcmVjdFdp
ZHRoSW5CeXRlcyk7CisgICAgICAgICAgICBzdGFydCArPSBtX3NpemUud2lkdGgoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHZvaWQgcmVwZWF0Rmlyc3RSb3coY29uc3QgSW50UmVjdCYgcmVj
dCkKKyAgICB7CisgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSB8fCAhaW5Cb3VuZHMocmVjdCkp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc2l6ZV90IHJlY3RXaWR0aEluQnl0ZXMg
PSByZWN0LndpZHRoKCkgKiBzaXplb2YoUkdCQTMyKTsKKyAgICAgICAgUkdCQTMyKiBzcmMgPSBh
dChyZWN0LngoKSwgcmVjdC55KCkpOworICAgICAgICBSR0JBMzIqIGRlc3QgPSBzcmMgKyBtX3Np
emUud2lkdGgoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCByZWN0LmhlaWdodCgpOyAr
K2kpIHsKKyAgICAgICAgICAgIG1lbWNweShkZXN0LCBzcmMsIHJlY3RXaWR0aEluQnl0ZXMpOwor
ICAgICAgICAgICAgZGVzdCArPSBtX3NpemUud2lkdGgoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIFJHQkEzMiogYXQoaW50IHgsIGludCB5KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fcGl4ZWxzUHRyICsgeSAqIG1fc2l6ZS53aWR0aCgpICsgeDsKKyAgICB9CisKKyAgICB2b2lk
IHNldFJHQkEoaW50IHgsIGludCB5LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBi
LCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgc2V0UkdCQShhdCh4LCB5KSwgciwgZywgYiwg
YSk7CisgICAgfQorCisgICAgdm9pZCBzZXRSR0JBKFJHQkEzMiogZGVzdCwgdW5zaWduZWQgciwg
dW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKKyAgICB7CisgICAgICAgIGlmICht
X3ByZW11bHRpcGx5QWxwaGEgJiYgIWEpCisgICAgICAgICAgICAqZGVzdCA9IDA7CisgICAgICAg
IGVsc2UgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAmJiBhIDwgMjU1KQorICAgICAgICAgICAgKmRl
c3QgPSBtYWtlUHJlbXVsdGlwbGllZFJHQkEociwgZywgYiwgYSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICpkZXN0ID0gbWFrZVJHQkEociwgZywgYiwgYSk7CisgICAgfQorCisgICAgdm9p
ZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVk
IGIsIHVuc2lnbmVkIGEpCisgICAgeworICAgICAgICBpZiAoIWEpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgaWYgKGEgPj0gMjU1IHx8ICFhbHBoYUNoYW5uZWwoKmRlc3QpKSB7Cisg
ICAgICAgICAgICBzZXRSR0JBKGRlc3QsIHIsIGcsIGIsIGEpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpCisgICAgICAg
ICAgICAqZGVzdCA9IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShyZWRDaGFubmVsKCpkZXN0KSwgZ3Jl
ZW5DaGFubmVsKCpkZXN0KSwgYmx1ZUNoYW5uZWwoKmRlc3QpLCBhbHBoYUNoYW5uZWwoKmRlc3Qp
KTsKKworICAgICAgICB1bnNpZ25lZCBkID0gMjU1IC0gYTsKKworICAgICAgICByID0gZmFzdERp
dmlkZUJ5MjU1KHIgKiBhICsgcmVkQ2hhbm5lbCgqZGVzdCkgKiBkKTsKKyAgICAgICAgZyA9IGZh
c3REaXZpZGVCeTI1NShnICogYSArIGdyZWVuQ2hhbm5lbCgqZGVzdCkgKiBkKTsKKyAgICAgICAg
YiA9IGZhc3REaXZpZGVCeTI1NShiICogYSArIGJsdWVDaGFubmVsKCpkZXN0KSAqIGQpOworICAg
ICAgICBhICs9IGZhc3REaXZpZGVCeTI1NShkICogYWxwaGFDaGFubmVsKCpkZXN0KSk7CisKKyAg
ICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSkKKyAgICAgICAgICAgICpkZXN0ID0gbWFrZVJH
QkEociwgZywgYiwgYSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpkZXN0ID0gbWFrZVVu
UHJlbXVsdGlwbGllZFJHQkEociwgZywgYiwgYSk7CisgICAgfQorCisgICAgYm9vbCBpbkJvdW5k
cyhjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEludFJl
Y3QoSW50UG9pbnQoKSwgbV9zaXplKS5jb250YWlucyhyZWN0KTsKKyAgICB9CisKKyAgICBzdGF0
aWMgYm9vbCBpc092ZXJTaXplKGNvbnN0IEludFNpemUmIHNpemUpCisgICAgeworICAgICAgICBz
dGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIE1heFBpeGVscyA9ICgoMSA8PCAyOSkgLSAxKTsKKyAg
ICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHBpeGVscyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxv
bmcgbG9uZz4oc2l6ZS53aWR0aCgpKSAqIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4o
c2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIHJldHVybiBwaXhlbHMgPiBNYXhQaXhlbHM7CisgICAg
fQorCitwcml2YXRlOgorICAgIFZlY3RvcjxSR0JBMzI+IG1fcGl4ZWxzOworICAgIFJHQkEzMiog
bV9waXhlbHNQdHIgeyBudWxscHRyIH07CisgICAgSW50U2l6ZSBtX3NpemU7CisgICAgSW50UmVj
dCBtX2ZyYW1lUmVjdDsgLy8gVGhpcyB3aWxsIGFsd2F5cyBqdXN0IGJlIHRoZSBlbnRpcmUgYnVm
ZmVyIGV4Y2VwdCBmb3IgR0lGIGFuZCBQTkcgZnJhbWVzCisgICAgYm9vbCBtX3ByZW11bHRpcGx5
QWxwaGEgeyB0cnVlIH07Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAkocmV2aXNpb24gMjA1Njg0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEwICs0NywxMCBAQCBJbnRTaXplIG5hdGl2ZUltYWdl
U2l6ZShjb25zdCBOYXRpdmVJbWFnCiAgICAgcmV0dXJuIGltYWdlID8gSW50U2l6ZShDR0ltYWdl
R2V0V2lkdGgoaW1hZ2UuZ2V0KCkpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlLmdldCgpKSkgOiBJ
bnRTaXplKCk7CiB9CiAKLWJvb2wgbmF0aXZlSW1hZ2VIYXNBbHBoYShjb25zdCBOYXRpdmVJbWFn
ZVB0ciYpCitib29sIG5hdGl2ZUltYWdlSGFzQWxwaGEoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGlt
YWdlKQogewotICAgIC8vIEZJWE1FOiBBbnN3ZXIgY29ycmVjdGx5IHRoZSBxdWVzdGlvbjogZG9l
cyB0aGUgQ0dJbWFnZVJlZiBoYXZlIGFscGhhIGNoYW5ubmVsPwotICAgIHJldHVybiB0cnVlOwor
ICAgIENHSW1hZ2VBbHBoYUluZm8gaW5mbyA9IENHSW1hZ2VHZXRBbHBoYUluZm8oaW1hZ2UuZ2V0
KCkpOworICAgIHJldHVybiAoaW5mbyA+PSBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZExhc3Qp
ICYmIChpbmZvIDw9IGtDR0ltYWdlQWxwaGFGaXJzdCk7CiB9CiAKIENvbG9yIG5hdGl2ZUltYWdl
U2luZ2xlUGl4ZWxTb2xpZENvbG9yKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQx
LDggKzE0MSw4IEBAIEltYWdlRnJhbWUmIEltYWdlRnJhbWU6Om9wZXJhdG9yPShjb25zdCAKICAg
ICBpZiAodGhpcyA9PSAmb3RoZXIpCiAgICAgICAgIHJldHVybiAqdGhpczsKIAotICAgIGNvcHlC
aXRtYXBEYXRhKG90aGVyKTsKLSAgICBzZXRPcmlnaW5hbEZyYW1lUmVjdChvdGhlci5vcmlnaW5h
bEZyYW1lUmVjdCgpKTsKKyAgICBzZXRCYWNraW5nU3RvcmUob3RoZXIuYmFja2luZ1N0b3JlKCkp
OworICAgIHNldEhhc0FscGhhKG90aGVyLm1faGFzQWxwaGEpOwogICAgIHNldFN0YXR1cyhvdGhl
ci5zdGF0dXMoKSk7CiAgICAgc2V0RHVyYXRpb24ob3RoZXIuZHVyYXRpb24oKSk7CiAgICAgc2V0
RGlzcG9zYWxNZXRob2Qob3RoZXIuZGlzcG9zYWxNZXRob2QoKSk7CkBAIC0xNTIsOCArMTUyLDcg
QEAgSW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0IAogCiB2b2lkIEltYWdl
RnJhbWU6OmNsZWFyUGl4ZWxEYXRhKCkKIHsKLSAgICBtX2JhY2tpbmdTdG9yZS5jbGVhcigpOwot
ICAgIG1fYnl0ZXMgPSAwOworICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKICAgICBtX3N0
YXR1cyA9IEZyYW1lRW1wdHk7CiAgICAgLy8gTk9URTogRG8gbm90IHJlc2V0IG90aGVyIG1lbWJl
cnMgaGVyZTsgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKCkgY2FsbHMgdGhpcwogICAgIC8vIHRvIGZy
ZWUgdGhlIGJpdG1hcCBkYXRhLCBidXQgb3RoZXIgZnVuY3Rpb25zIGxpa2UgaW5pdEZyYW1lQnVm
ZmVyKCkgYW5kCkBAIC0xNjMsNTEgKzE2MiwzMSBAQCB2b2lkIEltYWdlRnJhbWU6OmNsZWFyUGl4
ZWxEYXRhKCkKIAogdm9pZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSgpCiB7Ci0gICAg
bWVtc2V0KG1fYnl0ZXMsIDAsIG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgpICogc2l6
ZW9mKFBpeGVsRGF0YSkpOworICAgIG1fYmFja2luZ1N0b3JlLT5jbGVhcigpOwogICAgIG1faGFz
QWxwaGEgPSB0cnVlOwogfQogCiB2b2lkIEltYWdlRnJhbWU6Onplcm9GaWxsRnJhbWVSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgQVNTRVJUKEludFJlY3QoSW50UG9pbnQoKSwgbV9z
aXplKS5jb250YWlucyhyZWN0KSk7Ci0KICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHNpemVfdCByZWN0V2lkdGhJbkJ5dGVzID0gcmVjdC53aWR0aCgpICog
c2l6ZW9mKFBpeGVsRGF0YSk7Ci0gICAgUGl4ZWxEYXRhKiBzdGFydCA9IG1fYnl0ZXMgKyAocmVj
dC55KCkgKiB3aWR0aCgpKSArIHJlY3QueCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVj
dC5oZWlnaHQoKTsgKytpKSB7Ci0gICAgICAgIG1lbXNldChzdGFydCwgMCwgcmVjdFdpZHRoSW5C
eXRlcyk7Ci0gICAgICAgIHN0YXJ0ICs9IHdpZHRoKCk7Ci0gICAgfQotCisgICAgbV9iYWNraW5n
U3RvcmUtPmNsZWFyUmVjdChyZWN0KTsKICAgICBzZXRIYXNBbHBoYSh0cnVlKTsKIH0KIAotYm9v
bCBJbWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YShjb25zdCBJbWFnZUZyYW1lJiBvdGhlcikKK3Zv
aWQgSW1hZ2VGcmFtZTo6c2V0QmFja2luZ1N0b3JlKGNvbnN0IEltYWdlQmFja2luZ1N0b3JlKiBi
YWNraW5nU3RvcmUpCiB7Ci0gICAgaWYgKHRoaXMgPT0gJm90aGVyKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIG1fYmFja2luZ1N0b3JlID0gb3RoZXIubV9iYWNraW5nU3RvcmU7Ci0gICAg
bV9ieXRlcyA9IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsKLSAgICBtX3NpemUgPSBvdGhlci5tX3Np
emU7Ci0gICAgc2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7Ci0gICAgcmV0dXJuIHRydWU7
CisgICAgaWYgKG1fYmFja2luZ1N0b3JlICYmIGJhY2tpbmdTdG9yZSA9PSBtX2JhY2tpbmdTdG9y
ZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fYmFja2luZ1N0b3JlID0gYmFja2luZ1N0
b3JlID8gSW1hZ2VCYWNraW5nU3RvcmU6OmNyZWF0ZSgqYmFja2luZ1N0b3JlKSA6IG51bGxwdHI7
CiB9CiAKLWJvb2wgSW1hZ2VGcmFtZTo6c2V0U2l6ZShpbnQgbmV3V2lkdGgsIGludCBuZXdIZWln
aHQpCitib29sIEltYWdlRnJhbWU6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAg
ICBBU1NFUlQoIXdpZHRoKCkgJiYgIWhlaWdodCgpKTsKLSAgICBzaXplX3QgYmFja2luZ1N0b3Jl
U2l6ZSA9IG5ld1dpZHRoICogbmV3SGVpZ2h0OwotICAgIGlmICghbV9iYWNraW5nU3RvcmUudHJ5
UmVzZXJ2ZUNhcGFjaXR5KGJhY2tpbmdTdG9yZVNpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgbV9iYWNraW5nU3RvcmUucmVzaXplKGJhY2tpbmdTdG9yZVNpemUpOwotICAgIG1fYnl0
ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7Ci0gICAgbV9zaXplID0gSW50U2l6ZShuZXdXaWR0
aCwgbmV3SGVpZ2h0KTsKLQotICAgIHplcm9GaWxsUGl4ZWxEYXRhKCk7Ci0gICAgcmV0dXJuIHRy
dWU7CisgICAgQVNTRVJUKCFtX2JhY2tpbmdTdG9yZSk7CisgICAgbV9iYWNraW5nU3RvcmUgPSBJ
bWFnZUJhY2tpbmdTdG9yZTo6Y3JlYXRlKHNpemUsIG1fcHJlbXVsdGlwbHlBbHBoYSk7CisgICAg
cmV0dXJuIG1fYmFja2luZ1N0b3JlOwogfQogCiBib29sIEltYWdlRnJhbWU6Omhhc0FscGhhKCkg
Y29uc3QKQEAgLTIyMCw2ICsxOTksMTIgQEAgdm9pZCBJbWFnZUZyYW1lOjpzZXRIYXNBbHBoYShi
b29sIGFscGhhKQogICAgIG1faGFzQWxwaGEgPSBhbHBoYTsKIH0KIAordm9pZCBzZXRPcmlnaW5h
bEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiBmcmFtZVJlY3QpCit7CisgICAgaWYgKG1fYmFja2lu
Z1N0b3JlKQorICAgICAgICBtX2JhY2tpbmdTdG9yZS0+c2V0RnJhbWVSZWN0KGZyYW1lUmVjdCk7
Cit9CisKIHZvaWQgSW1hZ2VGcmFtZTo6c2V0U3RhdHVzKEZyYW1lU3RhdHVzIHN0YXR1cykKIHsK
ICAgICBtX3N0YXR1cyA9IHN0YXR1czsKQEAgLTI4Niw3ICsyNzEsNyBAQCB1bnNpZ25lZCBJbWFn
ZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4CiAgICAgaWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5z
aXplKCkgPD0gaW5kZXgpCiAgICAgICAgIHJldHVybiAwOwogICAgIC8vIEZJWE1FOiBVc2UgdGhl
IGRpbWVuc2lvbiBvZiB0aGUgcmVxdWVzdGVkIGZyYW1lLgotICAgIHJldHVybiBtX3NpemUuYXJl
YSgpICogc2l6ZW9mKEltYWdlRnJhbWU6OlBpeGVsRGF0YSk7CisgICAgcmV0dXJuIG1fc2l6ZS5h
cmVhKCkgKiBzaXplb2YoUkdCQTMyKTsKIH0KIAogZmxvYXQgSW1hZ2VEZWNvZGVyOjpmcmFtZUR1
cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkocmV2aXNpb24gMjA1
Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNv
ZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDEwIEBACiAKICNwcmFnbWEgb25jZQog
Ci0jaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkltYWdlQmFja2luZ1N0b3JlLmgiCiAj
aW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAi
SW50U2l6ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW5jbHVkZSAiU2hhcmVk
QnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTU3LDcgKzU5LDYgQEAg
dXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICAgICAgRGlzcG9zZU92
ZXJ3cml0ZVByZXZpb3VzICAvLyBDbGVhciBmcmFtZSB0byBwcmV2aW91cyBmcmFtZWJ1ZmZlcgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb250ZW50cwogICAgICAg
ICB9OwotICAgICAgICB0eXBlZGVmIHVuc2lnbmVkIFBpeGVsRGF0YTsKIAogICAgICAgICBJbWFn
ZUZyYW1lKCk7CiAKQEAgLTcyLDE1MiArNzMsNjkgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVj
dG9yPGNoYXI+OwogICAgICAgICB2b2lkIHplcm9GaWxsUGl4ZWxEYXRhKCk7CiAgICAgICAgIHZv
aWQgemVyb0ZpbGxGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYpOwogCi0gICAgICAgIC8vIE1ha2Vz
IHRoaXMgZnJhbWUgaGF2ZSBhbiBpbmRlcGVuZGVudCBjb3B5IG9mIHRoZSBwcm92aWRlZCBpbWFn
ZSdzCi0gICAgICAgIC8vIHBpeGVsIGRhdGEsIHNvIHRoYXQgbW9kaWZpY2F0aW9ucyBpbiBvbmUg
ZnJhbWUgYXJlIG5vdCByZWZsZWN0ZWQgaW4KLSAgICAgICAgLy8gdGhlIG90aGVyLiAgUmV0dXJu
cyB3aGV0aGVyIHRoZSBjb3B5IHN1Y2NlZWRlZC4KLSAgICAgICAgYm9vbCBjb3B5Qml0bWFwRGF0
YShjb25zdCBJbWFnZUZyYW1lJik7Ci0KICAgICAgICAgLy8gQ29waWVzIHRoZSBwaXhlbCBkYXRh
IGF0IFsoc3RhcnRYLCBzdGFydFkpLCAoZW5kWCwgc3RhcnRZKSkgdG8gdGhlCiAgICAgICAgIC8v
IHNhbWUgWC1jb29yZGluYXRlcyBvbiBlYWNoIHN1YnNlcXVlbnQgcm93IHVwIHRvIGJ1dCBub3Qg
aW5jbHVkaW5nCiAgICAgICAgIC8vIGVuZFkuCiAgICAgICAgIHZvaWQgY29weVJvd05UaW1lcyhp
bnQgc3RhcnRYLCBpbnQgZW5kWCwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCiAgICAgICAgIHsKLSAg
ICAgICAgICAgIEFTU0VSVChzdGFydFggPCB3aWR0aCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChl
bmRYIDw9IHdpZHRoKCkpOwotICAgICAgICAgICAgQVNTRVJUKHN0YXJ0WSA8IGhlaWdodCgpKTsK
LSAgICAgICAgICAgIEFTU0VSVChlbmRZIDw9IGhlaWdodCgpKTsKLSAgICAgICAgICAgIGNvbnN0
IGludCByb3dCeXRlcyA9IChlbmRYIC0gc3RhcnRYKSAqIHNpemVvZihQaXhlbERhdGEpOwotICAg
ICAgICAgICAgY29uc3QgUGl4ZWxEYXRhKiBjb25zdCBzdGFydEFkZHIgPSBnZXRBZGRyKHN0YXJ0
WCwgc3RhcnRZKTsKLSAgICAgICAgICAgIGZvciAoaW50IGRlc3RZID0gc3RhcnRZICsgMTsgZGVz
dFkgPCBlbmRZOyArK2Rlc3RZKQotICAgICAgICAgICAgICAgIG1lbWNweShnZXRBZGRyKHN0YXJ0
WCwgZGVzdFkpLCBzdGFydEFkZHIsIHJvd0J5dGVzKTsKKyAgICAgICAgICAgIG1fYmFja2luZ1N0
b3JlLT5yZXBlYXRGaXJzdFJvdyhJbnRSZWN0KHN0YXJ0WCwgc3RhcnRZLCBlbmRYIC1zdGFydFgg
LCBlbmRZIC0gc3RhcnRZKSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBBbGxvY2F0ZXMgc3Bh
Y2UgZm9yIHRoZSBwaXhlbCBkYXRhLiAgTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBwaXhlbHMK
ICAgICAgICAgLy8gYXJlIHdyaXR0ZW4uICBNdXN0IG9ubHkgYmUgY2FsbGVkIG9uY2UuICBSZXR1
cm5zIHdoZXRoZXIgYWxsb2NhdGlvbgogICAgICAgICAvLyBzdWNjZWVkZWQuCi0gICAgICAgIGJv
b2wgc2V0U2l6ZShpbnQgbmV3V2lkdGgsIGludCBuZXdIZWlnaHQpOworICAgICAgICBib29sIHNl
dFNpemUoY29uc3QgSW50U2l6ZSYpOworICAgICAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2JhY2tpbmdTdG9yZS0+c2l6ZSgpOyB9CiAKICAgICAgICAgLy8gUmV0dXJucyBhIGNh
bGxlci1vd25lZCBwb2ludGVyIHRvIHRoZSB1bmRlcmx5aW5nIG5hdGl2ZSBpbWFnZSBkYXRhLgog
ICAgICAgICAvLyAoQWN0dWFsIHVzZTogVGhpcyBwb2ludGVyIHdpbGwgYmUgb3duZWQgYnkgQml0
bWFwSW1hZ2UgYW5kIGZyZWVkIGluCiAgICAgICAgIC8vIEZyYW1lRGF0YTo6Y2xlYXIoKSkuCi0g
ICAgICAgIE5hdGl2ZUltYWdlUHRyIGFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdDsKKyAgICAgICAg
TmF0aXZlSW1hZ2VQdHIgYXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2lu
Z1N0b3JlLT5pbWFnZSgpOyB9CiAKKyAgICAgICAgaW5saW5lIEltYWdlQmFja2luZ1N0b3JlKiBi
YWNraW5nU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmdTdG9yZSA/IG1fYmFja2luZ1N0
b3JlLmdldCgpIDogbnVsbHB0cjsgfQorICAgICAgICBpbmxpbmUgYm9vbCBoYXNCYWNraW5nU3Rv
cmUoKSBjb25zdCB7IHJldHVybiBiYWNraW5nU3RvcmUoKTsgfQorICAgICAgICAKICAgICAgICAg
Ym9vbCBoYXNBbHBoYSgpIGNvbnN0OwotICAgICAgICBjb25zdCBJbnRSZWN0JiBvcmlnaW5hbEZy
YW1lUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luYWxGcmFtZVJlY3Q7IH0KKyAgICAgICAg
SW50UmVjdCBvcmlnaW5hbEZyYW1lUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZ1N0b3Jl
ID8gbV9iYWNraW5nU3RvcmUtPmZyYW1lUmVjdCgpIDogSW50UmVjdCgpOyB9CiAgICAgICAgIEZy
YW1lU3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CiAgICAgICAgIHVu
c2lnbmVkIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQogICAgICAgICBG
cmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9kaXNw
b3NhbE1ldGhvZDsgfQogICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEoKSBjb25zdCB7IHJl
dHVybiBtX3ByZW11bHRpcGx5QWxwaGE7IH0KIAorICAgICAgICB2b2lkIHNldEJhY2tpbmdTdG9y
ZShjb25zdCBJbWFnZUJhY2tpbmdTdG9yZSopOworICAgICAgICAKICAgICAgICAgdm9pZCBzZXRI
YXNBbHBoYShib29sIGFscGhhKTsKLSAgICAgICAgdm9pZCBzZXRPcmlnaW5hbEZyYW1lUmVjdChj
b25zdCBJbnRSZWN0JiByKSB7IG1fb3JpZ2luYWxGcmFtZVJlY3QgPSByOyB9CisgICAgICAgIHZv
aWQgc2V0T3JpZ2luYWxGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYpOwogICAgICAgICB2b2lkIHNl
dFN0YXR1cyhGcmFtZVN0YXR1cyBzdGF0dXMpOwogICAgICAgICB2b2lkIHNldER1cmF0aW9uKHVu
c2lnbmVkIGR1cmF0aW9uKSB7IG1fZHVyYXRpb24gPSBkdXJhdGlvbjsgfQogICAgICAgICB2b2lk
IHNldERpc3Bvc2FsTWV0aG9kKEZyYW1lRGlzcG9zYWxNZXRob2QgbWV0aG9kKSB7IG1fZGlzcG9z
YWxNZXRob2QgPSBtZXRob2Q7IH0KICAgICAgICAgdm9pZCBzZXRQcmVtdWx0aXBseUFscGhhKGJv
b2wgcHJlbXVsdGlwbHlBbHBoYSkgeyBtX3ByZW11bHRpcGx5QWxwaGEgPSBwcmVtdWx0aXBseUFs
cGhhOyB9CiAKLSAgICAgICAgaW5saW5lIHZvaWQgc2V0UkdCQShpbnQgeCwgaW50IHksIHVuc2ln
bmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHNldFJHQkEoZ2V0QWRkcih4LCB5KSwgciwgZywgYiwgYSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpbmxpbmUgUGl4ZWxEYXRhKiBnZXRBZGRyKGludCB4LCBpbnQgeSkKKyAgICAg
ICAgaW5saW5lIFJHQkEzMiogZ2V0QWRkcihpbnQgeCwgaW50IHkpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIHJldHVybiBtX2J5dGVzICsgKHkgKiB3aWR0aCgpKSArIHg7CisgICAgICAgICAgICBy
ZXR1cm4gbV9iYWNraW5nU3RvcmUtPmF0KHgsIHkpOwogICAgICAgICB9CiAKLSAgICAgICAgaW5s
aW5lIGJvb2wgaGFzUGl4ZWxEYXRhKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIG1fYnl0ZXM7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBVc2UgZml4IHBvaW50IG11bHRp
cGxpZXIgaW5zdGVhZCBvZiBpbnRlZ2VyIGRpdmlzaW9uIG9yIGZsb2F0aW5nIHBvaW50IG1hdGgu
Ci0gICAgICAgIC8vIFRoaXMgbXVsdGlwbGVyIHByb2R1Y2VzIGV4YWN0bHkgdGhlIHNhbWUgcmVz
dWx0IGZvciBhbGwgdmFsdWVzIGluIHJhbmdlIDAgLSAyNTUuCi0gICAgICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBmaXhQb2ludFNoaWZ0ID0gMjQ7Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBmaXhQb2ludE11bHQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oMS4wIC8gMjU1LjAgKiAo
MSA8PCBmaXhQb2ludFNoaWZ0KSkgKyAxOwotICAgICAgICAvLyBNdWx0aXBsaWVzIHVuc2lnbmVk
IHZhbHVlIGJ5IGZpeHBvaW50IHZhbHVlIGFuZCBjb252ZXJ0cyBiYWNrIHRvIHVuc2lnbmVkLgot
ICAgICAgICBzdGF0aWMgdW5zaWduZWQgZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KHVuc2lnbmVk
IGZpeGVkLCB1bnNpZ25lZCB2KQorICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKGludCB4LCBp
bnQgeSwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKICAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuICAoZml4ZWQgKiB2KSA+PiBmaXhQb2ludFNoaWZ0
OworICAgICAgICAgICAgbV9iYWNraW5nU3RvcmUtPnNldFJHQkEoeCwgeSwgciwgZywgYiwgYSk7
CiAgICAgICAgIH0KIAotICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKFBpeGVsRGF0YSogZGVz
dCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKKyAgICAg
ICAgaW5saW5lIHZvaWQgc2V0UkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVk
IGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICht
X3ByZW11bHRpcGx5QWxwaGEgJiYgYSA8IDI1NSkgewotICAgICAgICAgICAgICAgIGlmICghYSkg
ewotICAgICAgICAgICAgICAgICAgICAqZGVzdCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBhbHBo
YU11bHQgPSBhICogZml4UG9pbnRNdWx0OwotICAgICAgICAgICAgICAgIHIgPSBmaXhQb2ludFVu
c2lnbmVkTXVsdGlwbHkociwgYWxwaGFNdWx0KTsKLSAgICAgICAgICAgICAgICBnID0gZml4UG9p
bnRVbnNpZ25lZE11bHRpcGx5KGcsIGFscGhhTXVsdCk7Ci0gICAgICAgICAgICAgICAgYiA9IGZp
eFBvaW50VW5zaWduZWRNdWx0aXBseShiLCBhbHBoYU11bHQpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgKmRlc3QgPSAoYSA8PCAyNCB8IHIgPDwgMTYgfCBnIDw8IDggfCBiKTsKKyAgICAg
ICAgICAgIG1fYmFja2luZ1N0b3JlLT5zZXRSR0JBKGRlc3QsIHIsIGcsIGIsIGEpOwogICAgICAg
ICB9CiAKICNpZiBFTkFCTEUoQVBORykKLSAgICAgICAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBk
aXZpZGUyNTUodW5zaWduZWQgYSkKKyAgICAgICAgaW5saW5lIHZvaWQgb3ZlclJHQkEoUkdCQTMy
KiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQog
ICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKGEgKyAoYSA+PiA4KSArIDEpID4+IDg7Ci0g
ICAgICAgIH0KLQotICAgICAgICBpbmxpbmUgdm9pZCBvdmVyUkdCQShQaXhlbERhdGEqIGRlc3Qs
IHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmICghYSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgICAgIGlmIChhIDwgMjU1KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgYURlc3QgPSAo
KCpkZXN0KSA+PiAyNCkgJiAyNTU7Ci0gICAgICAgICAgICAgICAgaWYgKGFEZXN0KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJEZXN0ID0gKCgqZGVzdCkgPj4gMTYpICYgMjU1Owot
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBnRGVzdCA9ICgoKmRlc3QpID4+IDgpICYgMjU1
OwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBiRGVzdCA9ICgqZGVzdCkgJiAyNTU7Ci0g
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFBdXggPSAyNTUgLSBhOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgckRlc3QgPSBkaXZpZGUyNTUockRlc3QgKiBhRGVzdCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBnRGVzdCA9IGRpdmlkZTI1NShnRGVzdCAqIGFEZXN0KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJEZXN0ID0gZGl2aWRlMjU1KGJEZXN0ICogYURlc3QpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBkaXZpZGUyNTUociAqIGEgKyByRGVzdCAq
IGFBdXgpOwotICAgICAgICAgICAgICAgICAgICBnID0gZGl2aWRlMjU1KGcgKiBhICsgZ0Rlc3Qg
KiBhQXV4KTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IGRpdmlkZTI1NShiICogYSArIGJEZXN0
ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAgIGEgKz0gZGl2aWRlMjU1KGFEZXN0ICogYUF1
eCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByID0gKHIgKiAyNTUgKyBhIC0gMSkgLyBhOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZyA9IChnICogMjU1ICsgYSAtIDEpIC8gYTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGIgPSAoYiAqIDI1NSArIGEgLSAxKSAvIGE7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSkgewotICAg
ICAgICAgICAgICAgICAgICByID0gZGl2aWRlMjU1KHIgKiBhKTsKLSAgICAgICAgICAgICAgICAg
ICAgZyA9IGRpdmlkZTI1NShnICogYSk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSBkaXZpZGUy
NTUoYiAqIGEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICpkZXN0ID0gKGEgPDwgMjQgfCByIDw8IDE2IHwgZyA8PCA4IHwgYik7CisgICAgICAgICAgICBt
X2JhY2tpbmdTdG9yZS0+b3ZlclJHQkEoZGVzdCwgciwgZywgYiwgYSk7CiAgICAgICAgIH0KICNl
bmRpZgogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgaW50IHdpZHRoKCkgY29uc3QKLSAgICAgICAg
ewotICAgICAgICAgICAgcmV0dXJuIG1fc2l6ZS53aWR0aCgpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaW50IGhlaWdodCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3Np
emUuaGVpZ2h0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBWZWN0b3I8UGl4ZWxEYXRhPiBtX2Jh
Y2tpbmdTdG9yZTsKLSAgICAgICAgUGl4ZWxEYXRhKiBtX2J5dGVzOyAvLyBUaGUgbWVtb3J5IGlz
IGJhY2tlZCBieSBtX2JhY2tpbmdTdG9yZS4KLSAgICAgICAgSW50U2l6ZSBtX3NpemU7CisgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CiAg
ICAgICAgIGJvb2wgbV9oYXNBbHBoYTsKLSAgICAgICAgSW50UmVjdCBtX29yaWdpbmFsRnJhbWVS
ZWN0OyAvLyBUaGlzIHdpbGwgYWx3YXlzIGp1c3QgYmUgdGhlIGVudGlyZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1ZmZlciBleGNlcHQgZm9yIEdJRiBmcmFtZXMg
d2hvc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvcmlnaW5hbCBy
ZWN0IHdhcyBzbWFsbGVyIHRoYW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gb3ZlcmFsbCBpbWFnZSBzaXplLgogICAgICAgICBGcmFtZVN0YXR1cyBtX3N0YXR1
czsKICAgICAgICAgdW5zaWduZWQgbV9kdXJhdGlvbjsKICAgICAgICAgRnJhbWVEaXNwb3NhbE1l
dGhvZCBtX2Rpc3Bvc2FsTWV0aG9kOwpAQCAtMjg3LDExICsyMDUsMTEgQEAgdXNpbmcgQ29sb3JQ
cm9maWxlID0gVmVjdG9yPGNoYXI+OwogCiAgICAgICAgIC8vIFJldHVybnMgd2hldGhlciB0aGUg
c2l6ZSBpcyBsZWdhbCAoaS5lLiBub3QgZ29pbmcgdG8gcmVzdWx0IGluCiAgICAgICAgIC8vIG92
ZXJmbG93IGVsc2V3aGVyZSkuICBJZiBub3QsIG1hcmtzIGRlY29kaW5nIGFzIGZhaWxlZC4KLSAg
ICAgICAgdmlydHVhbCBib29sIHNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdo
dCkKKyAgICAgICAgdmlydHVhbCBib29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAg
ICAgICAgewotICAgICAgICAgICAgaWYgKGlzT3ZlclNpemUod2lkdGgsIGhlaWdodCkpCisgICAg
ICAgICAgICBpZiAoSW1hZ2VCYWNraW5nU3RvcmU6OmlzT3ZlclNpemUoc2l6ZSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwotICAgICAgICAgICAgbV9zaXplID0gSW50U2l6
ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIG1fc2l6ZSA9IHNpemU7CiAgICAgICAgICAg
ICBtX3NpemVBdmFpbGFibGUgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH0KQEAgLTM4NiwxNSArMzA0LDYgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNo
YXI+OwogICAgICAgICBJbWFnZU9yaWVudGF0aW9uIG1fb3JpZW50YXRpb247CiAKICAgICBwcml2
YXRlOgotICAgICAgICAvLyBTb21lIGNvZGUgcGF0aHMgY29tcHV0ZSB0aGUgc2l6ZSBvZiB0aGUg
aW1hZ2UgYXMgIndpZHRoICogaGVpZ2h0ICogNCIKLSAgICAgICAgLy8gYW5kIHJldHVybiBpdCBh
cyBhIChzaWduZWQpIGludC4gIEF2b2lkIG92ZXJmbG93LgotICAgICAgICBzdGF0aWMgYm9vbCBp
c092ZXJTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3RhbF9zaXplID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgbG9uZyBsb25nPih3aWR0aCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICogc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihoZWlnaHQpOwotICAg
ICAgICAgICAgcmV0dXJuIHRvdGFsX3NpemUgPiAoKDEgPDwgMjkpIC0gMSk7Ci0gICAgICAgIH0K
LQogICAgICAgICBJbnRTaXplIG1fc2l6ZTsKICAgICAgICAgYm9vbCBtX3NpemVBdmFpbGFibGUg
eyBmYWxzZSB9OwogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6ZGVjb2Rl
Qk1QKGJvb2wgb25seQogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lYnVmZmVyIGlmIG5lZWRl
ZC4KICAgICBBU1NFUlQobV9idWZmZXIpOyAgLy8gUGFyZW50IHNob3VsZCBzZXQgdGhpcyBiZWZv
cmUgYXNraW5nIHVzIHRvIGRlY29kZSEKICAgICBpZiAobV9idWZmZXItPnN0YXR1cygpID09IElt
YWdlRnJhbWU6OkZyYW1lRW1wdHkpIHsKLSAgICAgICAgaWYgKCFtX2J1ZmZlci0+c2V0U2l6ZSht
X3BhcmVudC0+c2l6ZSgpLndpZHRoKCksIG1fcGFyZW50LT5zaXplKCkuaGVpZ2h0KCkpKQorICAg
ICAgICBpZiAoIW1fYnVmZmVyLT5zZXRTaXplKG1fcGFyZW50LT5zaXplKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIG1fcGFyZW50LT5zZXRGYWlsZWQoKTsgLy8gVW5hYmxlIHRvIGFsbG9jYXRlLgog
ICAgICAgICBtX2J1ZmZlci0+c2V0U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CiAg
ICAgICAgIC8vIHNldFNpemUoKSBjYWxscyBlcmFzZUFSR0IoKSwgd2hpY2ggcmVzZXRzIHRoZSBh
bHBoYSBmbGFnLCBzbyB3ZSBmb3JjZQpAQCAtODYsOSArODYsNiBAQCBib29sIEJNUEltYWdlUmVh
ZGVyOjpkZWNvZGVCTVAoYm9vbCBvbmx5CiAgICAgICAgIC8vIHRoZXNlIDBzIGNvdWxkIGFjdHVh
bGx5IHNob3cgdGhyb3VnaC4KICAgICAgICAgbV9idWZmZXItPnNldEhhc0FscGhhKGZhbHNlKTsK
IAotICAgICAgICAvLyBGb3IgQk1QcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJl
IGltYWdlLgotICAgICAgICBtX2J1ZmZlci0+c2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJ
bnRQb2ludCgpLCBtX3BhcmVudC0+c2l6ZSgpKSk7Ci0KICAgICAgICAgaWYgKCFtX2lzVG9wRG93
bikKICAgICAgICAgICAgIG1fY29vcmQuc2V0WShtX3BhcmVudC0+c2l6ZSgpLmhlaWdodCgpIC0g
MSk7CiAgICAgfQpAQCAtMTcxLDcgKzE2OCw3IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nl
c3NJbmZvSGVhZGVyKCkKICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5zZXRGYWlsZWQoKTsKIAog
ICAgIC8vIFNldCBvdXIgc2l6ZS4KLSAgICBpZiAoIW1fcGFyZW50LT5zZXRTaXplKG1faW5mb0hl
YWRlci5iaVdpZHRoLCBtX2luZm9IZWFkZXIuYmlIZWlnaHQpKQorICAgIGlmICghbV9wYXJlbnQt
PnNldFNpemUoSW50U2l6ZShtX2luZm9IZWFkZXIuYmlXaWR0aCwgbV9pbmZvSGVhZGVyLmJpSGVp
Z2h0KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIEZvciBwYWxldHRlZCBpbWFn
ZXMsIGJpdG1hcHMgY2FuIHNldCBiaUNsclVzZWQgdG8gMCB0byBtZWFuICJhbGwKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0
b3JlQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFj
a2luZ1N0b3JlQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJJbWFnZUJhY2tpbmdTdG9yZS5oIgorCisjaW5jbHVkZSA8Y2Fpcm8u
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJhY2tpbmdT
dG9yZTo6aW1hZ2UoKSBjb25zdAoreworICAgIHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFnZV9z
dXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4oY29uc3RfY2FzdDxSR0JBMzIqPihtX3BpeGVsc1B0cikpLAorICAgICAgICBDQUlS
T19GT1JNQVRfQVJHQjMyLCBzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpLCBzaXplKCku
d2lkdGgoKSAqIHNpemVvZihSR0JBMzIpKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiAyMDU2ODQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTIgKzYwLDEyIEBAIGJvb2wgR0lGSW1hZ2VEZWNv
ZGVyOjppc1NpemVBdmFpbGFibGUoKQogICAgIHJldHVybiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2
YWlsYWJsZSgpOwogfQogCi1ib29sIEdJRkltYWdlRGVjb2Rlcjo6c2V0U2l6ZSh1bnNpZ25lZCB3
aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQorYm9vbCBHSUZJbWFnZURlY29kZXI6OnNldFNpemUoY29u
c3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBpZiAoSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFi
bGUoKSAmJiBzaXplKCkgPT0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICBpZiAoSW1hZ2VE
ZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSAmJiB0aGlzLT5zaXplKCkgPT0gc2l6ZSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoIUltYWdlRGVjb2Rlcjo6c2V0U2l6ZSh3aWR0aCwg
aGVpZ2h0KSkKKyAgICBpZiAoIUltYWdlRGVjb2Rlcjo6c2V0U2l6ZShzaXplKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgcHJlcGFyZVNjYWxlRGF0YUlmTmVjZXNzYXJ5KCk7CkBAIC0y
MTMsMTAgKzIxMywxMCBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3codW5z
CiAKICAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZSBpZiBuZWNlc3NhcnkuCiAgICAgSW1hZ2VG
cmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW2ZyYW1lSW5kZXhdOwotICAgIGlmICgo
KGJ1ZmZlci5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSAmJiAhaW5pdEZyYW1l
QnVmZmVyKGZyYW1lSW5kZXgpKSB8fCAhYnVmZmVyLmhhc1BpeGVsRGF0YSgpKQorICAgIGlmICgo
KGJ1ZmZlci5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSAmJiAhaW5pdEZyYW1l
QnVmZmVyKGZyYW1lSW5kZXgpKSB8fCAhYnVmZmVyLmhhc0JhY2tpbmdTdG9yZSgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGN1cnJlbnRBZGRy
ZXNzID0gYnVmZmVyLmdldEFkZHIoeEJlZ2luLCB5QmVnaW4pOworICAgIFJHQkEzMiogY3VycmVu
dEFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcih4QmVnaW4sIHlCZWdpbik7CiAgICAgLy8gV3JpdGUg
b25lIHJvdydzIHdvcnRoIG9mIGRhdGEgaW50byB0aGUgZnJhbWUuICAKICAgICBmb3IgKGludCB4
ID0geEJlZ2luOyB4IDwgeEVuZDsgKyt4KSB7CiAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg
c291cmNlVmFsdWUgPSByb3dCdWZmZXJbKG1fc2NhbGVkID8gbV9zY2FsZWRDb2x1bW5zW3hdIDog
eCkgLSBmcmFtZUNvbnRleHQtPnhPZmZzZXRdOwpAQCAtMzYxLDcgKzM2MSw3IEBAIGJvb2wgR0lG
SW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW4KIAogICAgIGlmICghZnJhbWVJbmRleCkg
ewogICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBmcmFtZSwgc28gd2UncmUgbm90IHJlbHlp
bmcgb24gYW55IHByZXZpb3VzIGRhdGEuCi0gICAgICAgIGlmICghYnVmZmVyLT5zZXRTaXplKHNj
YWxlZFNpemUoKS53aWR0aCgpLCBzY2FsZWRTaXplKCkuaGVpZ2h0KCkpKQorICAgICAgICBpZiAo
IWJ1ZmZlci0+c2V0U2l6ZShzY2FsZWRTaXplKCkpKQogICAgICAgICAgICAgcmV0dXJuIHNldEZh
aWxlZCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFRoZSBzdGFydGluZyBzdGF0ZSBmb3Ig
dGhpcyBmcmFtZSBkZXBlbmRzIG9uIHRoZSBwcmV2aW91cyBmcmFtZSdzCkBAIC0zODcsMTIgKzM4
NywxMiBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuCiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBXZSB3YW50IHRvIGNsZWFyIHRoZSBwcmV2aW91cyBm
cmFtZSB0byB0cmFuc3BhcmVudCwgd2l0aG91dAogICAgICAgICAgICAgLy8gYWZmZWN0aW5nIHBp
eGVscyBpbiB0aGUgaW1hZ2Ugb3V0c2lkZSBvZiB0aGUgZnJhbWUuCi0gICAgICAgICAgICBjb25z
dCBJbnRSZWN0JiBwcmV2UmVjdCA9IHByZXZCdWZmZXItPm9yaWdpbmFsRnJhbWVSZWN0KCk7Cisg
ICAgICAgICAgICBJbnRSZWN0IHByZXZSZWN0ID0gcHJldkJ1ZmZlci0+b3JpZ2luYWxGcmFtZVJl
Y3QoKTsKICAgICAgICAgICAgIGNvbnN0IEludFNpemUmIGJ1ZmZlclNpemUgPSBzY2FsZWRTaXpl
KCk7CiAgICAgICAgICAgICBpZiAoIWZyYW1lSW5kZXggfHwgcHJldlJlY3QuY29udGFpbnMoSW50
UmVjdChJbnRQb2ludCgpLCBzY2FsZWRTaXplKCkpKSkgewogICAgICAgICAgICAgICAgIC8vIENs
ZWFyaW5nIHRoZSBmaXJzdCBmcmFtZSwgb3IgYSBmcmFtZSB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUK
ICAgICAgICAgICAgICAgICAvLyBpbWFnZSwgcmVzdWx0cyBpbiBhIGNvbXBsZXRlbHkgZW1wdHkg
aW1hZ2UuCi0gICAgICAgICAgICAgICAgaWYgKCFidWZmZXItPnNldFNpemUoYnVmZmVyU2l6ZS53
aWR0aCgpLCBidWZmZXJTaXplLmhlaWdodCgpKSkKKyAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZl
ci0+c2V0U2l6ZShidWZmZXJTaXplKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEZh
aWxlZCgpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBDb3B5IHRo
ZSB3aG9sZSBwcmV2aW91cyBidWZmZXIsIHRoZW4gY2xlYXIganVzdCBpdHMgZnJhbWUuCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNv
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBT
dHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiZ2lmIjsg
fQogICAgICAgICB2b2lkIHNldERhdGEoU2hhcmVkQnVmZmVyJiBkYXRhLCBib29sIGFsbERhdGFS
ZWNlaXZlZCkgb3ZlcnJpZGU7CiAgICAgICAgIGJvb2wgaXNTaXplQXZhaWxhYmxlKCkgb3ZlcnJp
ZGU7Ci0gICAgICAgIGJvb2wgc2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0
KSBvdmVycmlkZTsKKyAgICAgICAgYm9vbCBzZXRTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlk
ZTsKICAgICAgICAgc2l6ZV90IGZyYW1lQ291bnQoKSBvdmVycmlkZTsKICAgICAgICAgaW50IHJl
cGV0aXRpb25Db3VudCgpIGNvbnN0IG92ZXJyaWRlOwogICAgICAgICBJbWFnZUZyYW1lKiBmcmFt
ZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRklt
YWdlUmVhZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDQ3LDcgKzQ0Nyw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnBhcnNlKHNpemVfdCBkYXRh
UG8KIAogICAgICAgICAgICAgLy8gQ0FMTEJBQ0s6IEluZm9ybSB0aGUgZGVjb2RlcnBsdWdpbiBv
ZiBvdXIgc2l6ZS4KICAgICAgICAgICAgIC8vIE5vdGU6IEEgc3Vic2VxdWVudCBmcmFtZSBtaWdo
dCBoYXZlIGRpbWVuc2lvbnMgbGFyZ2VyIHRoYW4gdGhlICJzY3JlZW4iIGRpbWVuc2lvbnMuCi0g
ICAgICAgICAgICBpZiAobV9jbGllbnQgJiYgIW1fY2xpZW50LT5zZXRTaXplKG1fc2NyZWVuV2lk
dGgsIG1fc2NyZWVuSGVpZ2h0KSkKKyAgICAgICAgICAgIGlmIChtX2NsaWVudCAmJiAhbV9jbGll
bnQtPnNldFNpemUoSW50U2l6ZShtX3NjcmVlbldpZHRoLCBtX3NjcmVlbkhlaWdodCkpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICAgICAgbV9zY3JlZW5CZ2NvbG9y
ID0gY3VycmVudENvbXBvbmVudFs1XTsKQEAgLTY2NCw3ICs2NjQsNyBAQCBib29sIEdJRkltYWdl
UmVhZGVyOjpwYXJzZShzaXplX3QgZGF0YVBvCiAgICAgICAgICAgICAgICAgeU9mZnNldCA9IDA7
CiAKICAgICAgICAgICAgICAgICAvLyBDQUxMQkFDSzogSW5mb3JtIHRoZSBkZWNvZGVycGx1Z2lu
IG9mIG91ciBzaXplLgotICAgICAgICAgICAgICAgIGlmIChtX2NsaWVudCAmJiAhbV9jbGllbnQt
PnNldFNpemUobV9zY3JlZW5XaWR0aCwgbV9zY3JlZW5IZWlnaHQpKQorICAgICAgICAgICAgICAg
IGlmIChtX2NsaWVudCAmJiAhbV9jbGllbnQtPnNldFNpemUoSW50U2l6ZShtX3NjcmVlbldpZHRo
LCBtX3NjcmVlbkhlaWdodCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwCShyZXZpc2lv
biAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28v
SUNPSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTEgKzg4LDExIEBAIElu
dFNpemUgSUNPSW1hZ2VEZWNvZGVyOjpmcmFtZVNpemVBdEluZGUKICAgICByZXR1cm4gKGluZGV4
ICYmIChpbmRleCA8IG1fZGlyRW50cmllcy5zaXplKCkpKSA/IG1fZGlyRW50cmllc1tpbmRleF0u
bV9zaXplIDogc2l6ZSgpOwogfQogCi1ib29sIElDT0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZSh1bnNp
Z25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQorYm9vbCBJQ09JbWFnZURlY29kZXI6OnNldFNp
emUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICAvLyBUaGUgc2l6ZSBjYWxjdWxhdGVkIGlu
c2lkZSB0aGUgQk1QSW1hZ2VSZWFkZXIgaGFkIGJldHRlciBtYXRjaCB0aGUgb25lIGluCiAgICAg
Ly8gdGhlIGljb24gZGlyZWN0b3J5LgotICAgIHJldHVybiBtX2ZyYW1lU2l6ZS5pc0VtcHR5KCkg
PyBJbWFnZURlY29kZXI6OnNldFNpemUod2lkdGgsIGhlaWdodCkgOiAoKEludFNpemUod2lkdGgs
IGhlaWdodCkgPT0gbV9mcmFtZVNpemUpIHx8IHNldEZhaWxlZCgpKTsKKyAgICByZXR1cm4gbV9m
cmFtZVNpemUuaXNFbXB0eSgpID8gSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHNpemUpIDogKHNpemUg
PT0gbV9mcmFtZVNpemUpIHx8IHNldEZhaWxlZCgpKTsKIH0KIAogc2l6ZV90IElDT0ltYWdlRGVj
b2Rlcjo6ZnJhbWVDb3VudCgpCkBAIC0yNzksNyArMjc5LDcgQEAgYm9vbCBJQ09JbWFnZURlY29k
ZXI6OnByb2Nlc3NEaXJlY3RvcnlFbgogICAgIGNvbnN0IEljb25EaXJlY3RvcnlFbnRyeSYgZGly
RW50cnkgPSBtX2RpckVudHJpZXMuZmlyc3QoKTsKICAgICAvLyBUZWNobmljYWxseSwgdGhpcyBu
ZXh0IGNhbGwgc2hvdWxkbid0IGJlIGFibGUgdG8gZmFpbCwgc2luY2UgdGhlIHdpZHRoCiAgICAg
Ly8gYW5kIGhlaWdodCBoZXJlIGFyZSBlYWNoIDw9IDI1NiwgYW5kIHxtX2ZyYW1lU2l6ZXwgaXMg
ZW1wdHkuCi0gICAgcmV0dXJuIHNldFNpemUoZGlyRW50cnkubV9zaXplLndpZHRoKCksIGRpckVu
dHJ5Lm1fc2l6ZS5oZWlnaHQoKSk7CisgICAgcmV0dXJuIHNldFNpemUoZGlyRW50cnkubV9zaXpl
KTsKIH0KIAogSUNPSW1hZ2VEZWNvZGVyOjpJY29uRGlyZWN0b3J5RW50cnkgSUNPSW1hZ2VEZWNv
ZGVyOjpyZWFkRGlyZWN0b3J5RW50cnkoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaAko
cmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBvdmVy
cmlkZTsKICAgICAgICAgSW50U2l6ZSBzaXplKCkgb3ZlcnJpZGU7CiAgICAgICAgIEludFNpemUg
ZnJhbWVTaXplQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwpIG92ZXJyaWRlOwotICAg
ICAgICBib29sIHNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkgb3ZlcnJp
ZGU7CisgICAgICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7CiAgICAg
ICAgIHNpemVfdCBmcmFtZUNvdW50KCkgb3ZlcnJpZGU7CiAgICAgICAgIEltYWdlRnJhbWUqIGZy
YW1lQnVmZmVyQXRJbmRleChzaXplX3QpIG92ZXJyaWRlOwogICAgICAgICAvLyBDQVVUSU9OOiBz
ZXRGYWlsZWQoKSBkZWxldGVzIGFsbCByZWFkZXJzIGFuZCBkZWNvZGVycy4gIEJlIGNhcmVmdWwg
dG8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBF
R0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1h
Z2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIyLDcgKzMyMiw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIG1fc3RhdGUgPSBKUEVHX1NUQVJUX0RFQ09NUFJFU1M7CiAKICAgICAgICAg
ICAgIC8vIFdlIGNhbiBmaWxsIGluIHRoZSBzaXplIG5vdyB0aGF0IHRoZSBoZWFkZXIgaXMgYXZh
aWxhYmxlLgotICAgICAgICAgICAgaWYgKCFtX2RlY29kZXItPnNldFNpemUobV9pbmZvLmltYWdl
X3dpZHRoLCBtX2luZm8uaW1hZ2VfaGVpZ2h0KSkKKyAgICAgICAgICAgIGlmICghbV9kZWNvZGVy
LT5zZXRTaXplKEludFNpemUobV9pbmZvLmltYWdlX3dpZHRoLCBtX2luZm8uaW1hZ2VfaGVpZ2h0
KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBtX2RlY29k
ZXItPnNldE9yaWVudGF0aW9uKHJlYWRJbWFnZU9yaWVudGF0aW9uKGluZm8oKSkpOwpAQCAtNTE5
LDkgKzUxOSw5IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkKICAg
ICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsKIH0KIAotYm9vbCBKUEVH
SW1hZ2VEZWNvZGVyOjpzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCiti
b29sIEpQRUdJbWFnZURlY29kZXI6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAg
ICBpZiAoIUltYWdlRGVjb2Rlcjo6c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICBpZiAoIUlt
YWdlRGVjb2Rlcjo6c2V0U2l6ZShzaXplKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
cHJlcGFyZVNjYWxlRGF0YUlmTmVjZXNzYXJ5KCk7CkBAIC01NTEsNyArNTUxLDcgQEAgYm9vbCBK
UEVHSW1hZ2VEZWNvZGVyOjpzZXRGYWlsZWQoKQogfQogCiB0ZW1wbGF0ZSA8Sl9DT0xPUl9TUEFD
RSBjb2xvclNwYWNlPgotdm9pZCBzZXRQaXhlbChJbWFnZUZyYW1lJiBidWZmZXIsIEltYWdlRnJh
bWU6OlBpeGVsRGF0YSogY3VycmVudEFkZHJlc3MsIEpTQU1QQVJSQVkgc2FtcGxlcywgaW50IGNv
bHVtbikKK3ZvaWQgc2V0UGl4ZWwoSW1hZ2VGcmFtZSYgYnVmZmVyLCBSR0JBMzIqIGN1cnJlbnRB
ZGRyZXNzLCBKU0FNUEFSUkFZIHNhbXBsZXMsIGludCBjb2x1bW4pCiB7CiAgICAgSlNBTVBMRSog
anNhbXBsZSA9ICpzYW1wbGVzICsgY29sdW1uICogKGNvbG9yU3BhY2UgPT0gSkNTX1JHQiA/IDMg
OiA0KTsKIApAQCAtNTk0LDcgKzU5NCw3IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0
U2NhbmxpbmVzKEkKICAgICAgICAgaWYgKGRlc3RZIDwgMCkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogY3VycmVudEFkZHJlc3MgPSBidWZm
ZXIuZ2V0QWRkcigwLCBkZXN0WSk7CisgICAgICAgIFJHQkEzMiogY3VycmVudEFkZHJlc3MgPSBi
dWZmZXIuZ2V0QWRkcigwLCBkZXN0WSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lk
dGg7ICsreCkgewogICAgICAgICAgICAgc2V0UGl4ZWw8Y29sb3JTcGFjZT4oYnVmZmVyLCBjdXJy
ZW50QWRkcmVzcywgc2FtcGxlcywgaXNTY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4KTsK
ICAgICAgICAgICAgICsrY3VycmVudEFkZHJlc3M7CkBAIC02MTcsMTUgKzYxNywxMiBAQCBib29s
IEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcygpCiAgICAgLy8gSW5pdGlhbGl6ZSB0
aGUgZnJhbWVidWZmZXIgaWYgbmVlZGVkLgogICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJh
bWVCdWZmZXJDYWNoZVswXTsKICAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IEltYWdlRnJhbWU6
OkZyYW1lRW1wdHkpIHsKLSAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzY2FsZWRTaXplKCku
d2lkdGgoKSwgc2NhbGVkU2l6ZSgpLmhlaWdodCgpKSkKKyAgICAgICAgaWYgKCFidWZmZXIuc2V0
U2l6ZShzY2FsZWRTaXplKCkpKQogICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAg
ICAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CiAgICAgICAg
IC8vIFRoZSBidWZmZXIgaXMgdHJhbnNwYXJlbnQgb3V0c2lkZSB0aGUgZGVjb2RlZCBhcmVhIHdo
aWxlIHRoZSBpbWFnZSBpcwogICAgICAgICAvLyBsb2FkaW5nLiBUaGUgY29tcGxldGVkIGltYWdl
IHdpbGwgYmUgbWFya2VkIGZ1bGx5IG9wYXF1ZSBpbiBqcGVnQ29tcGxldGUoKS4KICAgICAgICAg
YnVmZmVyLnNldEhhc0FscGhhKHRydWUpOwotCi0gICAgICAgIC8vIEZvciBKUEVHcywgdGhlIGZy
YW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgotICAgICAgICBidWZmZXIuc2V0T3Jp
Z2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKTsKICAgICB9CiAKICAg
ICBqcGVnX2RlY29tcHJlc3Nfc3RydWN0KiBpbmZvID0gbV9yZWFkZXItPmluZm8oKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVj
b2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIC8vIEltYWdlRGVjb2RlcgogICAgICAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiAianBnIjsgfQogICAgICAgICBib29sIGlzU2l6ZUF2YWls
YWJsZSgpIG92ZXJyaWRlOwotICAgICAgICBib29sIHNldFNpemUodW5zaWduZWQgd2lkdGgsIHVu
c2lnbmVkIGhlaWdodCkgb3ZlcnJpZGU7CisgICAgICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRT
aXplJikgb3ZlcnJpZGU7CiAgICAgICAgIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChz
aXplX3QgaW5kZXgpIG92ZXJyaWRlOwogICAgICAgICAvLyBDQVVUSU9OOiBzZXRGYWlsZWQoKSBk
ZWxldGVzIHxtX3JlYWRlcnwuICBCZSBjYXJlZnVsIHRvIGF2b2lkCiAgICAgICAgIC8vIGFjY2Vz
c2luZyBkZWxldGVkIG1lbW9yeSwgZXNwZWNpYWxseSB3aGVuIGNhbGxpbmcgdGhpcyBmcm9tIGlu
c2lkZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BO
R0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDIwNTY4NCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURl
Y29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsOSArMjM1LDkgQEAgYm9vbCBQTkdJbWFn
ZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpCiAgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6aXNT
aXplQXZhaWxhYmxlKCk7CiB9CiAKLWJvb2wgUE5HSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHVuc2ln
bmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCitib29sIFBOR0ltYWdlRGVjb2Rlcjo6c2V0U2l6
ZShjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIGlmICghSW1hZ2VEZWNvZGVyOjpzZXRTaXpl
KHdpZHRoLCBoZWlnaHQpKQorICAgIGlmICghSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHNpemUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3Nhcnko
KTsKQEAgLTI5NSw3ICsyOTUsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxh
YmxlKCkKICAgICAvLyB3aWxsIGNlYXNlIHRvIGV4aXN0LiAgTm90ZSB0aGF0IHdlJ2xsIHN0aWxs
IHByb3Blcmx5IHNldCB0aGUgZmFpbHVyZSBmbGFnCiAgICAgLy8gaW4gdGhpcyBjYXNlIGFzIHNv
b24gYXMgd2UgbG9uZ2ptcCgpLgogICAgIG1fZG9Ob3RoaW5nT25GYWlsdXJlID0gdHJ1ZTsKLSAg
ICBib29sIHJlc3VsdCA9IHNldFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgYm9vbCByZXN1bHQg
PSBzZXRTaXplKEludFNpemUod2lkdGgsIGhlaWdodCkpOwogICAgIG1fZG9Ob3RoaW5nT25GYWls
dXJlID0gZmFsc2U7CiAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgbG9uZ2ptcChKTVBCVUYo
cG5nKSwgMSk7CkBAIC00MTEsMTkgKzQxMSwxOSBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVh
ZGVyQXZhaWxhYmxlKCkKICAgICB9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJH
QihJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCkKK3N0YXRpYyBp
bmxpbmUgdm9pZCBzZXRQaXhlbFJHQihSR0JBMzIqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCkKIHsK
ICAgICAqZGVzdCA9IDB4RkYwMDAwMDBVIHwgcGl4ZWxbMF0gPDwgMTYgfCBwaXhlbFsxXSA8PCA4
IHwgcGl4ZWxbMl07CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJHQkEoSW1hZ2VG
cmFtZTo6UGl4ZWxEYXRhKiBkZXN0LCBwbmdfYnl0ZXAgcGl4ZWwsIHVuc2lnbmVkIGNoYXImIG5v
blRyaXZpYWxBbHBoYU1hc2spCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxSR0JBKFJHQkEz
MiogZGVzdCwgcG5nX2J5dGVwIHBpeGVsLCB1bnNpZ25lZCBjaGFyJiBub25Ucml2aWFsQWxwaGFN
YXNrKQogewogICAgIHVuc2lnbmVkIGNoYXIgYSA9IHBpeGVsWzNdOwogICAgICpkZXN0ID0gYSA8
PCAyNCB8IHBpeGVsWzBdIDw8IDE2IHwgcGl4ZWxbMV0gPDwgOCB8IHBpeGVsWzJdOwogICAgIG5v
blRyaXZpYWxBbHBoYU1hc2sgfD0gKDI1NSAtIGEpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQg
c2V0UGl4ZWxQcmVtdWx0aXBsaWVkUkdCQShJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGRlc3QsIHBu
Z19ieXRlcCBwaXhlbCwgdW5zaWduZWQgY2hhciYgbm9uVHJpdmlhbEFscGhhTWFzaykKK3N0YXRp
YyBpbmxpbmUgdm9pZCBzZXRQaXhlbFByZW11bHRpcGxpZWRSR0JBKFJHQkEzMiogZGVzdCwgcG5n
X2J5dGVwIHBpeGVsLCB1bnNpZ25lZCBjaGFyJiBub25Ucml2aWFsQWxwaGFNYXNrKQogewogICAg
IHVuc2lnbmVkIGNoYXIgYSA9IHBpeGVsWzNdOwogICAgIHVuc2lnbmVkIGNoYXIgciA9IGZhc3RE
aXZpZGVCeTI1NShwaXhlbFswXSAqIGEpOwpAQCAtNDQ3LDcgKzQ0Nyw3IEBAIHZvaWQgUE5HSW1h
Z2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWcKICAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBt
X2ZyYW1lQnVmZmVyQ2FjaGVbbV9jdXJyZW50RnJhbWVdOwogICAgIGlmIChidWZmZXIuc3RhdHVz
KCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgewogICAgICAgICBwbmdfc3RydWN0cCBwbmcg
PSBtX3JlYWRlci0+cG5nUHRyKCk7Ci0gICAgICAgIGlmICghYnVmZmVyLnNldFNpemUoc2NhbGVk
U2l6ZSgpLndpZHRoKCksIHNjYWxlZFNpemUoKS5oZWlnaHQoKSkpIHsKKyAgICAgICAgaWYgKCFi
dWZmZXIuc2V0U2l6ZShzY2FsZWRTaXplKCkpKSB7CiAgICAgICAgICAgICBsb25nam1wKEpNUEJV
RihwbmcpLCAxKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNDcxLDggKzQ3
MSw2IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWcKICAgICAgICAg
ICAgIGluaXRGcmFtZUJ1ZmZlcihtX2N1cnJlbnRGcmFtZSk7CiAgICAgICAgIGVsc2UKICNlbmRp
ZgotICAgICAgICAvLyBGb3IgUE5HcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJl
IGltYWdlLgotICAgICAgICBidWZmZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQ
b2ludCgpLCBzaXplKCkpKTsKICAgICB9CiAKICAgICAvKiBsaWJwbmcgY29tbWVudHMgKGhlcmUg
dG8gZXhwbGFpbiB3aGF0IGZvbGxvd3MpLgpAQCAtNTMxLDcgKzUyOSw3IEBAIHZvaWQgUE5HSW1h
Z2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWcKICAgICB9CiAKICAgICAvLyBXcml0ZSB0aGUg
ZGVjb2RlZCByb3cgcGl4ZWxzIHRvIHRoZSBmcmFtZSBidWZmZXIuCi0gICAgSW1hZ2VGcmFtZTo6
UGl4ZWxEYXRhKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoMCwgeSk7CisgICAgUkdCQTMyKiBh
ZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoMCwgeSk7CiAgICAgaW50IHdpZHRoID0gc2NhbGVkU2l6
ZSgpLndpZHRoKCk7CiAgICAgdW5zaWduZWQgY2hhciBub25Ucml2aWFsQWxwaGFNYXNrID0gMDsK
IApAQCAtODIwLDcgKzgxOCw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZm
ZXIoc2kKICAgICB9IGVsc2UgewogICAgICAgICAvLyBXZSB3YW50IHRvIGNsZWFyIHRoZSBwcmV2
aW91cyBmcmFtZSB0byB0cmFuc3BhcmVudCwgd2l0aG91dAogICAgICAgICAvLyBhZmZlY3Rpbmcg
cGl4ZWxzIGluIHRoZSBpbWFnZSBvdXRzaWRlIG9mIHRoZSBmcmFtZS4KLSAgICAgICAgY29uc3Qg
SW50UmVjdCYgcHJldlJlY3QgPSBwcmV2QnVmZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgpOworICAg
ICAgICBJbnRSZWN0IHByZXZSZWN0ID0gcHJldkJ1ZmZlci0+b3JpZ2luYWxGcmFtZVJlY3QoKTsK
ICAgICAgICAgaWYgKCFmcmFtZUluZGV4IHx8IHByZXZSZWN0LmNvbnRhaW5zKEludFJlY3QoSW50
UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpIHsKICAgICAgICAgICAgIC8vIENsZWFyaW5nIHRoZSBm
aXJzdCBmcmFtZSwgb3IgYSBmcmFtZSB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUKICAgICAgICAgICAg
IC8vIGltYWdlLCByZXN1bHRzIGluIGEgY29tcGxldGVseSBlbXB0eSBpbWFnZS4KQEAgLTg0NCw3
ICs4NDIsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAgICAgcG5n
X2J5dGVwIGludGVybGFjZUJ1ZmZlciA9IG1fcmVhZGVyLT5pbnRlcmxhY2VCdWZmZXIoKTsKIAog
ICAgIGlmIChtX2N1cnJlbnRGcmFtZSAmJiBpbnRlcmxhY2VCdWZmZXIpIHsKLSAgICAgICAgY29u
c3QgSW50UmVjdCYgcmVjdCA9IGJ1ZmZlci5vcmlnaW5hbEZyYW1lUmVjdCgpOworICAgICAgICBJ
bnRSZWN0IHJlY3QgPSBidWZmZXIub3JpZ2luYWxGcmFtZVJlY3QoKTsKICAgICAgICAgYm9vbCBo
YXNBbHBoYSA9IG1fcmVhZGVyLT5oYXNBbHBoYSgpOwogICAgICAgICB1bnNpZ25lZCBjb2xvckNo
YW5uZWxzID0gaGFzQWxwaGEgPyA0IDogMzsKICAgICAgICAgYm9vbCBub25Ucml2aWFsQWxwaGEg
PSBmYWxzZTsKQEAgLTg1NCw3ICs4NTIsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVD
b21wbGV0ZSgpCiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKICAgICAg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCByZWN0Lm1heFkoKSAtIHJlY3QueSgpOyArK3kpIHsKICAg
ICAgICAgICAgIHBuZ19ieXRlcCByb3cgPSBpbnRlcmxhY2VCdWZmZXIgKyAobV9zY2FsZWQgPyBt
X3NjYWxlZFJvd3NbeV0gOiB5KSAqIGNvbG9yQ2hhbm5lbHMgKiBzaXplKCkud2lkdGgoKTsKLSAg
ICAgICAgICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogYWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRy
KHJlY3QueCgpLCB5ICsgcmVjdC55KCkpOworICAgICAgICAgICAgUkdCQTMyKiBhZGRyZXNzID0g
YnVmZmVyLmdldEFkZHIocmVjdC54KCksIHkgKyByZWN0LnkoKSk7CiAgICAgICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHJlY3QubWF4WCgpIC0gcmVjdC54KCk7ICsreCkgewogICAgICAgICAg
ICAgICAgIHBuZ19ieXRlcCBwaXhlbCA9IHJvdyArIChtX3NjYWxlZCA/IG1fc2NhbGVkQ29sdW1u
c1t4XSA6IHgpICogY29sb3JDaGFubmVsczsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhbHBo
YSA9IGhhc0FscGhhID8gcGl4ZWxbM10gOiAyNTU7CkBAIC04NzAsNyArODY4LDcgQEAgdm9pZCBQ
TkdJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUoKQogICAgICAgICBwbmdfYnl0ZXAgcm93ID0g
aW50ZXJsYWNlQnVmZmVyOwogICAgICAgICBmb3IgKGludCB5ID0gcmVjdC55KCk7IHkgPCByZWN0
Lm1heFkoKTsgKyt5LCByb3cgKz0gY29sb3JDaGFubmVscyAqIHNpemUoKS53aWR0aCgpKSB7CiAg
ICAgICAgICAgICBwbmdfYnl0ZXAgcGl4ZWwgPSByb3c7Ci0gICAgICAgICAgICBJbWFnZUZyYW1l
OjpQaXhlbERhdGEqIGFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcihyZWN0LngoKSwgeSk7CisgICAg
ICAgICAgICBSR0JBMzIqIGFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcihyZWN0LngoKSwgeSk7CiAg
ICAgICAgICAgICBmb3IgKGludCB4ID0gcmVjdC54KCk7IHggPCByZWN0Lm1heFgoKTsgKyt4LCBw
aXhlbCArPSBjb2xvckNoYW5uZWxzKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEg
PSBoYXNBbHBoYSA/IHBpeGVsWzNdIDogMjU1OwogICAgICAgICAgICAgICAgIG5vblRyaXZpYWxB
bHBoYSB8PSBhbHBoYSA8IDI1NTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgJKHJldmlz
aW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Bu
Zy9QTkdJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGludCByZXBldGl0aW9uQ291bnQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX3BsYXlDb3VudC0xOyB9CiAjZW5kaWYKICAgICAgICAgYm9vbCBpc1Np
emVBdmFpbGFibGUoKSBvdmVycmlkZTsKLSAgICAgICAgYm9vbCBzZXRTaXplKHVuc2lnbmVkIHdp
ZHRoLCB1bnNpZ25lZCBoZWlnaHQpIG92ZXJyaWRlOworICAgICAgICBib29sIHNldFNpemUoY29u
c3QgSW50U2l6ZSYpIG92ZXJyaWRlOwogICAgICAgICBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0
SW5kZXgoc2l6ZV90IGluZGV4KSBvdmVycmlkZTsKICAgICAgICAgLy8gQ0FVVElPTjogc2V0RmFp
bGVkKCkgZGVsZXRlcyB8bV9yZWFkZXJ8LiAgQmUgY2FyZWZ1bCB0byBhdm9pZAogICAgICAgICAv
LyBhY2Nlc3NpbmcgZGVsZXRlZCBtZW1vcnksIGVzcGVjaWFsbHkgd2hlbiBjYWxsaW5nIHRoaXMg
ZnJvbSBpbnNpZGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNp
b24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2Vi
cC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBA
IGJvb2wgV0VCUEltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgb25seVMKICAgICAgICAgICAgIHJl
dHVybiBzZXRGYWlsZWQoKTsKICAgICAgICAgbV9oYXNBbHBoYSA9IGZhbHNlOwogI2VuZGlmCi0g
ICAgICAgIGlmICghc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgaWYgKCFzZXRTaXpl
KEludFNpemUod2lkdGgsIGhlaWdodCkpKQogICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgp
OwogICAgIH0KIApAQCAtMTI4LDE4ICsxMjgsMTcgQEAgYm9vbCBXRUJQSW1hZ2VEZWNvZGVyOjpk
ZWNvZGUoYm9vbCBvbmx5UwogICAgIEFTU0VSVChidWZmZXIuc3RhdHVzKCkgIT0gSW1hZ2VGcmFt
ZTo6RnJhbWVDb21wbGV0ZSk7CiAKICAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IEltYWdlRnJh
bWU6OkZyYW1lRW1wdHkpIHsKLSAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzaXplKCkud2lk
dGgoKSwgc2l6ZSgpLmhlaWdodCgpKSkKKyAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzaXpl
KCkpKQogICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgICAgICBidWZmZXIuc2V0
U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIGJ1ZmZlci5zZXRIYXNB
bHBoYShtX2hhc0FscGhhKTsKLSAgICAgICAgYnVmZmVyLnNldE9yaWdpbmFsRnJhbWVSZWN0KElu
dFJlY3QoSW50UG9pbnQoKSwgc2l6ZSgpKSk7CiAgICAgfQogCiAgICAgaWYgKCFtX2RlY29kZXIp
IHsKICAgICAgICAgV0VCUF9DU1BfTU9ERSBtb2RlID0gb3V0cHV0TW9kZShtX2hhc0FscGhhKTsK
ICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpCiAgICAgICAgICAgICBtb2RlID0gb3V0
cHV0TW9kZShmYWxzZSk7Ci0gICAgICAgIGludCByb3dTdHJpZGUgPSBzaXplKCkud2lkdGgoKSAq
IHNpemVvZihJbWFnZUZyYW1lOjpQaXhlbERhdGEpOworICAgICAgICBpbnQgcm93U3RyaWRlID0g
c2l6ZSgpLndpZHRoKCkgKiBzaXplb2YoUkdCQTMyKTsKICAgICAgICAgdWludDhfdCogb3V0cHV0
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyLmdldEFkZHIoMCwgMCkpOwogICAg
ICAgICBpbnQgb3V0cHV0U2l6ZSA9IHNpemUoKS5oZWlnaHQoKSAqIHJvd1N0cmlkZTsKICAgICAg
ICAgbV9kZWNvZGVyID0gV2ViUElOZXdSR0IobW9kZSwgb3V0cHV0LCBvdXRwdXRTaXplLCByb3dT
dHJpZGUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288461</attachid>
            <date>2016-09-09 17:50:08 -0700</date>
            <delta_ts>2016-09-09 18:01:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159679-20160909174739.patch</filename>
            <type>text/plain</type>
            <size>57317</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTc3NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNiBAQAorMjAxNi0wOS0wOSAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgdGhl
IHBpeGVsIGRhdGEgb2YgSW1hZ2VGcmFtZSB0byBhIHNlcGFyYXRlIGNsYXNzIG5hbWVkIEltYWdl
QmFja2luZ1N0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTk2NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNb3ZlIHRoZSBwaXhlbCBkYXRhIG1hbmlwdWxhdGlvbiBwYXJ0IGluIEltYWdlRnJhbWUg
aW50byBhIHNlcGFyYXRlIGNsYXNzCisgICAgICAgIGFuZCBhbGxvY2F0ZSBpdCBvbiBkZW1hbmQu
CisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5j
bWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbkNhaXJvLmNtYWtlOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2hhbm5lbCk6Cisg
ICAgICAgIChXZWJDb3JlOjp1bnByZW11bHRpcGxpZWRDaGFubmVsKToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VQcmVtdWx0aXBsaWVkUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlVW5QcmVt
dWx0aXBsaWVkUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpjb2xvckZyb21QcmVtdWx0aXBsaWVk
QVJHQik6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OmZh
c3RNdWx0aXBseUJ5MjU1KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tp
bmdTdG9yZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OkltYWdlQmFja2lu
Z1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRGcmFtZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OnNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCYWNraW5nU3RvcmU6OmZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJhY2tpbmdTdG9yZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3Rv
cmU6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJhY2tpbmdTdG9yZTo6cmVw
ZWF0Rmlyc3RSb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OmF0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRSR0JBKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpvdmVyUkdCQSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJhY2tpbmdTdG9yZTo6aW5Cb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
YWNraW5nU3RvcmU6OmlzT3ZlclNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L05hdGl2ZUltYWdlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmF0aXZlSW1hZ2VIYXNBbHBo
YSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojp6ZXJvRmlsbEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRC
YWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRPcmlnaW5hbEZyYW1lUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWU6OmNvcHlSb3dOVGltZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjphc05ld05hdGl2ZUlt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmJhY2tpbmdTdG9yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpoYXNCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6b3JpZ2luYWxGcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VGcmFtZTo6Z2V0QWRkcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRS
R0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om92ZXJSR0JBKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjpzZXRPcmlnaW5hbEZyYW1lUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpoYXNQaXhlbERhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VGcmFtZTo6Zml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRnJhbWU6OmRpdmlkZTI1NSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjp3aWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjpoZWlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVy
Ojppc092ZXJTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFk
ZXI6OmRlY29kZUJNUCk6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6cHJvY2Vz
c0luZm9IZWFkZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0lt
YWdlQmFja2luZ1N0b3JlQ2Fpcm8uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QmFja2luZ1N0b3JlOjppbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Z2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29k
ZXI6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVj
b2RlZFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1
ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVj
b2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJl
YWRlci5jcHA6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6cGFyc2UpOgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SUNPSW1hZ2VEZWNvZGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OklD
T0ltYWdlRGVjb2Rlcjo6cHJvY2Vzc0RpcmVjdG9yeUVudHJpZXMpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlUmVhZGVyOjpkZWNvZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRQ
aXhlbCk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGlu
ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVj
b2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURl
Y29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpzZXRTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldFBpeGVsUkdCKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVs
UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhlbFByZW11bHRpcGxpZWRSR0JBKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAgICogcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorCiAyMDE2LTA5LTA5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVVJMUGFyc2Vy
IHNob3VsZCBjb252ZXJ0IEFTQ0lJIGhvc3RzIHRvIGxvd2VyY2FzZQpJbmRleDogU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1FZmwuY21ha2UJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtRWZsLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsMTAgKzE4Myw5IEBAIGxpc3QoQVBQ
RU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3gxMS9QbGF0Zm9ybURp
c3BsYXlYMTEuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MveDExL1hVbmlxdWVSZXNvdXJjZS5j
cHAKIAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3Jl
Q2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvSlBFR0ltYWdlRW5jb2Rlci5j
cHAKIAotICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJv
LmNwcAotCiAgICAgcGxhdGZvcm0vbmV0d29yay9lZmwvTmV0d29ya1N0YXRlTm90aWZpZXJFZmwu
Y3BwCiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VT
b3VwLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UJKHJldmlzaW9uIDIwNTY4NCkK
KysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTUsNyArMTU1LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0v
Z3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKICAgICBwbGF0Zm9ybS9ndGsvVXNlckFnZW50R3Rr
LmNwcAogCi0gICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fp
cm8uY3BwCisgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VCYWNraW5nU3Rv
cmVDYWlyby5jcHAKIAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2d0ay9TRFBQcm9jZXNzb3JT
Y3JpcHRSZXNvdXJjZUd0ay5jcHAKIApJbmRleDogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5D
YWlyby5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJv
LmNtYWtlCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNh
aXJvLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGxpc3QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb24uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZv
bnREYXRhQ2Fpcm9XaW4uY3BwCiAKLSAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9J
bWFnZURlY29kZXJDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9J
bWFnZUJhY2tpbmdTdG9yZUNhaXJvLmNwcAogCiAgICAgcGxhdGZvcm0vbmV0d29yay9OZXR3b3Jr
U3RvcmFnZVNlc3Npb25TdHViLmNwcAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTIyNzUsNiArMjI3NSw3IEBACiAJCTU1NUI4N0VDMUNBQUYwQUIwMDM0OTQyNSAvKiBJ
bWFnZURlY29kZXJDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICov
OyB9OwogCQk1NTVCODdFRDFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1NUI4N0VCMUNBQUYw
QUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5oICovOyB9OwogCQk1NUEzMzZGNzFEODIwOUY0
MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDU1QTMzNkY2MUQ4MjA5RjQwMDIyQzRDNyAvKiBOYXRpdmVJbWFnZS5o
ICovOyB9OworCQk1NUEzMzZGOTFEODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1QTMzNkY4
MUQ4MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU3MDlFOENEMUQ0MTNENDcwMDMyNDRB
QyAvKiBXZWJLaXRTdWJ0bGVDcnlwdG8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTcwOUU4Q0ExRDQxM0NFMzAwMzI0NEFDIC8qIFdlYktpdFN1YnRs
ZUNyeXB0by5jcHAgKi87IH07CiAJCTU3MDlFOENFMUQ0MTNENUIwMDMyNDRBQyAvKiBKU1dlYktp
dFN1YnRsZUNyeXB0b0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFMUZGOEY2NjE4MDc0NjA4MDAxMzI2NzQgLyogSlNXZWJLaXRTdWJ0bGVD
cnlwdG9DdXN0b20uY3BwICovOyB9OwogCQk1NzA5RThDRjFENDEzRDlBMDAzMjQ0QUMgLyogV2Vi
S2l0U3VidGxlQ3J5cHRvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NzA5RThDQjFENDEzQ0UzMDAzMjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5cHRvLmgg
Ki87IH07CkBAIC05MjkxLDYgKzkyOTIsNyBAQAogCQk1NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUg
LyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW1hZ2VEZWNvZGVyQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTVC
ODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VEZWNvZGVyQ0cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTVBMzM2RjYxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hdGl2ZUltYWdlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTU1QTMzNkY4MUQ4MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdT
dG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJhY2tpbmdTdG9y
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUQ0MDhGNzFBN0M2MzE4MDBDNzg0
NTAgLyogU1ZHSW1hZ2VDbGllbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNWR0ltYWdlQ2xpZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzA5RThD
QTFENDEzQ0UzMDAzMjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5cHRvLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdFN1YnRsZUNyeXB0by5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MDlFOENCMUQ0MTNDRTMwMDMyNDRBQyAvKiBXZWJLaXRT
dWJ0bGVDcnlwdG8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViS2l0U3Vi
dGxlQ3J5cHRvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDc2OSw2ICsyMDc3
MSw3IEBACiAJCQkJMzc5OTE5OTQxMjAwRERGNDAwRUEwNDFDIC8qIFdPRkZGaWxlRm9ybWF0LmNw
cCAqLywKIAkJCQkzNzk5MTk5NTEyMDBEREY0MDBFQTA0MUMgLyogV09GRkZpbGVGb3JtYXQuaCAq
LywKIAkJCQk1NUEzMzZGNjFEODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLywKKwkJ
CQk1NUEzMzZGODFEODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCAqLywKIAkJ
CSk7CiAJCQlwYXRoID0gZ3JhcGhpY3M7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAt
MjYzMzksNiArMjYzNDIsNyBAQAogCQkJCTU4MkNCMDUzMUE3OEExNEIwMEFGRkNDNCAvKiBTaW1w
bGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1
QTFFQTdEMTUyQkNGMDgwMDREMDBCNiAvKiBTaW1wbGlmeU1hcmt1cENvbW1hbmQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTU3MkE3RjIxMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNTVBMzM2RjkxRDgyMUUzQzAwMjJDNEM3IC8qIEltYWdlQmFj
a2luZ1N0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTc0MUFBRDE2NjM2NjA5MDA4QTVCN0Ug
LyogU2ltdWxhdGVkQ2xpY2tPcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDAwRDdBNTE0
QTNGNjE5MDA3MzQwMTEgLyogU2luY1Jlc2FtcGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEz
MjdENjAxMUEzM0EyQjAwNEY5RDY1IC8qIFNpbmtEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lv
biAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDE2IEBAIGNvbnN0IFJHQkEzMiBDb2xvcjo6dHJh
bnNwYXJlbnQ7CiBzdGF0aWMgY29uc3QgUkdCQTMyIGxpZ2h0ZW5lZEJsYWNrID0gMHhGRjU0NTQ1
NDsKIHN0YXRpYyBjb25zdCBSR0JBMzIgZGFya2VuZWRXaGl0ZSA9IDB4RkZBQkFCQUI7CiAKK3N0
YXRpYyBpbmxpbmUgdW5zaWduZWQgcHJlbXVsdGlwbGllZENoYW5uZWwodW5zaWduZWQgYywgdW5z
aWduZWQgYSkKK3sKKyAgICByZXR1cm4gZmFzdERpdmlkZUJ5MjU1KGMgKiBhICsgMjU0KTsKK30K
Kworc3RhdGljIGlubGluZSB1bnNpZ25lZCB1bnByZW11bHRpcGxpZWRDaGFubmVsKHVuc2lnbmVk
IGMsIHVuc2lnbmVkIGEpCit7CisgICAgcmV0dXJuIChmYXN0TXVsdGlwbHlCeTI1NShjKSArIGEg
LSAxKSAvIGE7Cit9CisKIFJHQkEzMiBtYWtlUkdCKGludCByLCBpbnQgZywgaW50IGIpCiB7CiAg
ICAgcmV0dXJuIDB4RkYwMDAwMDAgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihyLCAyNTUpKSA8PCAx
NiB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGcsIDI1NSkpIDw8IDggfCBzdGQ6Om1heCgwLCBzdGQ6
Om1pbihiLCAyNTUpKTsKQEAgLTU5LDYgKzY5LDE2IEBAIFJHQkEzMiBtYWtlUkdCQShpbnQgciwg
aW50IGcsIGludCBiLCBpbnQKICAgICByZXR1cm4gc3RkOjptYXgoMCwgc3RkOjptaW4oYSwgMjU1
KSkgPDwgMjQgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihyLCAyNTUpKSA8PCAxNiB8IHN0ZDo6bWF4
KDAsIHN0ZDo6bWluKGcsIDI1NSkpIDw8IDggfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihiLCAyNTUp
KTsKIH0KIAorUkdCQTMyIG1ha2VQcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBi
LCBpbnQgYSkKK3sKKyAgICByZXR1cm4gbWFrZVJHQkEocHJlbXVsdGlwbGllZENoYW5uZWwociwg
YSksIHByZW11bHRpcGxpZWRDaGFubmVsKGcsIGEpLCBwcmVtdWx0aXBsaWVkQ2hhbm5lbChiLCBh
KSwgYSk7Cit9CisKK1JHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcs
IGludCBiLCBpbnQgYSkKK3sKKyAgICByZXR1cm4gbWFrZVJHQkEodW5wcmVtdWx0aXBsaWVkQ2hh
bm5lbChyLCBhKSwgdW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBhKSwgdW5wcmVtdWx0aXBsaWVk
Q2hhbm5lbChiLCBhKSwgYSk7Cit9CisKIHN0YXRpYyBpbnQgY29sb3JGbG9hdFRvUkdCQUJ5dGUo
ZmxvYXQgZikKIHsKICAgICAvLyBXZSB1c2UgbHJvdW5kZiBhbmQgMjU1IGluc3RlYWQgb2YgbmV4
dGFmdGVyZigyNTYsIDApIHRvIG1hdGNoIENHJ3Mgcm91bmRpbmcKQEAgLTQ4MiwxNCArNTAyLDkg
QEAgdm9pZCBDb2xvcjo6Z2V0SFNWKGRvdWJsZSYgaHVlLCBkb3VibGUmIAogQ29sb3IgY29sb3JG
cm9tUHJlbXVsdGlwbGllZEFSR0IoUkdCQTMyIHBpeGVsQ29sb3IpCiB7CiAgICAgaW50IGFscGhh
ID0gYWxwaGFDaGFubmVsKHBpeGVsQ29sb3IpOwotICAgIGlmIChhbHBoYSAmJiBhbHBoYSA8IDI1
NSkgewotICAgICAgICByZXR1cm4gQ29sb3I6OmNyZWF0ZVVuY2hlY2tlZCgKLSAgICAgICAgICAg
IHJlZENoYW5uZWwocGl4ZWxDb2xvcikgKiAyNTUgLyBhbHBoYSwKLSAgICAgICAgICAgIGdyZWVu
Q2hhbm5lbChwaXhlbENvbG9yKSAqIDI1NSAvIGFscGhhLAotICAgICAgICAgICAgYmx1ZUNoYW5u
ZWwocGl4ZWxDb2xvcikgKiAyNTUgLyBhbHBoYSwKLSAgICAgICAgICAgIGFscGhhKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgcmV0dXJuIENvbG9yKHBpeGVsQ29sb3IpOworICAgIGlmIChhbHBoYSAm
JiBhbHBoYSA8IDI1NSkKKyAgICAgICAgcGl4ZWxDb2xvciA9IG1ha2VVblByZW11bHRpcGxpZWRS
R0JBKHJlZENoYW5uZWwocGl4ZWxDb2xvciksIGdyZWVuQ2hhbm5lbChwaXhlbENvbG9yKSwgYmx1
ZUNoYW5uZWwocGl4ZWxDb2xvciksIGFscGhhKTsKKyAgICByZXR1cm4gQ29sb3IocGl4ZWxDb2xv
cik7CiB9CiAKIFJHQkEzMiBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihjb25zdCBDb2xvciYg
Y29sb3IpCkBAIC00OTcsMTQgKzUxMiwxMCBAQCBSR0JBMzIgcHJlbXVsdGlwbGllZEFSR0JGcm9t
Q29sb3IoY29uc3QgCiAgICAgdW5zaWduZWQgcGl4ZWxDb2xvcjsKIAogICAgIHVuc2lnbmVkIGFs
cGhhID0gY29sb3IuYWxwaGEoKTsKLSAgICBpZiAoYWxwaGEgPCAyNTUpIHsKLSAgICAgICAgcGl4
ZWxDb2xvciA9IENvbG9yOjpjcmVhdGVVbmNoZWNrZWQoCi0gICAgICAgICAgICBmYXN0RGl2aWRl
QnkyNTUoY29sb3IucmVkKCkgKiBhbHBoYSArIDI1NCksCi0gICAgICAgICAgICBmYXN0RGl2aWRl
QnkyNTUoY29sb3IuZ3JlZW4oKSAqIGFscGhhICsgMjU0KSwKLSAgICAgICAgICAgIGZhc3REaXZp
ZGVCeTI1NShjb2xvci5ibHVlKCkgKiBhbHBoYSArIDI1NCksCi0gICAgICAgICAgICBhbHBoYSku
cmdiKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgICBwaXhlbENvbG9yID0gY29sb3IucmdiKCk7Cisg
ICAgaWYgKGFscGhhIDwgMjU1KQorICAgICAgICBwaXhlbENvbG9yID0gbWFrZVByZW11bHRpcGxp
ZWRSR0JBKGNvbG9yLnJlZCgpLCBjb2xvci5ncmVlbigpLCBjb2xvci5ibHVlKCksIGFscGhhKTsK
KyAgICBlbHNlCisgICAgICAgIHBpeGVsQ29sb3IgPSBjb2xvci5yZ2IoKTsKIAogICAgIHJldHVy
biBwaXhlbENvbG9yOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5oCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw5IEBAIHR5cGVkZWYgdW5z
aWduZWQgUkdCQTMyOyAvLyBEZXByZWNhdGVkOiAKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtl
UkdCKGludCByLCBpbnQgZywgaW50IGIpOwogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VSR0JB
KGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKIAorUkdCQTMyIG1ha2VQcmVtdWx0aXBsaWVk
UkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7CitSR0JBMzIgbWFrZVVuUHJlbXVsdGlw
bGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpOworCiBXRUJDT1JFX0VYUE9SVCBS
R0JBMzIgY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIGZsb2F0IG92ZXJyaWRl
QWxwaGEpOwogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoUkdC
QTMyIGNvbG9yLCBPcHRpb25hbDxmbG9hdD4gb3ZlcnJpZGVBbHBoYSk7CiAKQEAgLTIxOCw2ICsy
MjEsNyBAQCBDb2xvciBibGVuZChjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sCiAKIGludCBk
aWZmZXJlbmNlU3F1YXJlZChjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7CiAKK3VpbnQxNl90
IGZhc3RNdWx0aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVlKTsKIHVpbnQxNl90IGZhc3REaXZpZGVC
eTI1NSh1aW50MTZfdCk7CiAKICNpZiBVU0UoQ0cpCkBAIC0yOTAsNiArMjk0LDExIEBAIGlubGlu
ZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwKICAgICByZXR1cm4gc3RkOjptYXgo
MC5mLCBzdGQ6Om1pbigyNTUuZiwgc3RkOjpyb3VuZCh2YWx1ZSkpKTsKIH0KIAoraW5saW5lIHVp
bnQxNl90IGZhc3RNdWx0aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVlKQoreworICAgIHJldHVybiAo
dmFsdWUgPDwgOCkgLSB2YWx1ZTsKK30KKwogaW5saW5lIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1
NSh1aW50MTZfdCB2YWx1ZSkKIHsKICAgICAvLyBXaGlsZSB0aGlzIGlzIGFuIGFwcHJveGltYXRl
IGFsZ29yaXRobSBmb3IgZGl2aXNpb24gYnkgMjU1LCBpdCBnaXZlcyBwZXJmZWN0bHkgYWNjdXJh
dGUgcmVzdWx0cyBmb3IgMTYtYml0IHZhbHVlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3Iu
aCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUg
Ik5hdGl2ZUltYWdlLmgiCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCYWNraW5nU3RvcmUgeworcHVibGljOgorICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCYWNraW5nU3RvcmU+IGNyZWF0ZShjb25zdCBJbnRTaXpl
JiBzaXplLCBib29sIHByZW11bHRpcGx5QWxwaGEpCisgICAgeworICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX3VuaXF1ZTxJbWFnZUJhY2tpbmdTdG9yZT4oc2l6ZSwgcHJlbXVsdGlwbHlBbHBoYSk7
CisgICAgfQorCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJhY2tpbmdTdG9yZT4g
Y3JlYXRlKGNvbnN0IEltYWdlQmFja2luZ1N0b3JlJiBvdGhlcikKKyAgICB7CisgICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPEltYWdlQmFja2luZ1N0b3JlPihvdGhlcik7CisgICAgfQor
CisgICAgSW1hZ2VCYWNraW5nU3RvcmUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0
aXBseUFscGhhID0gdHJ1ZSkKKyAgICAgICAgOiBtX3ByZW11bHRpcGx5QWxwaGEocHJlbXVsdGlw
bHlBbHBoYSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghc2l6ZS5pc0VtcHR5KCkpOworICAgICAg
ICBzZXRTaXplKHNpemUpOworICAgIH0KKworICAgIEltYWdlQmFja2luZ1N0b3JlKGNvbnN0IElt
YWdlQmFja2luZ1N0b3JlJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICh0aGlzID09ICZvdGhl
cikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX3BpeGVscyA9IG90aGVyLm1fcGl4
ZWxzOworICAgICAgICBtX3BpeGVsc1B0ciA9IG1fcGl4ZWxzLmRhdGEoKTsKKyAgICAgICAgbV9z
aXplID0gb3RoZXIubV9zaXplOworICAgICAgICBtX3ByZW11bHRpcGx5QWxwaGEgPSBvdGhlci5t
X3ByZW11bHRpcGx5QWxwaGE7CisgICAgfQorCisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2UoKSBj
b25zdDsKKworICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQorICAgIHsKKyAg
ICAgICAgaWYgKCFtX3BpeGVscy50cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZS5hcmVhKCkpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIG1fcGl4ZWxzLnJlc2l6ZShzaXplLmFy
ZWEoKSk7CisgICAgICAgIG1fcGl4ZWxzUHRyID0gbV9waXhlbHMuZGF0YSgpOworICAgICAgICBt
X3NpemUgPSBzaXplOworICAgICAgICBtX2ZyYW1lUmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwg
bV9zaXplKTsKKyAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgZnJhbWVSZWN0KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKCFtX3NpemUuaXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKGluQm91
bmRzKGZyYW1lUmVjdCkpOworICAgICAgICBtX2ZyYW1lUmVjdCA9IGZyYW1lUmVjdDsKKyAgICB9
CisKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBJbnRS
ZWN0IGZyYW1lUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0OyB9CisKKyAgICB2b2lk
IGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1lbXNldChtX3BpeGVsc1B0ciwgMCwgbV9zaXplLmFy
ZWEoKSAqIHNpemVvZihSR0JBMzIpKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyUmVjdChjb25z
dCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHJlY3QuaXNFbXB0eSgpIHx8ICFp
bkJvdW5kcyhyZWN0KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzaXplX3QgcmVj
dFdpZHRoSW5CeXRlcyA9IHJlY3Qud2lkdGgoKSAqIHNpemVvZihSR0JBMzIpOworICAgICAgICBS
R0JBMzIqIHN0YXJ0ID0gYXQocmVjdC54KCksIHJlY3QueSgpKTsKKyAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCByZWN0LmhlaWdodCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1lbXNldChzdGFy
dCwgMCwgcmVjdFdpZHRoSW5CeXRlcyk7CisgICAgICAgICAgICBzdGFydCArPSBtX3NpemUud2lk
dGgoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgcmVwZWF0Rmlyc3RSb3coY29uc3Qg
SW50UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSB8fCAhaW5C
b3VuZHMocmVjdCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc2l6ZV90IHJlY3RX
aWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkgKiBzaXplb2YoUkdCQTMyKTsKKyAgICAgICAgUkdC
QTMyKiBzcmMgPSBhdChyZWN0LngoKSwgcmVjdC55KCkpOworICAgICAgICBSR0JBMzIqIGRlc3Qg
PSBzcmMgKyBtX3NpemUud2lkdGgoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCByZWN0
LmhlaWdodCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1lbWNweShkZXN0LCBzcmMsIHJlY3RXaWR0
aEluQnl0ZXMpOworICAgICAgICAgICAgZGVzdCArPSBtX3NpemUud2lkdGgoKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIFJHQkEzMiogYXQoaW50IHgsIGludCB5KSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fcGl4ZWxzUHRyICsgeSAqIG1fc2l6ZS53aWR0aCgpICsgeDsKKyAgICB9
CisKKyAgICB2b2lkIHNldFJHQkEoaW50IHgsIGludCB5LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBn
LCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgc2V0UkdCQShhdCh4LCB5
KSwgciwgZywgYiwgYSk7CisgICAgfQorCisgICAgdm9pZCBzZXRSR0JBKFJHQkEzMiogZGVzdCwg
dW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKKyAgICB7Cisg
ICAgICAgIGlmIChtX3ByZW11bHRpcGx5QWxwaGEgJiYgIWEpCisgICAgICAgICAgICAqZGVzdCA9
IDA7CisgICAgICAgIGVsc2UgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAmJiBhIDwgMjU1KQorICAg
ICAgICAgICAgKmRlc3QgPSBtYWtlUHJlbXVsdGlwbGllZFJHQkEociwgZywgYiwgYSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICpkZXN0ID0gbWFrZVJHQkEociwgZywgYiwgYSk7CisgICAg
fQorCisgICAgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVk
IGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAgeworICAgICAgICBpZiAoIWEpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKGEgPj0gMjU1IHx8ICFhbHBoYUNoYW5uZWwo
KmRlc3QpKSB7CisgICAgICAgICAgICBzZXRSR0JBKGRlc3QsIHIsIGcsIGIsIGEpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxw
aGEpCisgICAgICAgICAgICAqZGVzdCA9IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShyZWRDaGFubmVs
KCpkZXN0KSwgZ3JlZW5DaGFubmVsKCpkZXN0KSwgYmx1ZUNoYW5uZWwoKmRlc3QpLCBhbHBoYUNo
YW5uZWwoKmRlc3QpKTsKKworICAgICAgICB1bnNpZ25lZCBkID0gMjU1IC0gYTsKKworICAgICAg
ICByID0gZmFzdERpdmlkZUJ5MjU1KHIgKiBhICsgcmVkQ2hhbm5lbCgqZGVzdCkgKiBkKTsKKyAg
ICAgICAgZyA9IGZhc3REaXZpZGVCeTI1NShnICogYSArIGdyZWVuQ2hhbm5lbCgqZGVzdCkgKiBk
KTsKKyAgICAgICAgYiA9IGZhc3REaXZpZGVCeTI1NShiICogYSArIGJsdWVDaGFubmVsKCpkZXN0
KSAqIGQpOworICAgICAgICBhICs9IGZhc3REaXZpZGVCeTI1NShkICogYWxwaGFDaGFubmVsKCpk
ZXN0KSk7CisKKyAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSkKKyAgICAgICAgICAgICpk
ZXN0ID0gbWFrZVJHQkEociwgZywgYiwgYSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpk
ZXN0ID0gbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEociwgZywgYiwgYSk7CisgICAgfQorCisgICAg
Ym9vbCBpbkJvdW5kcyhjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXplKS5jb250YWlucyhyZWN0KTsKKyAgICB9
CisKKyAgICBzdGF0aWMgYm9vbCBpc092ZXJTaXplKGNvbnN0IEludFNpemUmIHNpemUpCisgICAg
eworICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIE1heFBpeGVscyA9ICgoMSA8PCAy
OSkgLSAxKTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHBpeGVscyA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6ZS53aWR0aCgpKSAqIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmcgbG9uZz4oc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIHJldHVybiBwaXhlbHMgPiBNYXhQ
aXhlbHM7CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxSR0JBMzI+IG1fcGl4ZWxzOwor
ICAgIFJHQkEzMiogbV9waXhlbHNQdHIgeyBudWxscHRyIH07CisgICAgSW50U2l6ZSBtX3NpemU7
CisgICAgSW50UmVjdCBtX2ZyYW1lUmVjdDsgLy8gVGhpcyB3aWxsIGFsd2F5cyBqdXN0IGJlIHRo
ZSBlbnRpcmUgYnVmZmVyIGV4Y2VwdCBmb3IgR0lGIGFuZCBQTkcgZnJhbWVzCisgICAgYm9vbCBt
X3ByZW11bHRpcGx5QWxwaGEgeyB0cnVlIH07Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAkocmV2
aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0
aXZlSW1hZ2VDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEwICs0NywxMCBAQCBJbnRTaXpl
IG5hdGl2ZUltYWdlU2l6ZShjb25zdCBOYXRpdmVJbWFnCiAgICAgcmV0dXJuIGltYWdlID8gSW50
U2l6ZShDR0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0KCkpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdl
LmdldCgpKSkgOiBJbnRTaXplKCk7CiB9CiAKLWJvb2wgbmF0aXZlSW1hZ2VIYXNBbHBoYShjb25z
dCBOYXRpdmVJbWFnZVB0ciYpCitib29sIG5hdGl2ZUltYWdlSGFzQWxwaGEoY29uc3QgTmF0aXZl
SW1hZ2VQdHImIGltYWdlKQogewotICAgIC8vIEZJWE1FOiBBbnN3ZXIgY29ycmVjdGx5IHRoZSBx
dWVzdGlvbjogZG9lcyB0aGUgQ0dJbWFnZVJlZiBoYXZlIGFscGhhIGNoYW5ubmVsPwotICAgIHJl
dHVybiB0cnVlOworICAgIENHSW1hZ2VBbHBoYUluZm8gaW5mbyA9IENHSW1hZ2VHZXRBbHBoYUlu
Zm8oaW1hZ2UuZ2V0KCkpOworICAgIHJldHVybiAoaW5mbyA+PSBrQ0dJbWFnZUFscGhhUHJlbXVs
dGlwbGllZExhc3QpICYmIChpbmZvIDw9IGtDR0ltYWdlQWxwaGFGaXJzdCk7CiB9CiAKIENvbG9y
IG5hdGl2ZUltYWdlU2luZ2xlUGl4ZWxTb2xpZENvbG9yKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBp
bWFnZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdl
RGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQxLDggKzE0MSw4IEBAIEltYWdlRnJhbWUmIEltYWdlRnJhbWU6Om9wZXJhdG9y
PShjb25zdCAKICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCiAgICAgICAgIHJldHVybiAqdGhpczsK
IAotICAgIGNvcHlCaXRtYXBEYXRhKG90aGVyKTsKLSAgICBzZXRPcmlnaW5hbEZyYW1lUmVjdChv
dGhlci5vcmlnaW5hbEZyYW1lUmVjdCgpKTsKKyAgICBzZXRCYWNraW5nU3RvcmUob3RoZXIuYmFj
a2luZ1N0b3JlKCkpOworICAgIHNldEhhc0FscGhhKG90aGVyLm1faGFzQWxwaGEpOwogICAgIHNl
dFN0YXR1cyhvdGhlci5zdGF0dXMoKSk7CiAgICAgc2V0RHVyYXRpb24ob3RoZXIuZHVyYXRpb24o
KSk7CiAgICAgc2V0RGlzcG9zYWxNZXRob2Qob3RoZXIuZGlzcG9zYWxNZXRob2QoKSk7CkBAIC0x
NTIsOCArMTUyLDcgQEAgSW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0IAog
CiB2b2lkIEltYWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKCkKIHsKLSAgICBtX2JhY2tpbmdTdG9y
ZS5jbGVhcigpOwotICAgIG1fYnl0ZXMgPSAwOworICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0
cjsKICAgICBtX3N0YXR1cyA9IEZyYW1lRW1wdHk7CiAgICAgLy8gTk9URTogRG8gbm90IHJlc2V0
IG90aGVyIG1lbWJlcnMgaGVyZTsgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKCkgY2FsbHMgdGhpcwog
ICAgIC8vIHRvIGZyZWUgdGhlIGJpdG1hcCBkYXRhLCBidXQgb3RoZXIgZnVuY3Rpb25zIGxpa2Ug
aW5pdEZyYW1lQnVmZmVyKCkgYW5kCkBAIC0xNjMsNTEgKzE2MiwzMSBAQCB2b2lkIEltYWdlRnJh
bWU6OmNsZWFyUGl4ZWxEYXRhKCkKIAogdm9pZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0
YSgpCiB7Ci0gICAgbWVtc2V0KG1fYnl0ZXMsIDAsIG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhl
aWdodCgpICogc2l6ZW9mKFBpeGVsRGF0YSkpOworICAgIG1fYmFja2luZ1N0b3JlLT5jbGVhcigp
OwogICAgIG1faGFzQWxwaGEgPSB0cnVlOwogfQogCiB2b2lkIEltYWdlRnJhbWU6Onplcm9GaWxs
RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgQVNTRVJUKEludFJlY3QoSW50
UG9pbnQoKSwgbV9zaXplKS5jb250YWlucyhyZWN0KSk7Ci0KICAgICBpZiAocmVjdC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNpemVfdCByZWN0V2lkdGhJbkJ5dGVzID0gcmVj
dC53aWR0aCgpICogc2l6ZW9mKFBpeGVsRGF0YSk7Ci0gICAgUGl4ZWxEYXRhKiBzdGFydCA9IG1f
Ynl0ZXMgKyAocmVjdC55KCkgKiB3aWR0aCgpKSArIHJlY3QueCgpOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgcmVjdC5oZWlnaHQoKTsgKytpKSB7Ci0gICAgICAgIG1lbXNldChzdGFydCwgMCwg
cmVjdFdpZHRoSW5CeXRlcyk7Ci0gICAgICAgIHN0YXJ0ICs9IHdpZHRoKCk7Ci0gICAgfQotCisg
ICAgbV9iYWNraW5nU3RvcmUtPmNsZWFyUmVjdChyZWN0KTsKICAgICBzZXRIYXNBbHBoYSh0cnVl
KTsKIH0KIAotYm9vbCBJbWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YShjb25zdCBJbWFnZUZyYW1l
JiBvdGhlcikKK3ZvaWQgSW1hZ2VGcmFtZTo6c2V0QmFja2luZ1N0b3JlKGNvbnN0IEltYWdlQmFj
a2luZ1N0b3JlKiBiYWNraW5nU3RvcmUpCiB7Ci0gICAgaWYgKHRoaXMgPT0gJm90aGVyKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIG1fYmFja2luZ1N0b3JlID0gb3RoZXIubV9iYWNraW5n
U3RvcmU7Ci0gICAgbV9ieXRlcyA9IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsKLSAgICBtX3NpemUg
PSBvdGhlci5tX3NpemU7Ci0gICAgc2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgaWYgKG1fYmFja2luZ1N0b3JlICYmIGJhY2tpbmdTdG9yZSA9PSBt
X2JhY2tpbmdTdG9yZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fYmFja2luZ1N0b3Jl
ID0gYmFja2luZ1N0b3JlID8gSW1hZ2VCYWNraW5nU3RvcmU6OmNyZWF0ZSgqYmFja2luZ1N0b3Jl
KSA6IG51bGxwdHI7CiB9CiAKLWJvb2wgSW1hZ2VGcmFtZTo6c2V0U2l6ZShpbnQgbmV3V2lkdGgs
IGludCBuZXdIZWlnaHQpCitib29sIEltYWdlRnJhbWU6OnNldFNpemUoY29uc3QgSW50U2l6ZSYg
c2l6ZSkKIHsKLSAgICBBU1NFUlQoIXdpZHRoKCkgJiYgIWhlaWdodCgpKTsKLSAgICBzaXplX3Qg
YmFja2luZ1N0b3JlU2l6ZSA9IG5ld1dpZHRoICogbmV3SGVpZ2h0OwotICAgIGlmICghbV9iYWNr
aW5nU3RvcmUudHJ5UmVzZXJ2ZUNhcGFjaXR5KGJhY2tpbmdTdG9yZVNpemUpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgbV9iYWNraW5nU3RvcmUucmVzaXplKGJhY2tpbmdTdG9yZVNpemUp
OwotICAgIG1fYnl0ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7Ci0gICAgbV9zaXplID0gSW50
U2l6ZShuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKLQotICAgIHplcm9GaWxsUGl4ZWxEYXRhKCk7Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgQVNTRVJUKCFtX2JhY2tpbmdTdG9yZSk7CisgICAgbV9iYWNr
aW5nU3RvcmUgPSBJbWFnZUJhY2tpbmdTdG9yZTo6Y3JlYXRlKHNpemUsIG1fcHJlbXVsdGlwbHlB
bHBoYSk7CisgICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlOwogfQogCiBib29sIEltYWdlRnJhbWU6
Omhhc0FscGhhKCkgY29uc3QKQEAgLTIyMCw2ICsxOTksMTIgQEAgdm9pZCBJbWFnZUZyYW1lOjpz
ZXRIYXNBbHBoYShib29sIGFscGhhKQogICAgIG1faGFzQWxwaGEgPSBhbHBoYTsKIH0KIAordm9p
ZCBJbWFnZUZyYW1lOjpzZXRPcmlnaW5hbEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiBmcmFtZVJl
Y3QpCit7CisgICAgaWYgKG1fYmFja2luZ1N0b3JlKQorICAgICAgICBtX2JhY2tpbmdTdG9yZS0+
c2V0RnJhbWVSZWN0KGZyYW1lUmVjdCk7Cit9CisKIHZvaWQgSW1hZ2VGcmFtZTo6c2V0U3RhdHVz
KEZyYW1lU3RhdHVzIHN0YXR1cykKIHsKICAgICBtX3N0YXR1cyA9IHN0YXR1czsKQEAgLTI4Niw3
ICsyNzEsNyBAQCB1bnNpZ25lZCBJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4CiAgICAg
aWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgPD0gaW5kZXgpCiAgICAgICAgIHJldHVybiAw
OwogICAgIC8vIEZJWE1FOiBVc2UgdGhlIGRpbWVuc2lvbiBvZiB0aGUgcmVxdWVzdGVkIGZyYW1l
LgotICAgIHJldHVybiBtX3NpemUuYXJlYSgpICogc2l6ZW9mKEltYWdlRnJhbWU6OlBpeGVsRGF0
YSk7CisgICAgcmV0dXJuIG1fc2l6ZS5hcmVhKCkgKiBzaXplb2YoUkdCQTMyKTsKIH0KIAogZmxv
YXQgSW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4
LDEwIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUg
IkltYWdlQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU2Ny
ZWVuLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KQEAgLTU3LDcgKzU5LDYgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+
OwogICAgICAgICAgICAgRGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzICAvLyBDbGVhciBmcmFtZSB0
byBwcmV2aW91cyBmcmFtZWJ1ZmZlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBjb250ZW50cwogICAgICAgICB9OwotICAgICAgICB0eXBlZGVmIHVuc2lnbmVkIFBp
eGVsRGF0YTsKIAogICAgICAgICBJbWFnZUZyYW1lKCk7CiAKQEAgLTcyLDE1MiArNzMsNjkgQEAg
dXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICB2b2lkIHplcm9GaWxs
UGl4ZWxEYXRhKCk7CiAgICAgICAgIHZvaWQgemVyb0ZpbGxGcmFtZVJlY3QoY29uc3QgSW50UmVj
dCYpOwogCi0gICAgICAgIC8vIE1ha2VzIHRoaXMgZnJhbWUgaGF2ZSBhbiBpbmRlcGVuZGVudCBj
b3B5IG9mIHRoZSBwcm92aWRlZCBpbWFnZSdzCi0gICAgICAgIC8vIHBpeGVsIGRhdGEsIHNvIHRo
YXQgbW9kaWZpY2F0aW9ucyBpbiBvbmUgZnJhbWUgYXJlIG5vdCByZWZsZWN0ZWQgaW4KLSAgICAg
ICAgLy8gdGhlIG90aGVyLiAgUmV0dXJucyB3aGV0aGVyIHRoZSBjb3B5IHN1Y2NlZWRlZC4KLSAg
ICAgICAgYm9vbCBjb3B5Qml0bWFwRGF0YShjb25zdCBJbWFnZUZyYW1lJik7Ci0KICAgICAgICAg
Ly8gQ29waWVzIHRoZSBwaXhlbCBkYXRhIGF0IFsoc3RhcnRYLCBzdGFydFkpLCAoZW5kWCwgc3Rh
cnRZKSkgdG8gdGhlCiAgICAgICAgIC8vIHNhbWUgWC1jb29yZGluYXRlcyBvbiBlYWNoIHN1YnNl
cXVlbnQgcm93IHVwIHRvIGJ1dCBub3QgaW5jbHVkaW5nCiAgICAgICAgIC8vIGVuZFkuCiAgICAg
ICAgIHZvaWQgY29weVJvd05UaW1lcyhpbnQgc3RhcnRYLCBpbnQgZW5kWCwgaW50IHN0YXJ0WSwg
aW50IGVuZFkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChzdGFydFggPCB3aWR0aCgp
KTsKLSAgICAgICAgICAgIEFTU0VSVChlbmRYIDw9IHdpZHRoKCkpOwotICAgICAgICAgICAgQVNT
RVJUKHN0YXJ0WSA8IGhlaWdodCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChlbmRZIDw9IGhlaWdo
dCgpKTsKLSAgICAgICAgICAgIGNvbnN0IGludCByb3dCeXRlcyA9IChlbmRYIC0gc3RhcnRYKSAq
IHNpemVvZihQaXhlbERhdGEpOwotICAgICAgICAgICAgY29uc3QgUGl4ZWxEYXRhKiBjb25zdCBz
dGFydEFkZHIgPSBnZXRBZGRyKHN0YXJ0WCwgc3RhcnRZKTsKLSAgICAgICAgICAgIGZvciAoaW50
IGRlc3RZID0gc3RhcnRZICsgMTsgZGVzdFkgPCBlbmRZOyArK2Rlc3RZKQotICAgICAgICAgICAg
ICAgIG1lbWNweShnZXRBZGRyKHN0YXJ0WCwgZGVzdFkpLCBzdGFydEFkZHIsIHJvd0J5dGVzKTsK
KyAgICAgICAgICAgIG1fYmFja2luZ1N0b3JlLT5yZXBlYXRGaXJzdFJvdyhJbnRSZWN0KHN0YXJ0
WCwgc3RhcnRZLCBlbmRYIC1zdGFydFggLCBlbmRZIC0gc3RhcnRZKSk7CiAgICAgICAgIH0KIAog
ICAgICAgICAvLyBBbGxvY2F0ZXMgc3BhY2UgZm9yIHRoZSBwaXhlbCBkYXRhLiAgTXVzdCBiZSBj
YWxsZWQgYmVmb3JlIGFueSBwaXhlbHMKICAgICAgICAgLy8gYXJlIHdyaXR0ZW4uICBNdXN0IG9u
bHkgYmUgY2FsbGVkIG9uY2UuICBSZXR1cm5zIHdoZXRoZXIgYWxsb2NhdGlvbgogICAgICAgICAv
LyBzdWNjZWVkZWQuCi0gICAgICAgIGJvb2wgc2V0U2l6ZShpbnQgbmV3V2lkdGgsIGludCBuZXdI
ZWlnaHQpOworICAgICAgICBib29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYpOworICAgICAgICBJ
bnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmdTdG9yZS0+c2l6ZSgpOyB9CiAK
ICAgICAgICAgLy8gUmV0dXJucyBhIGNhbGxlci1vd25lZCBwb2ludGVyIHRvIHRoZSB1bmRlcmx5
aW5nIG5hdGl2ZSBpbWFnZSBkYXRhLgogICAgICAgICAvLyAoQWN0dWFsIHVzZTogVGhpcyBwb2lu
dGVyIHdpbGwgYmUgb3duZWQgYnkgQml0bWFwSW1hZ2UgYW5kIGZyZWVkIGluCiAgICAgICAgIC8v
IEZyYW1lRGF0YTo6Y2xlYXIoKSkuCi0gICAgICAgIE5hdGl2ZUltYWdlUHRyIGFzTmV3TmF0aXZl
SW1hZ2UoKSBjb25zdDsKKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIgYXNOZXdOYXRpdmVJbWFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlLT5pbWFnZSgpOyB9CiAKKyAgICAgICAgaW5s
aW5lIEltYWdlQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tpbmdTdG9yZSA/IG1fYmFja2luZ1N0b3JlLmdldCgpIDogbnVsbHB0cjsgfQorICAgICAgICBp
bmxpbmUgYm9vbCBoYXNCYWNraW5nU3RvcmUoKSBjb25zdCB7IHJldHVybiBiYWNraW5nU3RvcmUo
KTsgfQorICAgICAgICAKICAgICAgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0OwotICAgICAgICBj
b25zdCBJbnRSZWN0JiBvcmlnaW5hbEZyYW1lUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2lu
YWxGcmFtZVJlY3Q7IH0KKyAgICAgICAgSW50UmVjdCBvcmlnaW5hbEZyYW1lUmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlID8gbV9iYWNraW5nU3RvcmUtPmZyYW1lUmVjdCgpIDog
SW50UmVjdCgpOyB9CiAgICAgICAgIEZyYW1lU3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdHVzOyB9CiAgICAgICAgIHVuc2lnbmVkIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9kdXJhdGlvbjsgfQogICAgICAgICBGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9k
KCkgY29uc3QgeyByZXR1cm4gbV9kaXNwb3NhbE1ldGhvZDsgfQogICAgICAgICBib29sIHByZW11
bHRpcGx5QWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3ByZW11bHRpcGx5QWxwaGE7IH0KIAorICAg
ICAgICB2b2lkIHNldEJhY2tpbmdTdG9yZShjb25zdCBJbWFnZUJhY2tpbmdTdG9yZSopOworICAg
ICAgICAKICAgICAgICAgdm9pZCBzZXRIYXNBbHBoYShib29sIGFscGhhKTsKLSAgICAgICAgdm9p
ZCBzZXRPcmlnaW5hbEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiByKSB7IG1fb3JpZ2luYWxGcmFt
ZVJlY3QgPSByOyB9CisgICAgICAgIHZvaWQgc2V0T3JpZ2luYWxGcmFtZVJlY3QoY29uc3QgSW50
UmVjdCYpOwogICAgICAgICB2b2lkIHNldFN0YXR1cyhGcmFtZVN0YXR1cyBzdGF0dXMpOwogICAg
ICAgICB2b2lkIHNldER1cmF0aW9uKHVuc2lnbmVkIGR1cmF0aW9uKSB7IG1fZHVyYXRpb24gPSBk
dXJhdGlvbjsgfQogICAgICAgICB2b2lkIHNldERpc3Bvc2FsTWV0aG9kKEZyYW1lRGlzcG9zYWxN
ZXRob2QgbWV0aG9kKSB7IG1fZGlzcG9zYWxNZXRob2QgPSBtZXRob2Q7IH0KICAgICAgICAgdm9p
ZCBzZXRQcmVtdWx0aXBseUFscGhhKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkgeyBtX3ByZW11bHRp
cGx5QWxwaGEgPSBwcmVtdWx0aXBseUFscGhhOyB9CiAKLSAgICAgICAgaW5saW5lIHZvaWQgc2V0
UkdCQShpbnQgeCwgaW50IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVu
c2lnbmVkIGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNldFJHQkEoZ2V0QWRkcih4LCB5KSwg
ciwgZywgYiwgYSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmxpbmUgUGl4ZWxEYXRhKiBnZXRB
ZGRyKGludCB4LCBpbnQgeSkKKyAgICAgICAgaW5saW5lIFJHQkEzMiogZ2V0QWRkcihpbnQgeCwg
aW50IHkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2J5dGVzICsgKHkgKiB3aWR0
aCgpKSArIHg7CisgICAgICAgICAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUtPmF0KHgsIHkpOwog
ICAgICAgICB9CiAKLSAgICAgICAgaW5saW5lIGJvb2wgaGFzUGl4ZWxEYXRhKCkgY29uc3QKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXM7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBVc2UgZml4IHBvaW50IG11bHRpcGxpZXIgaW5zdGVhZCBvZiBpbnRlZ2VyIGRpdmlzaW9u
IG9yIGZsb2F0aW5nIHBvaW50IG1hdGguCi0gICAgICAgIC8vIFRoaXMgbXVsdGlwbGVyIHByb2R1
Y2VzIGV4YWN0bHkgdGhlIHNhbWUgcmVzdWx0IGZvciBhbGwgdmFsdWVzIGluIHJhbmdlIDAgLSAy
NTUuCi0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmaXhQb2ludFNoaWZ0ID0gMjQ7Ci0g
ICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmaXhQb2ludE11bHQgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oMS4wIC8gMjU1LjAgKiAoMSA8PCBmaXhQb2ludFNoaWZ0KSkgKyAxOwotICAgICAg
ICAvLyBNdWx0aXBsaWVzIHVuc2lnbmVkIHZhbHVlIGJ5IGZpeHBvaW50IHZhbHVlIGFuZCBjb252
ZXJ0cyBiYWNrIHRvIHVuc2lnbmVkLgotICAgICAgICBzdGF0aWMgdW5zaWduZWQgZml4UG9pbnRV
bnNpZ25lZE11bHRpcGx5KHVuc2lnbmVkIGZpeGVkLCB1bnNpZ25lZCB2KQorICAgICAgICBpbmxp
bmUgdm9pZCBzZXRSR0JBKGludCB4LCBpbnQgeSwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5z
aWduZWQgYiwgdW5zaWduZWQgYSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICAoZml4
ZWQgKiB2KSA+PiBmaXhQb2ludFNoaWZ0OworICAgICAgICAgICAgbV9iYWNraW5nU3RvcmUtPnNl
dFJHQkEoeCwgeSwgciwgZywgYiwgYSk7CiAgICAgICAgIH0KIAotICAgICAgICBpbmxpbmUgdm9p
ZCBzZXRSR0JBKFBpeGVsRGF0YSogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWdu
ZWQgYiwgdW5zaWduZWQgYSkKKyAgICAgICAgaW5saW5lIHZvaWQgc2V0UkdCQShSR0JBMzIqIGRl
c3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChtX3ByZW11bHRpcGx5QWxwaGEgJiYgYSA8IDI1NSkgewot
ICAgICAgICAgICAgICAgIGlmICghYSkgewotICAgICAgICAgICAgICAgICAgICAqZGVzdCA9IDA7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBhbHBoYU11bHQgPSBhICogZml4UG9pbnRNdWx0OwotICAgICAg
ICAgICAgICAgIHIgPSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkociwgYWxwaGFNdWx0KTsKLSAg
ICAgICAgICAgICAgICBnID0gZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KGcsIGFscGhhTXVsdCk7
Ci0gICAgICAgICAgICAgICAgYiA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShiLCBhbHBoYU11
bHQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3QgPSAoYSA8PCAyNCB8IHIgPDwg
MTYgfCBnIDw8IDggfCBiKTsKKyAgICAgICAgICAgIG1fYmFja2luZ1N0b3JlLT5zZXRSR0JBKGRl
c3QsIHIsIGcsIGIsIGEpOwogICAgICAgICB9CiAKICNpZiBFTkFCTEUoQVBORykKLSAgICAgICAg
c3RhdGljIGlubGluZSB1bnNpZ25lZCBkaXZpZGUyNTUodW5zaWduZWQgYSkKKyAgICAgICAgaW5s
aW5lIHZvaWQgb3ZlclJHQkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1
bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKGEg
KyAoYSA+PiA4KSArIDEpID4+IDg7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmxpbmUgdm9pZCBv
dmVyUkdCQShQaXhlbERhdGEqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVk
IGIsIHVuc2lnbmVkIGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghYSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmIChhIDwgMjU1KSB7Ci0gICAgICAgICAg
ICAgICAgdW5zaWduZWQgYURlc3QgPSAoKCpkZXN0KSA+PiAyNCkgJiAyNTU7Ci0gICAgICAgICAg
ICAgICAgaWYgKGFEZXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJEZXN0ID0g
KCgqZGVzdCkgPj4gMTYpICYgMjU1OwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBnRGVz
dCA9ICgoKmRlc3QpID4+IDgpICYgMjU1OwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBi
RGVzdCA9ICgqZGVzdCkgJiAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFBdXgg
PSAyNTUgLSBhOwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgckRlc3QgPSBkaXZpZGUyNTUockRlc3QgKiBhRGVz
dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnRGVzdCA9IGRpdmlkZTI1NShnRGVzdCAqIGFE
ZXN0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJEZXN0ID0gZGl2aWRlMjU1KGJEZXN0ICog
YURlc3QpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBk
aXZpZGUyNTUociAqIGEgKyByRGVzdCAqIGFBdXgpOwotICAgICAgICAgICAgICAgICAgICBnID0g
ZGl2aWRlMjU1KGcgKiBhICsgZ0Rlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAgICAgICAgYiA9
IGRpdmlkZTI1NShiICogYSArIGJEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAgIGEg
Kz0gZGl2aWRlMjU1KGFEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9w
cmVtdWx0aXBseUFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByID0gKHIgKiAyNTUg
KyBhIC0gMSkgLyBhOwotICAgICAgICAgICAgICAgICAgICAgICAgZyA9IChnICogMjU1ICsgYSAt
IDEpIC8gYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGIgPSAoYiAqIDI1NSArIGEgLSAxKSAv
IGE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1f
cHJlbXVsdGlwbHlBbHBoYSkgewotICAgICAgICAgICAgICAgICAgICByID0gZGl2aWRlMjU1KHIg
KiBhKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IGRpdmlkZTI1NShnICogYSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGIgPSBkaXZpZGUyNTUoYiAqIGEpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICpkZXN0ID0gKGEgPDwgMjQgfCByIDw8IDE2IHwgZyA8
PCA4IHwgYik7CisgICAgICAgICAgICBtX2JhY2tpbmdTdG9yZS0+b3ZlclJHQkEoZGVzdCwgciwg
ZywgYiwgYSk7CiAgICAgICAgIH0KICNlbmRpZgogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgaW50
IHdpZHRoKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fc2l6ZS53aWR0
aCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBtX3NpemUuaGVpZ2h0KCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBWZWN0b3I8UGl4ZWxEYXRhPiBtX2JhY2tpbmdTdG9yZTsKLSAgICAgICAgUGl4ZWxEYXRhKiBt
X2J5dGVzOyAvLyBUaGUgbWVtb3J5IGlzIGJhY2tlZCBieSBtX2JhY2tpbmdTdG9yZS4KLSAgICAg
ICAgSW50U2l6ZSBtX3NpemU7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJhY2tpbmdT
dG9yZT4gbV9iYWNraW5nU3RvcmU7CiAgICAgICAgIGJvb2wgbV9oYXNBbHBoYTsKLSAgICAgICAg
SW50UmVjdCBtX29yaWdpbmFsRnJhbWVSZWN0OyAvLyBUaGlzIHdpbGwgYWx3YXlzIGp1c3QgYmUg
dGhlIGVudGlyZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1ZmZl
ciBleGNlcHQgZm9yIEdJRiBmcmFtZXMgd2hvc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBvcmlnaW5hbCByZWN0IHdhcyBzbWFsbGVyIHRoYW4gdGhlCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3ZlcmFsbCBpbWFnZSBzaXplLgogICAg
ICAgICBGcmFtZVN0YXR1cyBtX3N0YXR1czsKICAgICAgICAgdW5zaWduZWQgbV9kdXJhdGlvbjsK
ICAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBtX2Rpc3Bvc2FsTWV0aG9kOwpAQCAtMjg3LDEx
ICsyMDUsMTEgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogCiAgICAgICAg
IC8vIFJldHVybnMgd2hldGhlciB0aGUgc2l6ZSBpcyBsZWdhbCAoaS5lLiBub3QgZ29pbmcgdG8g
cmVzdWx0IGluCiAgICAgICAgIC8vIG92ZXJmbG93IGVsc2V3aGVyZSkuICBJZiBub3QsIG1hcmtz
IGRlY29kaW5nIGFzIGZhaWxlZC4KLSAgICAgICAgdmlydHVhbCBib29sIHNldFNpemUodW5zaWdu
ZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKKyAgICAgICAgdmlydHVhbCBib29sIHNldFNpemUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKGlzT3ZlclNp
emUod2lkdGgsIGhlaWdodCkpCisgICAgICAgICAgICBpZiAoSW1hZ2VCYWNraW5nU3RvcmU6Omlz
T3ZlclNpemUoc2l6ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwotICAg
ICAgICAgICAgbV9zaXplID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIG1f
c2l6ZSA9IHNpemU7CiAgICAgICAgICAgICBtX3NpemVBdmFpbGFibGUgPSB0cnVlOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTM4NiwxNSArMzA0LDYgQEAgdXNpbmcg
Q29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICBJbWFnZU9yaWVudGF0aW9uIG1f
b3JpZW50YXRpb247CiAKICAgICBwcml2YXRlOgotICAgICAgICAvLyBTb21lIGNvZGUgcGF0aHMg
Y29tcHV0ZSB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UgYXMgIndpZHRoICogaGVpZ2h0ICogNCIKLSAg
ICAgICAgLy8gYW5kIHJldHVybiBpdCBhcyBhIChzaWduZWQpIGludC4gIEF2b2lkIG92ZXJmbG93
LgotICAgICAgICBzdGF0aWMgYm9vbCBpc092ZXJTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25l
ZCBoZWlnaHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3Rh
bF9zaXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPih3aWR0aCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc3RhdGljX2Nhc3Q8dW5zaWduZWQg
bG9uZyBsb25nPihoZWlnaHQpOwotICAgICAgICAgICAgcmV0dXJuIHRvdGFsX3NpemUgPiAoKDEg
PDwgMjkpIC0gMSk7Ci0gICAgICAgIH0KLQogICAgICAgICBJbnRTaXplIG1fc2l6ZTsKICAgICAg
ICAgYm9vbCBtX3NpemVBdmFpbGFibGUgeyBmYWxzZSB9OwogI2lmIEVOQUJMRShJTUFHRV9ERUNP
REVSX0RPV05fU0FNUExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAJKHJldmlz
aW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2Jt
cC9CTVBJbWFnZVJlYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgYm9v
bCBCTVBJbWFnZVJlYWRlcjo6ZGVjb2RlQk1QKGJvb2wgb25seQogICAgIC8vIEluaXRpYWxpemUg
dGhlIGZyYW1lYnVmZmVyIGlmIG5lZWRlZC4KICAgICBBU1NFUlQobV9idWZmZXIpOyAgLy8gUGFy
ZW50IHNob3VsZCBzZXQgdGhpcyBiZWZvcmUgYXNraW5nIHVzIHRvIGRlY29kZSEKICAgICBpZiAo
bV9idWZmZXItPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpIHsKLSAgICAgICAg
aWYgKCFtX2J1ZmZlci0+c2V0U2l6ZShtX3BhcmVudC0+c2l6ZSgpLndpZHRoKCksIG1fcGFyZW50
LT5zaXplKCkuaGVpZ2h0KCkpKQorICAgICAgICBpZiAoIW1fYnVmZmVyLT5zZXRTaXplKG1fcGFy
ZW50LT5zaXplKCkpKQogICAgICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5zZXRGYWlsZWQoKTsg
Ly8gVW5hYmxlIHRvIGFsbG9jYXRlLgogICAgICAgICBtX2J1ZmZlci0+c2V0U3RhdHVzKEltYWdl
RnJhbWU6OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIC8vIHNldFNpemUoKSBjYWxscyBlcmFzZUFS
R0IoKSwgd2hpY2ggcmVzZXRzIHRoZSBhbHBoYSBmbGFnLCBzbyB3ZSBmb3JjZQpAQCAtODYsOSAr
ODYsNiBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpkZWNvZGVCTVAoYm9vbCBvbmx5CiAgICAgICAg
IC8vIHRoZXNlIDBzIGNvdWxkIGFjdHVhbGx5IHNob3cgdGhyb3VnaC4KICAgICAgICAgbV9idWZm
ZXItPnNldEhhc0FscGhhKGZhbHNlKTsKIAotICAgICAgICAvLyBGb3IgQk1QcywgdGhlIGZyYW1l
IGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgotICAgICAgICBtX2J1ZmZlci0+c2V0T3Jp
Z2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBtX3BhcmVudC0+c2l6ZSgpKSk7Ci0K
ICAgICAgICAgaWYgKCFtX2lzVG9wRG93bikKICAgICAgICAgICAgIG1fY29vcmQuc2V0WShtX3Bh
cmVudC0+c2l6ZSgpLmhlaWdodCgpIC0gMSk7CiAgICAgfQpAQCAtMTcxLDcgKzE2OCw3IEBAIGJv
b2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NJbmZvSGVhZGVyKCkKICAgICAgICAgcmV0dXJuIG1f
cGFyZW50LT5zZXRGYWlsZWQoKTsKIAogICAgIC8vIFNldCBvdXIgc2l6ZS4KLSAgICBpZiAoIW1f
cGFyZW50LT5zZXRTaXplKG1faW5mb0hlYWRlci5iaVdpZHRoLCBtX2luZm9IZWFkZXIuYmlIZWln
aHQpKQorICAgIGlmICghbV9wYXJlbnQtPnNldFNpemUoSW50U2l6ZShtX2luZm9IZWFkZXIuYmlX
aWR0aCwgbV9pbmZvSGVhZGVyLmJpSGVpZ2h0KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIC8vIEZvciBwYWxldHRlZCBpbWFnZXMsIGJpdG1hcHMgY2FuIHNldCBiaUNsclVzZWQgdG8g
MCB0byBtZWFuICJhbGwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3Jl
Q2Fpcm8uY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJhY2tpbmdTdG9y
ZS5oIgorCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitOYXRp
dmVJbWFnZVB0ciBJbWFnZUJhY2tpbmdTdG9yZTo6aW1hZ2UoKSBjb25zdAoreworICAgIHJldHVy
biBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgKKyAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oY29uc3RfY2FzdDxSR0JBMzIqPihtX3Bp
eGVsc1B0cikpLAorICAgICAgICBDQUlST19GT1JNQVRfQVJHQjMyLCBzaXplKCkud2lkdGgoKSwg
c2l6ZSgpLmhlaWdodCgpLCBzaXplKCkud2lkdGgoKSAqIHNpemVvZihSR0JBMzIpKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3Bw
CShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTIgKzYw
LDEyIEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQogICAgIHJldHVy
biBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwogfQogCi1ib29sIEdJRkltYWdlRGVj
b2Rlcjo6c2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQorYm9vbCBHSUZJ
bWFnZURlY29kZXI6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBpZiAoSW1h
Z2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSAmJiBzaXplKCkgPT0gSW50U2l6ZSh3aWR0aCwg
aGVpZ2h0KSkKKyAgICBpZiAoSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSAmJiB0aGlz
LT5zaXplKCkgPT0gc2l6ZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoIUltYWdl
RGVjb2Rlcjo6c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICBpZiAoIUltYWdlRGVjb2Rlcjo6
c2V0U2l6ZShzaXplKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcHJlcGFyZVNjYWxl
RGF0YUlmTmVjZXNzYXJ5KCk7CkBAIC0yMTMsMTAgKzIxMywxMCBAQCBib29sIEdJRkltYWdlRGVj
b2Rlcjo6aGF2ZURlY29kZWRSb3codW5zCiAKICAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZSBp
ZiBuZWNlc3NhcnkuCiAgICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hl
W2ZyYW1lSW5kZXhdOwotICAgIGlmICgoKGJ1ZmZlci5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpG
cmFtZUVtcHR5KSAmJiAhaW5pdEZyYW1lQnVmZmVyKGZyYW1lSW5kZXgpKSB8fCAhYnVmZmVyLmhh
c1BpeGVsRGF0YSgpKQorICAgIGlmICgoKGJ1ZmZlci5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpG
cmFtZUVtcHR5KSAmJiAhaW5pdEZyYW1lQnVmZmVyKGZyYW1lSW5kZXgpKSB8fCAhYnVmZmVyLmhh
c0JhY2tpbmdTdG9yZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbWFnZUZyYW1l
OjpQaXhlbERhdGEqIGN1cnJlbnRBZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoeEJlZ2luLCB5QmVn
aW4pOworICAgIFJHQkEzMiogY3VycmVudEFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcih4QmVnaW4s
IHlCZWdpbik7CiAgICAgLy8gV3JpdGUgb25lIHJvdydzIHdvcnRoIG9mIGRhdGEgaW50byB0aGUg
ZnJhbWUuICAKICAgICBmb3IgKGludCB4ID0geEJlZ2luOyB4IDwgeEVuZDsgKyt4KSB7CiAgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgc291cmNlVmFsdWUgPSByb3dCdWZmZXJbKG1fc2NhbGVk
ID8gbV9zY2FsZWRDb2x1bW5zW3hdIDogeCkgLSBmcmFtZUNvbnRleHQtPnhPZmZzZXRdOwpAQCAt
MzYxLDcgKzM2MSw3IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW4K
IAogICAgIGlmICghZnJhbWVJbmRleCkgewogICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBm
cmFtZSwgc28gd2UncmUgbm90IHJlbHlpbmcgb24gYW55IHByZXZpb3VzIGRhdGEuCi0gICAgICAg
IGlmICghYnVmZmVyLT5zZXRTaXplKHNjYWxlZFNpemUoKS53aWR0aCgpLCBzY2FsZWRTaXplKCku
aGVpZ2h0KCkpKQorICAgICAgICBpZiAoIWJ1ZmZlci0+c2V0U2l6ZShzY2FsZWRTaXplKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8v
IFRoZSBzdGFydGluZyBzdGF0ZSBmb3IgdGhpcyBmcmFtZSBkZXBlbmRzIG9uIHRoZSBwcmV2aW91
cyBmcmFtZSdzCkBAIC0zODcsMTIgKzM4NywxMiBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5p
dEZyYW1lQnVmZmVyKHVuCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBXZSB3YW50
IHRvIGNsZWFyIHRoZSBwcmV2aW91cyBmcmFtZSB0byB0cmFuc3BhcmVudCwgd2l0aG91dAogICAg
ICAgICAgICAgLy8gYWZmZWN0aW5nIHBpeGVscyBpbiB0aGUgaW1hZ2Ugb3V0c2lkZSBvZiB0aGUg
ZnJhbWUuCi0gICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBwcmV2UmVjdCA9IHByZXZCdWZmZXIt
Pm9yaWdpbmFsRnJhbWVSZWN0KCk7CisgICAgICAgICAgICBJbnRSZWN0IHByZXZSZWN0ID0gcHJl
dkJ1ZmZlci0+b3JpZ2luYWxGcmFtZVJlY3QoKTsKICAgICAgICAgICAgIGNvbnN0IEludFNpemUm
IGJ1ZmZlclNpemUgPSBzY2FsZWRTaXplKCk7CiAgICAgICAgICAgICBpZiAoIWZyYW1lSW5kZXgg
fHwgcHJldlJlY3QuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzY2FsZWRTaXplKCkpKSkg
ewogICAgICAgICAgICAgICAgIC8vIENsZWFyaW5nIHRoZSBmaXJzdCBmcmFtZSwgb3IgYSBmcmFt
ZSB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUKICAgICAgICAgICAgICAgICAvLyBpbWFnZSwgcmVzdWx0
cyBpbiBhIGNvbXBsZXRlbHkgZW1wdHkgaW1hZ2UuCi0gICAgICAgICAgICAgICAgaWYgKCFidWZm
ZXItPnNldFNpemUoYnVmZmVyU2l6ZS53aWR0aCgpLCBidWZmZXJTaXplLmhlaWdodCgpKSkKKyAg
ICAgICAgICAgICAgICBpZiAoIWJ1ZmZlci0+c2V0U2l6ZShidWZmZXJTaXplKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAvLyBDb3B5IHRoZSB3aG9sZSBwcmV2aW91cyBidWZmZXIsIHRoZW4gY2xl
YXIganVzdCBpdHMgZnJhbWUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCShyZXZpc2lv
biAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYv
R0lGSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiAiZ2lmIjsgfQogICAgICAgICB2b2lkIHNldERhdGEoU2hhcmVkQnVm
ZmVyJiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkgb3ZlcnJpZGU7CiAgICAgICAgIGJvb2wg
aXNTaXplQXZhaWxhYmxlKCkgb3ZlcnJpZGU7Ci0gICAgICAgIGJvb2wgc2V0U2l6ZSh1bnNpZ25l
ZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KSBvdmVycmlkZTsKKyAgICAgICAgYm9vbCBzZXRTaXpl
KGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKICAgICAgICAgc2l6ZV90IGZyYW1lQ291bnQoKSBv
dmVycmlkZTsKICAgICAgICAgaW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0IG92ZXJyaWRlOwog
ICAgICAgICBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KSBvdmVy
cmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9H
SUZJbWFnZVJlYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVh
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ3LDcgKzQ0Nyw3IEBAIGJvb2wgR0lGSW1hZ2VS
ZWFkZXI6OnBhcnNlKHNpemVfdCBkYXRhUG8KIAogICAgICAgICAgICAgLy8gQ0FMTEJBQ0s6IElu
Zm9ybSB0aGUgZGVjb2RlcnBsdWdpbiBvZiBvdXIgc2l6ZS4KICAgICAgICAgICAgIC8vIE5vdGU6
IEEgc3Vic2VxdWVudCBmcmFtZSBtaWdodCBoYXZlIGRpbWVuc2lvbnMgbGFyZ2VyIHRoYW4gdGhl
ICJzY3JlZW4iIGRpbWVuc2lvbnMuCi0gICAgICAgICAgICBpZiAobV9jbGllbnQgJiYgIW1fY2xp
ZW50LT5zZXRTaXplKG1fc2NyZWVuV2lkdGgsIG1fc2NyZWVuSGVpZ2h0KSkKKyAgICAgICAgICAg
IGlmIChtX2NsaWVudCAmJiAhbV9jbGllbnQtPnNldFNpemUoSW50U2l6ZShtX3NjcmVlbldpZHRo
LCBtX3NjcmVlbkhlaWdodCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
ICAgICAgICAgbV9zY3JlZW5CZ2NvbG9yID0gY3VycmVudENvbXBvbmVudFs1XTsKQEAgLTY2NCw3
ICs2NjQsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpwYXJzZShzaXplX3QgZGF0YVBvCiAgICAg
ICAgICAgICAgICAgeU9mZnNldCA9IDA7CiAKICAgICAgICAgICAgICAgICAvLyBDQUxMQkFDSzog
SW5mb3JtIHRoZSBkZWNvZGVycGx1Z2luIG9mIG91ciBzaXplLgotICAgICAgICAgICAgICAgIGlm
IChtX2NsaWVudCAmJiAhbV9jbGllbnQtPnNldFNpemUobV9zY3JlZW5XaWR0aCwgbV9zY3JlZW5I
ZWlnaHQpKQorICAgICAgICAgICAgICAgIGlmIChtX2NsaWVudCAmJiAhbV9jbGllbnQtPnNldFNp
emUoSW50U2l6ZShtX3NjcmVlbldpZHRoLCBtX3NjcmVlbkhlaWdodCkpKQogICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09J
bWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODgsMTEgKzg4LDExIEBAIEludFNpemUgSUNPSW1hZ2VEZWNvZGVyOjpmcmFtZVNpemVB
dEluZGUKICAgICByZXR1cm4gKGluZGV4ICYmIChpbmRleCA8IG1fZGlyRW50cmllcy5zaXplKCkp
KSA/IG1fZGlyRW50cmllc1tpbmRleF0ubV9zaXplIDogc2l6ZSgpOwogfQogCi1ib29sIElDT0lt
YWdlRGVjb2Rlcjo6c2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQorYm9v
bCBJQ09JbWFnZURlY29kZXI6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICAv
LyBUaGUgc2l6ZSBjYWxjdWxhdGVkIGluc2lkZSB0aGUgQk1QSW1hZ2VSZWFkZXIgaGFkIGJldHRl
ciBtYXRjaCB0aGUgb25lIGluCiAgICAgLy8gdGhlIGljb24gZGlyZWN0b3J5LgotICAgIHJldHVy
biBtX2ZyYW1lU2l6ZS5pc0VtcHR5KCkgPyBJbWFnZURlY29kZXI6OnNldFNpemUod2lkdGgsIGhl
aWdodCkgOiAoKEludFNpemUod2lkdGgsIGhlaWdodCkgPT0gbV9mcmFtZVNpemUpIHx8IHNldEZh
aWxlZCgpKTsKKyAgICByZXR1cm4gbV9mcmFtZVNpemUuaXNFbXB0eSgpID8gSW1hZ2VEZWNvZGVy
OjpzZXRTaXplKHNpemUpIDogKHNpemUgPT0gbV9mcmFtZVNpemUpIHx8IHNldEZhaWxlZCgpKTsK
IH0KIAogc2l6ZV90IElDT0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCgpCkBAIC0yNzksNyArMjc5
LDcgQEAgYm9vbCBJQ09JbWFnZURlY29kZXI6OnByb2Nlc3NEaXJlY3RvcnlFbgogICAgIGNvbnN0
IEljb25EaXJlY3RvcnlFbnRyeSYgZGlyRW50cnkgPSBtX2RpckVudHJpZXMuZmlyc3QoKTsKICAg
ICAvLyBUZWNobmljYWxseSwgdGhpcyBuZXh0IGNhbGwgc2hvdWxkbid0IGJlIGFibGUgdG8gZmFp
bCwgc2luY2UgdGhlIHdpZHRoCiAgICAgLy8gYW5kIGhlaWdodCBoZXJlIGFyZSBlYWNoIDw9IDI1
NiwgYW5kIHxtX2ZyYW1lU2l6ZXwgaXMgZW1wdHkuCi0gICAgcmV0dXJuIHNldFNpemUoZGlyRW50
cnkubV9zaXplLndpZHRoKCksIGRpckVudHJ5Lm1fc2l6ZS5oZWlnaHQoKSk7CisgICAgcmV0dXJu
IHNldFNpemUoZGlyRW50cnkubV9zaXplKTsKIH0KIAogSUNPSW1hZ2VEZWNvZGVyOjpJY29uRGly
ZWN0b3J5RW50cnkgSUNPSW1hZ2VEZWNvZGVyOjpyZWFkRGlyZWN0b3J5RW50cnkoKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2ljby9JQ09JbWFnZURlY29kZXIuaAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9v
bCBpc1NpemVBdmFpbGFibGUoKSBvdmVycmlkZTsKICAgICAgICAgSW50U2l6ZSBzaXplKCkgb3Zl
cnJpZGU7CiAgICAgICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRleChzaXplX3QsIFN1YnNhbXBs
aW5nTGV2ZWwpIG92ZXJyaWRlOwotICAgICAgICBib29sIHNldFNpemUodW5zaWduZWQgd2lkdGgs
IHVuc2lnbmVkIGhlaWdodCkgb3ZlcnJpZGU7CisgICAgICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJ
bnRTaXplJikgb3ZlcnJpZGU7CiAgICAgICAgIHNpemVfdCBmcmFtZUNvdW50KCkgb3ZlcnJpZGU7
CiAgICAgICAgIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QpIG92ZXJyaWRl
OwogICAgICAgICAvLyBDQVVUSU9OOiBzZXRGYWlsZWQoKSBkZWxldGVzIGFsbCByZWFkZXJzIGFu
ZCBkZWNvZGVycy4gIEJlIGNhcmVmdWwgdG8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNv
ZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIyLDcgKzMyMiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fc3RhdGUgPSBKUEVHX1NUQVJU
X0RFQ09NUFJFU1M7CiAKICAgICAgICAgICAgIC8vIFdlIGNhbiBmaWxsIGluIHRoZSBzaXplIG5v
dyB0aGF0IHRoZSBoZWFkZXIgaXMgYXZhaWxhYmxlLgotICAgICAgICAgICAgaWYgKCFtX2RlY29k
ZXItPnNldFNpemUobV9pbmZvLmltYWdlX3dpZHRoLCBtX2luZm8uaW1hZ2VfaGVpZ2h0KSkKKyAg
ICAgICAgICAgIGlmICghbV9kZWNvZGVyLT5zZXRTaXplKEludFNpemUobV9pbmZvLmltYWdlX3dp
ZHRoLCBtX2luZm8uaW1hZ2VfaGVpZ2h0KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCiAgICAgICAgICAgICBtX2RlY29kZXItPnNldE9yaWVudGF0aW9uKHJlYWRJbWFnZU9yaWVu
dGF0aW9uKGluZm8oKSkpOwpAQCAtNTE5LDkgKzUxOSw5IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rl
cjo6aXNTaXplQXZhaWxhYmxlKCkKICAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFp
bGFibGUoKTsKIH0KIAotYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHVuc2lnbmVkIHdp
ZHRoLCB1bnNpZ25lZCBoZWlnaHQpCitib29sIEpQRUdJbWFnZURlY29kZXI6OnNldFNpemUoY29u
c3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBpZiAoIUltYWdlRGVjb2Rlcjo6c2V0U2l6ZSh3aWR0
aCwgaGVpZ2h0KSkKKyAgICBpZiAoIUltYWdlRGVjb2Rlcjo6c2V0U2l6ZShzaXplKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcHJlcGFyZVNjYWxlRGF0YUlmTmVjZXNzYXJ5KCk7CkBA
IC01NTEsNyArNTUxLDcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpzZXRGYWlsZWQoKQogfQog
CiB0ZW1wbGF0ZSA8Sl9DT0xPUl9TUEFDRSBjb2xvclNwYWNlPgotdm9pZCBzZXRQaXhlbChJbWFn
ZUZyYW1lJiBidWZmZXIsIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogY3VycmVudEFkZHJlc3MsIEpT
QU1QQVJSQVkgc2FtcGxlcywgaW50IGNvbHVtbikKK3ZvaWQgc2V0UGl4ZWwoSW1hZ2VGcmFtZSYg
YnVmZmVyLCBSR0JBMzIqIGN1cnJlbnRBZGRyZXNzLCBKU0FNUEFSUkFZIHNhbXBsZXMsIGludCBj
b2x1bW4pCiB7CiAgICAgSlNBTVBMRSoganNhbXBsZSA9ICpzYW1wbGVzICsgY29sdW1uICogKGNv
bG9yU3BhY2UgPT0gSkNTX1JHQiA/IDMgOiA0KTsKIApAQCAtNTk0LDcgKzU5NCw3IEBAIGJvb2wg
SlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKEkKICAgICAgICAgaWYgKGRlc3RZIDwg
MCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0
YSogY3VycmVudEFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcigwLCBkZXN0WSk7CisgICAgICAgIFJH
QkEzMiogY3VycmVudEFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcigwLCBkZXN0WSk7CiAgICAgICAg
IGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7ICsreCkgewogICAgICAgICAgICAgc2V0UGl4ZWw8
Y29sb3JTcGFjZT4oYnVmZmVyLCBjdXJyZW50QWRkcmVzcywgc2FtcGxlcywgaXNTY2FsZWQgPyBt
X3NjYWxlZENvbHVtbnNbeF0gOiB4KTsKICAgICAgICAgICAgICsrY3VycmVudEFkZHJlc3M7CkBA
IC02MTcsMTUgKzYxNywxMiBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5l
cygpCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWVidWZmZXIgaWYgbmVlZGVkLgogICAgIElt
YWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKICAgICBpZiAoYnVmZmVy
LnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpIHsKLSAgICAgICAgaWYgKCFidWZm
ZXIuc2V0U2l6ZShzY2FsZWRTaXplKCkud2lkdGgoKSwgc2NhbGVkU2l6ZSgpLmhlaWdodCgpKSkK
KyAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzY2FsZWRTaXplKCkpKQogICAgICAgICAgICAg
cmV0dXJuIHNldEZhaWxlZCgpOwogICAgICAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdlRnJhbWU6
OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIC8vIFRoZSBidWZmZXIgaXMgdHJhbnNwYXJlbnQgb3V0
c2lkZSB0aGUgZGVjb2RlZCBhcmVhIHdoaWxlIHRoZSBpbWFnZSBpcwogICAgICAgICAvLyBsb2Fk
aW5nLiBUaGUgY29tcGxldGVkIGltYWdlIHdpbGwgYmUgbWFya2VkIGZ1bGx5IG9wYXF1ZSBpbiBq
cGVnQ29tcGxldGUoKS4KICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKHRydWUpOwotCi0gICAg
ICAgIC8vIEZvciBKUEVHcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdl
LgotICAgICAgICBidWZmZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgp
LCBzaXplKCkpKTsKICAgICB9CiAKICAgICBqcGVnX2RlY29tcHJlc3Nfc3RydWN0KiBpbmZvID0g
bV9yZWFkZXItPmluZm8oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCShyZXZp
c2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9q
cGVnL0pQRUdJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIEltYWdlRGVjb2RlcgogICAgICAgICBTdHJp
bmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAianBnIjsgfQog
ICAgICAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIG92ZXJyaWRlOwotICAgICAgICBib29sIHNl
dFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkgb3ZlcnJpZGU7CisgICAgICAg
IGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7CiAgICAgICAgIEltYWdlRnJh
bWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpIG92ZXJyaWRlOwogICAgICAgICAv
LyBDQVVUSU9OOiBzZXRGYWlsZWQoKSBkZWxldGVzIHxtX3JlYWRlcnwuICBCZSBjYXJlZnVsIHRv
IGF2b2lkCiAgICAgICAgIC8vIGFjY2Vzc2luZyBkZWxldGVkIG1lbW9yeSwgZXNwZWNpYWxseSB3
aGVuIGNhbGxpbmcgdGhpcyBmcm9tIGluc2lkZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rl
ci5jcHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUs
OSArMjM1LDkgQEAgYm9vbCBQTkdJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpCiAgICAg
cmV0dXJuIEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCk7CiB9CiAKLWJvb2wgUE5HSW1h
Z2VEZWNvZGVyOjpzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCitib29s
IFBOR0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIGlm
ICghSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHdpZHRoLCBoZWlnaHQpKQorICAgIGlmICghSW1hZ2VE
ZWNvZGVyOjpzZXRTaXplKHNpemUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBwcmVw
YXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKQEAgLTI5NSw3ICsyOTUsNyBAQCB2b2lkIFBOR0lt
YWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKICAgICAvLyB3aWxsIGNlYXNlIHRvIGV4aXN0
LiAgTm90ZSB0aGF0IHdlJ2xsIHN0aWxsIHByb3Blcmx5IHNldCB0aGUgZmFpbHVyZSBmbGFnCiAg
ICAgLy8gaW4gdGhpcyBjYXNlIGFzIHNvb24gYXMgd2UgbG9uZ2ptcCgpLgogICAgIG1fZG9Ob3Ro
aW5nT25GYWlsdXJlID0gdHJ1ZTsKLSAgICBib29sIHJlc3VsdCA9IHNldFNpemUod2lkdGgsIGhl
aWdodCk7CisgICAgYm9vbCByZXN1bHQgPSBzZXRTaXplKEludFNpemUod2lkdGgsIGhlaWdodCkp
OwogICAgIG1fZG9Ob3RoaW5nT25GYWlsdXJlID0gZmFsc2U7CiAgICAgaWYgKCFyZXN1bHQpIHsK
ICAgICAgICAgbG9uZ2ptcChKTVBCVUYocG5nKSwgMSk7CkBAIC00MTEsMTkgKzQxMSwxOSBAQCB2
b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKICAgICB9CiB9CiAKLXN0YXRp
YyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJHQihJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGRlc3QsIHBu
Z19ieXRlcCBwaXhlbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJHQihSR0JBMzIqIGRl
c3QsIHBuZ19ieXRlcCBwaXhlbCkKIHsKICAgICAqZGVzdCA9IDB4RkYwMDAwMDBVIHwgcGl4ZWxb
MF0gPDwgMTYgfCBwaXhlbFsxXSA8PCA4IHwgcGl4ZWxbMl07CiB9CiAKLXN0YXRpYyBpbmxpbmUg
dm9pZCBzZXRQaXhlbFJHQkEoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBkZXN0LCBwbmdfYnl0ZXAg
cGl4ZWwsIHVuc2lnbmVkIGNoYXImIG5vblRyaXZpYWxBbHBoYU1hc2spCitzdGF0aWMgaW5saW5l
IHZvaWQgc2V0UGl4ZWxSR0JBKFJHQkEzMiogZGVzdCwgcG5nX2J5dGVwIHBpeGVsLCB1bnNpZ25l
ZCBjaGFyJiBub25Ucml2aWFsQWxwaGFNYXNrKQogewogICAgIHVuc2lnbmVkIGNoYXIgYSA9IHBp
eGVsWzNdOwogICAgICpkZXN0ID0gYSA8PCAyNCB8IHBpeGVsWzBdIDw8IDE2IHwgcGl4ZWxbMV0g
PDwgOCB8IHBpeGVsWzJdOwogICAgIG5vblRyaXZpYWxBbHBoYU1hc2sgfD0gKDI1NSAtIGEpOwog
fQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxQcmVtdWx0aXBsaWVkUkdCQShJbWFnZUZy
YW1lOjpQaXhlbERhdGEqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCwgdW5zaWduZWQgY2hhciYgbm9u
VHJpdmlhbEFscGhhTWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFByZW11bHRpcGxp
ZWRSR0JBKFJHQkEzMiogZGVzdCwgcG5nX2J5dGVwIHBpeGVsLCB1bnNpZ25lZCBjaGFyJiBub25U
cml2aWFsQWxwaGFNYXNrKQogewogICAgIHVuc2lnbmVkIGNoYXIgYSA9IHBpeGVsWzNdOwogICAg
IHVuc2lnbmVkIGNoYXIgciA9IGZhc3REaXZpZGVCeTI1NShwaXhlbFswXSAqIGEpOwpAQCAtNDQ3
LDcgKzQ0Nyw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWcKICAg
ICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbbV9jdXJyZW50RnJhbWVd
OwogICAgIGlmIChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgewog
ICAgICAgICBwbmdfc3RydWN0cCBwbmcgPSBtX3JlYWRlci0+cG5nUHRyKCk7Ci0gICAgICAgIGlm
ICghYnVmZmVyLnNldFNpemUoc2NhbGVkU2l6ZSgpLndpZHRoKCksIHNjYWxlZFNpemUoKS5oZWln
aHQoKSkpIHsKKyAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzY2FsZWRTaXplKCkpKSB7CiAg
ICAgICAgICAgICBsb25nam1wKEpNUEJVRihwbmcpLCAxKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQpAQCAtNDcxLDggKzQ3MSw2IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dB
dmFpbGFibGUodW5zaWcKICAgICAgICAgICAgIGluaXRGcmFtZUJ1ZmZlcihtX2N1cnJlbnRGcmFt
ZSk7CiAgICAgICAgIGVsc2UKICNlbmRpZgotICAgICAgICAvLyBGb3IgUE5HcywgdGhlIGZyYW1l
IGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgotICAgICAgICBidWZmZXIuc2V0T3JpZ2lu
YWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKTsKICAgICB9CiAKICAgICAv
KiBsaWJwbmcgY29tbWVudHMgKGhlcmUgdG8gZXhwbGFpbiB3aGF0IGZvbGxvd3MpLgpAQCAtNTMx
LDcgKzUyOSw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWcKICAg
ICB9CiAKICAgICAvLyBXcml0ZSB0aGUgZGVjb2RlZCByb3cgcGl4ZWxzIHRvIHRoZSBmcmFtZSBi
dWZmZXIuCi0gICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBhZGRyZXNzID0gYnVmZmVyLmdldEFk
ZHIoMCwgeSk7CisgICAgUkdCQTMyKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoMCwgeSk7CiAg
ICAgaW50IHdpZHRoID0gc2NhbGVkU2l6ZSgpLndpZHRoKCk7CiAgICAgdW5zaWduZWQgY2hhciBu
b25Ucml2aWFsQWxwaGFNYXNrID0gMDsKIApAQCAtODIwLDcgKzgxOCw3IEBAIHZvaWQgUE5HSW1h
Z2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIoc2kKICAgICB9IGVsc2UgewogICAgICAgICAvLyBX
ZSB3YW50IHRvIGNsZWFyIHRoZSBwcmV2aW91cyBmcmFtZSB0byB0cmFuc3BhcmVudCwgd2l0aG91
dAogICAgICAgICAvLyBhZmZlY3RpbmcgcGl4ZWxzIGluIHRoZSBpbWFnZSBvdXRzaWRlIG9mIHRo
ZSBmcmFtZS4KLSAgICAgICAgY29uc3QgSW50UmVjdCYgcHJldlJlY3QgPSBwcmV2QnVmZmVyLT5v
cmlnaW5hbEZyYW1lUmVjdCgpOworICAgICAgICBJbnRSZWN0IHByZXZSZWN0ID0gcHJldkJ1ZmZl
ci0+b3JpZ2luYWxGcmFtZVJlY3QoKTsKICAgICAgICAgaWYgKCFmcmFtZUluZGV4IHx8IHByZXZS
ZWN0LmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpIHsKICAgICAg
ICAgICAgIC8vIENsZWFyaW5nIHRoZSBmaXJzdCBmcmFtZSwgb3IgYSBmcmFtZSB0aGUgc2l6ZSBv
ZiB0aGUgd2hvbGUKICAgICAgICAgICAgIC8vIGltYWdlLCByZXN1bHRzIGluIGEgY29tcGxldGVs
eSBlbXB0eSBpbWFnZS4KQEAgLTg0NCw3ICs4NDIsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6
ZnJhbWVDb21wbGV0ZSgpCiAgICAgcG5nX2J5dGVwIGludGVybGFjZUJ1ZmZlciA9IG1fcmVhZGVy
LT5pbnRlcmxhY2VCdWZmZXIoKTsKIAogICAgIGlmIChtX2N1cnJlbnRGcmFtZSAmJiBpbnRlcmxh
Y2VCdWZmZXIpIHsKLSAgICAgICAgY29uc3QgSW50UmVjdCYgcmVjdCA9IGJ1ZmZlci5vcmlnaW5h
bEZyYW1lUmVjdCgpOworICAgICAgICBJbnRSZWN0IHJlY3QgPSBidWZmZXIub3JpZ2luYWxGcmFt
ZVJlY3QoKTsKICAgICAgICAgYm9vbCBoYXNBbHBoYSA9IG1fcmVhZGVyLT5oYXNBbHBoYSgpOwog
ICAgICAgICB1bnNpZ25lZCBjb2xvckNoYW5uZWxzID0gaGFzQWxwaGEgPyA0IDogMzsKICAgICAg
ICAgYm9vbCBub25Ucml2aWFsQWxwaGEgPSBmYWxzZTsKQEAgLTg1NCw3ICs4NTIsNyBAQCB2b2lk
IFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAjaWYgRU5BQkxFKElNQUdFX0RFQ09E
RVJfRE9XTl9TQU1QTElORykKICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCByZWN0Lm1heFko
KSAtIHJlY3QueSgpOyArK3kpIHsKICAgICAgICAgICAgIHBuZ19ieXRlcCByb3cgPSBpbnRlcmxh
Y2VCdWZmZXIgKyAobV9zY2FsZWQgPyBtX3NjYWxlZFJvd3NbeV0gOiB5KSAqIGNvbG9yQ2hhbm5l
bHMgKiBzaXplKCkud2lkdGgoKTsKLSAgICAgICAgICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSog
YWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHJlY3QueCgpLCB5ICsgcmVjdC55KCkpOworICAgICAg
ICAgICAgUkdCQTMyKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIocmVjdC54KCksIHkgKyByZWN0
LnkoKSk7CiAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHJlY3QubWF4WCgpIC0gcmVj
dC54KCk7ICsreCkgewogICAgICAgICAgICAgICAgIHBuZ19ieXRlcCBwaXhlbCA9IHJvdyArICht
X3NjYWxlZCA/IG1fc2NhbGVkQ29sdW1uc1t4XSA6IHgpICogY29sb3JDaGFubmVsczsKICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IGhhc0FscGhhID8gcGl4ZWxbM10gOiAyNTU7CkBA
IC04NzAsNyArODY4LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUoKQog
ICAgICAgICBwbmdfYnl0ZXAgcm93ID0gaW50ZXJsYWNlQnVmZmVyOwogICAgICAgICBmb3IgKGlu
dCB5ID0gcmVjdC55KCk7IHkgPCByZWN0Lm1heFkoKTsgKyt5LCByb3cgKz0gY29sb3JDaGFubmVs
cyAqIHNpemUoKS53aWR0aCgpKSB7CiAgICAgICAgICAgICBwbmdfYnl0ZXAgcGl4ZWwgPSByb3c7
Ci0gICAgICAgICAgICBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGFkZHJlc3MgPSBidWZmZXIuZ2V0
QWRkcihyZWN0LngoKSwgeSk7CisgICAgICAgICAgICBSR0JBMzIqIGFkZHJlc3MgPSBidWZmZXIu
Z2V0QWRkcihyZWN0LngoKSwgeSk7CiAgICAgICAgICAgICBmb3IgKGludCB4ID0gcmVjdC54KCk7
IHggPCByZWN0Lm1heFgoKTsgKyt4LCBwaXhlbCArPSBjb2xvckNoYW5uZWxzKSB7CiAgICAgICAg
ICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBoYXNBbHBoYSA/IHBpeGVsWzNdIDogMjU1OwogICAg
ICAgICAgICAgICAgIG5vblRyaXZpYWxBbHBoYSB8PSBhbHBoYSA8IDI1NTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcv
UE5HSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtNDgsNyArNDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGludCByZXBl
dGl0aW9uQ291bnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX3BsYXlDb3VudC0xOyB9CiAj
ZW5kaWYKICAgICAgICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBvdmVycmlkZTsKLSAgICAgICAg
Ym9vbCBzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpIG92ZXJyaWRlOwor
ICAgICAgICBib29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwogICAgICAgICBJ
bWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KSBvdmVycmlkZTsKICAg
ICAgICAgLy8gQ0FVVElPTjogc2V0RmFpbGVkKCkgZGVsZXRlcyB8bV9yZWFkZXJ8LiAgQmUgY2Fy
ZWZ1bCB0byBhdm9pZAogICAgICAgICAvLyBhY2Nlc3NpbmcgZGVsZXRlZCBtZW1vcnksIGVzcGVj
aWFsbHkgd2hlbiBjYWxsaW5nIHRoaXMgZnJvbSBpbnNpZGUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQ
SW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIGJvb2wgV0VCUEltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJv
b2wgb25seVMKICAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQoKTsKICAgICAgICAgbV9oYXNB
bHBoYSA9IGZhbHNlOwogI2VuZGlmCi0gICAgICAgIGlmICghc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0
KSkKKyAgICAgICAgaWYgKCFzZXRTaXplKEludFNpemUod2lkdGgsIGhlaWdodCkpKQogICAgICAg
ICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgIH0KIApAQCAtMTI4LDE4ICsxMjgsMTcgQEAg
Ym9vbCBXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBvbmx5UwogICAgIEFTU0VSVChidWZm
ZXIuc3RhdHVzKCkgIT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSk7CiAKICAgICBpZiAoYnVm
ZmVyLnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpIHsKLSAgICAgICAgaWYgKCFi
dWZmZXIuc2V0U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSkKKyAgICAgICAg
aWYgKCFidWZmZXIuc2V0U2l6ZShzaXplKCkpKQogICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxl
ZCgpOwogICAgICAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7
CiAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShtX2hhc0FscGhhKTsKLSAgICAgICAgYnVmZmVy
LnNldE9yaWdpbmFsRnJhbWVSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSgpKSk7CiAgICAg
fQogCiAgICAgaWYgKCFtX2RlY29kZXIpIHsKICAgICAgICAgV0VCUF9DU1BfTU9ERSBtb2RlID0g
b3V0cHV0TW9kZShtX2hhc0FscGhhKTsKICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEp
CiAgICAgICAgICAgICBtb2RlID0gb3V0cHV0TW9kZShmYWxzZSk7Ci0gICAgICAgIGludCByb3dT
dHJpZGUgPSBzaXplKCkud2lkdGgoKSAqIHNpemVvZihJbWFnZUZyYW1lOjpQaXhlbERhdGEpOwor
ICAgICAgICBpbnQgcm93U3RyaWRlID0gc2l6ZSgpLndpZHRoKCkgKiBzaXplb2YoUkdCQTMyKTsK
ICAgICAgICAgdWludDhfdCogb3V0cHV0ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVm
ZmVyLmdldEFkZHIoMCwgMCkpOwogICAgICAgICBpbnQgb3V0cHV0U2l6ZSA9IHNpemUoKS5oZWln
aHQoKSAqIHJvd1N0cmlkZTsKICAgICAgICAgbV9kZWNvZGVyID0gV2ViUElOZXdSR0IobW9kZSwg
b3V0cHV0LCBvdXRwdXRTaXplLCByb3dTdHJpZGUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288463</attachid>
            <date>2016-09-09 18:01:40 -0700</date>
            <delta_ts>2016-09-09 18:11:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159679-20160909175912.patch</filename>
            <type>text/plain</type>
            <size>57335</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTc3NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNiBAQAorMjAxNi0wOS0wOSAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgdGhl
IHBpeGVsIGRhdGEgb2YgSW1hZ2VGcmFtZSB0byBhIHNlcGFyYXRlIGNsYXNzIG5hbWVkIEltYWdl
QmFja2luZ1N0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTk2NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNb3ZlIHRoZSBwaXhlbCBkYXRhIG1hbmlwdWxhdGlvbiBwYXJ0IGluIEltYWdlRnJhbWUg
aW50byBhIHNlcGFyYXRlIGNsYXNzCisgICAgICAgIGFuZCBhbGxvY2F0ZSBpdCBvbiBkZW1hbmQu
CisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5j
bWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbkNhaXJvLmNtYWtlOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2hhbm5lbCk6Cisg
ICAgICAgIChXZWJDb3JlOjp1bnByZW11bHRpcGxpZWRDaGFubmVsKToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VQcmVtdWx0aXBsaWVkUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlVW5QcmVt
dWx0aXBsaWVkUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpjb2xvckZyb21QcmVtdWx0aXBsaWVk
QVJHQik6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OmZh
c3RNdWx0aXBseUJ5MjU1KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tp
bmdTdG9yZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OkltYWdlQmFja2lu
Z1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRGcmFtZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OnNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCYWNraW5nU3RvcmU6OmZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJhY2tpbmdTdG9yZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3Rv
cmU6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJhY2tpbmdTdG9yZTo6cmVw
ZWF0Rmlyc3RSb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OmF0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRSR0JBKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpvdmVyUkdCQSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJhY2tpbmdTdG9yZTo6aW5Cb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
YWNraW5nU3RvcmU6OmlzT3ZlclNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L05hdGl2ZUltYWdlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmF0aXZlSW1hZ2VIYXNBbHBo
YSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojp6ZXJvRmlsbEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRC
YWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRPcmlnaW5hbEZyYW1lUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWU6OmNvcHlSb3dOVGltZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjphc05ld05hdGl2ZUlt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmJhY2tpbmdTdG9yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpoYXNCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6b3JpZ2luYWxGcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VGcmFtZTo6Z2V0QWRkcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRS
R0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om92ZXJSR0JBKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjpzZXRPcmlnaW5hbEZyYW1lUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpoYXNQaXhlbERhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VGcmFtZTo6Zml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRnJhbWU6OmRpdmlkZTI1NSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjp3aWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjpoZWlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVy
Ojppc092ZXJTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFk
ZXI6OmRlY29kZUJNUCk6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6cHJvY2Vz
c0luZm9IZWFkZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0lt
YWdlQmFja2luZ1N0b3JlQ2Fpcm8uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QmFja2luZ1N0b3JlOjppbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Z2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29k
ZXI6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVj
b2RlZFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1
ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVj
b2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJl
YWRlci5jcHA6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6cGFyc2UpOgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SUNPSW1hZ2VEZWNvZGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OklD
T0ltYWdlRGVjb2Rlcjo6cHJvY2Vzc0RpcmVjdG9yeUVudHJpZXMpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlUmVhZGVyOjpkZWNvZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRQ
aXhlbCk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGlu
ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVj
b2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURl
Y29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpzZXRTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldFBpeGVsUkdCKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVs
UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhlbFByZW11bHRpcGxpZWRSR0JBKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAgICogcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorCiAyMDE2LTA5LTA5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVVJMUGFyc2Vy
IHNob3VsZCBjb252ZXJ0IEFTQ0lJIGhvc3RzIHRvIGxvd2VyY2FzZQpJbmRleDogU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1FZmwuY21ha2UJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtRWZsLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsMTAgKzE4Myw5IEBAIGxpc3QoQVBQ
RU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3gxMS9QbGF0Zm9ybURp
c3BsYXlYMTEuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MveDExL1hVbmlxdWVSZXNvdXJjZS5j
cHAKIAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3Jl
Q2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvSlBFR0ltYWdlRW5jb2Rlci5j
cHAKIAotICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJv
LmNwcAotCiAgICAgcGxhdGZvcm0vbmV0d29yay9lZmwvTmV0d29ya1N0YXRlTm90aWZpZXJFZmwu
Y3BwCiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VT
b3VwLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UJKHJldmlzaW9uIDIwNTY4NCkK
KysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTUsNyArMTU1LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0v
Z3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKICAgICBwbGF0Zm9ybS9ndGsvVXNlckFnZW50R3Rr
LmNwcAogCi0gICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fp
cm8uY3BwCisgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VCYWNraW5nU3Rv
cmVDYWlyby5jcHAKIAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2d0ay9TRFBQcm9jZXNzb3JT
Y3JpcHRSZXNvdXJjZUd0ay5jcHAKIApJbmRleDogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5D
YWlyby5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJv
LmNtYWtlCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNh
aXJvLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGxpc3QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb24uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZv
bnREYXRhQ2Fpcm9XaW4uY3BwCiAKLSAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9J
bWFnZURlY29kZXJDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9J
bWFnZUJhY2tpbmdTdG9yZUNhaXJvLmNwcAogCiAgICAgcGxhdGZvcm0vbmV0d29yay9OZXR3b3Jr
U3RvcmFnZVNlc3Npb25TdHViLmNwcAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTIyNzUsNiArMjI3NSw3IEBACiAJCTU1NUI4N0VDMUNBQUYwQUIwMDM0OTQyNSAvKiBJ
bWFnZURlY29kZXJDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICov
OyB9OwogCQk1NTVCODdFRDFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1NUI4N0VCMUNBQUYw
QUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5oICovOyB9OwogCQk1NUEzMzZGNzFEODIwOUY0
MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDU1QTMzNkY2MUQ4MjA5RjQwMDIyQzRDNyAvKiBOYXRpdmVJbWFnZS5o
ICovOyB9OworCQk1NUEzMzZGOTFEODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1QTMzNkY4
MUQ4MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU3MDlFOENEMUQ0MTNENDcwMDMyNDRB
QyAvKiBXZWJLaXRTdWJ0bGVDcnlwdG8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTcwOUU4Q0ExRDQxM0NFMzAwMzI0NEFDIC8qIFdlYktpdFN1YnRs
ZUNyeXB0by5jcHAgKi87IH07CiAJCTU3MDlFOENFMUQ0MTNENUIwMDMyNDRBQyAvKiBKU1dlYktp
dFN1YnRsZUNyeXB0b0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFMUZGOEY2NjE4MDc0NjA4MDAxMzI2NzQgLyogSlNXZWJLaXRTdWJ0bGVD
cnlwdG9DdXN0b20uY3BwICovOyB9OwogCQk1NzA5RThDRjFENDEzRDlBMDAzMjQ0QUMgLyogV2Vi
S2l0U3VidGxlQ3J5cHRvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NzA5RThDQjFENDEzQ0UzMDAzMjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5cHRvLmgg
Ki87IH07CkBAIC05MjkxLDYgKzkyOTIsNyBAQAogCQk1NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUg
LyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW1hZ2VEZWNvZGVyQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTVC
ODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VEZWNvZGVyQ0cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTVBMzM2RjYxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hdGl2ZUltYWdlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTU1QTMzNkY4MUQ4MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdT
dG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJhY2tpbmdTdG9y
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUQ0MDhGNzFBN0M2MzE4MDBDNzg0
NTAgLyogU1ZHSW1hZ2VDbGllbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNWR0ltYWdlQ2xpZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzA5RThD
QTFENDEzQ0UzMDAzMjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5cHRvLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdFN1YnRsZUNyeXB0by5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MDlFOENCMUQ0MTNDRTMwMDMyNDRBQyAvKiBXZWJLaXRT
dWJ0bGVDcnlwdG8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViS2l0U3Vi
dGxlQ3J5cHRvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDc2OSw2ICsyMDc3
MSw3IEBACiAJCQkJMzc5OTE5OTQxMjAwRERGNDAwRUEwNDFDIC8qIFdPRkZGaWxlRm9ybWF0LmNw
cCAqLywKIAkJCQkzNzk5MTk5NTEyMDBEREY0MDBFQTA0MUMgLyogV09GRkZpbGVGb3JtYXQuaCAq
LywKIAkJCQk1NUEzMzZGNjFEODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLywKKwkJ
CQk1NUEzMzZGODFEODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCAqLywKIAkJ
CSk7CiAJCQlwYXRoID0gZ3JhcGhpY3M7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAt
MjYzMzksNiArMjYzNDIsNyBAQAogCQkJCTU4MkNCMDUzMUE3OEExNEIwMEFGRkNDNCAvKiBTaW1w
bGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1
QTFFQTdEMTUyQkNGMDgwMDREMDBCNiAvKiBTaW1wbGlmeU1hcmt1cENvbW1hbmQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTU3MkE3RjIxMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNTVBMzM2RjkxRDgyMUUzQzAwMjJDNEM3IC8qIEltYWdlQmFj
a2luZ1N0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTc0MUFBRDE2NjM2NjA5MDA4QTVCN0Ug
LyogU2ltdWxhdGVkQ2xpY2tPcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDAwRDdBNTE0
QTNGNjE5MDA3MzQwMTEgLyogU2luY1Jlc2FtcGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEz
MjdENjAxMUEzM0EyQjAwNEY5RDY1IC8qIFNpbmtEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lv
biAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDE2IEBAIGNvbnN0IFJHQkEzMiBDb2xvcjo6dHJh
bnNwYXJlbnQ7CiBzdGF0aWMgY29uc3QgUkdCQTMyIGxpZ2h0ZW5lZEJsYWNrID0gMHhGRjU0NTQ1
NDsKIHN0YXRpYyBjb25zdCBSR0JBMzIgZGFya2VuZWRXaGl0ZSA9IDB4RkZBQkFCQUI7CiAKK3N0
YXRpYyBpbmxpbmUgdW5zaWduZWQgcHJlbXVsdGlwbGllZENoYW5uZWwodW5zaWduZWQgYywgdW5z
aWduZWQgYSkKK3sKKyAgICByZXR1cm4gZmFzdERpdmlkZUJ5MjU1KGMgKiBhICsgMjU0KTsKK30K
Kworc3RhdGljIGlubGluZSB1bnNpZ25lZCB1bnByZW11bHRpcGxpZWRDaGFubmVsKHVuc2lnbmVk
IGMsIHVuc2lnbmVkIGEpCit7CisgICAgcmV0dXJuIChmYXN0TXVsdGlwbHlCeTI1NShjKSArIGEg
LSAxKSAvIGE7Cit9CisKIFJHQkEzMiBtYWtlUkdCKGludCByLCBpbnQgZywgaW50IGIpCiB7CiAg
ICAgcmV0dXJuIDB4RkYwMDAwMDAgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihyLCAyNTUpKSA8PCAx
NiB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGcsIDI1NSkpIDw8IDggfCBzdGQ6Om1heCgwLCBzdGQ6
Om1pbihiLCAyNTUpKTsKQEAgLTU5LDYgKzY5LDE2IEBAIFJHQkEzMiBtYWtlUkdCQShpbnQgciwg
aW50IGcsIGludCBiLCBpbnQKICAgICByZXR1cm4gc3RkOjptYXgoMCwgc3RkOjptaW4oYSwgMjU1
KSkgPDwgMjQgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihyLCAyNTUpKSA8PCAxNiB8IHN0ZDo6bWF4
KDAsIHN0ZDo6bWluKGcsIDI1NSkpIDw8IDggfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihiLCAyNTUp
KTsKIH0KIAorUkdCQTMyIG1ha2VQcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBi
LCBpbnQgYSkKK3sKKyAgICByZXR1cm4gbWFrZVJHQkEocHJlbXVsdGlwbGllZENoYW5uZWwociwg
YSksIHByZW11bHRpcGxpZWRDaGFubmVsKGcsIGEpLCBwcmVtdWx0aXBsaWVkQ2hhbm5lbChiLCBh
KSwgYSk7Cit9CisKK1JHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcs
IGludCBiLCBpbnQgYSkKK3sKKyAgICByZXR1cm4gbWFrZVJHQkEodW5wcmVtdWx0aXBsaWVkQ2hh
bm5lbChyLCBhKSwgdW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBhKSwgdW5wcmVtdWx0aXBsaWVk
Q2hhbm5lbChiLCBhKSwgYSk7Cit9CisKIHN0YXRpYyBpbnQgY29sb3JGbG9hdFRvUkdCQUJ5dGUo
ZmxvYXQgZikKIHsKICAgICAvLyBXZSB1c2UgbHJvdW5kZiBhbmQgMjU1IGluc3RlYWQgb2YgbmV4
dGFmdGVyZigyNTYsIDApIHRvIG1hdGNoIENHJ3Mgcm91bmRpbmcKQEAgLTQ4MiwxNCArNTAyLDkg
QEAgdm9pZCBDb2xvcjo6Z2V0SFNWKGRvdWJsZSYgaHVlLCBkb3VibGUmIAogQ29sb3IgY29sb3JG
cm9tUHJlbXVsdGlwbGllZEFSR0IoUkdCQTMyIHBpeGVsQ29sb3IpCiB7CiAgICAgaW50IGFscGhh
ID0gYWxwaGFDaGFubmVsKHBpeGVsQ29sb3IpOwotICAgIGlmIChhbHBoYSAmJiBhbHBoYSA8IDI1
NSkgewotICAgICAgICByZXR1cm4gQ29sb3I6OmNyZWF0ZVVuY2hlY2tlZCgKLSAgICAgICAgICAg
IHJlZENoYW5uZWwocGl4ZWxDb2xvcikgKiAyNTUgLyBhbHBoYSwKLSAgICAgICAgICAgIGdyZWVu
Q2hhbm5lbChwaXhlbENvbG9yKSAqIDI1NSAvIGFscGhhLAotICAgICAgICAgICAgYmx1ZUNoYW5u
ZWwocGl4ZWxDb2xvcikgKiAyNTUgLyBhbHBoYSwKLSAgICAgICAgICAgIGFscGhhKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgcmV0dXJuIENvbG9yKHBpeGVsQ29sb3IpOworICAgIGlmIChhbHBoYSAm
JiBhbHBoYSA8IDI1NSkKKyAgICAgICAgcGl4ZWxDb2xvciA9IG1ha2VVblByZW11bHRpcGxpZWRS
R0JBKHJlZENoYW5uZWwocGl4ZWxDb2xvciksIGdyZWVuQ2hhbm5lbChwaXhlbENvbG9yKSwgYmx1
ZUNoYW5uZWwocGl4ZWxDb2xvciksIGFscGhhKTsKKyAgICByZXR1cm4gQ29sb3IocGl4ZWxDb2xv
cik7CiB9CiAKIFJHQkEzMiBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihjb25zdCBDb2xvciYg
Y29sb3IpCkBAIC00OTcsMTQgKzUxMiwxMCBAQCBSR0JBMzIgcHJlbXVsdGlwbGllZEFSR0JGcm9t
Q29sb3IoY29uc3QgCiAgICAgdW5zaWduZWQgcGl4ZWxDb2xvcjsKIAogICAgIHVuc2lnbmVkIGFs
cGhhID0gY29sb3IuYWxwaGEoKTsKLSAgICBpZiAoYWxwaGEgPCAyNTUpIHsKLSAgICAgICAgcGl4
ZWxDb2xvciA9IENvbG9yOjpjcmVhdGVVbmNoZWNrZWQoCi0gICAgICAgICAgICBmYXN0RGl2aWRl
QnkyNTUoY29sb3IucmVkKCkgKiBhbHBoYSArIDI1NCksCi0gICAgICAgICAgICBmYXN0RGl2aWRl
QnkyNTUoY29sb3IuZ3JlZW4oKSAqIGFscGhhICsgMjU0KSwKLSAgICAgICAgICAgIGZhc3REaXZp
ZGVCeTI1NShjb2xvci5ibHVlKCkgKiBhbHBoYSArIDI1NCksCi0gICAgICAgICAgICBhbHBoYSku
cmdiKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgICBwaXhlbENvbG9yID0gY29sb3IucmdiKCk7Cisg
ICAgaWYgKGFscGhhIDwgMjU1KQorICAgICAgICBwaXhlbENvbG9yID0gbWFrZVByZW11bHRpcGxp
ZWRSR0JBKGNvbG9yLnJlZCgpLCBjb2xvci5ncmVlbigpLCBjb2xvci5ibHVlKCksIGFscGhhKTsK
KyAgICBlbHNlCisgICAgICAgIHBpeGVsQ29sb3IgPSBjb2xvci5yZ2IoKTsKIAogICAgIHJldHVy
biBwaXhlbENvbG9yOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5oCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw5IEBAIHR5cGVkZWYgdW5z
aWduZWQgUkdCQTMyOyAvLyBEZXByZWNhdGVkOiAKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtl
UkdCKGludCByLCBpbnQgZywgaW50IGIpOwogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VSR0JB
KGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKIAorUkdCQTMyIG1ha2VQcmVtdWx0aXBsaWVk
UkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7CitSR0JBMzIgbWFrZVVuUHJlbXVsdGlw
bGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpOworCiBXRUJDT1JFX0VYUE9SVCBS
R0JBMzIgY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIGZsb2F0IG92ZXJyaWRl
QWxwaGEpOwogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoUkdC
QTMyIGNvbG9yLCBPcHRpb25hbDxmbG9hdD4gb3ZlcnJpZGVBbHBoYSk7CiAKQEAgLTIxOCw2ICsy
MjEsNyBAQCBDb2xvciBibGVuZChjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sCiAKIGludCBk
aWZmZXJlbmNlU3F1YXJlZChjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7CiAKK3VpbnQxNl90
IGZhc3RNdWx0aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVlKTsKIHVpbnQxNl90IGZhc3REaXZpZGVC
eTI1NSh1aW50MTZfdCk7CiAKICNpZiBVU0UoQ0cpCkBAIC0yOTAsNiArMjk0LDExIEBAIGlubGlu
ZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwKICAgICByZXR1cm4gc3RkOjptYXgo
MC5mLCBzdGQ6Om1pbigyNTUuZiwgc3RkOjpyb3VuZCh2YWx1ZSkpKTsKIH0KIAoraW5saW5lIHVp
bnQxNl90IGZhc3RNdWx0aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVlKQoreworICAgIHJldHVybiAo
dmFsdWUgPDwgOCkgLSB2YWx1ZTsKK30KKwogaW5saW5lIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1
NSh1aW50MTZfdCB2YWx1ZSkKIHsKICAgICAvLyBXaGlsZSB0aGlzIGlzIGFuIGFwcHJveGltYXRl
IGFsZ29yaXRobSBmb3IgZGl2aXNpb24gYnkgMjU1LCBpdCBnaXZlcyBwZXJmZWN0bHkgYWNjdXJh
dGUgcmVzdWx0cyBmb3IgMTYtYml0IHZhbHVlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3Iu
aCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUg
Ik5hdGl2ZUltYWdlLmgiCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCYWNraW5nU3RvcmUgeworcHVibGljOgorICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCYWNraW5nU3RvcmU+IGNyZWF0ZShjb25zdCBJbnRTaXpl
JiBzaXplLCBib29sIHByZW11bHRpcGx5QWxwaGEpCisgICAgeworICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX3VuaXF1ZTxJbWFnZUJhY2tpbmdTdG9yZT4oc2l6ZSwgcHJlbXVsdGlwbHlBbHBoYSk7
CisgICAgfQorCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJhY2tpbmdTdG9yZT4g
Y3JlYXRlKGNvbnN0IEltYWdlQmFja2luZ1N0b3JlJiBvdGhlcikKKyAgICB7CisgICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPEltYWdlQmFja2luZ1N0b3JlPihvdGhlcik7CisgICAgfQor
CisgICAgSW1hZ2VCYWNraW5nU3RvcmUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0
aXBseUFscGhhID0gdHJ1ZSkKKyAgICAgICAgOiBtX3ByZW11bHRpcGx5QWxwaGEocHJlbXVsdGlw
bHlBbHBoYSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghc2l6ZS5pc0VtcHR5KCkpOworICAgICAg
ICBzZXRTaXplKHNpemUpOworICAgIH0KKworICAgIEltYWdlQmFja2luZ1N0b3JlKGNvbnN0IElt
YWdlQmFja2luZ1N0b3JlJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICh0aGlzID09ICZvdGhl
cikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX3BpeGVscyA9IG90aGVyLm1fcGl4
ZWxzOworICAgICAgICBtX3BpeGVsc1B0ciA9IG1fcGl4ZWxzLmRhdGEoKTsKKyAgICAgICAgbV9z
aXplID0gb3RoZXIubV9zaXplOworICAgICAgICBtX3ByZW11bHRpcGx5QWxwaGEgPSBvdGhlci5t
X3ByZW11bHRpcGx5QWxwaGE7CisgICAgfQorCisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2UoKSBj
b25zdDsKKworICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQorICAgIHsKKyAg
ICAgICAgaWYgKCFtX3BpeGVscy50cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZS5hcmVhKCkpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIG1fcGl4ZWxzLnJlc2l6ZShzaXplLmFy
ZWEoKSk7CisgICAgICAgIG1fcGl4ZWxzUHRyID0gbV9waXhlbHMuZGF0YSgpOworICAgICAgICBt
X3NpemUgPSBzaXplOworICAgICAgICBtX2ZyYW1lUmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwg
bV9zaXplKTsKKyAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgZnJhbWVSZWN0KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKCFtX3NpemUuaXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKGluQm91
bmRzKGZyYW1lUmVjdCkpOworICAgICAgICBtX2ZyYW1lUmVjdCA9IGZyYW1lUmVjdDsKKyAgICB9
CisKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBJbnRS
ZWN0IGZyYW1lUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0OyB9CisKKyAgICB2b2lk
IGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1lbXNldChtX3BpeGVsc1B0ciwgMCwgbV9zaXplLmFy
ZWEoKSAqIHNpemVvZihSR0JBMzIpKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyUmVjdChjb25z
dCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHJlY3QuaXNFbXB0eSgpIHx8ICFp
bkJvdW5kcyhyZWN0KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzaXplX3QgcmVj
dFdpZHRoSW5CeXRlcyA9IHJlY3Qud2lkdGgoKSAqIHNpemVvZihSR0JBMzIpOworICAgICAgICBS
R0JBMzIqIHN0YXJ0ID0gYXQocmVjdC54KCksIHJlY3QueSgpKTsKKyAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCByZWN0LmhlaWdodCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1lbXNldChzdGFy
dCwgMCwgcmVjdFdpZHRoSW5CeXRlcyk7CisgICAgICAgICAgICBzdGFydCArPSBtX3NpemUud2lk
dGgoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgcmVwZWF0Rmlyc3RSb3coY29uc3Qg
SW50UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSB8fCAhaW5C
b3VuZHMocmVjdCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc2l6ZV90IHJlY3RX
aWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkgKiBzaXplb2YoUkdCQTMyKTsKKyAgICAgICAgUkdC
QTMyKiBzcmMgPSBhdChyZWN0LngoKSwgcmVjdC55KCkpOworICAgICAgICBSR0JBMzIqIGRlc3Qg
PSBzcmMgKyBtX3NpemUud2lkdGgoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCByZWN0
LmhlaWdodCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1lbWNweShkZXN0LCBzcmMsIHJlY3RXaWR0
aEluQnl0ZXMpOworICAgICAgICAgICAgZGVzdCArPSBtX3NpemUud2lkdGgoKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIFJHQkEzMiogYXQoaW50IHgsIGludCB5KSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fcGl4ZWxzUHRyICsgeSAqIG1fc2l6ZS53aWR0aCgpICsgeDsKKyAgICB9
CisKKyAgICB2b2lkIHNldFJHQkEoaW50IHgsIGludCB5LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBn
LCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgc2V0UkdCQShhdCh4LCB5
KSwgciwgZywgYiwgYSk7CisgICAgfQorCisgICAgdm9pZCBzZXRSR0JBKFJHQkEzMiogZGVzdCwg
dW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKKyAgICB7Cisg
ICAgICAgIGlmIChtX3ByZW11bHRpcGx5QWxwaGEgJiYgIWEpCisgICAgICAgICAgICAqZGVzdCA9
IDA7CisgICAgICAgIGVsc2UgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAmJiBhIDwgMjU1KQorICAg
ICAgICAgICAgKmRlc3QgPSBtYWtlUHJlbXVsdGlwbGllZFJHQkEociwgZywgYiwgYSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICpkZXN0ID0gbWFrZVJHQkEociwgZywgYiwgYSk7CisgICAg
fQorCisgICAgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVk
IGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAgeworICAgICAgICBpZiAoIWEpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKGEgPj0gMjU1IHx8ICFhbHBoYUNoYW5uZWwo
KmRlc3QpKSB7CisgICAgICAgICAgICBzZXRSR0JBKGRlc3QsIHIsIGcsIGIsIGEpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxw
aGEpCisgICAgICAgICAgICAqZGVzdCA9IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShyZWRDaGFubmVs
KCpkZXN0KSwgZ3JlZW5DaGFubmVsKCpkZXN0KSwgYmx1ZUNoYW5uZWwoKmRlc3QpLCBhbHBoYUNo
YW5uZWwoKmRlc3QpKTsKKworICAgICAgICB1bnNpZ25lZCBkID0gMjU1IC0gYTsKKworICAgICAg
ICByID0gZmFzdERpdmlkZUJ5MjU1KHIgKiBhICsgcmVkQ2hhbm5lbCgqZGVzdCkgKiBkKTsKKyAg
ICAgICAgZyA9IGZhc3REaXZpZGVCeTI1NShnICogYSArIGdyZWVuQ2hhbm5lbCgqZGVzdCkgKiBk
KTsKKyAgICAgICAgYiA9IGZhc3REaXZpZGVCeTI1NShiICogYSArIGJsdWVDaGFubmVsKCpkZXN0
KSAqIGQpOworICAgICAgICBhICs9IGZhc3REaXZpZGVCeTI1NShkICogYWxwaGFDaGFubmVsKCpk
ZXN0KSk7CisKKyAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSkKKyAgICAgICAgICAgICpk
ZXN0ID0gbWFrZVJHQkEociwgZywgYiwgYSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpk
ZXN0ID0gbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEociwgZywgYiwgYSk7CisgICAgfQorCisgICAg
Ym9vbCBpbkJvdW5kcyhjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXplKS5jb250YWlucyhyZWN0KTsKKyAgICB9
CisKKyAgICBzdGF0aWMgYm9vbCBpc092ZXJTaXplKGNvbnN0IEludFNpemUmIHNpemUpCisgICAg
eworICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIE1heFBpeGVscyA9ICgoMSA8PCAy
OSkgLSAxKTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHBpeGVscyA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6ZS53aWR0aCgpKSAqIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmcgbG9uZz4oc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIHJldHVybiBwaXhlbHMgPiBNYXhQ
aXhlbHM7CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxSR0JBMzI+IG1fcGl4ZWxzOwor
ICAgIFJHQkEzMiogbV9waXhlbHNQdHIgeyBudWxscHRyIH07CisgICAgSW50U2l6ZSBtX3NpemU7
CisgICAgSW50UmVjdCBtX2ZyYW1lUmVjdDsgLy8gVGhpcyB3aWxsIGFsd2F5cyBqdXN0IGJlIHRo
ZSBlbnRpcmUgYnVmZmVyIGV4Y2VwdCBmb3IgR0lGIGFuZCBQTkcgZnJhbWVzCisgICAgYm9vbCBt
X3ByZW11bHRpcGx5QWxwaGEgeyB0cnVlIH07Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAkocmV2
aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0
aXZlSW1hZ2VDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEwICs0NywxMCBAQCBJbnRTaXpl
IG5hdGl2ZUltYWdlU2l6ZShjb25zdCBOYXRpdmVJbWFnCiAgICAgcmV0dXJuIGltYWdlID8gSW50
U2l6ZShDR0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0KCkpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdl
LmdldCgpKSkgOiBJbnRTaXplKCk7CiB9CiAKLWJvb2wgbmF0aXZlSW1hZ2VIYXNBbHBoYShjb25z
dCBOYXRpdmVJbWFnZVB0ciYpCitib29sIG5hdGl2ZUltYWdlSGFzQWxwaGEoY29uc3QgTmF0aXZl
SW1hZ2VQdHImIGltYWdlKQogewotICAgIC8vIEZJWE1FOiBBbnN3ZXIgY29ycmVjdGx5IHRoZSBx
dWVzdGlvbjogZG9lcyB0aGUgQ0dJbWFnZVJlZiBoYXZlIGFscGhhIGNoYW5ubmVsPwotICAgIHJl
dHVybiB0cnVlOworICAgIENHSW1hZ2VBbHBoYUluZm8gaW5mbyA9IENHSW1hZ2VHZXRBbHBoYUlu
Zm8oaW1hZ2UuZ2V0KCkpOworICAgIHJldHVybiAoaW5mbyA+PSBrQ0dJbWFnZUFscGhhUHJlbXVs
dGlwbGllZExhc3QpICYmIChpbmZvIDw9IGtDR0ltYWdlQWxwaGFGaXJzdCk7CiB9CiAKIENvbG9y
IG5hdGl2ZUltYWdlU2luZ2xlUGl4ZWxTb2xpZENvbG9yKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBp
bWFnZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdl
RGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQxLDggKzE0MSw4IEBAIEltYWdlRnJhbWUmIEltYWdlRnJhbWU6Om9wZXJhdG9y
PShjb25zdCAKICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCiAgICAgICAgIHJldHVybiAqdGhpczsK
IAotICAgIGNvcHlCaXRtYXBEYXRhKG90aGVyKTsKLSAgICBzZXRPcmlnaW5hbEZyYW1lUmVjdChv
dGhlci5vcmlnaW5hbEZyYW1lUmVjdCgpKTsKKyAgICBzZXRCYWNraW5nU3RvcmUob3RoZXIuYmFj
a2luZ1N0b3JlKCkpOworICAgIHNldEhhc0FscGhhKG90aGVyLm1faGFzQWxwaGEpOwogICAgIHNl
dFN0YXR1cyhvdGhlci5zdGF0dXMoKSk7CiAgICAgc2V0RHVyYXRpb24ob3RoZXIuZHVyYXRpb24o
KSk7CiAgICAgc2V0RGlzcG9zYWxNZXRob2Qob3RoZXIuZGlzcG9zYWxNZXRob2QoKSk7CkBAIC0x
NTIsOCArMTUyLDcgQEAgSW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0IAog
CiB2b2lkIEltYWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKCkKIHsKLSAgICBtX2JhY2tpbmdTdG9y
ZS5jbGVhcigpOwotICAgIG1fYnl0ZXMgPSAwOworICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0
cjsKICAgICBtX3N0YXR1cyA9IEZyYW1lRW1wdHk7CiAgICAgLy8gTk9URTogRG8gbm90IHJlc2V0
IG90aGVyIG1lbWJlcnMgaGVyZTsgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKCkgY2FsbHMgdGhpcwog
ICAgIC8vIHRvIGZyZWUgdGhlIGJpdG1hcCBkYXRhLCBidXQgb3RoZXIgZnVuY3Rpb25zIGxpa2Ug
aW5pdEZyYW1lQnVmZmVyKCkgYW5kCkBAIC0xNjMsNTEgKzE2MiwzMSBAQCB2b2lkIEltYWdlRnJh
bWU6OmNsZWFyUGl4ZWxEYXRhKCkKIAogdm9pZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0
YSgpCiB7Ci0gICAgbWVtc2V0KG1fYnl0ZXMsIDAsIG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhl
aWdodCgpICogc2l6ZW9mKFBpeGVsRGF0YSkpOworICAgIG1fYmFja2luZ1N0b3JlLT5jbGVhcigp
OwogICAgIG1faGFzQWxwaGEgPSB0cnVlOwogfQogCiB2b2lkIEltYWdlRnJhbWU6Onplcm9GaWxs
RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgQVNTRVJUKEludFJlY3QoSW50
UG9pbnQoKSwgbV9zaXplKS5jb250YWlucyhyZWN0KSk7Ci0KICAgICBpZiAocmVjdC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNpemVfdCByZWN0V2lkdGhJbkJ5dGVzID0gcmVj
dC53aWR0aCgpICogc2l6ZW9mKFBpeGVsRGF0YSk7Ci0gICAgUGl4ZWxEYXRhKiBzdGFydCA9IG1f
Ynl0ZXMgKyAocmVjdC55KCkgKiB3aWR0aCgpKSArIHJlY3QueCgpOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgcmVjdC5oZWlnaHQoKTsgKytpKSB7Ci0gICAgICAgIG1lbXNldChzdGFydCwgMCwg
cmVjdFdpZHRoSW5CeXRlcyk7Ci0gICAgICAgIHN0YXJ0ICs9IHdpZHRoKCk7Ci0gICAgfQotCisg
ICAgbV9iYWNraW5nU3RvcmUtPmNsZWFyUmVjdChyZWN0KTsKICAgICBzZXRIYXNBbHBoYSh0cnVl
KTsKIH0KIAotYm9vbCBJbWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YShjb25zdCBJbWFnZUZyYW1l
JiBvdGhlcikKK3ZvaWQgSW1hZ2VGcmFtZTo6c2V0QmFja2luZ1N0b3JlKGNvbnN0IEltYWdlQmFj
a2luZ1N0b3JlKiBiYWNraW5nU3RvcmUpCiB7Ci0gICAgaWYgKHRoaXMgPT0gJm90aGVyKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIG1fYmFja2luZ1N0b3JlID0gb3RoZXIubV9iYWNraW5n
U3RvcmU7Ci0gICAgbV9ieXRlcyA9IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsKLSAgICBtX3NpemUg
PSBvdGhlci5tX3NpemU7Ci0gICAgc2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgaWYgKG1fYmFja2luZ1N0b3JlICYmIGJhY2tpbmdTdG9yZSA9PSBt
X2JhY2tpbmdTdG9yZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fYmFja2luZ1N0b3Jl
ID0gYmFja2luZ1N0b3JlID8gSW1hZ2VCYWNraW5nU3RvcmU6OmNyZWF0ZSgqYmFja2luZ1N0b3Jl
KSA6IG51bGxwdHI7CiB9CiAKLWJvb2wgSW1hZ2VGcmFtZTo6c2V0U2l6ZShpbnQgbmV3V2lkdGgs
IGludCBuZXdIZWlnaHQpCitib29sIEltYWdlRnJhbWU6OnNldFNpemUoY29uc3QgSW50U2l6ZSYg
c2l6ZSkKIHsKLSAgICBBU1NFUlQoIXdpZHRoKCkgJiYgIWhlaWdodCgpKTsKLSAgICBzaXplX3Qg
YmFja2luZ1N0b3JlU2l6ZSA9IG5ld1dpZHRoICogbmV3SGVpZ2h0OwotICAgIGlmICghbV9iYWNr
aW5nU3RvcmUudHJ5UmVzZXJ2ZUNhcGFjaXR5KGJhY2tpbmdTdG9yZVNpemUpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgbV9iYWNraW5nU3RvcmUucmVzaXplKGJhY2tpbmdTdG9yZVNpemUp
OwotICAgIG1fYnl0ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7Ci0gICAgbV9zaXplID0gSW50
U2l6ZShuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKLQotICAgIHplcm9GaWxsUGl4ZWxEYXRhKCk7Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgQVNTRVJUKCFtX2JhY2tpbmdTdG9yZSk7CisgICAgbV9iYWNr
aW5nU3RvcmUgPSBJbWFnZUJhY2tpbmdTdG9yZTo6Y3JlYXRlKHNpemUsIG1fcHJlbXVsdGlwbHlB
bHBoYSk7CisgICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlOwogfQogCiBib29sIEltYWdlRnJhbWU6
Omhhc0FscGhhKCkgY29uc3QKQEAgLTIyMCw2ICsxOTksMTIgQEAgdm9pZCBJbWFnZUZyYW1lOjpz
ZXRIYXNBbHBoYShib29sIGFscGhhKQogICAgIG1faGFzQWxwaGEgPSBhbHBoYTsKIH0KIAordm9p
ZCBJbWFnZUZyYW1lOjpzZXRPcmlnaW5hbEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiBmcmFtZVJl
Y3QpCit7CisgICAgaWYgKG1fYmFja2luZ1N0b3JlKQorICAgICAgICBtX2JhY2tpbmdTdG9yZS0+
c2V0RnJhbWVSZWN0KGZyYW1lUmVjdCk7Cit9CisKIHZvaWQgSW1hZ2VGcmFtZTo6c2V0U3RhdHVz
KEZyYW1lU3RhdHVzIHN0YXR1cykKIHsKICAgICBtX3N0YXR1cyA9IHN0YXR1czsKQEAgLTI4Niw3
ICsyNzEsNyBAQCB1bnNpZ25lZCBJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4CiAgICAg
aWYgKG1fZnJhbWVCdWZmZXJDYWNoZS5zaXplKCkgPD0gaW5kZXgpCiAgICAgICAgIHJldHVybiAw
OwogICAgIC8vIEZJWE1FOiBVc2UgdGhlIGRpbWVuc2lvbiBvZiB0aGUgcmVxdWVzdGVkIGZyYW1l
LgotICAgIHJldHVybiBtX3NpemUuYXJlYSgpICogc2l6ZW9mKEltYWdlRnJhbWU6OlBpeGVsRGF0
YSk7CisgICAgcmV0dXJuIG1fc2l6ZS5hcmVhKCkgKiBzaXplb2YoUkdCQTMyKTsKIH0KIAogZmxv
YXQgSW1hZ2VEZWNvZGVyOjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFn
ZURlY29kZXIuaAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4
LDEwIEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUg
IkltYWdlQmFja2luZ1N0b3JlLmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNpbmNsdWRl
ICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU2Ny
ZWVuLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlv
bnMuaD4KQEAgLTU3LDcgKzU5LDYgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+
OwogICAgICAgICAgICAgRGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzICAvLyBDbGVhciBmcmFtZSB0
byBwcmV2aW91cyBmcmFtZWJ1ZmZlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBjb250ZW50cwogICAgICAgICB9OwotICAgICAgICB0eXBlZGVmIHVuc2lnbmVkIFBp
eGVsRGF0YTsKIAogICAgICAgICBJbWFnZUZyYW1lKCk7CiAKQEAgLTcyLDE1MiArNzMsNjkgQEAg
dXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICB2b2lkIHplcm9GaWxs
UGl4ZWxEYXRhKCk7CiAgICAgICAgIHZvaWQgemVyb0ZpbGxGcmFtZVJlY3QoY29uc3QgSW50UmVj
dCYpOwogCi0gICAgICAgIC8vIE1ha2VzIHRoaXMgZnJhbWUgaGF2ZSBhbiBpbmRlcGVuZGVudCBj
b3B5IG9mIHRoZSBwcm92aWRlZCBpbWFnZSdzCi0gICAgICAgIC8vIHBpeGVsIGRhdGEsIHNvIHRo
YXQgbW9kaWZpY2F0aW9ucyBpbiBvbmUgZnJhbWUgYXJlIG5vdCByZWZsZWN0ZWQgaW4KLSAgICAg
ICAgLy8gdGhlIG90aGVyLiAgUmV0dXJucyB3aGV0aGVyIHRoZSBjb3B5IHN1Y2NlZWRlZC4KLSAg
ICAgICAgYm9vbCBjb3B5Qml0bWFwRGF0YShjb25zdCBJbWFnZUZyYW1lJik7Ci0KICAgICAgICAg
Ly8gQ29waWVzIHRoZSBwaXhlbCBkYXRhIGF0IFsoc3RhcnRYLCBzdGFydFkpLCAoZW5kWCwgc3Rh
cnRZKSkgdG8gdGhlCiAgICAgICAgIC8vIHNhbWUgWC1jb29yZGluYXRlcyBvbiBlYWNoIHN1YnNl
cXVlbnQgcm93IHVwIHRvIGJ1dCBub3QgaW5jbHVkaW5nCiAgICAgICAgIC8vIGVuZFkuCiAgICAg
ICAgIHZvaWQgY29weVJvd05UaW1lcyhpbnQgc3RhcnRYLCBpbnQgZW5kWCwgaW50IHN0YXJ0WSwg
aW50IGVuZFkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChzdGFydFggPCB3aWR0aCgp
KTsKLSAgICAgICAgICAgIEFTU0VSVChlbmRYIDw9IHdpZHRoKCkpOwotICAgICAgICAgICAgQVNT
RVJUKHN0YXJ0WSA8IGhlaWdodCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChlbmRZIDw9IGhlaWdo
dCgpKTsKLSAgICAgICAgICAgIGNvbnN0IGludCByb3dCeXRlcyA9IChlbmRYIC0gc3RhcnRYKSAq
IHNpemVvZihQaXhlbERhdGEpOwotICAgICAgICAgICAgY29uc3QgUGl4ZWxEYXRhKiBjb25zdCBz
dGFydEFkZHIgPSBnZXRBZGRyKHN0YXJ0WCwgc3RhcnRZKTsKLSAgICAgICAgICAgIGZvciAoaW50
IGRlc3RZID0gc3RhcnRZICsgMTsgZGVzdFkgPCBlbmRZOyArK2Rlc3RZKQotICAgICAgICAgICAg
ICAgIG1lbWNweShnZXRBZGRyKHN0YXJ0WCwgZGVzdFkpLCBzdGFydEFkZHIsIHJvd0J5dGVzKTsK
KyAgICAgICAgICAgIG1fYmFja2luZ1N0b3JlLT5yZXBlYXRGaXJzdFJvdyhJbnRSZWN0KHN0YXJ0
WCwgc3RhcnRZLCBlbmRYIC1zdGFydFggLCBlbmRZIC0gc3RhcnRZKSk7CiAgICAgICAgIH0KIAog
ICAgICAgICAvLyBBbGxvY2F0ZXMgc3BhY2UgZm9yIHRoZSBwaXhlbCBkYXRhLiAgTXVzdCBiZSBj
YWxsZWQgYmVmb3JlIGFueSBwaXhlbHMKICAgICAgICAgLy8gYXJlIHdyaXR0ZW4uICBNdXN0IG9u
bHkgYmUgY2FsbGVkIG9uY2UuICBSZXR1cm5zIHdoZXRoZXIgYWxsb2NhdGlvbgogICAgICAgICAv
LyBzdWNjZWVkZWQuCi0gICAgICAgIGJvb2wgc2V0U2l6ZShpbnQgbmV3V2lkdGgsIGludCBuZXdI
ZWlnaHQpOworICAgICAgICBib29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYpOworICAgICAgICBJ
bnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmdTdG9yZS0+c2l6ZSgpOyB9CiAK
ICAgICAgICAgLy8gUmV0dXJucyBhIGNhbGxlci1vd25lZCBwb2ludGVyIHRvIHRoZSB1bmRlcmx5
aW5nIG5hdGl2ZSBpbWFnZSBkYXRhLgogICAgICAgICAvLyAoQWN0dWFsIHVzZTogVGhpcyBwb2lu
dGVyIHdpbGwgYmUgb3duZWQgYnkgQml0bWFwSW1hZ2UgYW5kIGZyZWVkIGluCiAgICAgICAgIC8v
IEZyYW1lRGF0YTo6Y2xlYXIoKSkuCi0gICAgICAgIE5hdGl2ZUltYWdlUHRyIGFzTmV3TmF0aXZl
SW1hZ2UoKSBjb25zdDsKKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIgYXNOZXdOYXRpdmVJbWFnZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlLT5pbWFnZSgpOyB9CiAKKyAgICAgICAgaW5s
aW5lIEltYWdlQmFja2luZ1N0b3JlKiBiYWNraW5nU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX2Jh
Y2tpbmdTdG9yZSA/IG1fYmFja2luZ1N0b3JlLmdldCgpIDogbnVsbHB0cjsgfQorICAgICAgICBp
bmxpbmUgYm9vbCBoYXNCYWNraW5nU3RvcmUoKSBjb25zdCB7IHJldHVybiBiYWNraW5nU3RvcmUo
KTsgfQorICAgICAgICAKICAgICAgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0OwotICAgICAgICBj
b25zdCBJbnRSZWN0JiBvcmlnaW5hbEZyYW1lUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2lu
YWxGcmFtZVJlY3Q7IH0KKyAgICAgICAgSW50UmVjdCBvcmlnaW5hbEZyYW1lUmVjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlID8gbV9iYWNraW5nU3RvcmUtPmZyYW1lUmVjdCgpIDog
SW50UmVjdCgpOyB9CiAgICAgICAgIEZyYW1lU3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdHVzOyB9CiAgICAgICAgIHVuc2lnbmVkIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9kdXJhdGlvbjsgfQogICAgICAgICBGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9k
KCkgY29uc3QgeyByZXR1cm4gbV9kaXNwb3NhbE1ldGhvZDsgfQogICAgICAgICBib29sIHByZW11
bHRpcGx5QWxwaGEoKSBjb25zdCB7IHJldHVybiBtX3ByZW11bHRpcGx5QWxwaGE7IH0KIAorICAg
ICAgICB2b2lkIHNldEJhY2tpbmdTdG9yZShjb25zdCBJbWFnZUJhY2tpbmdTdG9yZSopOworICAg
ICAgICAKICAgICAgICAgdm9pZCBzZXRIYXNBbHBoYShib29sIGFscGhhKTsKLSAgICAgICAgdm9p
ZCBzZXRPcmlnaW5hbEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiByKSB7IG1fb3JpZ2luYWxGcmFt
ZVJlY3QgPSByOyB9CisgICAgICAgIHZvaWQgc2V0T3JpZ2luYWxGcmFtZVJlY3QoY29uc3QgSW50
UmVjdCYpOwogICAgICAgICB2b2lkIHNldFN0YXR1cyhGcmFtZVN0YXR1cyBzdGF0dXMpOwogICAg
ICAgICB2b2lkIHNldER1cmF0aW9uKHVuc2lnbmVkIGR1cmF0aW9uKSB7IG1fZHVyYXRpb24gPSBk
dXJhdGlvbjsgfQogICAgICAgICB2b2lkIHNldERpc3Bvc2FsTWV0aG9kKEZyYW1lRGlzcG9zYWxN
ZXRob2QgbWV0aG9kKSB7IG1fZGlzcG9zYWxNZXRob2QgPSBtZXRob2Q7IH0KICAgICAgICAgdm9p
ZCBzZXRQcmVtdWx0aXBseUFscGhhKGJvb2wgcHJlbXVsdGlwbHlBbHBoYSkgeyBtX3ByZW11bHRp
cGx5QWxwaGEgPSBwcmVtdWx0aXBseUFscGhhOyB9CiAKLSAgICAgICAgaW5saW5lIHZvaWQgc2V0
UkdCQShpbnQgeCwgaW50IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVu
c2lnbmVkIGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNldFJHQkEoZ2V0QWRkcih4LCB5KSwg
ciwgZywgYiwgYSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmxpbmUgUGl4ZWxEYXRhKiBnZXRB
ZGRyKGludCB4LCBpbnQgeSkKKyAgICAgICAgaW5saW5lIFJHQkEzMiogZ2V0QWRkcihpbnQgeCwg
aW50IHkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2J5dGVzICsgKHkgKiB3aWR0
aCgpKSArIHg7CisgICAgICAgICAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUtPmF0KHgsIHkpOwog
ICAgICAgICB9CiAKLSAgICAgICAgaW5saW5lIGJvb2wgaGFzUGl4ZWxEYXRhKCkgY29uc3QKLSAg
ICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXM7Ci0gICAgICAgIH0KLQotICAgICAg
ICAvLyBVc2UgZml4IHBvaW50IG11bHRpcGxpZXIgaW5zdGVhZCBvZiBpbnRlZ2VyIGRpdmlzaW9u
IG9yIGZsb2F0aW5nIHBvaW50IG1hdGguCi0gICAgICAgIC8vIFRoaXMgbXVsdGlwbGVyIHByb2R1
Y2VzIGV4YWN0bHkgdGhlIHNhbWUgcmVzdWx0IGZvciBhbGwgdmFsdWVzIGluIHJhbmdlIDAgLSAy
NTUuCi0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmaXhQb2ludFNoaWZ0ID0gMjQ7Ci0g
ICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmaXhQb2ludE11bHQgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oMS4wIC8gMjU1LjAgKiAoMSA8PCBmaXhQb2ludFNoaWZ0KSkgKyAxOwotICAgICAg
ICAvLyBNdWx0aXBsaWVzIHVuc2lnbmVkIHZhbHVlIGJ5IGZpeHBvaW50IHZhbHVlIGFuZCBjb252
ZXJ0cyBiYWNrIHRvIHVuc2lnbmVkLgotICAgICAgICBzdGF0aWMgdW5zaWduZWQgZml4UG9pbnRV
bnNpZ25lZE11bHRpcGx5KHVuc2lnbmVkIGZpeGVkLCB1bnNpZ25lZCB2KQorICAgICAgICBpbmxp
bmUgdm9pZCBzZXRSR0JBKGludCB4LCBpbnQgeSwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5z
aWduZWQgYiwgdW5zaWduZWQgYSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuICAoZml4
ZWQgKiB2KSA+PiBmaXhQb2ludFNoaWZ0OworICAgICAgICAgICAgbV9iYWNraW5nU3RvcmUtPnNl
dFJHQkEoeCwgeSwgciwgZywgYiwgYSk7CiAgICAgICAgIH0KIAotICAgICAgICBpbmxpbmUgdm9p
ZCBzZXRSR0JBKFBpeGVsRGF0YSogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWdu
ZWQgYiwgdW5zaWduZWQgYSkKKyAgICAgICAgaW5saW5lIHZvaWQgc2V0UkdCQShSR0JBMzIqIGRl
c3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChtX3ByZW11bHRpcGx5QWxwaGEgJiYgYSA8IDI1NSkgewot
ICAgICAgICAgICAgICAgIGlmICghYSkgewotICAgICAgICAgICAgICAgICAgICAqZGVzdCA9IDA7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBhbHBoYU11bHQgPSBhICogZml4UG9pbnRNdWx0OwotICAgICAg
ICAgICAgICAgIHIgPSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkociwgYWxwaGFNdWx0KTsKLSAg
ICAgICAgICAgICAgICBnID0gZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KGcsIGFscGhhTXVsdCk7
Ci0gICAgICAgICAgICAgICAgYiA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShiLCBhbHBoYU11
bHQpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3QgPSAoYSA8PCAyNCB8IHIgPDwg
MTYgfCBnIDw8IDggfCBiKTsKKyAgICAgICAgICAgIG1fYmFja2luZ1N0b3JlLT5zZXRSR0JBKGRl
c3QsIHIsIGcsIGIsIGEpOwogICAgICAgICB9CiAKICNpZiBFTkFCTEUoQVBORykKLSAgICAgICAg
c3RhdGljIGlubGluZSB1bnNpZ25lZCBkaXZpZGUyNTUodW5zaWduZWQgYSkKKyAgICAgICAgaW5s
aW5lIHZvaWQgb3ZlclJHQkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1
bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKGEg
KyAoYSA+PiA4KSArIDEpID4+IDg7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmxpbmUgdm9pZCBv
dmVyUkdCQShQaXhlbERhdGEqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVk
IGIsIHVuc2lnbmVkIGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICghYSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIGlmIChhIDwgMjU1KSB7Ci0gICAgICAgICAg
ICAgICAgdW5zaWduZWQgYURlc3QgPSAoKCpkZXN0KSA+PiAyNCkgJiAyNTU7Ci0gICAgICAgICAg
ICAgICAgaWYgKGFEZXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJEZXN0ID0g
KCgqZGVzdCkgPj4gMTYpICYgMjU1OwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBnRGVz
dCA9ICgoKmRlc3QpID4+IDgpICYgMjU1OwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBi
RGVzdCA9ICgqZGVzdCkgJiAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFBdXgg
PSAyNTUgLSBhOwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgckRlc3QgPSBkaXZpZGUyNTUockRlc3QgKiBhRGVz
dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnRGVzdCA9IGRpdmlkZTI1NShnRGVzdCAqIGFE
ZXN0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJEZXN0ID0gZGl2aWRlMjU1KGJEZXN0ICog
YURlc3QpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBk
aXZpZGUyNTUociAqIGEgKyByRGVzdCAqIGFBdXgpOwotICAgICAgICAgICAgICAgICAgICBnID0g
ZGl2aWRlMjU1KGcgKiBhICsgZ0Rlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAgICAgICAgYiA9
IGRpdmlkZTI1NShiICogYSArIGJEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAgIGEg
Kz0gZGl2aWRlMjU1KGFEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9w
cmVtdWx0aXBseUFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByID0gKHIgKiAyNTUg
KyBhIC0gMSkgLyBhOwotICAgICAgICAgICAgICAgICAgICAgICAgZyA9IChnICogMjU1ICsgYSAt
IDEpIC8gYTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGIgPSAoYiAqIDI1NSArIGEgLSAxKSAv
IGE7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1f
cHJlbXVsdGlwbHlBbHBoYSkgewotICAgICAgICAgICAgICAgICAgICByID0gZGl2aWRlMjU1KHIg
KiBhKTsKLSAgICAgICAgICAgICAgICAgICAgZyA9IGRpdmlkZTI1NShnICogYSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGIgPSBkaXZpZGUyNTUoYiAqIGEpOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICpkZXN0ID0gKGEgPDwgMjQgfCByIDw8IDE2IHwgZyA8
PCA4IHwgYik7CisgICAgICAgICAgICBtX2JhY2tpbmdTdG9yZS0+b3ZlclJHQkEoZGVzdCwgciwg
ZywgYiwgYSk7CiAgICAgICAgIH0KICNlbmRpZgogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgaW50
IHdpZHRoKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fc2l6ZS53aWR0
aCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBtX3NpemUuaGVpZ2h0KCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBWZWN0b3I8UGl4ZWxEYXRhPiBtX2JhY2tpbmdTdG9yZTsKLSAgICAgICAgUGl4ZWxEYXRhKiBt
X2J5dGVzOyAvLyBUaGUgbWVtb3J5IGlzIGJhY2tlZCBieSBtX2JhY2tpbmdTdG9yZS4KLSAgICAg
ICAgSW50U2l6ZSBtX3NpemU7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJhY2tpbmdT
dG9yZT4gbV9iYWNraW5nU3RvcmU7CiAgICAgICAgIGJvb2wgbV9oYXNBbHBoYTsKLSAgICAgICAg
SW50UmVjdCBtX29yaWdpbmFsRnJhbWVSZWN0OyAvLyBUaGlzIHdpbGwgYWx3YXlzIGp1c3QgYmUg
dGhlIGVudGlyZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ1ZmZl
ciBleGNlcHQgZm9yIEdJRiBmcmFtZXMgd2hvc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBvcmlnaW5hbCByZWN0IHdhcyBzbWFsbGVyIHRoYW4gdGhlCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3ZlcmFsbCBpbWFnZSBzaXplLgogICAg
ICAgICBGcmFtZVN0YXR1cyBtX3N0YXR1czsKICAgICAgICAgdW5zaWduZWQgbV9kdXJhdGlvbjsK
ICAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBtX2Rpc3Bvc2FsTWV0aG9kOwpAQCAtMjg3LDEx
ICsyMDUsMTEgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogCiAgICAgICAg
IC8vIFJldHVybnMgd2hldGhlciB0aGUgc2l6ZSBpcyBsZWdhbCAoaS5lLiBub3QgZ29pbmcgdG8g
cmVzdWx0IGluCiAgICAgICAgIC8vIG92ZXJmbG93IGVsc2V3aGVyZSkuICBJZiBub3QsIG1hcmtz
IGRlY29kaW5nIGFzIGZhaWxlZC4KLSAgICAgICAgdmlydHVhbCBib29sIHNldFNpemUodW5zaWdu
ZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKKyAgICAgICAgdmlydHVhbCBib29sIHNldFNpemUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKGlzT3ZlclNp
emUod2lkdGgsIGhlaWdodCkpCisgICAgICAgICAgICBpZiAoSW1hZ2VCYWNraW5nU3RvcmU6Omlz
T3ZlclNpemUoc2l6ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwotICAg
ICAgICAgICAgbV9zaXplID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgICAgIG1f
c2l6ZSA9IHNpemU7CiAgICAgICAgICAgICBtX3NpemVBdmFpbGFibGUgPSB0cnVlOwogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTM4NiwxNSArMzA0LDYgQEAgdXNpbmcg
Q29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICBJbWFnZU9yaWVudGF0aW9uIG1f
b3JpZW50YXRpb247CiAKICAgICBwcml2YXRlOgotICAgICAgICAvLyBTb21lIGNvZGUgcGF0aHMg
Y29tcHV0ZSB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UgYXMgIndpZHRoICogaGVpZ2h0ICogNCIKLSAg
ICAgICAgLy8gYW5kIHJldHVybiBpdCBhcyBhIChzaWduZWQpIGludC4gIEF2b2lkIG92ZXJmbG93
LgotICAgICAgICBzdGF0aWMgYm9vbCBpc092ZXJTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25l
ZCBoZWlnaHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB0b3Rh
bF9zaXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPih3aWR0aCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc3RhdGljX2Nhc3Q8dW5zaWduZWQg
bG9uZyBsb25nPihoZWlnaHQpOwotICAgICAgICAgICAgcmV0dXJuIHRvdGFsX3NpemUgPiAoKDEg
PDwgMjkpIC0gMSk7Ci0gICAgICAgIH0KLQogICAgICAgICBJbnRTaXplIG1fc2l6ZTsKICAgICAg
ICAgYm9vbCBtX3NpemVBdmFpbGFibGUgeyBmYWxzZSB9OwogI2lmIEVOQUJMRShJTUFHRV9ERUNP
REVSX0RPV05fU0FNUExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAJKHJldmlz
aW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2Jt
cC9CTVBJbWFnZVJlYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgYm9v
bCBCTVBJbWFnZVJlYWRlcjo6ZGVjb2RlQk1QKGJvb2wgb25seQogICAgIC8vIEluaXRpYWxpemUg
dGhlIGZyYW1lYnVmZmVyIGlmIG5lZWRlZC4KICAgICBBU1NFUlQobV9idWZmZXIpOyAgLy8gUGFy
ZW50IHNob3VsZCBzZXQgdGhpcyBiZWZvcmUgYXNraW5nIHVzIHRvIGRlY29kZSEKICAgICBpZiAo
bV9idWZmZXItPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpIHsKLSAgICAgICAg
aWYgKCFtX2J1ZmZlci0+c2V0U2l6ZShtX3BhcmVudC0+c2l6ZSgpLndpZHRoKCksIG1fcGFyZW50
LT5zaXplKCkuaGVpZ2h0KCkpKQorICAgICAgICBpZiAoIW1fYnVmZmVyLT5zZXRTaXplKG1fcGFy
ZW50LT5zaXplKCkpKQogICAgICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5zZXRGYWlsZWQoKTsg
Ly8gVW5hYmxlIHRvIGFsbG9jYXRlLgogICAgICAgICBtX2J1ZmZlci0+c2V0U3RhdHVzKEltYWdl
RnJhbWU6OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIC8vIHNldFNpemUoKSBjYWxscyBlcmFzZUFS
R0IoKSwgd2hpY2ggcmVzZXRzIHRoZSBhbHBoYSBmbGFnLCBzbyB3ZSBmb3JjZQpAQCAtODYsOSAr
ODYsNiBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpkZWNvZGVCTVAoYm9vbCBvbmx5CiAgICAgICAg
IC8vIHRoZXNlIDBzIGNvdWxkIGFjdHVhbGx5IHNob3cgdGhyb3VnaC4KICAgICAgICAgbV9idWZm
ZXItPnNldEhhc0FscGhhKGZhbHNlKTsKIAotICAgICAgICAvLyBGb3IgQk1QcywgdGhlIGZyYW1l
IGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgotICAgICAgICBtX2J1ZmZlci0+c2V0T3Jp
Z2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBtX3BhcmVudC0+c2l6ZSgpKSk7Ci0K
ICAgICAgICAgaWYgKCFtX2lzVG9wRG93bikKICAgICAgICAgICAgIG1fY29vcmQuc2V0WShtX3Bh
cmVudC0+c2l6ZSgpLmhlaWdodCgpIC0gMSk7CiAgICAgfQpAQCAtMTcxLDcgKzE2OCw3IEBAIGJv
b2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NJbmZvSGVhZGVyKCkKICAgICAgICAgcmV0dXJuIG1f
cGFyZW50LT5zZXRGYWlsZWQoKTsKIAogICAgIC8vIFNldCBvdXIgc2l6ZS4KLSAgICBpZiAoIW1f
cGFyZW50LT5zZXRTaXplKG1faW5mb0hlYWRlci5iaVdpZHRoLCBtX2luZm9IZWFkZXIuYmlIZWln
aHQpKQorICAgIGlmICghbV9wYXJlbnQtPnNldFNpemUoSW50U2l6ZShtX2luZm9IZWFkZXIuYmlX
aWR0aCwgbV9pbmZvSGVhZGVyLmJpSGVpZ2h0KSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIC8vIEZvciBwYWxldHRlZCBpbWFnZXMsIGJpdG1hcHMgY2FuIHNldCBiaUNsclVzZWQgdG8g
MCB0byBtZWFuICJhbGwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3Jl
Q2Fpcm8uY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJhY2tpbmdTdG9y
ZS5oIgorCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitOYXRp
dmVJbWFnZVB0ciBJbWFnZUJhY2tpbmdTdG9yZTo6aW1hZ2UoKSBjb25zdAoreworICAgIHJldHVy
biBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgKKyAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oY29uc3RfY2FzdDxSR0JBMzIqPihtX3Bp
eGVsc1B0cikpLAorICAgICAgICBDQUlST19GT1JNQVRfQVJHQjMyLCBzaXplKCkud2lkdGgoKSwg
c2l6ZSgpLmhlaWdodCgpLCBzaXplKCkud2lkdGgoKSAqIHNpemVvZihSR0JBMzIpKSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3Bw
CShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTIgKzYw
LDEyIEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQogICAgIHJldHVy
biBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwogfQogCi1ib29sIEdJRkltYWdlRGVj
b2Rlcjo6c2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQorYm9vbCBHSUZJ
bWFnZURlY29kZXI6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBpZiAoSW1h
Z2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSAmJiBzaXplKCkgPT0gSW50U2l6ZSh3aWR0aCwg
aGVpZ2h0KSkKKyAgICBpZiAoSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKSAmJiB0aGlz
LT5zaXplKCkgPT0gc2l6ZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoIUltYWdl
RGVjb2Rlcjo6c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICBpZiAoIUltYWdlRGVjb2Rlcjo6
c2V0U2l6ZShzaXplKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcHJlcGFyZVNjYWxl
RGF0YUlmTmVjZXNzYXJ5KCk7CkBAIC0yMTMsMTAgKzIxMywxMCBAQCBib29sIEdJRkltYWdlRGVj
b2Rlcjo6aGF2ZURlY29kZWRSb3codW5zCiAKICAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZSBp
ZiBuZWNlc3NhcnkuCiAgICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hl
W2ZyYW1lSW5kZXhdOwotICAgIGlmICgoKGJ1ZmZlci5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpG
cmFtZUVtcHR5KSAmJiAhaW5pdEZyYW1lQnVmZmVyKGZyYW1lSW5kZXgpKSB8fCAhYnVmZmVyLmhh
c1BpeGVsRGF0YSgpKQorICAgIGlmICgoKGJ1ZmZlci5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpG
cmFtZUVtcHR5KSAmJiAhaW5pdEZyYW1lQnVmZmVyKGZyYW1lSW5kZXgpKSB8fCAhYnVmZmVyLmhh
c0JhY2tpbmdTdG9yZSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBJbWFnZUZyYW1l
OjpQaXhlbERhdGEqIGN1cnJlbnRBZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoeEJlZ2luLCB5QmVn
aW4pOworICAgIFJHQkEzMiogY3VycmVudEFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcih4QmVnaW4s
IHlCZWdpbik7CiAgICAgLy8gV3JpdGUgb25lIHJvdydzIHdvcnRoIG9mIGRhdGEgaW50byB0aGUg
ZnJhbWUuICAKICAgICBmb3IgKGludCB4ID0geEJlZ2luOyB4IDwgeEVuZDsgKyt4KSB7CiAgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgc291cmNlVmFsdWUgPSByb3dCdWZmZXJbKG1fc2NhbGVk
ID8gbV9zY2FsZWRDb2x1bW5zW3hdIDogeCkgLSBmcmFtZUNvbnRleHQtPnhPZmZzZXRdOwpAQCAt
MzYxLDcgKzM2MSw3IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW4K
IAogICAgIGlmICghZnJhbWVJbmRleCkgewogICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBm
cmFtZSwgc28gd2UncmUgbm90IHJlbHlpbmcgb24gYW55IHByZXZpb3VzIGRhdGEuCi0gICAgICAg
IGlmICghYnVmZmVyLT5zZXRTaXplKHNjYWxlZFNpemUoKS53aWR0aCgpLCBzY2FsZWRTaXplKCku
aGVpZ2h0KCkpKQorICAgICAgICBpZiAoIWJ1ZmZlci0+c2V0U2l6ZShzY2FsZWRTaXplKCkpKQog
ICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8v
IFRoZSBzdGFydGluZyBzdGF0ZSBmb3IgdGhpcyBmcmFtZSBkZXBlbmRzIG9uIHRoZSBwcmV2aW91
cyBmcmFtZSdzCkBAIC0zODcsMTIgKzM4NywxMiBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5p
dEZyYW1lQnVmZmVyKHVuCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBXZSB3YW50
IHRvIGNsZWFyIHRoZSBwcmV2aW91cyBmcmFtZSB0byB0cmFuc3BhcmVudCwgd2l0aG91dAogICAg
ICAgICAgICAgLy8gYWZmZWN0aW5nIHBpeGVscyBpbiB0aGUgaW1hZ2Ugb3V0c2lkZSBvZiB0aGUg
ZnJhbWUuCi0gICAgICAgICAgICBjb25zdCBJbnRSZWN0JiBwcmV2UmVjdCA9IHByZXZCdWZmZXIt
Pm9yaWdpbmFsRnJhbWVSZWN0KCk7CisgICAgICAgICAgICBJbnRSZWN0IHByZXZSZWN0ID0gcHJl
dkJ1ZmZlci0+b3JpZ2luYWxGcmFtZVJlY3QoKTsKICAgICAgICAgICAgIGNvbnN0IEludFNpemUm
IGJ1ZmZlclNpemUgPSBzY2FsZWRTaXplKCk7CiAgICAgICAgICAgICBpZiAoIWZyYW1lSW5kZXgg
fHwgcHJldlJlY3QuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzY2FsZWRTaXplKCkpKSkg
ewogICAgICAgICAgICAgICAgIC8vIENsZWFyaW5nIHRoZSBmaXJzdCBmcmFtZSwgb3IgYSBmcmFt
ZSB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUKICAgICAgICAgICAgICAgICAvLyBpbWFnZSwgcmVzdWx0
cyBpbiBhIGNvbXBsZXRlbHkgZW1wdHkgaW1hZ2UuCi0gICAgICAgICAgICAgICAgaWYgKCFidWZm
ZXItPnNldFNpemUoYnVmZmVyU2l6ZS53aWR0aCgpLCBidWZmZXJTaXplLmhlaWdodCgpKSkKKyAg
ICAgICAgICAgICAgICBpZiAoIWJ1ZmZlci0+c2V0U2l6ZShidWZmZXJTaXplKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAvLyBDb3B5IHRoZSB3aG9sZSBwcmV2aW91cyBidWZmZXIsIHRoZW4gY2xl
YXIganVzdCBpdHMgZnJhbWUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCShyZXZpc2lv
biAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYv
R0lGSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiAiZ2lmIjsgfQogICAgICAgICB2b2lkIHNldERhdGEoU2hhcmVkQnVm
ZmVyJiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkgb3ZlcnJpZGU7CiAgICAgICAgIGJvb2wg
aXNTaXplQXZhaWxhYmxlKCkgb3ZlcnJpZGU7Ci0gICAgICAgIGJvb2wgc2V0U2l6ZSh1bnNpZ25l
ZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KSBvdmVycmlkZTsKKyAgICAgICAgYm9vbCBzZXRTaXpl
KGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKICAgICAgICAgc2l6ZV90IGZyYW1lQ291bnQoKSBv
dmVycmlkZTsKICAgICAgICAgaW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0IG92ZXJyaWRlOwog
ICAgICAgICBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KSBvdmVy
cmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9H
SUZJbWFnZVJlYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVh
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ3LDcgKzQ0Nyw3IEBAIGJvb2wgR0lGSW1hZ2VS
ZWFkZXI6OnBhcnNlKHNpemVfdCBkYXRhUG8KIAogICAgICAgICAgICAgLy8gQ0FMTEJBQ0s6IElu
Zm9ybSB0aGUgZGVjb2RlcnBsdWdpbiBvZiBvdXIgc2l6ZS4KICAgICAgICAgICAgIC8vIE5vdGU6
IEEgc3Vic2VxdWVudCBmcmFtZSBtaWdodCBoYXZlIGRpbWVuc2lvbnMgbGFyZ2VyIHRoYW4gdGhl
ICJzY3JlZW4iIGRpbWVuc2lvbnMuCi0gICAgICAgICAgICBpZiAobV9jbGllbnQgJiYgIW1fY2xp
ZW50LT5zZXRTaXplKG1fc2NyZWVuV2lkdGgsIG1fc2NyZWVuSGVpZ2h0KSkKKyAgICAgICAgICAg
IGlmIChtX2NsaWVudCAmJiAhbV9jbGllbnQtPnNldFNpemUoV2ViQ29yZTo6SW50U2l6ZShtX3Nj
cmVlbldpZHRoLCBtX3NjcmVlbkhlaWdodCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgICAgICAgICAgbV9zY3JlZW5CZ2NvbG9yID0gY3VycmVudENvbXBvbmVudFs1XTsK
QEAgLTY2NCw3ICs2NjQsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpwYXJzZShzaXplX3QgZGF0
YVBvCiAgICAgICAgICAgICAgICAgeU9mZnNldCA9IDA7CiAKICAgICAgICAgICAgICAgICAvLyBD
QUxMQkFDSzogSW5mb3JtIHRoZSBkZWNvZGVycGx1Z2luIG9mIG91ciBzaXplLgotICAgICAgICAg
ICAgICAgIGlmIChtX2NsaWVudCAmJiAhbV9jbGllbnQtPnNldFNpemUobV9zY3JlZW5XaWR0aCwg
bV9zY3JlZW5IZWlnaHQpKQorICAgICAgICAgICAgICAgIGlmIChtX2NsaWVudCAmJiAhbV9jbGll
bnQtPnNldFNpemUoV2ViQ29yZTo6SW50U2l6ZShtX3NjcmVlbldpZHRoLCBtX3NjcmVlbkhlaWdo
dCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFn
ZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiAyMDU2ODQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsMTEgKzg4LDExIEBAIEludFNpemUgSUNPSW1hZ2VE
ZWNvZGVyOjpmcmFtZVNpemVBdEluZGUKICAgICByZXR1cm4gKGluZGV4ICYmIChpbmRleCA8IG1f
ZGlyRW50cmllcy5zaXplKCkpKSA/IG1fZGlyRW50cmllc1tpbmRleF0ubV9zaXplIDogc2l6ZSgp
OwogfQogCi1ib29sIElDT0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5z
aWduZWQgaGVpZ2h0KQorYm9vbCBJQ09JbWFnZURlY29kZXI6OnNldFNpemUoY29uc3QgSW50U2l6
ZSYgc2l6ZSkKIHsKICAgICAvLyBUaGUgc2l6ZSBjYWxjdWxhdGVkIGluc2lkZSB0aGUgQk1QSW1h
Z2VSZWFkZXIgaGFkIGJldHRlciBtYXRjaCB0aGUgb25lIGluCiAgICAgLy8gdGhlIGljb24gZGly
ZWN0b3J5LgotICAgIHJldHVybiBtX2ZyYW1lU2l6ZS5pc0VtcHR5KCkgPyBJbWFnZURlY29kZXI6
OnNldFNpemUod2lkdGgsIGhlaWdodCkgOiAoKEludFNpemUod2lkdGgsIGhlaWdodCkgPT0gbV9m
cmFtZVNpemUpIHx8IHNldEZhaWxlZCgpKTsKKyAgICByZXR1cm4gbV9mcmFtZVNpemUuaXNFbXB0
eSgpID8gSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHNpemUpIDogKHNpemUgPT0gbV9mcmFtZVNpemUp
IHx8IHNldEZhaWxlZCgpKTsKIH0KIAogc2l6ZV90IElDT0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb3Vu
dCgpCkBAIC0yNzksNyArMjc5LDcgQEAgYm9vbCBJQ09JbWFnZURlY29kZXI6OnByb2Nlc3NEaXJl
Y3RvcnlFbgogICAgIGNvbnN0IEljb25EaXJlY3RvcnlFbnRyeSYgZGlyRW50cnkgPSBtX2RpckVu
dHJpZXMuZmlyc3QoKTsKICAgICAvLyBUZWNobmljYWxseSwgdGhpcyBuZXh0IGNhbGwgc2hvdWxk
bid0IGJlIGFibGUgdG8gZmFpbCwgc2luY2UgdGhlIHdpZHRoCiAgICAgLy8gYW5kIGhlaWdodCBo
ZXJlIGFyZSBlYWNoIDw9IDI1NiwgYW5kIHxtX2ZyYW1lU2l6ZXwgaXMgZW1wdHkuCi0gICAgcmV0
dXJuIHNldFNpemUoZGlyRW50cnkubV9zaXplLndpZHRoKCksIGRpckVudHJ5Lm1fc2l6ZS5oZWln
aHQoKSk7CisgICAgcmV0dXJuIHNldFNpemUoZGlyRW50cnkubV9zaXplKTsKIH0KIAogSUNPSW1h
Z2VEZWNvZGVyOjpJY29uRGlyZWN0b3J5RW50cnkgSUNPSW1hZ2VEZWNvZGVyOjpyZWFkRGlyZWN0
b3J5RW50cnkoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
aWNvL0lDT0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaAkocmV2aXNpb24gMjA1Njg0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdl
RGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBvdmVycmlkZTsKICAgICAgICAg
SW50U2l6ZSBzaXplKCkgb3ZlcnJpZGU7CiAgICAgICAgIEludFNpemUgZnJhbWVTaXplQXRJbmRl
eChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwpIG92ZXJyaWRlOwotICAgICAgICBib29sIHNldFNp
emUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkgb3ZlcnJpZGU7CisgICAgICAgIGJv
b2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7CiAgICAgICAgIHNpemVfdCBmcmFt
ZUNvdW50KCkgb3ZlcnJpZGU7CiAgICAgICAgIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRl
eChzaXplX3QpIG92ZXJyaWRlOwogICAgICAgICAvLyBDQVVUSU9OOiBzZXRGYWlsZWQoKSBkZWxl
dGVzIGFsbCByZWFkZXJzIGFuZCBkZWNvZGVycy4gIEJlIGNhcmVmdWwgdG8KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
anBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzIyLDcgKzMyMiw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1f
c3RhdGUgPSBKUEVHX1NUQVJUX0RFQ09NUFJFU1M7CiAKICAgICAgICAgICAgIC8vIFdlIGNhbiBm
aWxsIGluIHRoZSBzaXplIG5vdyB0aGF0IHRoZSBoZWFkZXIgaXMgYXZhaWxhYmxlLgotICAgICAg
ICAgICAgaWYgKCFtX2RlY29kZXItPnNldFNpemUobV9pbmZvLmltYWdlX3dpZHRoLCBtX2luZm8u
aW1hZ2VfaGVpZ2h0KSkKKyAgICAgICAgICAgIGlmICghbV9kZWNvZGVyLT5zZXRTaXplKEludFNp
emUobV9pbmZvLmltYWdlX3dpZHRoLCBtX2luZm8uaW1hZ2VfaGVpZ2h0KSkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBtX2RlY29kZXItPnNldE9yaWVudGF0
aW9uKHJlYWRJbWFnZU9yaWVudGF0aW9uKGluZm8oKSkpOwpAQCAtNTE5LDkgKzUxOSw5IEBAIGJv
b2wgSlBFR0ltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkKICAgICByZXR1cm4gSW1hZ2VE
ZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsKIH0KIAotYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpz
ZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCitib29sIEpQRUdJbWFnZURl
Y29kZXI6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBpZiAoIUltYWdlRGVj
b2Rlcjo6c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICBpZiAoIUltYWdlRGVjb2Rlcjo6c2V0
U2l6ZShzaXplKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcHJlcGFyZVNjYWxlRGF0
YUlmTmVjZXNzYXJ5KCk7CkBAIC01NTEsNyArNTUxLDcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVy
OjpzZXRGYWlsZWQoKQogfQogCiB0ZW1wbGF0ZSA8Sl9DT0xPUl9TUEFDRSBjb2xvclNwYWNlPgot
dm9pZCBzZXRQaXhlbChJbWFnZUZyYW1lJiBidWZmZXIsIEltYWdlRnJhbWU6OlBpeGVsRGF0YSog
Y3VycmVudEFkZHJlc3MsIEpTQU1QQVJSQVkgc2FtcGxlcywgaW50IGNvbHVtbikKK3ZvaWQgc2V0
UGl4ZWwoSW1hZ2VGcmFtZSYgYnVmZmVyLCBSR0JBMzIqIGN1cnJlbnRBZGRyZXNzLCBKU0FNUEFS
UkFZIHNhbXBsZXMsIGludCBjb2x1bW4pCiB7CiAgICAgSlNBTVBMRSoganNhbXBsZSA9ICpzYW1w
bGVzICsgY29sdW1uICogKGNvbG9yU3BhY2UgPT0gSkNTX1JHQiA/IDMgOiA0KTsKIApAQCAtNTk0
LDcgKzU5NCw3IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKEkKICAg
ICAgICAgaWYgKGRlc3RZIDwgMCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIElt
YWdlRnJhbWU6OlBpeGVsRGF0YSogY3VycmVudEFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcigwLCBk
ZXN0WSk7CisgICAgICAgIFJHQkEzMiogY3VycmVudEFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcigw
LCBkZXN0WSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7ICsreCkgewogICAg
ICAgICAgICAgc2V0UGl4ZWw8Y29sb3JTcGFjZT4oYnVmZmVyLCBjdXJyZW50QWRkcmVzcywgc2Ft
cGxlcywgaXNTY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4KTsKICAgICAgICAgICAgICsr
Y3VycmVudEFkZHJlc3M7CkBAIC02MTcsMTUgKzYxNywxMiBAQCBib29sIEpQRUdJbWFnZURlY29k
ZXI6Om91dHB1dFNjYW5saW5lcygpCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWVidWZmZXIg
aWYgbmVlZGVkLgogICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVsw
XTsKICAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpIHsK
LSAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzY2FsZWRTaXplKCkud2lkdGgoKSwgc2NhbGVk
U2l6ZSgpLmhlaWdodCgpKSkKKyAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzY2FsZWRTaXpl
KCkpKQogICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgICAgICBidWZmZXIuc2V0
U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIC8vIFRoZSBidWZmZXIg
aXMgdHJhbnNwYXJlbnQgb3V0c2lkZSB0aGUgZGVjb2RlZCBhcmVhIHdoaWxlIHRoZSBpbWFnZSBp
cwogICAgICAgICAvLyBsb2FkaW5nLiBUaGUgY29tcGxldGVkIGltYWdlIHdpbGwgYmUgbWFya2Vk
IGZ1bGx5IG9wYXF1ZSBpbiBqcGVnQ29tcGxldGUoKS4KICAgICAgICAgYnVmZmVyLnNldEhhc0Fs
cGhhKHRydWUpOwotCi0gICAgICAgIC8vIEZvciBKUEVHcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxs
cyB0aGUgZW50aXJlIGltYWdlLgotICAgICAgICBidWZmZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3Qo
SW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKTsKICAgICB9CiAKICAgICBqcGVnX2RlY29tcHJl
c3Nfc3RydWN0KiBpbmZvID0gbV9yZWFkZXItPmluZm8oKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0lt
YWdlRGVjb2Rlci5oCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNTAsNyArNTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIEltYWdlRGVj
b2RlcgogICAgICAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiAianBnIjsgfQogICAgICAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIG92ZXJyaWRl
OwotICAgICAgICBib29sIHNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkg
b3ZlcnJpZGU7CisgICAgICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7
CiAgICAgICAgIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpIG92
ZXJyaWRlOwogICAgICAgICAvLyBDQVVUSU9OOiBzZXRGYWlsZWQoKSBkZWxldGVzIHxtX3JlYWRl
cnwuICBCZSBjYXJlZnVsIHRvIGF2b2lkCiAgICAgICAgIC8vIGFjY2Vzc2luZyBkZWxldGVkIG1l
bW9yeSwgZXNwZWNpYWxseSB3aGVuIGNhbGxpbmcgdGhpcyBmcm9tIGluc2lkZQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
cG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMzUsOSArMjM1LDkgQEAgYm9vbCBQTkdJbWFnZURlY29kZXI6OmlzU2l6
ZUF2YWlsYWJsZSgpCiAgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCk7
CiB9CiAKLWJvb2wgUE5HSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNp
Z25lZCBoZWlnaHQpCitib29sIFBOR0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZShjb25zdCBJbnRTaXpl
JiBzaXplKQogewotICAgIGlmICghSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHdpZHRoLCBoZWlnaHQp
KQorICAgIGlmICghSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHNpemUpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKQEAgLTI5NSw3ICsy
OTUsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkKICAgICAvLyB3
aWxsIGNlYXNlIHRvIGV4aXN0LiAgTm90ZSB0aGF0IHdlJ2xsIHN0aWxsIHByb3Blcmx5IHNldCB0
aGUgZmFpbHVyZSBmbGFnCiAgICAgLy8gaW4gdGhpcyBjYXNlIGFzIHNvb24gYXMgd2UgbG9uZ2pt
cCgpLgogICAgIG1fZG9Ob3RoaW5nT25GYWlsdXJlID0gdHJ1ZTsKLSAgICBib29sIHJlc3VsdCA9
IHNldFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgYm9vbCByZXN1bHQgPSBzZXRTaXplKEludFNp
emUod2lkdGgsIGhlaWdodCkpOwogICAgIG1fZG9Ob3RoaW5nT25GYWlsdXJlID0gZmFsc2U7CiAg
ICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgbG9uZ2ptcChKTVBCVUYocG5nKSwgMSk7CkBAIC00
MTEsMTkgKzQxMSwxOSBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKCkK
ICAgICB9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJHQihJbWFnZUZyYW1lOjpQ
aXhlbERhdGEqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRQ
aXhlbFJHQihSR0JBMzIqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCkKIHsKICAgICAqZGVzdCA9IDB4
RkYwMDAwMDBVIHwgcGl4ZWxbMF0gPDwgMTYgfCBwaXhlbFsxXSA8PCA4IHwgcGl4ZWxbMl07CiB9
CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJHQkEoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRh
KiBkZXN0LCBwbmdfYnl0ZXAgcGl4ZWwsIHVuc2lnbmVkIGNoYXImIG5vblRyaXZpYWxBbHBoYU1h
c2spCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxSR0JBKFJHQkEzMiogZGVzdCwgcG5nX2J5
dGVwIHBpeGVsLCB1bnNpZ25lZCBjaGFyJiBub25Ucml2aWFsQWxwaGFNYXNrKQogewogICAgIHVu
c2lnbmVkIGNoYXIgYSA9IHBpeGVsWzNdOwogICAgICpkZXN0ID0gYSA8PCAyNCB8IHBpeGVsWzBd
IDw8IDE2IHwgcGl4ZWxbMV0gPDwgOCB8IHBpeGVsWzJdOwogICAgIG5vblRyaXZpYWxBbHBoYU1h
c2sgfD0gKDI1NSAtIGEpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxQcmVtdWx0
aXBsaWVkUkdCQShJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCwg
dW5zaWduZWQgY2hhciYgbm9uVHJpdmlhbEFscGhhTWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBz
ZXRQaXhlbFByZW11bHRpcGxpZWRSR0JBKFJHQkEzMiogZGVzdCwgcG5nX2J5dGVwIHBpeGVsLCB1
bnNpZ25lZCBjaGFyJiBub25Ucml2aWFsQWxwaGFNYXNrKQogewogICAgIHVuc2lnbmVkIGNoYXIg
YSA9IHBpeGVsWzNdOwogICAgIHVuc2lnbmVkIGNoYXIgciA9IGZhc3REaXZpZGVCeTI1NShwaXhl
bFswXSAqIGEpOwpAQCAtNDQ3LDcgKzQ0Nyw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dB
dmFpbGFibGUodW5zaWcKICAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2Fj
aGVbbV9jdXJyZW50RnJhbWVdOwogICAgIGlmIChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFt
ZTo6RnJhbWVFbXB0eSkgewogICAgICAgICBwbmdfc3RydWN0cCBwbmcgPSBtX3JlYWRlci0+cG5n
UHRyKCk7Ci0gICAgICAgIGlmICghYnVmZmVyLnNldFNpemUoc2NhbGVkU2l6ZSgpLndpZHRoKCks
IHNjYWxlZFNpemUoKS5oZWlnaHQoKSkpIHsKKyAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShz
Y2FsZWRTaXplKCkpKSB7CiAgICAgICAgICAgICBsb25nam1wKEpNUEJVRihwbmcpLCAxKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNDcxLDggKzQ3MSw2IEBAIHZvaWQgUE5H
SW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWcKICAgICAgICAgICAgIGluaXRGcmFtZUJ1
ZmZlcihtX2N1cnJlbnRGcmFtZSk7CiAgICAgICAgIGVsc2UKICNlbmRpZgotICAgICAgICAvLyBG
b3IgUE5HcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgotICAgICAg
ICBidWZmZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkp
KTsKICAgICB9CiAKICAgICAvKiBsaWJwbmcgY29tbWVudHMgKGhlcmUgdG8gZXhwbGFpbiB3aGF0
IGZvbGxvd3MpLgpAQCAtNTMxLDcgKzUyOSw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dB
dmFpbGFibGUodW5zaWcKICAgICB9CiAKICAgICAvLyBXcml0ZSB0aGUgZGVjb2RlZCByb3cgcGl4
ZWxzIHRvIHRoZSBmcmFtZSBidWZmZXIuCi0gICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBhZGRy
ZXNzID0gYnVmZmVyLmdldEFkZHIoMCwgeSk7CisgICAgUkdCQTMyKiBhZGRyZXNzID0gYnVmZmVy
LmdldEFkZHIoMCwgeSk7CiAgICAgaW50IHdpZHRoID0gc2NhbGVkU2l6ZSgpLndpZHRoKCk7CiAg
ICAgdW5zaWduZWQgY2hhciBub25Ucml2aWFsQWxwaGFNYXNrID0gMDsKIApAQCAtODIwLDcgKzgx
OCw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIoc2kKICAgICB9IGVs
c2UgewogICAgICAgICAvLyBXZSB3YW50IHRvIGNsZWFyIHRoZSBwcmV2aW91cyBmcmFtZSB0byB0
cmFuc3BhcmVudCwgd2l0aG91dAogICAgICAgICAvLyBhZmZlY3RpbmcgcGl4ZWxzIGluIHRoZSBp
bWFnZSBvdXRzaWRlIG9mIHRoZSBmcmFtZS4KLSAgICAgICAgY29uc3QgSW50UmVjdCYgcHJldlJl
Y3QgPSBwcmV2QnVmZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgpOworICAgICAgICBJbnRSZWN0IHBy
ZXZSZWN0ID0gcHJldkJ1ZmZlci0+b3JpZ2luYWxGcmFtZVJlY3QoKTsKICAgICAgICAgaWYgKCFm
cmFtZUluZGV4IHx8IHByZXZSZWN0LmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVk
U2l6ZSgpKSkpIHsKICAgICAgICAgICAgIC8vIENsZWFyaW5nIHRoZSBmaXJzdCBmcmFtZSwgb3Ig
YSBmcmFtZSB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUKICAgICAgICAgICAgIC8vIGltYWdlLCByZXN1
bHRzIGluIGEgY29tcGxldGVseSBlbXB0eSBpbWFnZS4KQEAgLTg0NCw3ICs4NDIsNyBAQCB2b2lk
IFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAgICAgcG5nX2J5dGVwIGludGVybGFj
ZUJ1ZmZlciA9IG1fcmVhZGVyLT5pbnRlcmxhY2VCdWZmZXIoKTsKIAogICAgIGlmIChtX2N1cnJl
bnRGcmFtZSAmJiBpbnRlcmxhY2VCdWZmZXIpIHsKLSAgICAgICAgY29uc3QgSW50UmVjdCYgcmVj
dCA9IGJ1ZmZlci5vcmlnaW5hbEZyYW1lUmVjdCgpOworICAgICAgICBJbnRSZWN0IHJlY3QgPSBi
dWZmZXIub3JpZ2luYWxGcmFtZVJlY3QoKTsKICAgICAgICAgYm9vbCBoYXNBbHBoYSA9IG1fcmVh
ZGVyLT5oYXNBbHBoYSgpOwogICAgICAgICB1bnNpZ25lZCBjb2xvckNoYW5uZWxzID0gaGFzQWxw
aGEgPyA0IDogMzsKICAgICAgICAgYm9vbCBub25Ucml2aWFsQWxwaGEgPSBmYWxzZTsKQEAgLTg1
NCw3ICs4NTIsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAjaWYg
RU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKICAgICAgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCByZWN0Lm1heFkoKSAtIHJlY3QueSgpOyArK3kpIHsKICAgICAgICAgICAgIHBuZ19i
eXRlcCByb3cgPSBpbnRlcmxhY2VCdWZmZXIgKyAobV9zY2FsZWQgPyBtX3NjYWxlZFJvd3NbeV0g
OiB5KSAqIGNvbG9yQ2hhbm5lbHMgKiBzaXplKCkud2lkdGgoKTsKLSAgICAgICAgICAgIEltYWdl
RnJhbWU6OlBpeGVsRGF0YSogYWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHJlY3QueCgpLCB5ICsg
cmVjdC55KCkpOworICAgICAgICAgICAgUkdCQTMyKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIo
cmVjdC54KCksIHkgKyByZWN0LnkoKSk7CiAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHJlY3QubWF4WCgpIC0gcmVjdC54KCk7ICsreCkgewogICAgICAgICAgICAgICAgIHBuZ19ieXRl
cCBwaXhlbCA9IHJvdyArIChtX3NjYWxlZCA/IG1fc2NhbGVkQ29sdW1uc1t4XSA6IHgpICogY29s
b3JDaGFubmVsczsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IGhhc0FscGhhID8g
cGl4ZWxbM10gOiAyNTU7CkBAIC04NzAsNyArODY4LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6
OmZyYW1lQ29tcGxldGUoKQogICAgICAgICBwbmdfYnl0ZXAgcm93ID0gaW50ZXJsYWNlQnVmZmVy
OwogICAgICAgICBmb3IgKGludCB5ID0gcmVjdC55KCk7IHkgPCByZWN0Lm1heFkoKTsgKyt5LCBy
b3cgKz0gY29sb3JDaGFubmVscyAqIHNpemUoKS53aWR0aCgpKSB7CiAgICAgICAgICAgICBwbmdf
Ynl0ZXAgcGl4ZWwgPSByb3c7Ci0gICAgICAgICAgICBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGFk
ZHJlc3MgPSBidWZmZXIuZ2V0QWRkcihyZWN0LngoKSwgeSk7CisgICAgICAgICAgICBSR0JBMzIq
IGFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcihyZWN0LngoKSwgeSk7CiAgICAgICAgICAgICBmb3Ig
KGludCB4ID0gcmVjdC54KCk7IHggPCByZWN0Lm1heFgoKTsgKyt4LCBwaXhlbCArPSBjb2xvckNo
YW5uZWxzKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBoYXNBbHBoYSA/IHBp
eGVsWzNdIDogMjU1OwogICAgICAgICAgICAgICAgIG5vblRyaXZpYWxBbHBoYSB8PSBhbHBoYSA8
IDI1NTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9Q
TkdJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDIwNTY4NCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29k
ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIGludCByZXBldGl0aW9uQ291bnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X3BsYXlDb3VudC0xOyB9CiAjZW5kaWYKICAgICAgICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBv
dmVycmlkZTsKLSAgICAgICAgYm9vbCBzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBo
ZWlnaHQpIG92ZXJyaWRlOworICAgICAgICBib29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYpIG92
ZXJyaWRlOwogICAgICAgICBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGlu
ZGV4KSBvdmVycmlkZTsKICAgICAgICAgLy8gQ0FVVElPTjogc2V0RmFpbGVkKCkgZGVsZXRlcyB8
bV9yZWFkZXJ8LiAgQmUgY2FyZWZ1bCB0byBhdm9pZAogICAgICAgICAvLyBhY2Nlc3NpbmcgZGVs
ZXRlZCBtZW1vcnksIGVzcGVjaWFsbHkgd2hlbiBjYWxsaW5nIHRoaXMgZnJvbSBpbnNpZGUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdl
RGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNv
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIGJvb2wgV0VCUEltYWdl
RGVjb2Rlcjo6ZGVjb2RlKGJvb2wgb25seVMKICAgICAgICAgICAgIHJldHVybiBzZXRGYWlsZWQo
KTsKICAgICAgICAgbV9oYXNBbHBoYSA9IGZhbHNlOwogI2VuZGlmCi0gICAgICAgIGlmICghc2V0
U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgaWYgKCFzZXRTaXplKEludFNpemUod2lkdGgs
IGhlaWdodCkpKQogICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgIH0KIApAQCAt
MTI4LDE4ICsxMjgsMTcgQEAgYm9vbCBXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBvbmx5
UwogICAgIEFTU0VSVChidWZmZXIuc3RhdHVzKCkgIT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0
ZSk7CiAKICAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkp
IHsKLSAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6ZSgpLmhl
aWdodCgpKSkKKyAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzaXplKCkpKQogICAgICAgICAg
ICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgICAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdlRnJh
bWU6OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShtX2hhc0FscGhh
KTsKLSAgICAgICAgYnVmZmVyLnNldE9yaWdpbmFsRnJhbWVSZWN0KEludFJlY3QoSW50UG9pbnQo
KSwgc2l6ZSgpKSk7CiAgICAgfQogCiAgICAgaWYgKCFtX2RlY29kZXIpIHsKICAgICAgICAgV0VC
UF9DU1BfTU9ERSBtb2RlID0gb3V0cHV0TW9kZShtX2hhc0FscGhhKTsKICAgICAgICAgaWYgKCFt
X3ByZW11bHRpcGx5QWxwaGEpCiAgICAgICAgICAgICBtb2RlID0gb3V0cHV0TW9kZShmYWxzZSk7
Ci0gICAgICAgIGludCByb3dTdHJpZGUgPSBzaXplKCkud2lkdGgoKSAqIHNpemVvZihJbWFnZUZy
YW1lOjpQaXhlbERhdGEpOworICAgICAgICBpbnQgcm93U3RyaWRlID0gc2l6ZSgpLndpZHRoKCkg
KiBzaXplb2YoUkdCQTMyKTsKICAgICAgICAgdWludDhfdCogb3V0cHV0ID0gcmVpbnRlcnByZXRf
Y2FzdDx1aW50OF90Kj4oYnVmZmVyLmdldEFkZHIoMCwgMCkpOwogICAgICAgICBpbnQgb3V0cHV0
U2l6ZSA9IHNpemUoKS5oZWlnaHQoKSAqIHJvd1N0cmlkZTsKICAgICAgICAgbV9kZWNvZGVyID0g
V2ViUElOZXdSR0IobW9kZSwgb3V0cHV0LCBvdXRwdXRTaXplLCByb3dTdHJpZGUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288466</attachid>
            <date>2016-09-09 18:11:31 -0700</date>
            <delta_ts>2016-09-09 18:35:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159679-20160909180903.patch</filename>
            <type>text/plain</type>
            <size>57346</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTc3NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNiBAQAorMjAxNi0wOS0wOSAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgdGhl
IHBpeGVsIGRhdGEgb2YgSW1hZ2VGcmFtZSB0byBhIHNlcGFyYXRlIGNsYXNzIG5hbWVkIEltYWdl
QmFja2luZ1N0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTk2NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNb3ZlIHRoZSBwaXhlbCBkYXRhIG1hbmlwdWxhdGlvbiBwYXJ0IGluIEltYWdlRnJhbWUg
aW50byBhIHNlcGFyYXRlIGNsYXNzCisgICAgICAgIGFuZCBhbGxvY2F0ZSBpdCBvbiBkZW1hbmQu
CisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5j
bWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbkNhaXJvLmNtYWtlOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2hhbm5lbCk6Cisg
ICAgICAgIChXZWJDb3JlOjp1bnByZW11bHRpcGxpZWRDaGFubmVsKToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VQcmVtdWx0aXBsaWVkUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlVW5QcmVt
dWx0aXBsaWVkUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpjb2xvckZyb21QcmVtdWx0aXBsaWVk
QVJHQik6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OmZh
c3RNdWx0aXBseUJ5MjU1KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tp
bmdTdG9yZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OkltYWdlQmFja2lu
Z1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRGcmFtZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OnNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCYWNraW5nU3RvcmU6OmZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJhY2tpbmdTdG9yZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3Rv
cmU6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJhY2tpbmdTdG9yZTo6cmVw
ZWF0Rmlyc3RSb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OmF0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRSR0JBKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpvdmVyUkdCQSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJhY2tpbmdTdG9yZTo6aW5Cb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
YWNraW5nU3RvcmU6OmlzT3ZlclNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L05hdGl2ZUltYWdlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmF0aXZlSW1hZ2VIYXNBbHBo
YSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojp6ZXJvRmlsbEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRC
YWNraW5nU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRPcmlnaW5hbEZyYW1lUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4KToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKTogRGVsZXRlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWU6OmNvcHlSb3dOVGltZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZTo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjphc05ld05hdGl2ZUlt
YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmJhY2tpbmdTdG9yZSk6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpoYXNCYWNraW5nU3RvcmUpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6b3JpZ2luYWxGcmFtZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VGcmFtZTo6Z2V0QWRkcik6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRS
R0JBKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om92ZXJSR0JBKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjpzZXRPcmlnaW5hbEZyYW1lUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpoYXNQaXhlbERhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VGcmFtZTo6Zml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRnJhbWU6OmRpdmlkZTI1NSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjp3aWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjpoZWlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVy
Ojppc092ZXJTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFk
ZXI6OmRlY29kZUJNUCk6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6cHJvY2Vz
c0luZm9IZWFkZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0lt
YWdlQmFja2luZ1N0b3JlQ2Fpcm8uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QmFja2luZ1N0b3JlOjppbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Z2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29k
ZXI6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVj
b2RlZFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1
ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVj
b2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJl
YWRlci5jcHA6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6cGFyc2UpOgorICAgICAgICAqIHBs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SUNPSW1hZ2VEZWNvZGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OklD
T0ltYWdlRGVjb2Rlcjo6cHJvY2Vzc0RpcmVjdG9yeUVudHJpZXMpOiBEZWxldGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlUmVhZGVyOjpkZWNvZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRQ
aXhlbCk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGlu
ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVj
b2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURl
Y29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpzZXRTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OnNldFBpeGVsUkdCKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVs
UkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhlbFByZW11bHRpcGxpZWRSR0JBKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAgICogcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorCiAyMDE2LTA5LTA5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVVJMUGFyc2Vy
IHNob3VsZCBjb252ZXJ0IEFTQ0lJIGhvc3RzIHRvIGxvd2VyY2FzZQpJbmRleDogU291cmNlL1dl
YkNvcmUvUGxhdGZvcm1FZmwuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1FZmwuY21ha2UJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRm
b3JtRWZsLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xODMsMTAgKzE4Myw5IEBAIGxpc3QoQVBQ
RU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3gxMS9QbGF0Zm9ybURp
c3BsYXlYMTEuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MveDExL1hVbmlxdWVSZXNvdXJjZS5j
cHAKIAorICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3Jl
Q2Fpcm8uY3BwCiAgICAgcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvSlBFR0ltYWdlRW5jb2Rlci5j
cHAKIAotICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJv
LmNwcAotCiAgICAgcGxhdGZvcm0vbmV0d29yay9lZmwvTmV0d29ya1N0YXRlTm90aWZpZXJFZmwu
Y3BwCiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3NvdXAvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VT
b3VwLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UJKHJldmlzaW9uIDIwNTY4NCkK
KysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTUsNyArMTU1LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0v
Z3RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKICAgICBwbGF0Zm9ybS9ndGsvVXNlckFnZW50R3Rr
LmNwcAogCi0gICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fp
cm8uY3BwCisgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VCYWNraW5nU3Rv
cmVDYWlyby5jcHAKIAogICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2d0ay9TRFBQcm9jZXNzb3JT
Y3JpcHRSZXNvdXJjZUd0ay5jcHAKIApJbmRleDogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5D
YWlyby5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJv
LmNtYWtlCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNh
aXJvLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGxpc3QoQVBQRU5EIFdl
YkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZh
dGVNZWRpYUZvdW5kYXRpb24uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZv
bnREYXRhQ2Fpcm9XaW4uY3BwCiAKLSAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9J
bWFnZURlY29kZXJDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9J
bWFnZUJhY2tpbmdTdG9yZUNhaXJvLmNwcAogCiAgICAgcGxhdGZvcm0vbmV0d29yay9OZXR3b3Jr
U3RvcmFnZVNlc3Npb25TdHViLmNwcAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTIyNzUsNiArMjI3NSw3IEBACiAJCTU1NUI4N0VDMUNBQUYwQUIwMDM0OTQyNSAvKiBJ
bWFnZURlY29kZXJDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICov
OyB9OwogCQk1NTVCODdFRDFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1NUI4N0VCMUNBQUYw
QUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5oICovOyB9OwogCQk1NUEzMzZGNzFEODIwOUY0
MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDU1QTMzNkY2MUQ4MjA5RjQwMDIyQzRDNyAvKiBOYXRpdmVJbWFnZS5o
ICovOyB9OworCQk1NUEzMzZGOTFEODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1QTMzNkY4
MUQ4MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU3MDlFOENEMUQ0MTNENDcwMDMyNDRB
QyAvKiBXZWJLaXRTdWJ0bGVDcnlwdG8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTcwOUU4Q0ExRDQxM0NFMzAwMzI0NEFDIC8qIFdlYktpdFN1YnRs
ZUNyeXB0by5jcHAgKi87IH07CiAJCTU3MDlFOENFMUQ0MTNENUIwMDMyNDRBQyAvKiBKU1dlYktp
dFN1YnRsZUNyeXB0b0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBFMUZGOEY2NjE4MDc0NjA4MDAxMzI2NzQgLyogSlNXZWJLaXRTdWJ0bGVD
cnlwdG9DdXN0b20uY3BwICovOyB9OwogCQk1NzA5RThDRjFENDEzRDlBMDAzMjQ0QUMgLyogV2Vi
S2l0U3VidGxlQ3J5cHRvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1NzA5RThDQjFENDEzQ0UzMDAzMjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5cHRvLmgg
Ki87IH07CkBAIC05MjkxLDYgKzkyOTIsNyBAQAogCQk1NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUg
LyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW1hZ2VEZWNvZGVyQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTVC
ODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VEZWNvZGVyQ0cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTVBMzM2RjYxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hdGl2ZUltYWdlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTU1QTMzNkY4MUQ4MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdT
dG9yZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJhY2tpbmdTdG9y
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUQ0MDhGNzFBN0M2MzE4MDBDNzg0
NTAgLyogU1ZHSW1hZ2VDbGllbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNWR0ltYWdlQ2xpZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzA5RThD
QTFENDEzQ0UzMDAzMjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5cHRvLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdlYktpdFN1YnRsZUNyeXB0by5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MDlFOENCMUQ0MTNDRTMwMDMyNDRBQyAvKiBXZWJLaXRT
dWJ0bGVDcnlwdG8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViS2l0U3Vi
dGxlQ3J5cHRvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDc2OSw2ICsyMDc3
MSw3IEBACiAJCQkJMzc5OTE5OTQxMjAwRERGNDAwRUEwNDFDIC8qIFdPRkZGaWxlRm9ybWF0LmNw
cCAqLywKIAkJCQkzNzk5MTk5NTEyMDBEREY0MDBFQTA0MUMgLyogV09GRkZpbGVGb3JtYXQuaCAq
LywKIAkJCQk1NUEzMzZGNjFEODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLywKKwkJ
CQk1NUEzMzZGODFEODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCAqLywKIAkJ
CSk7CiAJCQlwYXRoID0gZ3JhcGhpY3M7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAt
MjYzMzksNiArMjYzNDIsNyBAQAogCQkJCTU4MkNCMDUzMUE3OEExNEIwMEFGRkNDNCAvKiBTaW1w
bGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1
QTFFQTdEMTUyQkNGMDgwMDREMDBCNiAvKiBTaW1wbGlmeU1hcmt1cENvbW1hbmQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTU3MkE3RjIxMUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNTVBMzM2RjkxRDgyMUUzQzAwMjJDNEM3IC8qIEltYWdlQmFj
a2luZ1N0b3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTc0MUFBRDE2NjM2NjA5MDA4QTVCN0Ug
LyogU2ltdWxhdGVkQ2xpY2tPcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDAwRDdBNTE0
QTNGNjE5MDA3MzQwMTEgLyogU2luY1Jlc2FtcGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEz
MjdENjAxMUEzM0EyQjAwNEY5RDY1IC8qIFNpbmtEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lv
biAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDE2IEBAIGNvbnN0IFJHQkEzMiBDb2xvcjo6dHJh
bnNwYXJlbnQ7CiBzdGF0aWMgY29uc3QgUkdCQTMyIGxpZ2h0ZW5lZEJsYWNrID0gMHhGRjU0NTQ1
NDsKIHN0YXRpYyBjb25zdCBSR0JBMzIgZGFya2VuZWRXaGl0ZSA9IDB4RkZBQkFCQUI7CiAKK3N0
YXRpYyBpbmxpbmUgdW5zaWduZWQgcHJlbXVsdGlwbGllZENoYW5uZWwodW5zaWduZWQgYywgdW5z
aWduZWQgYSkKK3sKKyAgICByZXR1cm4gZmFzdERpdmlkZUJ5MjU1KGMgKiBhICsgMjU0KTsKK30K
Kworc3RhdGljIGlubGluZSB1bnNpZ25lZCB1bnByZW11bHRpcGxpZWRDaGFubmVsKHVuc2lnbmVk
IGMsIHVuc2lnbmVkIGEpCit7CisgICAgcmV0dXJuIChmYXN0TXVsdGlwbHlCeTI1NShjKSArIGEg
LSAxKSAvIGE7Cit9CisKIFJHQkEzMiBtYWtlUkdCKGludCByLCBpbnQgZywgaW50IGIpCiB7CiAg
ICAgcmV0dXJuIDB4RkYwMDAwMDAgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihyLCAyNTUpKSA8PCAx
NiB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGcsIDI1NSkpIDw8IDggfCBzdGQ6Om1heCgwLCBzdGQ6
Om1pbihiLCAyNTUpKTsKQEAgLTU5LDYgKzY5LDE2IEBAIFJHQkEzMiBtYWtlUkdCQShpbnQgciwg
aW50IGcsIGludCBiLCBpbnQKICAgICByZXR1cm4gc3RkOjptYXgoMCwgc3RkOjptaW4oYSwgMjU1
KSkgPDwgMjQgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihyLCAyNTUpKSA8PCAxNiB8IHN0ZDo6bWF4
KDAsIHN0ZDo6bWluKGcsIDI1NSkpIDw8IDggfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihiLCAyNTUp
KTsKIH0KIAorUkdCQTMyIG1ha2VQcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBi
LCBpbnQgYSkKK3sKKyAgICByZXR1cm4gbWFrZVJHQkEocHJlbXVsdGlwbGllZENoYW5uZWwociwg
YSksIHByZW11bHRpcGxpZWRDaGFubmVsKGcsIGEpLCBwcmVtdWx0aXBsaWVkQ2hhbm5lbChiLCBh
KSwgYSk7Cit9CisKK1JHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcs
IGludCBiLCBpbnQgYSkKK3sKKyAgICByZXR1cm4gbWFrZVJHQkEodW5wcmVtdWx0aXBsaWVkQ2hh
bm5lbChyLCBhKSwgdW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBhKSwgdW5wcmVtdWx0aXBsaWVk
Q2hhbm5lbChiLCBhKSwgYSk7Cit9CisKIHN0YXRpYyBpbnQgY29sb3JGbG9hdFRvUkdCQUJ5dGUo
ZmxvYXQgZikKIHsKICAgICAvLyBXZSB1c2UgbHJvdW5kZiBhbmQgMjU1IGluc3RlYWQgb2YgbmV4
dGFmdGVyZigyNTYsIDApIHRvIG1hdGNoIENHJ3Mgcm91bmRpbmcKQEAgLTQ4MiwxNCArNTAyLDkg
QEAgdm9pZCBDb2xvcjo6Z2V0SFNWKGRvdWJsZSYgaHVlLCBkb3VibGUmIAogQ29sb3IgY29sb3JG
cm9tUHJlbXVsdGlwbGllZEFSR0IoUkdCQTMyIHBpeGVsQ29sb3IpCiB7CiAgICAgaW50IGFscGhh
ID0gYWxwaGFDaGFubmVsKHBpeGVsQ29sb3IpOwotICAgIGlmIChhbHBoYSAmJiBhbHBoYSA8IDI1
NSkgewotICAgICAgICByZXR1cm4gQ29sb3I6OmNyZWF0ZVVuY2hlY2tlZCgKLSAgICAgICAgICAg
IHJlZENoYW5uZWwocGl4ZWxDb2xvcikgKiAyNTUgLyBhbHBoYSwKLSAgICAgICAgICAgIGdyZWVu
Q2hhbm5lbChwaXhlbENvbG9yKSAqIDI1NSAvIGFscGhhLAotICAgICAgICAgICAgYmx1ZUNoYW5u
ZWwocGl4ZWxDb2xvcikgKiAyNTUgLyBhbHBoYSwKLSAgICAgICAgICAgIGFscGhhKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgcmV0dXJuIENvbG9yKHBpeGVsQ29sb3IpOworICAgIGlmIChhbHBoYSAm
JiBhbHBoYSA8IDI1NSkKKyAgICAgICAgcGl4ZWxDb2xvciA9IG1ha2VVblByZW11bHRpcGxpZWRS
R0JBKHJlZENoYW5uZWwocGl4ZWxDb2xvciksIGdyZWVuQ2hhbm5lbChwaXhlbENvbG9yKSwgYmx1
ZUNoYW5uZWwocGl4ZWxDb2xvciksIGFscGhhKTsKKyAgICByZXR1cm4gQ29sb3IocGl4ZWxDb2xv
cik7CiB9CiAKIFJHQkEzMiBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihjb25zdCBDb2xvciYg
Y29sb3IpCkBAIC00OTcsMTQgKzUxMiwxMCBAQCBSR0JBMzIgcHJlbXVsdGlwbGllZEFSR0JGcm9t
Q29sb3IoY29uc3QgCiAgICAgdW5zaWduZWQgcGl4ZWxDb2xvcjsKIAogICAgIHVuc2lnbmVkIGFs
cGhhID0gY29sb3IuYWxwaGEoKTsKLSAgICBpZiAoYWxwaGEgPCAyNTUpIHsKLSAgICAgICAgcGl4
ZWxDb2xvciA9IENvbG9yOjpjcmVhdGVVbmNoZWNrZWQoCi0gICAgICAgICAgICBmYXN0RGl2aWRl
QnkyNTUoY29sb3IucmVkKCkgKiBhbHBoYSArIDI1NCksCi0gICAgICAgICAgICBmYXN0RGl2aWRl
QnkyNTUoY29sb3IuZ3JlZW4oKSAqIGFscGhhICsgMjU0KSwKLSAgICAgICAgICAgIGZhc3REaXZp
ZGVCeTI1NShjb2xvci5ibHVlKCkgKiBhbHBoYSArIDI1NCksCi0gICAgICAgICAgICBhbHBoYSku
cmdiKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgICBwaXhlbENvbG9yID0gY29sb3IucmdiKCk7Cisg
ICAgaWYgKGFscGhhIDwgMjU1KQorICAgICAgICBwaXhlbENvbG9yID0gbWFrZVByZW11bHRpcGxp
ZWRSR0JBKGNvbG9yLnJlZCgpLCBjb2xvci5ncmVlbigpLCBjb2xvci5ibHVlKCksIGFscGhhKTsK
KyAgICBlbHNlCisgICAgICAgIHBpeGVsQ29sb3IgPSBjb2xvci5yZ2IoKTsKIAogICAgIHJldHVy
biBwaXhlbENvbG9yOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5oCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw5IEBAIHR5cGVkZWYgdW5z
aWduZWQgUkdCQTMyOyAvLyBEZXByZWNhdGVkOiAKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtl
UkdCKGludCByLCBpbnQgZywgaW50IGIpOwogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VSR0JB
KGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKIAorUkdCQTMyIG1ha2VQcmVtdWx0aXBsaWVk
UkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7CitSR0JBMzIgbWFrZVVuUHJlbXVsdGlw
bGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpOworCiBXRUJDT1JFX0VYUE9SVCBS
R0JBMzIgY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIGZsb2F0IG92ZXJyaWRl
QWxwaGEpOwogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoUkdC
QTMyIGNvbG9yLCBPcHRpb25hbDxmbG9hdD4gb3ZlcnJpZGVBbHBoYSk7CiAKQEAgLTIxOCw2ICsy
MjEsNyBAQCBDb2xvciBibGVuZChjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sCiAKIGludCBk
aWZmZXJlbmNlU3F1YXJlZChjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7CiAKK3VpbnQxNl90
IGZhc3RNdWx0aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVlKTsKIHVpbnQxNl90IGZhc3REaXZpZGVC
eTI1NSh1aW50MTZfdCk7CiAKICNpZiBVU0UoQ0cpCkBAIC0yOTAsNiArMjk0LDExIEBAIGlubGlu
ZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwKICAgICByZXR1cm4gc3RkOjptYXgo
MC5mLCBzdGQ6Om1pbigyNTUuZiwgc3RkOjpyb3VuZCh2YWx1ZSkpKTsKIH0KIAoraW5saW5lIHVp
bnQxNl90IGZhc3RNdWx0aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVlKQoreworICAgIHJldHVybiAo
dmFsdWUgPDwgOCkgLSB2YWx1ZTsKK30KKwogaW5saW5lIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1
NSh1aW50MTZfdCB2YWx1ZSkKIHsKICAgICAvLyBXaGlsZSB0aGlzIGlzIGFuIGFwcHJveGltYXRl
IGFsZ29yaXRobSBmb3IgZGl2aXNpb24gYnkgMjU1LCBpdCBnaXZlcyBwZXJmZWN0bHkgYWNjdXJh
dGUgcmVzdWx0cyBmb3IgMTYtYml0IHZhbHVlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3Iu
aCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUg
Ik5hdGl2ZUltYWdlLmgiCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgSW1hZ2VCYWNraW5nU3RvcmUgeworcHVibGljOgorICAgIHN0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCYWNraW5nU3RvcmU+IGNyZWF0ZShjb25zdCBJbnRTaXpl
JiBzaXplLCBib29sIHByZW11bHRpcGx5QWxwaGEpCisgICAgeworICAgICAgICByZXR1cm4gc3Rk
OjptYWtlX3VuaXF1ZTxJbWFnZUJhY2tpbmdTdG9yZT4oc2l6ZSwgcHJlbXVsdGlwbHlBbHBoYSk7
CisgICAgfQorCisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJhY2tpbmdTdG9yZT4g
Y3JlYXRlKGNvbnN0IEltYWdlQmFja2luZ1N0b3JlJiBvdGhlcikKKyAgICB7CisgICAgICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPEltYWdlQmFja2luZ1N0b3JlPihvdGhlcik7CisgICAgfQor
CisgICAgSW1hZ2VCYWNraW5nU3RvcmUoY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0
aXBseUFscGhhID0gdHJ1ZSkKKyAgICAgICAgOiBtX3ByZW11bHRpcGx5QWxwaGEocHJlbXVsdGlw
bHlBbHBoYSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghc2l6ZS5pc0VtcHR5KCkpOworICAgICAg
ICBzZXRTaXplKHNpemUpOworICAgIH0KKworICAgIEltYWdlQmFja2luZ1N0b3JlKGNvbnN0IElt
YWdlQmFja2luZ1N0b3JlJiBvdGhlcikKKyAgICB7CisgICAgICAgIGlmICh0aGlzID09ICZvdGhl
cikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX3BpeGVscyA9IG90aGVyLm1fcGl4
ZWxzOworICAgICAgICBtX3BpeGVsc1B0ciA9IG1fcGl4ZWxzLmRhdGEoKTsKKyAgICAgICAgbV9z
aXplID0gb3RoZXIubV9zaXplOworICAgICAgICBtX3ByZW11bHRpcGx5QWxwaGEgPSBvdGhlci5t
X3ByZW11bHRpcGx5QWxwaGE7CisgICAgfQorCisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2UoKSBj
b25zdDsKKworICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQorICAgIHsKKyAg
ICAgICAgaWYgKCFtX3BpeGVscy50cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZS5hcmVhKCkpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIG1fcGl4ZWxzLnJlc2l6ZShzaXplLmFy
ZWEoKSk7CisgICAgICAgIG1fcGl4ZWxzUHRyID0gbV9waXhlbHMuZGF0YSgpOworICAgICAgICBt
X3NpemUgPSBzaXplOworICAgICAgICBtX2ZyYW1lUmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwg
bV9zaXplKTsKKyAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
CisgICAgdm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgZnJhbWVSZWN0KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKCFtX3NpemUuaXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKGluQm91
bmRzKGZyYW1lUmVjdCkpOworICAgICAgICBtX2ZyYW1lUmVjdCA9IGZyYW1lUmVjdDsKKyAgICB9
CisKKyAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKyAgICBJbnRS
ZWN0IGZyYW1lUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0OyB9CisKKyAgICB2b2lk
IGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1lbXNldChtX3BpeGVsc1B0ciwgMCwgbV9zaXplLmFy
ZWEoKSAqIHNpemVvZihSR0JBMzIpKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyUmVjdChjb25z
dCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHJlY3QuaXNFbXB0eSgpIHx8ICFp
bkJvdW5kcyhyZWN0KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzaXplX3QgcmVj
dFdpZHRoSW5CeXRlcyA9IHJlY3Qud2lkdGgoKSAqIHNpemVvZihSR0JBMzIpOworICAgICAgICBS
R0JBMzIqIHN0YXJ0ID0gYXQocmVjdC54KCksIHJlY3QueSgpKTsKKyAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCByZWN0LmhlaWdodCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1lbXNldChzdGFy
dCwgMCwgcmVjdFdpZHRoSW5CeXRlcyk7CisgICAgICAgICAgICBzdGFydCArPSBtX3NpemUud2lk
dGgoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgcmVwZWF0Rmlyc3RSb3coY29uc3Qg
SW50UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSB8fCAhaW5C
b3VuZHMocmVjdCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc2l6ZV90IHJlY3RX
aWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkgKiBzaXplb2YoUkdCQTMyKTsKKyAgICAgICAgUkdC
QTMyKiBzcmMgPSBhdChyZWN0LngoKSwgcmVjdC55KCkpOworICAgICAgICBSR0JBMzIqIGRlc3Qg
PSBzcmMgKyBtX3NpemUud2lkdGgoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCByZWN0
LmhlaWdodCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1lbWNweShkZXN0LCBzcmMsIHJlY3RXaWR0
aEluQnl0ZXMpOworICAgICAgICAgICAgZGVzdCArPSBtX3NpemUud2lkdGgoKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIFJHQkEzMiogYXQoaW50IHgsIGludCB5KSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fcGl4ZWxzUHRyICsgeSAqIG1fc2l6ZS53aWR0aCgpICsgeDsKKyAgICB9
CisKKyAgICB2b2lkIHNldFJHQkEoaW50IHgsIGludCB5LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBn
LCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgc2V0UkdCQShhdCh4LCB5
KSwgciwgZywgYiwgYSk7CisgICAgfQorCisgICAgdm9pZCBzZXRSR0JBKFJHQkEzMiogZGVzdCwg
dW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKKyAgICB7Cisg
ICAgICAgIGlmIChtX3ByZW11bHRpcGx5QWxwaGEgJiYgIWEpCisgICAgICAgICAgICAqZGVzdCA9
IDA7CisgICAgICAgIGVsc2UgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAmJiBhIDwgMjU1KQorICAg
ICAgICAgICAgKmRlc3QgPSBtYWtlUHJlbXVsdGlwbGllZFJHQkEociwgZywgYiwgYSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICpkZXN0ID0gbWFrZVJHQkEociwgZywgYiwgYSk7CisgICAg
fQorCisgICAgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVk
IGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAgeworICAgICAgICBpZiAoIWEpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKGEgPj0gMjU1IHx8ICFhbHBoYUNoYW5uZWwo
KmRlc3QpKSB7CisgICAgICAgICAgICBzZXRSR0JBKGRlc3QsIHIsIGcsIGIsIGEpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxw
aGEpCisgICAgICAgICAgICAqZGVzdCA9IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShyZWRDaGFubmVs
KCpkZXN0KSwgZ3JlZW5DaGFubmVsKCpkZXN0KSwgYmx1ZUNoYW5uZWwoKmRlc3QpLCBhbHBoYUNo
YW5uZWwoKmRlc3QpKTsKKworICAgICAgICB1bnNpZ25lZCBkID0gMjU1IC0gYTsKKworICAgICAg
ICByID0gZmFzdERpdmlkZUJ5MjU1KHIgKiBhICsgcmVkQ2hhbm5lbCgqZGVzdCkgKiBkKTsKKyAg
ICAgICAgZyA9IGZhc3REaXZpZGVCeTI1NShnICogYSArIGdyZWVuQ2hhbm5lbCgqZGVzdCkgKiBk
KTsKKyAgICAgICAgYiA9IGZhc3REaXZpZGVCeTI1NShiICogYSArIGJsdWVDaGFubmVsKCpkZXN0
KSAqIGQpOworICAgICAgICBhICs9IGZhc3REaXZpZGVCeTI1NShkICogYWxwaGFDaGFubmVsKCpk
ZXN0KSk7CisKKyAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSkKKyAgICAgICAgICAgICpk
ZXN0ID0gbWFrZVJHQkEociwgZywgYiwgYSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpk
ZXN0ID0gbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEociwgZywgYiwgYSk7CisgICAgfQorCisgICAg
Ym9vbCBpbkJvdW5kcyhjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXplKS5jb250YWlucyhyZWN0KTsKKyAgICB9
CisKKyAgICBzdGF0aWMgYm9vbCBpc092ZXJTaXplKGNvbnN0IEludFNpemUmIHNpemUpCisgICAg
eworICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIE1heFBpeGVscyA9ICgoMSA8PCAy
OSkgLSAxKTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHBpeGVscyA9IHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6ZS53aWR0aCgpKSAqIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGxvbmcgbG9uZz4oc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIHJldHVybiBwaXhlbHMgPiBNYXhQ
aXhlbHM7CisgICAgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxSR0JBMzI+IG1fcGl4ZWxzOwor
ICAgIFJHQkEzMiogbV9waXhlbHNQdHIgeyBudWxscHRyIH07CisgICAgSW50U2l6ZSBtX3NpemU7
CisgICAgSW50UmVjdCBtX2ZyYW1lUmVjdDsgLy8gVGhpcyB3aWxsIGFsd2F5cyBqdXN0IGJlIHRo
ZSBlbnRpcmUgYnVmZmVyIGV4Y2VwdCBmb3IgR0lGIGFuZCBQTkcgZnJhbWVzCisgICAgYm9vbCBt
X3ByZW11bHRpcGx5QWxwaGEgeyB0cnVlIH07Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAkocmV2
aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0
aXZlSW1hZ2VDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEwICs0NywxMCBAQCBJbnRTaXpl
IG5hdGl2ZUltYWdlU2l6ZShjb25zdCBOYXRpdmVJbWFnCiAgICAgcmV0dXJuIGltYWdlID8gSW50
U2l6ZShDR0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0KCkpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdl
LmdldCgpKSkgOiBJbnRTaXplKCk7CiB9CiAKLWJvb2wgbmF0aXZlSW1hZ2VIYXNBbHBoYShjb25z
dCBOYXRpdmVJbWFnZVB0ciYpCitib29sIG5hdGl2ZUltYWdlSGFzQWxwaGEoY29uc3QgTmF0aXZl
SW1hZ2VQdHImIGltYWdlKQogewotICAgIC8vIEZJWE1FOiBBbnN3ZXIgY29ycmVjdGx5IHRoZSBx
dWVzdGlvbjogZG9lcyB0aGUgQ0dJbWFnZVJlZiBoYXZlIGFscGhhIGNoYW5ubmVsPwotICAgIHJl
dHVybiB0cnVlOworICAgIENHSW1hZ2VBbHBoYUluZm8gaW5mbyA9IENHSW1hZ2VHZXRBbHBoYUlu
Zm8oaW1hZ2UuZ2V0KCkpOworICAgIHJldHVybiAoaW5mbyA+PSBrQ0dJbWFnZUFscGhhUHJlbXVs
dGlwbGllZExhc3QpICYmIChpbmZvIDw9IGtDR0ltYWdlQWxwaGFGaXJzdCk7CiB9CiAKIENvbG9y
IG5hdGl2ZUltYWdlU2luZ2xlUGl4ZWxTb2xpZENvbG9yKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBp
bWFnZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdl
RGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQxLDggKzE0MSw4IEBAIEltYWdlRnJhbWUmIEltYWdlRnJhbWU6Om9wZXJhdG9y
PShjb25zdCAKICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCiAgICAgICAgIHJldHVybiAqdGhpczsK
IAotICAgIGNvcHlCaXRtYXBEYXRhKG90aGVyKTsKLSAgICBzZXRPcmlnaW5hbEZyYW1lUmVjdChv
dGhlci5vcmlnaW5hbEZyYW1lUmVjdCgpKTsKKyAgICBzZXRCYWNraW5nU3RvcmUob3RoZXIuYmFj
a2luZ1N0b3JlKCkpOworICAgIHNldEhhc0FscGhhKG90aGVyLm1faGFzQWxwaGEpOwogICAgIHNl
dFN0YXR1cyhvdGhlci5zdGF0dXMoKSk7CiAgICAgc2V0RHVyYXRpb24ob3RoZXIuZHVyYXRpb24o
KSk7CiAgICAgc2V0RGlzcG9zYWxNZXRob2Qob3RoZXIuZGlzcG9zYWxNZXRob2QoKSk7CkBAIC0x
NTIsOCArMTUyLDcgQEAgSW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0IAog
CiB2b2lkIEltYWdlRnJhbWU6OmNsZWFyUGl4ZWxEYXRhKCkKIHsKLSAgICBtX2JhY2tpbmdTdG9y
ZS5jbGVhcigpOwotICAgIG1fYnl0ZXMgPSAwOworICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0
cjsKICAgICBtX3N0YXR1cyA9IEZyYW1lRW1wdHk7CiAgICAgLy8gTk9URTogRG8gbm90IHJlc2V0
IG90aGVyIG1lbWJlcnMgaGVyZTsgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKCkgY2FsbHMgdGhpcwog
ICAgIC8vIHRvIGZyZWUgdGhlIGJpdG1hcCBkYXRhLCBidXQgb3RoZXIgZnVuY3Rpb25zIGxpa2Ug
aW5pdEZyYW1lQnVmZmVyKCkgYW5kCkBAIC0xNjMsNTEgKzE2MiwzMSBAQCB2b2lkIEltYWdlRnJh
bWU6OmNsZWFyUGl4ZWxEYXRhKCkKIAogdm9pZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0
YSgpCiB7Ci0gICAgbWVtc2V0KG1fYnl0ZXMsIDAsIG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhl
aWdodCgpICogc2l6ZW9mKFBpeGVsRGF0YSkpOworICAgIG1fYmFja2luZ1N0b3JlLT5jbGVhcigp
OwogICAgIG1faGFzQWxwaGEgPSB0cnVlOwogfQogCiB2b2lkIEltYWdlRnJhbWU6Onplcm9GaWxs
RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgQVNTRVJUKEludFJlY3QoSW50
UG9pbnQoKSwgbV9zaXplKS5jb250YWlucyhyZWN0KSk7Ci0KICAgICBpZiAocmVjdC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNpemVfdCByZWN0V2lkdGhJbkJ5dGVzID0gcmVj
dC53aWR0aCgpICogc2l6ZW9mKFBpeGVsRGF0YSk7Ci0gICAgUGl4ZWxEYXRhKiBzdGFydCA9IG1f
Ynl0ZXMgKyAocmVjdC55KCkgKiB3aWR0aCgpKSArIHJlY3QueCgpOwotICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgcmVjdC5oZWlnaHQoKTsgKytpKSB7Ci0gICAgICAgIG1lbXNldChzdGFydCwgMCwg
cmVjdFdpZHRoSW5CeXRlcyk7Ci0gICAgICAgIHN0YXJ0ICs9IHdpZHRoKCk7Ci0gICAgfQotCisg
ICAgbV9iYWNraW5nU3RvcmUtPmNsZWFyUmVjdChyZWN0KTsKICAgICBzZXRIYXNBbHBoYSh0cnVl
KTsKIH0KIAotYm9vbCBJbWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YShjb25zdCBJbWFnZUZyYW1l
JiBvdGhlcikKK3ZvaWQgSW1hZ2VGcmFtZTo6c2V0QmFja2luZ1N0b3JlKGNvbnN0IEltYWdlQmFj
a2luZ1N0b3JlKiBiYWNraW5nU3RvcmUpCiB7Ci0gICAgaWYgKHRoaXMgPT0gJm90aGVyKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIG1fYmFja2luZ1N0b3JlID0gb3RoZXIubV9iYWNraW5n
U3RvcmU7Ci0gICAgbV9ieXRlcyA9IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsKLSAgICBtX3NpemUg
PSBvdGhlci5tX3NpemU7Ci0gICAgc2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBoYSk7Ci0gICAg
cmV0dXJuIHRydWU7CisgICAgaWYgKG1fYmFja2luZ1N0b3JlICYmIGJhY2tpbmdTdG9yZSA9PSBt
X2JhY2tpbmdTdG9yZS5nZXQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fYmFja2luZ1N0b3Jl
ID0gYmFja2luZ1N0b3JlID8gSW1hZ2VCYWNraW5nU3RvcmU6OmNyZWF0ZSgqYmFja2luZ1N0b3Jl
KSA6IG51bGxwdHI7CiB9CiAKLWJvb2wgSW1hZ2VGcmFtZTo6c2V0U2l6ZShpbnQgbmV3V2lkdGgs
IGludCBuZXdIZWlnaHQpCitib29sIEltYWdlRnJhbWU6OnNldFNpemUoY29uc3QgSW50U2l6ZSYg
c2l6ZSkKIHsKLSAgICBBU1NFUlQoIXdpZHRoKCkgJiYgIWhlaWdodCgpKTsKLSAgICBzaXplX3Qg
YmFja2luZ1N0b3JlU2l6ZSA9IG5ld1dpZHRoICogbmV3SGVpZ2h0OwotICAgIGlmICghbV9iYWNr
aW5nU3RvcmUudHJ5UmVzZXJ2ZUNhcGFjaXR5KGJhY2tpbmdTdG9yZVNpemUpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgbV9iYWNraW5nU3RvcmUucmVzaXplKGJhY2tpbmdTdG9yZVNpemUp
OwotICAgIG1fYnl0ZXMgPSBtX2JhY2tpbmdTdG9yZS5kYXRhKCk7Ci0gICAgbV9zaXplID0gSW50
U2l6ZShuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKLQotICAgIHplcm9GaWxsUGl4ZWxEYXRhKCk7Ci0g
ICAgcmV0dXJuIHRydWU7CisgICAgQVNTRVJUKCFtX2JhY2tpbmdTdG9yZSk7CisgICAgbV9iYWNr
aW5nU3RvcmUgPSBJbWFnZUJhY2tpbmdTdG9yZTo6Y3JlYXRlKHNpemUsIG1fcHJlbXVsdGlwbHlB
bHBoYSk7CisgICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlICE9IG51bGxwdHI7CiB9CiAKIGJvb2wg
SW1hZ2VGcmFtZTo6aGFzQWxwaGEoKSBjb25zdApAQCAtMjIwLDYgKzE5OSwxMiBAQCB2b2lkIElt
YWdlRnJhbWU6OnNldEhhc0FscGhhKGJvb2wgYWxwaGEpCiAgICAgbV9oYXNBbHBoYSA9IGFscGhh
OwogfQogCit2b2lkIEltYWdlRnJhbWU6OnNldE9yaWdpbmFsRnJhbWVSZWN0KGNvbnN0IEludFJl
Y3QmIGZyYW1lUmVjdCkKK3sKKyAgICBpZiAobV9iYWNraW5nU3RvcmUpCisgICAgICAgIG1fYmFj
a2luZ1N0b3JlLT5zZXRGcmFtZVJlY3QoZnJhbWVSZWN0KTsKK30KKwogdm9pZCBJbWFnZUZyYW1l
OjpzZXRTdGF0dXMoRnJhbWVTdGF0dXMgc3RhdHVzKQogewogICAgIG1fc3RhdHVzID0gc3RhdHVz
OwpAQCAtMjg2LDcgKzI3MSw3IEBAIHVuc2lnbmVkIEltYWdlRGVjb2Rlcjo6ZnJhbWVCeXRlc0F0
SW5kZXgKICAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hlLnNpemUoKSA8PSBpbmRleCkKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgLy8gRklYTUU6IFVzZSB0aGUgZGltZW5zaW9uIG9mIHRoZSByZXF1
ZXN0ZWQgZnJhbWUuCi0gICAgcmV0dXJuIG1fc2l6ZS5hcmVhKCkgKiBzaXplb2YoSW1hZ2VGcmFt
ZTo6UGl4ZWxEYXRhKTsKKyAgICByZXR1cm4gbV9zaXplLmFyZWEoKSAqIHNpemVvZihSR0JBMzIp
OwogfQogCiBmbG9hdCBJbWFnZURlY29kZXI6OmZyYW1lRHVyYXRpb25BdEluZGV4KHNpemVfdCBp
bmRleCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdl
RGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsOCArMjgsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJJbnRSZWN0Lmgi
CisjaW5jbHVkZSAiSW1hZ2VCYWNraW5nU3RvcmUuaCIKICNpbmNsdWRlICJJbWFnZVNvdXJjZS5o
IgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1TY3JlZW4uaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDx3
dGYvQXNzZXJ0aW9ucy5oPgpAQCAtNTcsNyArNTksNiBAQCB1c2luZyBDb2xvclByb2ZpbGUgPSBW
ZWN0b3I8Y2hhcj47CiAgICAgICAgICAgICBEaXNwb3NlT3ZlcndyaXRlUHJldmlvdXMgIC8vIENs
ZWFyIGZyYW1lIHRvIHByZXZpb3VzIGZyYW1lYnVmZmVyCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGNvbnRlbnRzCiAgICAgICAgIH07Ci0gICAgICAgIHR5cGVkZWYg
dW5zaWduZWQgUGl4ZWxEYXRhOwogCiAgICAgICAgIEltYWdlRnJhbWUoKTsKIApAQCAtNzIsMTUy
ICs3Myw2OSBAQCB1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hhcj47CiAgICAgICAgIHZv
aWQgemVyb0ZpbGxQaXhlbERhdGEoKTsKICAgICAgICAgdm9pZCB6ZXJvRmlsbEZyYW1lUmVjdChj
b25zdCBJbnRSZWN0Jik7CiAKLSAgICAgICAgLy8gTWFrZXMgdGhpcyBmcmFtZSBoYXZlIGFuIGlu
ZGVwZW5kZW50IGNvcHkgb2YgdGhlIHByb3ZpZGVkIGltYWdlJ3MKLSAgICAgICAgLy8gcGl4ZWwg
ZGF0YSwgc28gdGhhdCBtb2RpZmljYXRpb25zIGluIG9uZSBmcmFtZSBhcmUgbm90IHJlZmxlY3Rl
ZCBpbgotICAgICAgICAvLyB0aGUgb3RoZXIuICBSZXR1cm5zIHdoZXRoZXIgdGhlIGNvcHkgc3Vj
Y2VlZGVkLgotICAgICAgICBib29sIGNvcHlCaXRtYXBEYXRhKGNvbnN0IEltYWdlRnJhbWUmKTsK
LQogICAgICAgICAvLyBDb3BpZXMgdGhlIHBpeGVsIGRhdGEgYXQgWyhzdGFydFgsIHN0YXJ0WSks
IChlbmRYLCBzdGFydFkpKSB0byB0aGUKICAgICAgICAgLy8gc2FtZSBYLWNvb3JkaW5hdGVzIG9u
IGVhY2ggc3Vic2VxdWVudCByb3cgdXAgdG8gYnV0IG5vdCBpbmNsdWRpbmcKICAgICAgICAgLy8g
ZW5kWS4KICAgICAgICAgdm9pZCBjb3B5Um93TlRpbWVzKGludCBzdGFydFgsIGludCBlbmRYLCBp
bnQgc3RhcnRZLCBpbnQgZW5kWSkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHN0YXJ0
WCA8IHdpZHRoKCkpOwotICAgICAgICAgICAgQVNTRVJUKGVuZFggPD0gd2lkdGgoKSk7Ci0gICAg
ICAgICAgICBBU1NFUlQoc3RhcnRZIDwgaGVpZ2h0KCkpOwotICAgICAgICAgICAgQVNTRVJUKGVu
ZFkgPD0gaGVpZ2h0KCkpOwotICAgICAgICAgICAgY29uc3QgaW50IHJvd0J5dGVzID0gKGVuZFgg
LSBzdGFydFgpICogc2l6ZW9mKFBpeGVsRGF0YSk7Ci0gICAgICAgICAgICBjb25zdCBQaXhlbERh
dGEqIGNvbnN0IHN0YXJ0QWRkciA9IGdldEFkZHIoc3RhcnRYLCBzdGFydFkpOwotICAgICAgICAg
ICAgZm9yIChpbnQgZGVzdFkgPSBzdGFydFkgKyAxOyBkZXN0WSA8IGVuZFk7ICsrZGVzdFkpCi0g
ICAgICAgICAgICAgICAgbWVtY3B5KGdldEFkZHIoc3RhcnRYLCBkZXN0WSksIHN0YXJ0QWRkciwg
cm93Qnl0ZXMpOworICAgICAgICAgICAgbV9iYWNraW5nU3RvcmUtPnJlcGVhdEZpcnN0Um93KElu
dFJlY3Qoc3RhcnRYLCBzdGFydFksIGVuZFggLXN0YXJ0WCAsIGVuZFkgLSBzdGFydFkpKTsKICAg
ICAgICAgfQogCiAgICAgICAgIC8vIEFsbG9jYXRlcyBzcGFjZSBmb3IgdGhlIHBpeGVsIGRhdGEu
ICBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IHBpeGVscwogICAgICAgICAvLyBhcmUgd3JpdHRl
bi4gIE11c3Qgb25seSBiZSBjYWxsZWQgb25jZS4gIFJldHVybnMgd2hldGhlciBhbGxvY2F0aW9u
CiAgICAgICAgIC8vIHN1Y2NlZWRlZC4KLSAgICAgICAgYm9vbCBzZXRTaXplKGludCBuZXdXaWR0
aCwgaW50IG5ld0hlaWdodCk7CisgICAgICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJik7
CisgICAgICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlLT5z
aXplKCk7IH0KIAogICAgICAgICAvLyBSZXR1cm5zIGEgY2FsbGVyLW93bmVkIHBvaW50ZXIgdG8g
dGhlIHVuZGVybHlpbmcgbmF0aXZlIGltYWdlIGRhdGEuCiAgICAgICAgIC8vIChBY3R1YWwgdXNl
OiBUaGlzIHBvaW50ZXIgd2lsbCBiZSBvd25lZCBieSBCaXRtYXBJbWFnZSBhbmQgZnJlZWQgaW4K
ICAgICAgICAgLy8gRnJhbWVEYXRhOjpjbGVhcigpKS4KLSAgICAgICAgTmF0aXZlSW1hZ2VQdHIg
YXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0OworICAgICAgICBOYXRpdmVJbWFnZVB0ciBhc05ld05h
dGl2ZUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nU3RvcmUtPmltYWdlKCk7IH0KIAor
ICAgICAgICBpbmxpbmUgSW1hZ2VCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYmFja2luZ1N0b3JlID8gbV9iYWNraW5nU3RvcmUuZ2V0KCkgOiBudWxscHRyOyB9
CisgICAgICAgIGlubGluZSBib29sIGhhc0JhY2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIGJh
Y2tpbmdTdG9yZSgpOyB9CisgICAgICAgIAogICAgICAgICBib29sIGhhc0FscGhhKCkgY29uc3Q7
Ci0gICAgICAgIGNvbnN0IEludFJlY3QmIG9yaWdpbmFsRnJhbWVSZWN0KCkgY29uc3QgeyByZXR1
cm4gbV9vcmlnaW5hbEZyYW1lUmVjdDsgfQorICAgICAgICBJbnRSZWN0IG9yaWdpbmFsRnJhbWVS
ZWN0KCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nU3RvcmUgPyBtX2JhY2tpbmdTdG9yZS0+ZnJh
bWVSZWN0KCkgOiBJbnRSZWN0KCk7IH0KICAgICAgICAgRnJhbWVTdGF0dXMgc3RhdHVzKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KICAgICAgICAgdW5zaWduZWQgZHVyYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX2R1cmF0aW9uOyB9CiAgICAgICAgIEZyYW1lRGlzcG9zYWxNZXRob2QgZGlz
cG9zYWxNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3Bvc2FsTWV0aG9kOyB9CiAgICAgICAg
IGJvb2wgcHJlbXVsdGlwbHlBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlbXVsdGlwbHlBbHBo
YTsgfQogCisgICAgICAgIHZvaWQgc2V0QmFja2luZ1N0b3JlKGNvbnN0IEltYWdlQmFja2luZ1N0
b3JlKik7CisgICAgICAgIAogICAgICAgICB2b2lkIHNldEhhc0FscGhhKGJvb2wgYWxwaGEpOwot
ICAgICAgICB2b2lkIHNldE9yaWdpbmFsRnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIHIpIHsgbV9v
cmlnaW5hbEZyYW1lUmVjdCA9IHI7IH0KKyAgICAgICAgdm9pZCBzZXRPcmlnaW5hbEZyYW1lUmVj
dChjb25zdCBJbnRSZWN0Jik7CiAgICAgICAgIHZvaWQgc2V0U3RhdHVzKEZyYW1lU3RhdHVzIHN0
YXR1cyk7CiAgICAgICAgIHZvaWQgc2V0RHVyYXRpb24odW5zaWduZWQgZHVyYXRpb24pIHsgbV9k
dXJhdGlvbiA9IGR1cmF0aW9uOyB9CiAgICAgICAgIHZvaWQgc2V0RGlzcG9zYWxNZXRob2QoRnJh
bWVEaXNwb3NhbE1ldGhvZCBtZXRob2QpIHsgbV9kaXNwb3NhbE1ldGhvZCA9IG1ldGhvZDsgfQog
ICAgICAgICB2b2lkIHNldFByZW11bHRpcGx5QWxwaGEoYm9vbCBwcmVtdWx0aXBseUFscGhhKSB7
IG1fcHJlbXVsdGlwbHlBbHBoYSA9IHByZW11bHRpcGx5QWxwaGE7IH0KIAotICAgICAgICBpbmxp
bmUgdm9pZCBzZXRSR0JBKGludCB4LCBpbnQgeSwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5z
aWduZWQgYiwgdW5zaWduZWQgYSkKLSAgICAgICAgewotICAgICAgICAgICAgc2V0UkdCQShnZXRB
ZGRyKHgsIHkpLCByLCBnLCBiLCBhKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlubGluZSBQaXhl
bERhdGEqIGdldEFkZHIoaW50IHgsIGludCB5KQorICAgICAgICBpbmxpbmUgUkdCQTMyKiBnZXRB
ZGRyKGludCB4LCBpbnQgeSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXMg
KyAoeSAqIHdpZHRoKCkpICsgeDsKKyAgICAgICAgICAgIHJldHVybiBtX2JhY2tpbmdTdG9yZS0+
YXQoeCwgeSk7CiAgICAgICAgIH0KIAotICAgICAgICBpbmxpbmUgYm9vbCBoYXNQaXhlbERhdGEo
KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9ieXRlczsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIFVzZSBmaXggcG9pbnQgbXVsdGlwbGllciBpbnN0ZWFkIG9mIGludGVn
ZXIgZGl2aXNpb24gb3IgZmxvYXRpbmcgcG9pbnQgbWF0aC4KLSAgICAgICAgLy8gVGhpcyBtdWx0
aXBsZXIgcHJvZHVjZXMgZXhhY3RseSB0aGUgc2FtZSByZXN1bHQgZm9yIGFsbCB2YWx1ZXMgaW4g
cmFuZ2UgMCAtIDI1NS4KLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZpeFBvaW50U2hp
ZnQgPSAyNDsKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZpeFBvaW50TXVsdCA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkPigxLjAgLyAyNTUuMCAqICgxIDw8IGZpeFBvaW50U2hpZnQpKSAr
IDE7Ci0gICAgICAgIC8vIE11bHRpcGxpZXMgdW5zaWduZWQgdmFsdWUgYnkgZml4cG9pbnQgdmFs
dWUgYW5kIGNvbnZlcnRzIGJhY2sgdG8gdW5zaWduZWQuCi0gICAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkodW5zaWduZWQgZml4ZWQsIHVuc2lnbmVkIHYpCisg
ICAgICAgIGlubGluZSB2b2lkIHNldFJHQkEoaW50IHgsIGludCB5LCB1bnNpZ25lZCByLCB1bnNp
Z25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQogICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gIChmaXhlZCAqIHYpID4+IGZpeFBvaW50U2hpZnQ7CisgICAgICAgICAgICBtX2JhY2tp
bmdTdG9yZS0+c2V0UkdCQSh4LCB5LCByLCBnLCBiLCBhKTsKICAgICAgICAgfQogCi0gICAgICAg
IGlubGluZSB2b2lkIHNldFJHQkEoUGl4ZWxEYXRhKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25l
ZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JB
KFJHQkEzMiogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWdu
ZWQgYSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAmJiBh
IDwgMjU1KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFhKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICpkZXN0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhTXVsdCA9IGEgKiBmaXhQb2ludE11
bHQ7Ci0gICAgICAgICAgICAgICAgciA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShyLCBhbHBo
YU11bHQpOwotICAgICAgICAgICAgICAgIGcgPSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkoZywg
YWxwaGFNdWx0KTsKLSAgICAgICAgICAgICAgICBiID0gZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5
KGIsIGFscGhhTXVsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqZGVzdCA9IChhIDw8
IDI0IHwgciA8PCAxNiB8IGcgPDwgOCB8IGIpOworICAgICAgICAgICAgbV9iYWNraW5nU3RvcmUt
PnNldFJHQkEoZGVzdCwgciwgZywgYiwgYSk7CiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShBUE5H
KQotICAgICAgICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRpdmlkZTI1NSh1bnNpZ25lZCBhKQor
ICAgICAgICBpbmxpbmUgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIsIHVu
c2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiAoYSArIChhID4+IDgpICsgMSkgPj4gODsKLSAgICAgICAgfQotCi0gICAgICAgIGlu
bGluZSB2b2lkIG92ZXJSR0JBKFBpeGVsRGF0YSogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQg
ZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKCFh
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgaWYgKGEgPCAyNTUpIHsK
LSAgICAgICAgICAgICAgICB1bnNpZ25lZCBhRGVzdCA9ICgoKmRlc3QpID4+IDI0KSAmIDI1NTsK
LSAgICAgICAgICAgICAgICBpZiAoYURlc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgckRlc3QgPSAoKCpkZXN0KSA+PiAxNikgJiAyNTU7Ci0gICAgICAgICAgICAgICAgICAgIHVu
c2lnbmVkIGdEZXN0ID0gKCgqZGVzdCkgPj4gOCkgJiAyNTU7Ci0gICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGJEZXN0ID0gKCpkZXN0KSAmIDI1NTsKLSAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgYUF1eCA9IDI1NSAtIGE7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9wcmVtdWx0
aXBseUFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByRGVzdCA9IGRpdmlkZTI1NShy
RGVzdCAqIGFEZXN0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdEZXN0ID0gZGl2aWRlMjU1
KGdEZXN0ICogYURlc3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgYkRlc3QgPSBkaXZpZGUy
NTUoYkRlc3QgKiBhRGVzdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgciA9IGRpdmlkZTI1NShyICogYSArIHJEZXN0ICogYUF1eCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGcgPSBkaXZpZGUyNTUoZyAqIGEgKyBnRGVzdCAqIGFBdXgpOwotICAgICAgICAgICAg
ICAgICAgICBiID0gZGl2aWRlMjU1KGIgKiBhICsgYkRlc3QgKiBhQXV4KTsKLSAgICAgICAgICAg
ICAgICAgICAgYSArPSBkaXZpZGUyNTUoYURlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHIg
PSAociAqIDI1NSArIGEgLSAxKSAvIGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnID0gKGcg
KiAyNTUgKyBhIC0gMSkgLyBhOwotICAgICAgICAgICAgICAgICAgICAgICAgYiA9IChiICogMjU1
ICsgYSAtIDEpIC8gYTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAobV9wcmVtdWx0aXBseUFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBk
aXZpZGUyNTUociAqIGEpOwotICAgICAgICAgICAgICAgICAgICBnID0gZGl2aWRlMjU1KGcgKiBh
KTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IGRpdmlkZTI1NShiICogYSk7Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3QgPSAoYSA8PCAyNCB8IHIg
PDwgMTYgfCBnIDw8IDggfCBiKTsKKyAgICAgICAgICAgIG1fYmFja2luZ1N0b3JlLT5vdmVyUkdC
QShkZXN0LCByLCBnLCBiLCBhKTsKICAgICAgICAgfQogI2VuZGlmCiAKICAgICBwcml2YXRlOgot
ICAgICAgICBpbnQgd2lkdGgoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
bV9zaXplLndpZHRoKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgaGVpZ2h0KCkgY29uc3QK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsKLSAgICAgICAg
fQotCi0gICAgICAgIFZlY3RvcjxQaXhlbERhdGE+IG1fYmFja2luZ1N0b3JlOwotICAgICAgICBQ
aXhlbERhdGEqIG1fYnl0ZXM7IC8vIFRoZSBtZW1vcnkgaXMgYmFja2VkIGJ5IG1fYmFja2luZ1N0
b3JlLgotICAgICAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPElt
YWdlQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKICAgICAgICAgYm9vbCBtX2hhc0FscGhh
OwotICAgICAgICBJbnRSZWN0IG1fb3JpZ2luYWxGcmFtZVJlY3Q7IC8vIFRoaXMgd2lsbCBhbHdh
eXMganVzdCBiZSB0aGUgZW50aXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gYnVmZmVyIGV4Y2VwdCBmb3IgR0lGIGZyYW1lcyB3aG9zZQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIG9yaWdpbmFsIHJlY3Qgd2FzIHNtYWxsZXIgdGhhbiB0
aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdmVyYWxsIGltYWdl
IHNpemUuCiAgICAgICAgIEZyYW1lU3RhdHVzIG1fc3RhdHVzOwogICAgICAgICB1bnNpZ25lZCBt
X2R1cmF0aW9uOwogICAgICAgICBGcmFtZURpc3Bvc2FsTWV0aG9kIG1fZGlzcG9zYWxNZXRob2Q7
CkBAIC0yODcsMTEgKzIwNSwxMSBAQCB1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hhcj47
CiAKICAgICAgICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBzaXplIGlzIGxlZ2FsIChpLmUuIG5v
dCBnb2luZyB0byByZXN1bHQgaW4KICAgICAgICAgLy8gb3ZlcmZsb3cgZWxzZXdoZXJlKS4gIElm
IG5vdCwgbWFya3MgZGVjb2RpbmcgYXMgZmFpbGVkLgotICAgICAgICB2aXJ0dWFsIGJvb2wgc2V0
U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQorICAgICAgICB2aXJ0dWFsIGJv
b2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoaXNPdmVyU2l6ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgICAgIGlmIChJbWFnZUJhY2tp
bmdTdG9yZTo6aXNPdmVyU2l6ZShzaXplKSkKICAgICAgICAgICAgICAgICByZXR1cm4gc2V0RmFp
bGVkKCk7Ci0gICAgICAgICAgICBtX3NpemUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOworICAg
ICAgICAgICAgbV9zaXplID0gc2l6ZTsKICAgICAgICAgICAgIG1fc2l6ZUF2YWlsYWJsZSA9IHRy
dWU7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMzg2LDE1ICszMDQs
NiBAQCB1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hhcj47CiAgICAgICAgIEltYWdlT3Jp
ZW50YXRpb24gbV9vcmllbnRhdGlvbjsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIC8vIFNvbWUg
Y29kZSBwYXRocyBjb21wdXRlIHRoZSBzaXplIG9mIHRoZSBpbWFnZSBhcyAid2lkdGggKiBoZWln
aHQgKiA0IgotICAgICAgICAvLyBhbmQgcmV0dXJuIGl0IGFzIGEgKHNpZ25lZCkgaW50LiAgQXZv
aWQgb3ZlcmZsb3cuCi0gICAgICAgIHN0YXRpYyBib29sIGlzT3ZlclNpemUodW5zaWduZWQgd2lk
dGgsIHVuc2lnbmVkIGhlaWdodCkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQgbG9u
ZyBsb25nIHRvdGFsX3NpemUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHdpZHRo
KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBsb25nIGxvbmc+KGhlaWdodCk7Ci0gICAgICAgICAgICByZXR1cm4gdG90YWxf
c2l6ZSA+ICgoMSA8PCAyOSkgLSAxKTsKLSAgICAgICAgfQotCiAgICAgICAgIEludFNpemUgbV9z
aXplOwogICAgICAgICBib29sIG1fc2l6ZUF2YWlsYWJsZSB7IGZhbHNlIH07CiAjaWYgRU5BQkxF
KElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVy
LmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyAr
NzgsNyBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpkZWNvZGVCTVAoYm9vbCBvbmx5CiAgICAgLy8g
SW5pdGlhbGl6ZSB0aGUgZnJhbWVidWZmZXIgaWYgbmVlZGVkLgogICAgIEFTU0VSVChtX2J1ZmZl
cik7ICAvLyBQYXJlbnQgc2hvdWxkIHNldCB0aGlzIGJlZm9yZSBhc2tpbmcgdXMgdG8gZGVjb2Rl
IQogICAgIGlmIChtX2J1ZmZlci0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkg
ewotICAgICAgICBpZiAoIW1fYnVmZmVyLT5zZXRTaXplKG1fcGFyZW50LT5zaXplKCkud2lkdGgo
KSwgbV9wYXJlbnQtPnNpemUoKS5oZWlnaHQoKSkpCisgICAgICAgIGlmICghbV9idWZmZXItPnNl
dFNpemUobV9wYXJlbnQtPnNpemUoKSkpCiAgICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQtPnNl
dEZhaWxlZCgpOyAvLyBVbmFibGUgdG8gYWxsb2NhdGUuCiAgICAgICAgIG1fYnVmZmVyLT5zZXRT
dGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKICAgICAgICAgLy8gc2V0U2l6ZSgpIGNh
bGxzIGVyYXNlQVJHQigpLCB3aGljaCByZXNldHMgdGhlIGFscGhhIGZsYWcsIHNvIHdlIGZvcmNl
CkBAIC04Niw5ICs4Niw2IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OmRlY29kZUJNUChib29sIG9u
bHkKICAgICAgICAgLy8gdGhlc2UgMHMgY291bGQgYWN0dWFsbHkgc2hvdyB0aHJvdWdoLgogICAg
ICAgICBtX2J1ZmZlci0+c2V0SGFzQWxwaGEoZmFsc2UpOwogCi0gICAgICAgIC8vIEZvciBCTVBz
LCB0aGUgZnJhbWUgYWx3YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2UuCi0gICAgICAgIG1fYnVm
ZmVyLT5zZXRPcmlnaW5hbEZyYW1lUmVjdChJbnRSZWN0KEludFBvaW50KCksIG1fcGFyZW50LT5z
aXplKCkpKTsKLQogICAgICAgICBpZiAoIW1faXNUb3BEb3duKQogICAgICAgICAgICAgbV9jb29y
ZC5zZXRZKG1fcGFyZW50LT5zaXplKCkuaGVpZ2h0KCkgLSAxKTsKICAgICB9CkBAIC0xNzEsNyAr
MTY4LDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc0luZm9IZWFkZXIoKQogICAgICAg
ICByZXR1cm4gbV9wYXJlbnQtPnNldEZhaWxlZCgpOwogCiAgICAgLy8gU2V0IG91ciBzaXplLgot
ICAgIGlmICghbV9wYXJlbnQtPnNldFNpemUobV9pbmZvSGVhZGVyLmJpV2lkdGgsIG1faW5mb0hl
YWRlci5iaUhlaWdodCkpCisgICAgaWYgKCFtX3BhcmVudC0+c2V0U2l6ZShJbnRTaXplKG1faW5m
b0hlYWRlci5iaVdpZHRoLCBtX2luZm9IZWFkZXIuYmlIZWlnaHQpKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgLy8gRm9yIHBhbGV0dGVkIGltYWdlcywgYml0bWFwcyBjYW4gc2V0IGJp
Q2xyVXNlZCB0byAwIHRvIG1lYW4gImFsbApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VCYWNraW5nU3RvcmVDYWlyby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VC
YWNraW5nU3RvcmVDYWlyby5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VCYWNraW5nU3RvcmVDYWlyby5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkltYWdl
QmFja2luZ1N0b3JlLmgiCisKKyNpbmNsdWRlIDxjYWlyby5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQmFja2luZ1N0b3JlOjppbWFnZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRh
KAorICAgICAgICByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihjb25zdF9jYXN0PFJH
QkEzMio+KG1fcGl4ZWxzUHRyKSksCisgICAgICAgIENBSVJPX0ZPUk1BVF9BUkdCMzIsIHNpemUo
KS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCksIHNpemUoKS53aWR0aCgpICogc2l6ZW9mKFJHQkEz
MikpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdl
RGVjb2Rlci5jcHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MCwxMiArNjAsMTIgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgp
CiAgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCk7CiB9CiAKLWJvb2wg
R0lGSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQp
Citib29sIEdJRkltYWdlRGVjb2Rlcjo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogewot
ICAgIGlmIChJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpICYmIHNpemUoKSA9PSBJbnRT
aXplKHdpZHRoLCBoZWlnaHQpKQorICAgIGlmIChJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJs
ZSgpICYmIHRoaXMtPnNpemUoKSA9PSBzaXplKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAg
IGlmICghSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHdpZHRoLCBoZWlnaHQpKQorICAgIGlmICghSW1h
Z2VEZWNvZGVyOjpzZXRTaXplKHNpemUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBw
cmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKQEAgLTIxMywxMCArMjEzLDEwIEBAIGJvb2wg
R0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnMKIAogICAgIC8vIEluaXRpYWxpemUg
dGhlIGZyYW1lIGlmIG5lY2Vzc2FyeS4KICAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2ZyYW1l
QnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07Ci0gICAgaWYgKCgoYnVmZmVyLnN0YXR1cygpID09IElt
YWdlRnJhbWU6OkZyYW1lRW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkpIHx8
ICFidWZmZXIuaGFzUGl4ZWxEYXRhKCkpCisgICAgaWYgKCgoYnVmZmVyLnN0YXR1cygpID09IElt
YWdlRnJhbWU6OkZyYW1lRW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkpIHx8
ICFidWZmZXIuaGFzQmFja2luZ1N0b3JlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IEltYWdlRnJhbWU6OlBpeGVsRGF0YSogY3VycmVudEFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcih4
QmVnaW4sIHlCZWdpbik7CisgICAgUkdCQTMyKiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZlci5nZXRB
ZGRyKHhCZWdpbiwgeUJlZ2luKTsKICAgICAvLyBXcml0ZSBvbmUgcm93J3Mgd29ydGggb2YgZGF0
YSBpbnRvIHRoZSBmcmFtZS4gIAogICAgIGZvciAoaW50IHggPSB4QmVnaW47IHggPCB4RW5kOyAr
K3gpIHsKICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBzb3VyY2VWYWx1ZSA9IHJvd0J1ZmZl
clsobV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4KSAtIGZyYW1lQ29udGV4dC0+eE9m
ZnNldF07CkBAIC0zNjEsNyArMzYxLDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFt
ZUJ1ZmZlcih1bgogCiAgICAgaWYgKCFmcmFtZUluZGV4KSB7CiAgICAgICAgIC8vIFRoaXMgaXMg
dGhlIGZpcnN0IGZyYW1lLCBzbyB3ZSdyZSBub3QgcmVseWluZyBvbiBhbnkgcHJldmlvdXMgZGF0
YS4KLSAgICAgICAgaWYgKCFidWZmZXItPnNldFNpemUoc2NhbGVkU2l6ZSgpLndpZHRoKCksIHNj
YWxlZFNpemUoKS5oZWlnaHQoKSkpCisgICAgICAgIGlmICghYnVmZmVyLT5zZXRTaXplKHNjYWxl
ZFNpemUoKSkpCiAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgLy8gVGhlIHN0YXJ0aW5nIHN0YXRlIGZvciB0aGlzIGZyYW1lIGRlcGVuZHMgb24g
dGhlIHByZXZpb3VzIGZyYW1lJ3MKQEAgLTM4NywxMiArMzg3LDEyIEBAIGJvb2wgR0lGSW1hZ2VE
ZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW4KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IC8vIFdlIHdhbnQgdG8gY2xlYXIgdGhlIHByZXZpb3VzIGZyYW1lIHRvIHRyYW5zcGFyZW50LCB3
aXRob3V0CiAgICAgICAgICAgICAvLyBhZmZlY3RpbmcgcGl4ZWxzIGluIHRoZSBpbWFnZSBvdXRz
aWRlIG9mIHRoZSBmcmFtZS4KLSAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHByZXZSZWN0ID0g
cHJldkJ1ZmZlci0+b3JpZ2luYWxGcmFtZVJlY3QoKTsKKyAgICAgICAgICAgIEludFJlY3QgcHJl
dlJlY3QgPSBwcmV2QnVmZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgpOwogICAgICAgICAgICAgY29u
c3QgSW50U2l6ZSYgYnVmZmVyU2l6ZSA9IHNjYWxlZFNpemUoKTsKICAgICAgICAgICAgIGlmICgh
ZnJhbWVJbmRleCB8fCBwcmV2UmVjdC5jb250YWlucyhJbnRSZWN0KEludFBvaW50KCksIHNjYWxl
ZFNpemUoKSkpKSB7CiAgICAgICAgICAgICAgICAgLy8gQ2xlYXJpbmcgdGhlIGZpcnN0IGZyYW1l
LCBvciBhIGZyYW1lIHRoZSBzaXplIG9mIHRoZSB3aG9sZQogICAgICAgICAgICAgICAgIC8vIGlt
YWdlLCByZXN1bHRzIGluIGEgY29tcGxldGVseSBlbXB0eSBpbWFnZS4KLSAgICAgICAgICAgICAg
ICBpZiAoIWJ1ZmZlci0+c2V0U2l6ZShidWZmZXJTaXplLndpZHRoKCksIGJ1ZmZlclNpemUuaGVp
Z2h0KCkpKQorICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLT5zZXRTaXplKGJ1ZmZlclNpemUp
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIENvcHkgdGhlIHdob2xlIHByZXZpb3VzIGJ1ZmZl
ciwgdGhlbiBjbGVhciBqdXN0IGl0cyBmcmFtZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVy
LmgJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQs
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lv
bigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJnaWYiOyB9CiAgICAgICAgIHZvaWQgc2V0RGF0
YShTaGFyZWRCdWZmZXImIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKSBvdmVycmlkZTsKICAg
ICAgICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBvdmVycmlkZTsKLSAgICAgICAgYm9vbCBzZXRT
aXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpIG92ZXJyaWRlOworICAgICAgICBi
b29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwogICAgICAgICBzaXplX3QgZnJh
bWVDb3VudCgpIG92ZXJyaWRlOwogICAgICAgICBpbnQgcmVwZXRpdGlvbkNvdW50KCkgY29uc3Qg
b3ZlcnJpZGU7CiAgICAgICAgIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3Qg
aW5kZXgpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwCShyZXZpc2lv
biAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYv
R0lGSW1hZ2VSZWFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDcsNyArNDQ3LDcgQEAgYm9v
bCBHSUZJbWFnZVJlYWRlcjo6cGFyc2Uoc2l6ZV90IGRhdGFQbwogCiAgICAgICAgICAgICAvLyBD
QUxMQkFDSzogSW5mb3JtIHRoZSBkZWNvZGVycGx1Z2luIG9mIG91ciBzaXplLgogICAgICAgICAg
ICAgLy8gTm90ZTogQSBzdWJzZXF1ZW50IGZyYW1lIG1pZ2h0IGhhdmUgZGltZW5zaW9ucyBsYXJn
ZXIgdGhhbiB0aGUgInNjcmVlbiIgZGltZW5zaW9ucy4KLSAgICAgICAgICAgIGlmIChtX2NsaWVu
dCAmJiAhbV9jbGllbnQtPnNldFNpemUobV9zY3JlZW5XaWR0aCwgbV9zY3JlZW5IZWlnaHQpKQor
ICAgICAgICAgICAgaWYgKG1fY2xpZW50ICYmICFtX2NsaWVudC0+c2V0U2l6ZShXZWJDb3JlOjpJ
bnRTaXplKG1fc2NyZWVuV2lkdGgsIG1fc2NyZWVuSGVpZ2h0KSkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBtX3NjcmVlbkJnY29sb3IgPSBjdXJyZW50Q29t
cG9uZW50WzVdOwpAQCAtNjY0LDcgKzY2NCw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnBhcnNl
KHNpemVfdCBkYXRhUG8KICAgICAgICAgICAgICAgICB5T2Zmc2V0ID0gMDsKIAogICAgICAgICAg
ICAgICAgIC8vIENBTExCQUNLOiBJbmZvcm0gdGhlIGRlY29kZXJwbHVnaW4gb2Ygb3VyIHNpemUu
Ci0gICAgICAgICAgICAgICAgaWYgKG1fY2xpZW50ICYmICFtX2NsaWVudC0+c2V0U2l6ZShtX3Nj
cmVlbldpZHRoLCBtX3NjcmVlbkhlaWdodCkpCisgICAgICAgICAgICAgICAgaWYgKG1fY2xpZW50
ICYmICFtX2NsaWVudC0+c2V0U2l6ZShXZWJDb3JlOjpJbnRTaXplKG1fc2NyZWVuV2lkdGgsIG1f
c2NyZWVuSGVpZ2h0KSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
aWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDIw
NTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09J
bWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxMSArODgsMTEgQEAgSW50U2l6
ZSBJQ09JbWFnZURlY29kZXI6OmZyYW1lU2l6ZUF0SW5kZQogICAgIHJldHVybiAoaW5kZXggJiYg
KGluZGV4IDwgbV9kaXJFbnRyaWVzLnNpemUoKSkpID8gbV9kaXJFbnRyaWVzW2luZGV4XS5tX3Np
emUgOiBzaXplKCk7CiB9CiAKLWJvb2wgSUNPSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHVuc2lnbmVk
IHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCitib29sIElDT0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZShj
b25zdCBJbnRTaXplJiBzaXplKQogewogICAgIC8vIFRoZSBzaXplIGNhbGN1bGF0ZWQgaW5zaWRl
IHRoZSBCTVBJbWFnZVJlYWRlciBoYWQgYmV0dGVyIG1hdGNoIHRoZSBvbmUgaW4KICAgICAvLyB0
aGUgaWNvbiBkaXJlY3RvcnkuCi0gICAgcmV0dXJuIG1fZnJhbWVTaXplLmlzRW1wdHkoKSA/IElt
YWdlRGVjb2Rlcjo6c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSA6ICgoSW50U2l6ZSh3aWR0aCwgaGVp
Z2h0KSA9PSBtX2ZyYW1lU2l6ZSkgfHwgc2V0RmFpbGVkKCkpOworICAgIHJldHVybiBtX2ZyYW1l
U2l6ZS5pc0VtcHR5KCkgPyBJbWFnZURlY29kZXI6OnNldFNpemUoc2l6ZSkgOiAoc2l6ZSA9PSBt
X2ZyYW1lU2l6ZSkgfHwgc2V0RmFpbGVkKCkpOwogfQogCiBzaXplX3QgSUNPSW1hZ2VEZWNvZGVy
OjpmcmFtZUNvdW50KCkKQEAgLTI3OSw3ICsyNzksNyBAQCBib29sIElDT0ltYWdlRGVjb2Rlcjo6
cHJvY2Vzc0RpcmVjdG9yeUVuCiAgICAgY29uc3QgSWNvbkRpcmVjdG9yeUVudHJ5JiBkaXJFbnRy
eSA9IG1fZGlyRW50cmllcy5maXJzdCgpOwogICAgIC8vIFRlY2huaWNhbGx5LCB0aGlzIG5leHQg
Y2FsbCBzaG91bGRuJ3QgYmUgYWJsZSB0byBmYWlsLCBzaW5jZSB0aGUgd2lkdGgKICAgICAvLyBh
bmQgaGVpZ2h0IGhlcmUgYXJlIGVhY2ggPD0gMjU2LCBhbmQgfG1fZnJhbWVTaXplfCBpcyBlbXB0
eS4KLSAgICByZXR1cm4gc2V0U2l6ZShkaXJFbnRyeS5tX3NpemUud2lkdGgoKSwgZGlyRW50cnku
bV9zaXplLmhlaWdodCgpKTsKKyAgICByZXR1cm4gc2V0U2l6ZShkaXJFbnRyeS5tX3NpemUpOwog
fQogCiBJQ09JbWFnZURlY29kZXI6Okljb25EaXJlY3RvcnlFbnRyeSBJQ09JbWFnZURlY29kZXI6
OnJlYWREaXJlY3RvcnlFbnRyeSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oCShyZXZp
c2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9p
Y28vSUNPSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIG92ZXJyaWRl
OwogICAgICAgICBJbnRTaXplIHNpemUoKSBvdmVycmlkZTsKICAgICAgICAgSW50U2l6ZSBmcmFt
ZVNpemVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCkgb3ZlcnJpZGU7Ci0gICAgICAg
IGJvb2wgc2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KSBvdmVycmlkZTsK
KyAgICAgICAgYm9vbCBzZXRTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKICAgICAgICAg
c2l6ZV90IGZyYW1lQ291bnQoKSBvdmVycmlkZTsKICAgICAgICAgSW1hZ2VGcmFtZSogZnJhbWVC
dWZmZXJBdEluZGV4KHNpemVfdCkgb3ZlcnJpZGU7CiAgICAgICAgIC8vIENBVVRJT046IHNldEZh
aWxlZCgpIGRlbGV0ZXMgYWxsIHJlYWRlcnMgYW5kIGRlY29kZXJzLiAgQmUgY2FyZWZ1bCB0bwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1h
Z2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiAyMDU2ODQpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURl
Y29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjIsNyArMzIyLDcgQEAgcHVibGljOgogICAg
ICAgICAgICAgbV9zdGF0ZSA9IEpQRUdfU1RBUlRfREVDT01QUkVTUzsKIAogICAgICAgICAgICAg
Ly8gV2UgY2FuIGZpbGwgaW4gdGhlIHNpemUgbm93IHRoYXQgdGhlIGhlYWRlciBpcyBhdmFpbGFi
bGUuCi0gICAgICAgICAgICBpZiAoIW1fZGVjb2Rlci0+c2V0U2l6ZShtX2luZm8uaW1hZ2Vfd2lk
dGgsIG1faW5mby5pbWFnZV9oZWlnaHQpKQorICAgICAgICAgICAgaWYgKCFtX2RlY29kZXItPnNl
dFNpemUoSW50U2l6ZShtX2luZm8uaW1hZ2Vfd2lkdGgsIG1faW5mby5pbWFnZV9oZWlnaHQpKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIG1fZGVjb2Rlci0+
c2V0T3JpZW50YXRpb24ocmVhZEltYWdlT3JpZW50YXRpb24oaW5mbygpKSk7CkBAIC01MTksOSAr
NTE5LDkgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQogICAgIHJl
dHVybiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwogfQogCi1ib29sIEpQRUdJbWFn
ZURlY29kZXI6OnNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKK2Jvb2wg
SlBFR0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIGlm
ICghSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHdpZHRoLCBoZWlnaHQpKQorICAgIGlmICghSW1hZ2VE
ZWNvZGVyOjpzZXRTaXplKHNpemUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBwcmVw
YXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKQEAgLTU1MSw3ICs1NTEsNyBAQCBib29sIEpQRUdJ
bWFnZURlY29kZXI6OnNldEZhaWxlZCgpCiB9CiAKIHRlbXBsYXRlIDxKX0NPTE9SX1NQQUNFIGNv
bG9yU3BhY2U+Ci12b2lkIHNldFBpeGVsKEltYWdlRnJhbWUmIGJ1ZmZlciwgSW1hZ2VGcmFtZTo6
UGl4ZWxEYXRhKiBjdXJyZW50QWRkcmVzcywgSlNBTVBBUlJBWSBzYW1wbGVzLCBpbnQgY29sdW1u
KQordm9pZCBzZXRQaXhlbChJbWFnZUZyYW1lJiBidWZmZXIsIFJHQkEzMiogY3VycmVudEFkZHJl
c3MsIEpTQU1QQVJSQVkgc2FtcGxlcywgaW50IGNvbHVtbikKIHsKICAgICBKU0FNUExFKiBqc2Ft
cGxlID0gKnNhbXBsZXMgKyBjb2x1bW4gKiAoY29sb3JTcGFjZSA9PSBKQ1NfUkdCID8gMyA6IDQp
OwogCkBAIC01OTQsNyArNTk0LDcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2Fu
bGluZXMoSQogICAgICAgICBpZiAoZGVzdFkgPCAwKQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZlci5n
ZXRBZGRyKDAsIGRlc3RZKTsKKyAgICAgICAgUkdCQTMyKiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZl
ci5nZXRBZGRyKDAsIGRlc3RZKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsg
Kyt4KSB7CiAgICAgICAgICAgICBzZXRQaXhlbDxjb2xvclNwYWNlPihidWZmZXIsIGN1cnJlbnRB
ZGRyZXNzLCBzYW1wbGVzLCBpc1NjYWxlZCA/IG1fc2NhbGVkQ29sdW1uc1t4XSA6IHgpOwogICAg
ICAgICAgICAgKytjdXJyZW50QWRkcmVzczsKQEAgLTYxNywxNSArNjE3LDEyIEBAIGJvb2wgSlBF
R0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKCkKICAgICAvLyBJbml0aWFsaXplIHRoZSBm
cmFtZWJ1ZmZlciBpZiBuZWVkZWQuCiAgICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1
ZmZlckNhY2hlWzBdOwogICAgIGlmIChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJh
bWVFbXB0eSkgewotICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNjYWxlZFNpemUoKS53aWR0
aCgpLCBzY2FsZWRTaXplKCkuaGVpZ2h0KCkpKQorICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXpl
KHNjYWxlZFNpemUoKSkpCiAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgICAg
IGJ1ZmZlci5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKICAgICAgICAgLy8g
VGhlIGJ1ZmZlciBpcyB0cmFuc3BhcmVudCBvdXRzaWRlIHRoZSBkZWNvZGVkIGFyZWEgd2hpbGUg
dGhlIGltYWdlIGlzCiAgICAgICAgIC8vIGxvYWRpbmcuIFRoZSBjb21wbGV0ZWQgaW1hZ2Ugd2ls
bCBiZSBtYXJrZWQgZnVsbHkgb3BhcXVlIGluIGpwZWdDb21wbGV0ZSgpLgogICAgICAgICBidWZm
ZXIuc2V0SGFzQWxwaGEodHJ1ZSk7Ci0KLSAgICAgICAgLy8gRm9yIEpQRUdzLCB0aGUgZnJhbWUg
YWx3YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2UuCi0gICAgICAgIGJ1ZmZlci5zZXRPcmlnaW5h
bEZyYW1lUmVjdChJbnRSZWN0KEludFBvaW50KCksIHNpemUoKSkpOwogICAgIH0KIAogICAgIGpw
ZWdfZGVjb21wcmVzc19zdHJ1Y3QqIGluZm8gPSBtX3JlYWRlci0+aW5mbygpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
anBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
Ly8gSW1hZ2VEZWNvZGVyCiAgICAgICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuICJqcGciOyB9CiAgICAgICAgIGJvb2wgaXNTaXplQXZhaWxhYmxl
KCkgb3ZlcnJpZGU7Ci0gICAgICAgIGJvb2wgc2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWdu
ZWQgaGVpZ2h0KSBvdmVycmlkZTsKKyAgICAgICAgYm9vbCBzZXRTaXplKGNvbnN0IEludFNpemUm
KSBvdmVycmlkZTsKICAgICAgICAgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVf
dCBpbmRleCkgb3ZlcnJpZGU7CiAgICAgICAgIC8vIENBVVRJT046IHNldEZhaWxlZCgpIGRlbGV0
ZXMgfG1fcmVhZGVyfC4gIEJlIGNhcmVmdWwgdG8gYXZvaWQKICAgICAgICAgLy8gYWNjZXNzaW5n
IGRlbGV0ZWQgbWVtb3J5LCBlc3BlY2lhbGx5IHdoZW4gY2FsbGluZyB0aGlzIGZyb20gaW5zaWRl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1h
Z2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw5ICsyMzUsOSBAQCBib29sIFBOR0ltYWdlRGVj
b2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkKICAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVB
dmFpbGFibGUoKTsKIH0KIAotYm9vbCBQTkdJbWFnZURlY29kZXI6OnNldFNpemUodW5zaWduZWQg
d2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKK2Jvb2wgUE5HSW1hZ2VEZWNvZGVyOjpzZXRTaXplKGNv
bnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgaWYgKCFJbWFnZURlY29kZXI6OnNldFNpemUod2lk
dGgsIGhlaWdodCkpCisgICAgaWYgKCFJbWFnZURlY29kZXI6OnNldFNpemUoc2l6ZSkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgIHByZXBhcmVTY2FsZURhdGFJZk5lY2Vzc2FyeSgpOwpA
QCAtMjk1LDcgKzI5NSw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJBdmFpbGFibGUo
KQogICAgIC8vIHdpbGwgY2Vhc2UgdG8gZXhpc3QuICBOb3RlIHRoYXQgd2UnbGwgc3RpbGwgcHJv
cGVybHkgc2V0IHRoZSBmYWlsdXJlIGZsYWcKICAgICAvLyBpbiB0aGlzIGNhc2UgYXMgc29vbiBh
cyB3ZSBsb25nam1wKCkuCiAgICAgbV9kb05vdGhpbmdPbkZhaWx1cmUgPSB0cnVlOwotICAgIGJv
b2wgcmVzdWx0ID0gc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBib29sIHJlc3VsdCA9IHNl
dFNpemUoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CiAgICAgbV9kb05vdGhpbmdPbkZhaWx1cmUg
PSBmYWxzZTsKICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICBsb25nam1wKEpNUEJVRihwbmcp
LCAxKTsKQEAgLTQxMSwxOSArNDExLDE5IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJB
dmFpbGFibGUoKQogICAgIH0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldFBpeGVsUkdCKElt
YWdlRnJhbWU6OlBpeGVsRGF0YSogZGVzdCwgcG5nX2J5dGVwIHBpeGVsKQorc3RhdGljIGlubGlu
ZSB2b2lkIHNldFBpeGVsUkdCKFJHQkEzMiogZGVzdCwgcG5nX2J5dGVwIHBpeGVsKQogewogICAg
ICpkZXN0ID0gMHhGRjAwMDAwMFUgfCBwaXhlbFswXSA8PCAxNiB8IHBpeGVsWzFdIDw8IDggfCBw
aXhlbFsyXTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldFBpeGVsUkdCQShJbWFnZUZyYW1l
OjpQaXhlbERhdGEqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCwgdW5zaWduZWQgY2hhciYgbm9uVHJp
dmlhbEFscGhhTWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJHQkEoUkdCQTMyKiBk
ZXN0LCBwbmdfYnl0ZXAgcGl4ZWwsIHVuc2lnbmVkIGNoYXImIG5vblRyaXZpYWxBbHBoYU1hc2sp
CiB7CiAgICAgdW5zaWduZWQgY2hhciBhID0gcGl4ZWxbM107CiAgICAgKmRlc3QgPSBhIDw8IDI0
IHwgcGl4ZWxbMF0gPDwgMTYgfCBwaXhlbFsxXSA8PCA4IHwgcGl4ZWxbMl07CiAgICAgbm9uVHJp
dmlhbEFscGhhTWFzayB8PSAoMjU1IC0gYSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRQ
aXhlbFByZW11bHRpcGxpZWRSR0JBKEltYWdlRnJhbWU6OlBpeGVsRGF0YSogZGVzdCwgcG5nX2J5
dGVwIHBpeGVsLCB1bnNpZ25lZCBjaGFyJiBub25Ucml2aWFsQWxwaGFNYXNrKQorc3RhdGljIGlu
bGluZSB2b2lkIHNldFBpeGVsUHJlbXVsdGlwbGllZFJHQkEoUkdCQTMyKiBkZXN0LCBwbmdfYnl0
ZXAgcGl4ZWwsIHVuc2lnbmVkIGNoYXImIG5vblRyaXZpYWxBbHBoYU1hc2spCiB7CiAgICAgdW5z
aWduZWQgY2hhciBhID0gcGl4ZWxbM107CiAgICAgdW5zaWduZWQgY2hhciByID0gZmFzdERpdmlk
ZUJ5MjU1KHBpeGVsWzBdICogYSk7CkBAIC00NDcsNyArNDQ3LDcgQEAgdm9pZCBQTkdJbWFnZURl
Y29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZwogICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJh
bWVCdWZmZXJDYWNoZVttX2N1cnJlbnRGcmFtZV07CiAgICAgaWYgKGJ1ZmZlci5zdGF0dXMoKSA9
PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSB7CiAgICAgICAgIHBuZ19zdHJ1Y3RwIHBuZyA9IG1f
cmVhZGVyLT5wbmdQdHIoKTsKLSAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzY2FsZWRTaXpl
KCkud2lkdGgoKSwgc2NhbGVkU2l6ZSgpLmhlaWdodCgpKSkgeworICAgICAgICBpZiAoIWJ1ZmZl
ci5zZXRTaXplKHNjYWxlZFNpemUoKSkpIHsKICAgICAgICAgICAgIGxvbmdqbXAoSk1QQlVGKHBu
ZyksIDEpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC00NzEsOCArNDcxLDYg
QEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZwogICAgICAgICAgICAg
aW5pdEZyYW1lQnVmZmVyKG1fY3VycmVudEZyYW1lKTsKICAgICAgICAgZWxzZQogI2VuZGlmCi0g
ICAgICAgIC8vIEZvciBQTkdzLCB0aGUgZnJhbWUgYWx3YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1h
Z2UuCi0gICAgICAgIGJ1ZmZlci5zZXRPcmlnaW5hbEZyYW1lUmVjdChJbnRSZWN0KEludFBvaW50
KCksIHNpemUoKSkpOwogICAgIH0KIAogICAgIC8qIGxpYnBuZyBjb21tZW50cyAoaGVyZSB0byBl
eHBsYWluIHdoYXQgZm9sbG93cykuCkBAIC01MzEsNyArNTI5LDcgQEAgdm9pZCBQTkdJbWFnZURl
Y29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZwogICAgIH0KIAogICAgIC8vIFdyaXRlIHRoZSBkZWNv
ZGVkIHJvdyBwaXhlbHMgdG8gdGhlIGZyYW1lIGJ1ZmZlci4KLSAgICBJbWFnZUZyYW1lOjpQaXhl
bERhdGEqIGFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcigwLCB5KTsKKyAgICBSR0JBMzIqIGFkZHJl
c3MgPSBidWZmZXIuZ2V0QWRkcigwLCB5KTsKICAgICBpbnQgd2lkdGggPSBzY2FsZWRTaXplKCku
d2lkdGgoKTsKICAgICB1bnNpZ25lZCBjaGFyIG5vblRyaXZpYWxBbHBoYU1hc2sgPSAwOwogCkBA
IC04MjAsNyArODE4LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcihz
aQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFdlIHdhbnQgdG8gY2xlYXIgdGhlIHByZXZpb3Vz
IGZyYW1lIHRvIHRyYW5zcGFyZW50LCB3aXRob3V0CiAgICAgICAgIC8vIGFmZmVjdGluZyBwaXhl
bHMgaW4gdGhlIGltYWdlIG91dHNpZGUgb2YgdGhlIGZyYW1lLgotICAgICAgICBjb25zdCBJbnRS
ZWN0JiBwcmV2UmVjdCA9IHByZXZCdWZmZXItPm9yaWdpbmFsRnJhbWVSZWN0KCk7CisgICAgICAg
IEludFJlY3QgcHJldlJlY3QgPSBwcmV2QnVmZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgpOwogICAg
ICAgICBpZiAoIWZyYW1lSW5kZXggfHwgcHJldlJlY3QuY29udGFpbnMoSW50UmVjdChJbnRQb2lu
dCgpLCBzY2FsZWRTaXplKCkpKSkgewogICAgICAgICAgICAgLy8gQ2xlYXJpbmcgdGhlIGZpcnN0
IGZyYW1lLCBvciBhIGZyYW1lIHRoZSBzaXplIG9mIHRoZSB3aG9sZQogICAgICAgICAgICAgLy8g
aW1hZ2UsIHJlc3VsdHMgaW4gYSBjb21wbGV0ZWx5IGVtcHR5IGltYWdlLgpAQCAtODQ0LDcgKzg0
Miw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKCkKICAgICBwbmdfYnl0
ZXAgaW50ZXJsYWNlQnVmZmVyID0gbV9yZWFkZXItPmludGVybGFjZUJ1ZmZlcigpOwogCiAgICAg
aWYgKG1fY3VycmVudEZyYW1lICYmIGludGVybGFjZUJ1ZmZlcikgewotICAgICAgICBjb25zdCBJ
bnRSZWN0JiByZWN0ID0gYnVmZmVyLm9yaWdpbmFsRnJhbWVSZWN0KCk7CisgICAgICAgIEludFJl
Y3QgcmVjdCA9IGJ1ZmZlci5vcmlnaW5hbEZyYW1lUmVjdCgpOwogICAgICAgICBib29sIGhhc0Fs
cGhhID0gbV9yZWFkZXItPmhhc0FscGhhKCk7CiAgICAgICAgIHVuc2lnbmVkIGNvbG9yQ2hhbm5l
bHMgPSBoYXNBbHBoYSA/IDQgOiAzOwogICAgICAgICBib29sIG5vblRyaXZpYWxBbHBoYSA9IGZh
bHNlOwpAQCAtODU0LDcgKzg1Miw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBs
ZXRlKCkKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQogICAgICAgICBm
b3IgKGludCB5ID0gMDsgeSA8IHJlY3QubWF4WSgpIC0gcmVjdC55KCk7ICsreSkgewogICAgICAg
ICAgICAgcG5nX2J5dGVwIHJvdyA9IGludGVybGFjZUJ1ZmZlciArIChtX3NjYWxlZCA/IG1fc2Nh
bGVkUm93c1t5XSA6IHkpICogY29sb3JDaGFubmVscyAqIHNpemUoKS53aWR0aCgpOwotICAgICAg
ICAgICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIocmVj
dC54KCksIHkgKyByZWN0LnkoKSk7CisgICAgICAgICAgICBSR0JBMzIqIGFkZHJlc3MgPSBidWZm
ZXIuZ2V0QWRkcihyZWN0LngoKSwgeSArIHJlY3QueSgpKTsKICAgICAgICAgICAgIGZvciAoaW50
IHggPSAwOyB4IDwgcmVjdC5tYXhYKCkgLSByZWN0LngoKTsgKyt4KSB7CiAgICAgICAgICAgICAg
ICAgcG5nX2J5dGVwIHBpeGVsID0gcm93ICsgKG1fc2NhbGVkID8gbV9zY2FsZWRDb2x1bW5zW3hd
IDogeCkgKiBjb2xvckNoYW5uZWxzOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0g
aGFzQWxwaGEgPyBwaXhlbFszXSA6IDI1NTsKQEAgLTg3MCw3ICs4NjgsNyBAQCB2b2lkIFBOR0lt
YWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAgICAgICAgIHBuZ19ieXRlcCByb3cgPSBpbnRl
cmxhY2VCdWZmZXI7CiAgICAgICAgIGZvciAoaW50IHkgPSByZWN0LnkoKTsgeSA8IHJlY3QubWF4
WSgpOyArK3ksIHJvdyArPSBjb2xvckNoYW5uZWxzICogc2l6ZSgpLndpZHRoKCkpIHsKICAgICAg
ICAgICAgIHBuZ19ieXRlcCBwaXhlbCA9IHJvdzsKLSAgICAgICAgICAgIEltYWdlRnJhbWU6OlBp
eGVsRGF0YSogYWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHJlY3QueCgpLCB5KTsKKyAgICAgICAg
ICAgIFJHQkEzMiogYWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHJlY3QueCgpLCB5KTsKICAgICAg
ICAgICAgIGZvciAoaW50IHggPSByZWN0LngoKTsgeCA8IHJlY3QubWF4WCgpOyArK3gsIHBpeGVs
ICs9IGNvbG9yQ2hhbm5lbHMpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IGhh
c0FscGhhID8gcGl4ZWxbM10gOiAyNTU7CiAgICAgICAgICAgICAgICAgbm9uVHJpdmlhbEFscGhh
IHw9IGFscGhhIDwgMjU1OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAkocmV2aXNpb24g
MjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BO
R0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgaW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1fcGxheUNvdW50LTE7IH0KICNlbmRpZgogICAgICAgICBib29sIGlzU2l6ZUF2
YWlsYWJsZSgpIG92ZXJyaWRlOwotICAgICAgICBib29sIHNldFNpemUodW5zaWduZWQgd2lkdGgs
IHVuc2lnbmVkIGhlaWdodCkgb3ZlcnJpZGU7CisgICAgICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJ
bnRTaXplJikgb3ZlcnJpZGU7CiAgICAgICAgIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRl
eChzaXplX3QgaW5kZXgpIG92ZXJyaWRlOwogICAgICAgICAvLyBDQVVUSU9OOiBzZXRGYWlsZWQo
KSBkZWxldGVzIHxtX3JlYWRlcnwuICBCZSBjYXJlZnVsIHRvIGF2b2lkCiAgICAgICAgIC8vIGFj
Y2Vzc2luZyBkZWxldGVkIG1lbW9yeSwgZXNwZWNpYWxseSB3aGVuIGNhbGxpbmcgdGhpcyBmcm9t
IGluc2lkZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2Vi
cC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiAy
MDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dF
QlBJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1LDcgQEAgYm9v
bCBXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBvbmx5UwogICAgICAgICAgICAgcmV0dXJu
IHNldEZhaWxlZCgpOwogICAgICAgICBtX2hhc0FscGhhID0gZmFsc2U7CiAjZW5kaWYKLSAgICAg
ICAgaWYgKCFzZXRTaXplKHdpZHRoLCBoZWlnaHQpKQorICAgICAgICBpZiAoIXNldFNpemUoSW50
U2l6ZSh3aWR0aCwgaGVpZ2h0KSkpCiAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAg
ICAgfQogCkBAIC0xMjgsMTggKzEyOCwxNyBAQCBib29sIFdFQlBJbWFnZURlY29kZXI6OmRlY29k
ZShib29sIG9ubHlTCiAgICAgQVNTRVJUKGJ1ZmZlci5zdGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpG
cmFtZUNvbXBsZXRlKTsKIAogICAgIGlmIChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6
RnJhbWVFbXB0eSkgewotICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNpemUoKS53aWR0aCgp
LCBzaXplKCkuaGVpZ2h0KCkpKQorICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNpemUoKSkp
CiAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgICAgIGJ1ZmZlci5zZXRTdGF0
dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhh
KG1faGFzQWxwaGEpOwotICAgICAgICBidWZmZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVj
dChJbnRQb2ludCgpLCBzaXplKCkpKTsKICAgICB9CiAKICAgICBpZiAoIW1fZGVjb2Rlcikgewog
ICAgICAgICBXRUJQX0NTUF9NT0RFIG1vZGUgPSBvdXRwdXRNb2RlKG1faGFzQWxwaGEpOwogICAg
ICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkKICAgICAgICAgICAgIG1vZGUgPSBvdXRwdXRN
b2RlKGZhbHNlKTsKLSAgICAgICAgaW50IHJvd1N0cmlkZSA9IHNpemUoKS53aWR0aCgpICogc2l6
ZW9mKEltYWdlRnJhbWU6OlBpeGVsRGF0YSk7CisgICAgICAgIGludCByb3dTdHJpZGUgPSBzaXpl
KCkud2lkdGgoKSAqIHNpemVvZihSR0JBMzIpOwogICAgICAgICB1aW50OF90KiBvdXRwdXQgPSBy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIuZ2V0QWRkcigwLCAwKSk7CiAgICAgICAg
IGludCBvdXRwdXRTaXplID0gc2l6ZSgpLmhlaWdodCgpICogcm93U3RyaWRlOwogICAgICAgICBt
X2RlY29kZXIgPSBXZWJQSU5ld1JHQihtb2RlLCBvdXRwdXQsIG91dHB1dFNpemUsIHJvd1N0cmlk
ZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288468</attachid>
            <date>2016-09-09 18:35:59 -0700</date>
            <delta_ts>2016-09-09 18:46:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159679-20160909183330.patch</filename>
            <type>text/plain</type>
            <size>56608</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTc4MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBAQAorMjAxNi0wOS0wOSAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgdGhl
IHBpeGVsIGRhdGEgb2YgSW1hZ2VGcmFtZSB0byBhIHNlcGFyYXRlIGNsYXNzIG5hbWVkIEltYWdl
QmFja2luZ1N0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTk2NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNb3ZlIHRoZSBwaXhlbCBkYXRhIG1hbmlwdWxhdGlvbiBwYXJ0IGluIEltYWdlRnJhbWUg
aW50byBhIHNlcGFyYXRlIGNsYXNzCisgICAgICAgIGFuZCBhbGxvY2F0ZSBpdCBvbiBkZW1hbmQu
CisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5j
bWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbkNhaXJvLmNtYWtlOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2hhbm5lbCk6Cisg
ICAgICAgIChXZWJDb3JlOjp1bnByZW11bHRpcGxpZWRDaGFubmVsKToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VQcmVtdWx0aXBsaWVkUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlVW5QcmVt
dWx0aXBsaWVkUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpjb2xvckZyb21QcmVtdWx0aXBsaWVk
QVJHQik6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OmZh
c3RNdWx0aXBseUJ5MjU1KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tp
bmdTdG9yZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OkltYWdlQmFja2lu
Z1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRGcmFtZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OnNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCYWNraW5nU3RvcmU6OmZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJhY2tpbmdTdG9yZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3Rv
cmU6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJhY2tpbmdTdG9yZTo6cmVw
ZWF0Rmlyc3RSb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OmF0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRSR0JBKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpvdmVyUkdCQSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJhY2tpbmdTdG9yZTo6aW5Cb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
YWNraW5nU3RvcmU6OmlzT3ZlclNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L05hdGl2ZUltYWdlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmF0aXZlSW1hZ2VIYXNBbHBo
YSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojp6ZXJvRmlsbEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjb3B5
Qml0bWFwRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldE9yaWdpbmFsRnJhbWVSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVCeXRlc0F0SW5kZXgpOgorICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VGcmFtZTo6Y29weVJvd05UaW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6YmFja2luZ1N0b3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Omhhc0JhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpvcmlnaW5hbEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjpnZXRBZGRyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldFJH
QkEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6b3ZlclJHQkEpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWU6OnNldE9yaWdpbmFsRnJhbWVSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRnJhbWU6Omhhc1BpeGVsRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjpmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZTo6ZGl2aWRlMjU1KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWU6OndpZHRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWU6OmhlaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6
OmlzT3ZlclNpemUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2JtcC9CTVBJbWFnZVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRl
cjo6ZGVjb2RlQk1QKToKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpwcm9jZXNz
SW5mb0hlYWRlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1h
Z2VCYWNraW5nU3RvcmVDYWlyby5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
YWNraW5nU3RvcmU6OmltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9n
aWYvR0lGSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rl
cjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNv
ZGVkUm93KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVm
ZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNv
ZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVh
ZGVyLmNwcDoKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpwYXJzZSk6CisgICAgICAgICogcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJQ09JbWFnZURlY29kZXI6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SUNP
SW1hZ2VEZWNvZGVyOjpwcm9jZXNzRGlyZWN0b3J5RW50cmllcyk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VSZWFkZXI6OmRlY29kZSk6CisgICAgICAgIChXZWJD
b3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFBp
eGVsKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5l
cyk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNv
ZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVj
b2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnNldFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJBdmFpbGFibGUpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxSR0IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxS
R0JBKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVsUHJlbXVsdGlwbGllZFJHQkEpOgorICAg
ICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgICogcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldFQlBJbWFnZURlY29kZXI6OmRlY29kZSk6CisKIDIwMTYtMDktMDkgIENvbW1pdCBR
dWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJv
bGxpbmcgb3V0IHIyMDU3NzEuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFr
ZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQkocmV2aXNp
b24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UJKHdvcmtpbmcg
Y29weSkKQEAgLTE4MywxMCArMTgzLDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MveDExL1BsYXRmb3JtRGlzcGxheVgxMS5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy94MTEvWFVuaXF1ZVJlc291cmNlLmNwcAogCisgICAgcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VCYWNraW5nU3RvcmVDYWlyby5jcHAKICAgICBwbGF0Zm9y
bS9pbWFnZS1lbmNvZGVycy9KUEVHSW1hZ2VFbmNvZGVyLmNwcAogCi0gICAgcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCi0KICAgICBwbGF0Zm9ybS9u
ZXR3b3JrL2VmbC9OZXR3b3JrU3RhdGVOb3RpZmllckVmbC5jcHAKIAogICAgIHBsYXRmb3JtL25l
dHdvcmsvc291cC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNvdXAuY3BwCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUdUSy5jbWFrZQkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1HVEsuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw3ICsxNTUsNyBAQCBsaXN0KEFQ
UEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJz
LmNwcAogICAgIHBsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuY3BwCiAKLSAgICBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZUJhY2tpbmdTdG9yZUNhaXJvLmNwcAogCiAgICAgcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3RrL1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlR3RrLmNwcAog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UJKHJldmlzaW9uIDIwNTY4
NCkKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDcgKzQ2LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAKIAot
ICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAor
ICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3JlQ2Fpcm8u
Y3BwCiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvblN0dWIuY3Bw
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjI3NSw2ICsyMjc1LDcg
QEAKIAkJNTU1Qjg3RUMxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1NUI4N0VBMUNBQUYw
QUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAgKi87IH07CiAJCTU1NUI4N0VEMUNBQUYw
QUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVj
b2RlckNHLmggKi87IH07CiAJCTU1QTMzNkY3MUQ4MjA5RjQwMDIyQzRDNyAvKiBOYXRpdmVJbWFn
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVBMzM2
RjYxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi87IH07CisJCTU1QTMzNkY5MUQ4
MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVBMzM2RjgxRDgyMUUzQzAwMjJDNEM3IC8qIElt
YWdlQmFja2luZ1N0b3JlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTcwOUU4Q0QxRDQxM0Q0NzAwMzI0NEFDIC8qIFdlYktpdFN1YnRsZUNyeXB0
by5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzA5
RThDQTFENDEzQ0UzMDAzMjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5cHRvLmNwcCAqLzsgfTsKIAkJ
NTcwOUU4Q0UxRDQxM0Q1QjAwMzI0NEFDIC8qIEpTV2ViS2l0U3VidGxlQ3J5cHRvQ3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRkY4RjY2
MTgwNzQ2MDgwMDEzMjY3NCAvKiBKU1dlYktpdFN1YnRsZUNyeXB0b0N1c3RvbS5jcHAgKi87IH07
CiAJCTU3MDlFOENGMUQ0MTNEOUEwMDMyNDRBQyAvKiBXZWJLaXRTdWJ0bGVDcnlwdG8uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MDlFOENCMUQ0MTND
RTMwMDMyNDRBQyAvKiBXZWJLaXRTdWJ0bGVDcnlwdG8uaCAqLzsgfTsKQEAgLTkyOTEsNiArOTI5
Miw3IEBACiAJCTU1NUI4N0VBMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZURlY29kZXJDRy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1NUI4N0VCMUNBQUYwQUIwMDM0OTQyNSAv
KiBJbWFnZURlY29kZXJDRy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFn
ZURlY29kZXJDRy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUEzMzZGNjFEODIw
OUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTmF0aXZlSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVBMzM2
RjgxRDgyMUUzQzAwMjJDNEM3IC8qIEltYWdlQmFja2luZ1N0b3JlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQmFja2luZ1N0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTU1RDQwOEY3MUE3QzYzMTgwMEM3ODQ1MCAvKiBTVkdJbWFnZUNsaWVudHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHSW1hZ2VDbGllbnRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MDlFOENBMUQ0MTNDRTMwMDMyNDRBQyAvKiBX
ZWJLaXRTdWJ0bGVDcnlwdG8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2ViS2l0U3VidGxlQ3J5cHRvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTcwOUU4Q0IxRDQxM0NFMzAwMzI0NEFDIC8qIFdlYktpdFN1YnRsZUNyeXB0by5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRTdWJ0bGVDcnlwdG8uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwNzY5LDYgKzIwNzcxLDcgQEAKIAkJCQkzNzk5MTk5NDEy
MDBEREY0MDBFQTA0MUMgLyogV09GRkZpbGVGb3JtYXQuY3BwICovLAogCQkJCTM3OTkxOTk1MTIw
MERERjQwMEVBMDQxQyAvKiBXT0ZGRmlsZUZvcm1hdC5oICovLAogCQkJCTU1QTMzNkY2MUQ4MjA5
RjQwMDIyQzRDNyAvKiBOYXRpdmVJbWFnZS5oICovLAorCQkJCTU1QTMzNkY4MUQ4MjFFM0MwMDIy
QzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oICovLAogCQkJKTsKIAkJCXBhdGggPSBncmFwaGlj
czsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yNjMzOSw2ICsyNjM0Miw3IEBACiAJ
CQkJNTgyQ0IwNTMxQTc4QTE0QjAwQUZGQ0M0IC8qIFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21l
bnRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzVBMUVBN0QxNTJCQ0YwODAwNEQwMEI2
IC8qIFNpbXBsaWZ5TWFya3VwQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTcyQTdGMjEx
QzZFNTcxOTAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
NUEzMzZGOTFEODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTMxNzQxQUFEMTY2MzY2MDkwMDhBNUI3RSAvKiBTaW11bGF0ZWRDbGlja09wdGlv
bnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMDBEN0E1MTRBM0Y2MTkwMDczNDAxMSAvKiBTaW5j
UmVzYW1wbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTMyN0Q2MDExQTMzQTJCMDA0RjlENjUg
LyogU2lua0RvY3VtZW50LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDks
NiArNDksMTYgQEAgY29uc3QgUkdCQTMyIENvbG9yOjp0cmFuc3BhcmVudDsKIHN0YXRpYyBjb25z
dCBSR0JBMzIgbGlnaHRlbmVkQmxhY2sgPSAweEZGNTQ1NDU0Owogc3RhdGljIGNvbnN0IFJHQkEz
MiBkYXJrZW5lZFdoaXRlID0gMHhGRkFCQUJBQjsKIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBw
cmVtdWx0aXBsaWVkQ2hhbm5lbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBhKQoreworICAgIHJldHVy
biBmYXN0RGl2aWRlQnkyNTUoYyAqIGEgKyAyNTQpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2ln
bmVkIHVucHJlbXVsdGlwbGllZENoYW5uZWwodW5zaWduZWQgYywgdW5zaWduZWQgYSkKK3sKKyAg
ICByZXR1cm4gKGZhc3RNdWx0aXBseUJ5MjU1KGMpICsgYSAtIDEpIC8gYTsKK30KKwogUkdCQTMy
IG1ha2VSR0IoaW50IHIsIGludCBnLCBpbnQgYikKIHsKICAgICByZXR1cm4gMHhGRjAwMDAwMCB8
IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKHIsIDI1NSkpIDw8IDE2IHwgc3RkOjptYXgoMCwgc3RkOjpt
aW4oZywgMjU1KSkgPDwgOCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGIsIDI1NSkpOwpAQCAtNTks
NiArNjksMTYgQEAgUkdCQTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludAogICAg
IHJldHVybiBzdGQ6Om1heCgwLCBzdGQ6Om1pbihhLCAyNTUpKSA8PCAyNCB8IHN0ZDo6bWF4KDAs
IHN0ZDo6bWluKHIsIDI1NSkpIDw8IDE2IHwgc3RkOjptYXgoMCwgc3RkOjptaW4oZywgMjU1KSkg
PDwgOCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGIsIDI1NSkpOwogfQogCitSR0JBMzIgbWFrZVBy
ZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQoreworICAgIHJldHVy
biBtYWtlUkdCQShwcmVtdWx0aXBsaWVkQ2hhbm5lbChyLCBhKSwgcHJlbXVsdGlwbGllZENoYW5u
ZWwoZywgYSksIHByZW11bHRpcGxpZWRDaGFubmVsKGIsIGEpLCBhKTsKK30KKworUkdCQTMyIG1h
a2VVblByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQoreworICAg
IHJldHVybiBtYWtlUkdCQSh1bnByZW11bHRpcGxpZWRDaGFubmVsKHIsIGEpLCB1bnByZW11bHRp
cGxpZWRDaGFubmVsKGcsIGEpLCB1bnByZW11bHRpcGxpZWRDaGFubmVsKGIsIGEpLCBhKTsKK30K
Kwogc3RhdGljIGludCBjb2xvckZsb2F0VG9SR0JBQnl0ZShmbG9hdCBmKQogewogICAgIC8vIFdl
IHVzZSBscm91bmRmIGFuZCAyNTUgaW5zdGVhZCBvZiBuZXh0YWZ0ZXJmKDI1NiwgMCkgdG8gbWF0
Y2ggQ0cncyByb3VuZGluZwpAQCAtNDgyLDE0ICs1MDIsOSBAQCB2b2lkIENvbG9yOjpnZXRIU1Yo
ZG91YmxlJiBodWUsIGRvdWJsZSYgCiBDb2xvciBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQihS
R0JBMzIgcGl4ZWxDb2xvcikKIHsKICAgICBpbnQgYWxwaGEgPSBhbHBoYUNoYW5uZWwocGl4ZWxD
b2xvcik7Ci0gICAgaWYgKGFscGhhICYmIGFscGhhIDwgMjU1KSB7Ci0gICAgICAgIHJldHVybiBD
b2xvcjo6Y3JlYXRlVW5jaGVja2VkKAotICAgICAgICAgICAgcmVkQ2hhbm5lbChwaXhlbENvbG9y
KSAqIDI1NSAvIGFscGhhLAotICAgICAgICAgICAgZ3JlZW5DaGFubmVsKHBpeGVsQ29sb3IpICog
MjU1IC8gYWxwaGEsCi0gICAgICAgICAgICBibHVlQ2hhbm5lbChwaXhlbENvbG9yKSAqIDI1NSAv
IGFscGhhLAotICAgICAgICAgICAgYWxwaGEpOwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4g
Q29sb3IocGl4ZWxDb2xvcik7CisgICAgaWYgKGFscGhhICYmIGFscGhhIDwgMjU1KQorICAgICAg
ICBwaXhlbENvbG9yID0gbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEocmVkQ2hhbm5lbChwaXhlbENv
bG9yKSwgZ3JlZW5DaGFubmVsKHBpeGVsQ29sb3IpLCBibHVlQ2hhbm5lbChwaXhlbENvbG9yKSwg
YWxwaGEpOworICAgIHJldHVybiBDb2xvcihwaXhlbENvbG9yKTsKIH0KIAogUkdCQTMyIHByZW11
bHRpcGxpZWRBUkdCRnJvbUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTQ5NywxNCArNTEy
LDEwIEBAIFJHQkEzMiBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihjb25zdCAKICAgICB1bnNp
Z25lZCBwaXhlbENvbG9yOwogCiAgICAgdW5zaWduZWQgYWxwaGEgPSBjb2xvci5hbHBoYSgpOwot
ICAgIGlmIChhbHBoYSA8IDI1NSkgewotICAgICAgICBwaXhlbENvbG9yID0gQ29sb3I6OmNyZWF0
ZVVuY2hlY2tlZCgKLSAgICAgICAgICAgIGZhc3REaXZpZGVCeTI1NShjb2xvci5yZWQoKSAqIGFs
cGhhICsgMjU0KSwKLSAgICAgICAgICAgIGZhc3REaXZpZGVCeTI1NShjb2xvci5ncmVlbigpICog
YWxwaGEgKyAyNTQpLAotICAgICAgICAgICAgZmFzdERpdmlkZUJ5MjU1KGNvbG9yLmJsdWUoKSAq
IGFscGhhICsgMjU0KSwKLSAgICAgICAgICAgIGFscGhhKS5yZ2IoKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgIHBpeGVsQ29sb3IgPSBjb2xvci5yZ2IoKTsKKyAgICBpZiAoYWxwaGEgPCAyNTUpCisg
ICAgICAgIHBpeGVsQ29sb3IgPSBtYWtlUHJlbXVsdGlwbGllZFJHQkEoY29sb3IucmVkKCksIGNv
bG9yLmdyZWVuKCksIGNvbG9yLmJsdWUoKSwgYWxwaGEpOworICAgIGVsc2UKKyAgICAgICAgcGl4
ZWxDb2xvciA9IGNvbG9yLnJnYigpOwogCiAgICAgcmV0dXJuIHBpeGVsQ29sb3I7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgJKHJldmlzaW9uIDIwNTY4
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU1LDYgKzU1LDkgQEAgdHlwZWRlZiB1bnNpZ25lZCBSR0JBMzI7IC8vIERlcHJl
Y2F0ZWQ6IAogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VSR0IoaW50IHIsIGludCBnLCBpbnQg
Yik7CiBXRUJDT1JFX0VYUE9SVCBSR0JBMzIgbWFrZVJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwg
aW50IGEpOwogCitSR0JBMzIgbWFrZVByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50
IGIsIGludCBhKTsKK1JHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcs
IGludCBiLCBpbnQgYSk7CisKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBjb2xvcldpdGhPdmVycmlk
ZUFscGhhKFJHQkEzMiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSk7CiBXRUJDT1JFX0VYUE9S
VCBSR0JBMzIgY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIE9wdGlvbmFsPGZs
b2F0PiBvdmVycmlkZUFscGhhKTsKIApAQCAtMjE4LDYgKzIyMSw3IEBAIENvbG9yIGJsZW5kKGNv
bnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2wKIAogaW50IGRpZmZlcmVuY2VTcXVhcmVkKGNvbnN0
IENvbG9yJiwgY29uc3QgQ29sb3ImKTsKIAordWludDE2X3QgZmFzdE11bHRpcGx5QnkyNTUodWlu
dDE2X3QgdmFsdWUpOwogdWludDE2X3QgZmFzdERpdmlkZUJ5MjU1KHVpbnQxNl90KTsKIAogI2lm
IFVTRShDRykKQEAgLTI5MCw2ICsyOTQsMTEgQEAgaW5saW5lIHVpbnQ4X3Qgcm91bmRBbmRDbGFt
cENvbG9yQ2hhbm5lbAogICAgIHJldHVybiBzdGQ6Om1heCgwLmYsIHN0ZDo6bWluKDI1NS5mLCBz
dGQ6OnJvdW5kKHZhbHVlKSkpOwogfQogCitpbmxpbmUgdWludDE2X3QgZmFzdE11bHRpcGx5Qnky
NTUodWludDE2X3QgdmFsdWUpCit7CisgICAgcmV0dXJuICh2YWx1ZSA8PCA4KSAtIHZhbHVlOwor
fQorCiBpbmxpbmUgdWludDE2X3QgZmFzdERpdmlkZUJ5MjU1KHVpbnQxNl90IHZhbHVlKQogewog
ICAgIC8vIFdoaWxlIHRoaXMgaXMgYW4gYXBwcm94aW1hdGUgYWxnb3JpdGhtIGZvciBkaXZpc2lv
biBieSAyNTUsIGl0IGdpdmVzIHBlcmZlY3RseSBhY2N1cmF0ZSByZXN1bHRzIGZvciAxNi1iaXQg
dmFsdWVzLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNr
aW5nU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJhY2tpbmdTdG9yZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkludFJlY3Qu
aCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2UuaCIKKworI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFn
ZUJhY2tpbmdTdG9yZSB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJhY2tpbmdTdG9yZT4gY3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlw
bHlBbHBoYSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEltYWdlQmFj
a2luZ1N0b3JlPihzaXplLCBwcmVtdWx0aXBseUFscGhhKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQmFja2luZ1N0b3JlPiBjcmVhdGUoY29uc3QgSW1hZ2VCYWNr
aW5nU3RvcmUmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8
SW1hZ2VCYWNraW5nU3RvcmU+KG90aGVyKTsKKyAgICB9CisKKyAgICBJbWFnZUJhY2tpbmdTdG9y
ZShjb25zdCBJbnRTaXplJiBzaXplLCBib29sIHByZW11bHRpcGx5QWxwaGEgPSB0cnVlKQorICAg
ICAgICA6IG1fcHJlbXVsdGlwbHlBbHBoYShwcmVtdWx0aXBseUFscGhhKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFzaXplLmlzRW1wdHkoKSk7CisgICAgICAgIHNldFNpemUoc2l6ZSk7CisgICAg
fQorCisgICAgSW1hZ2VCYWNraW5nU3RvcmUoY29uc3QgSW1hZ2VCYWNraW5nU3RvcmUmIG90aGVy
KQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIG1fcGl4ZWxzID0gb3RoZXIubV9waXhlbHM7CisgICAgICAgIG1fcGl4ZWxz
UHRyID0gbV9waXhlbHMuZGF0YSgpOworICAgICAgICBtX3NpemUgPSBvdGhlci5tX3NpemU7Cisg
ICAgICAgIG1fcHJlbXVsdGlwbHlBbHBoYSA9IG90aGVyLm1fcHJlbXVsdGlwbHlBbHBoYTsKKyAg
ICB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZSgpIGNvbnN0OworCisgICAgYm9vbCBzZXRT
aXplKGNvbnN0IEludFNpemUmIHNpemUpCisgICAgeworICAgICAgICBpZiAoIW1fcGl4ZWxzLnRy
eVJlc2VydmVDYXBhY2l0eShzaXplLmFyZWEoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgbV9waXhlbHMucmVzaXplKHNpemUuYXJlYSgpKTsKKyAgICAgICAgbV9waXhl
bHNQdHIgPSBtX3BpeGVscy5kYXRhKCk7CisgICAgICAgIG1fc2l6ZSA9IHNpemU7CisgICAgICAg
IG1fZnJhbWVSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUpOworICAgICAgICBjbGVh
cigpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIHNldEZyYW1lUmVj
dChjb25zdCBJbnRSZWN0JiBmcmFtZVJlY3QpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fc2l6
ZS5pc0VtcHR5KCkpOworICAgICAgICBBU1NFUlQoaW5Cb3VuZHMoZnJhbWVSZWN0KSk7CisgICAg
ICAgIG1fZnJhbWVSZWN0ID0gZnJhbWVSZWN0OworICAgIH0KKworICAgIEludFNpemUgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIEludFJlY3QgZnJhbWVSZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9mcmFtZVJlY3Q7IH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAg
ICAgbWVtc2V0KG1fcGl4ZWxzUHRyLCAwLCBtX3NpemUuYXJlYSgpICogc2l6ZW9mKFJHQkEzMikp
OworICAgIH0KKworICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAg
eworICAgICAgICBpZiAocmVjdC5pc0VtcHR5KCkgfHwgIWluQm91bmRzKHJlY3QpKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIHNpemVfdCByZWN0V2lkdGhJbkJ5dGVzID0gcmVjdC53
aWR0aCgpICogc2l6ZW9mKFJHQkEzMik7CisgICAgICAgIFJHQkEzMiogc3RhcnQgPSBhdChyZWN0
LngoKSwgcmVjdC55KCkpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QuaGVpZ2h0
KCk7ICsraSkgeworICAgICAgICAgICAgbWVtc2V0KHN0YXJ0LCAwLCByZWN0V2lkdGhJbkJ5dGVz
KTsKKyAgICAgICAgICAgIHN0YXJ0ICs9IG1fc2l6ZS53aWR0aCgpOworICAgICAgICB9CisgICAg
fQorCisgICAgdm9pZCByZXBlYXRGaXJzdFJvdyhjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsK
KyAgICAgICAgaWYgKHJlY3QuaXNFbXB0eSgpIHx8ICFpbkJvdW5kcyhyZWN0KSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBzaXplX3QgcmVjdFdpZHRoSW5CeXRlcyA9IHJlY3Qud2lk
dGgoKSAqIHNpemVvZihSR0JBMzIpOworICAgICAgICBSR0JBMzIqIHNyYyA9IGF0KHJlY3QueCgp
LCByZWN0LnkoKSk7CisgICAgICAgIFJHQkEzMiogZGVzdCA9IHNyYyArIG1fc2l6ZS53aWR0aCgp
OworICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IHJlY3QuaGVpZ2h0KCk7ICsraSkgeworICAg
ICAgICAgICAgbWVtY3B5KGRlc3QsIHNyYywgcmVjdFdpZHRoSW5CeXRlcyk7CisgICAgICAgICAg
ICBkZXN0ICs9IG1fc2l6ZS53aWR0aCgpOworICAgICAgICB9CisgICAgfQorCisgICAgUkdCQTMy
KiBhdChpbnQgeCwgaW50IHkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9waXhlbHNQ
dHIgKyB5ICogbV9zaXplLndpZHRoKCkgKyB4OworICAgIH0KKworICAgIHZvaWQgc2V0UkdCQShp
bnQgeCwgaW50IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVk
IGEpCisgICAgeworICAgICAgICBzZXRSR0JBKGF0KHgsIHkpLCByLCBnLCBiLCBhKTsKKyAgICB9
CisKKyAgICB2b2lkIHNldFJHQkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBn
LCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgaWYgKG1fcHJlbXVsdGlw
bHlBbHBoYSAmJiAhYSkKKyAgICAgICAgICAgICpkZXN0ID0gMDsKKyAgICAgICAgZWxzZSBpZiAo
bV9wcmVtdWx0aXBseUFscGhhICYmIGEgPCAyNTUpCisgICAgICAgICAgICAqZGVzdCA9IG1ha2VQ
cmVtdWx0aXBsaWVkUkdCQShyLCBnLCBiLCBhKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
KmRlc3QgPSBtYWtlUkdCQShyLCBnLCBiLCBhKTsKKyAgICB9CisKKyAgICB2b2lkIG92ZXJSR0JB
KFJHQkEzMiogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWdu
ZWQgYSkKKyAgICB7CisgICAgICAgIGlmICghYSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBpZiAoYSA+PSAyNTUgfHwgIWFscGhhQ2hhbm5lbCgqZGVzdCkpIHsKKyAgICAgICAgICAg
IHNldFJHQkEoZGVzdCwgciwgZywgYiwgYSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkKKyAgICAgICAgICAgICpkZXN0
ID0gbWFrZVByZW11bHRpcGxpZWRSR0JBKHJlZENoYW5uZWwoKmRlc3QpLCBncmVlbkNoYW5uZWwo
KmRlc3QpLCBibHVlQ2hhbm5lbCgqZGVzdCksIGFscGhhQ2hhbm5lbCgqZGVzdCkpOworCisgICAg
ICAgIHVuc2lnbmVkIGQgPSAyNTUgLSBhOworCisgICAgICAgIHIgPSBmYXN0RGl2aWRlQnkyNTUo
ciAqIGEgKyByZWRDaGFubmVsKCpkZXN0KSAqIGQpOworICAgICAgICBnID0gZmFzdERpdmlkZUJ5
MjU1KGcgKiBhICsgZ3JlZW5DaGFubmVsKCpkZXN0KSAqIGQpOworICAgICAgICBiID0gZmFzdERp
dmlkZUJ5MjU1KGIgKiBhICsgYmx1ZUNoYW5uZWwoKmRlc3QpICogZCk7CisgICAgICAgIGEgKz0g
ZmFzdERpdmlkZUJ5MjU1KGQgKiBhbHBoYUNoYW5uZWwoKmRlc3QpKTsKKworICAgICAgICBpZiAo
bV9wcmVtdWx0aXBseUFscGhhKQorICAgICAgICAgICAgKmRlc3QgPSBtYWtlUkdCQShyLCBnLCBi
LCBhKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKmRlc3QgPSBtYWtlVW5QcmVtdWx0aXBs
aWVkUkdCQShyLCBnLCBiLCBhKTsKKyAgICB9CisKKyAgICBib29sIGluQm91bmRzKGNvbnN0IElu
dFJlY3QmIHJlY3QpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSW50UmVjdChJbnRQb2lu
dCgpLCBtX3NpemUpLmNvbnRhaW5zKHJlY3QpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlz
T3ZlclNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAgIHN0YXRpYyB1bnNp
Z25lZCBsb25nIGxvbmcgTWF4UGl4ZWxzID0gKCgxIDw8IDI5KSAtIDEpOworICAgICAgICB1bnNp
Z25lZCBsb25nIGxvbmcgcGl4ZWxzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihz
aXplLndpZHRoKCkpICogc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzaXplLmhlaWdo
dCgpKTsKKyAgICAgICAgcmV0dXJuIHBpeGVscyA+IE1heFBpeGVsczsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgVmVjdG9yPFJHQkEzMj4gbV9waXhlbHM7CisgICAgUkdCQTMyKiBtX3BpeGVsc1B0
ciB7IG51bGxwdHIgfTsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICBJbnRSZWN0IG1fZnJhbWVS
ZWN0OyAvLyBUaGlzIHdpbGwgYWx3YXlzIGp1c3QgYmUgdGhlIGVudGlyZSBidWZmZXIgZXhjZXB0
IGZvciBHSUYgYW5kIFBORyBmcmFtZXMKKyAgICBib29sIG1fcHJlbXVsdGlwbHlBbHBoYSB7IHRy
dWUgfTsKK307CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L05hdGl2ZUltYWdlQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDcsMTAgKzQ3LDEwIEBAIEludFNpemUgbmF0aXZlSW1hZ2VTaXplKGNvbnN0
IE5hdGl2ZUltYWcKICAgICByZXR1cm4gaW1hZ2UgPyBJbnRTaXplKENHSW1hZ2VHZXRXaWR0aChp
bWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkpKSA6IEludFNpemUoKTsK
IH0KIAotYm9vbCBuYXRpdmVJbWFnZUhhc0FscGhhKGNvbnN0IE5hdGl2ZUltYWdlUHRyJikKK2Jv
b2wgbmF0aXZlSW1hZ2VIYXNBbHBoYShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UpCiB7Ci0g
ICAgLy8gRklYTUU6IEFuc3dlciBjb3JyZWN0bHkgdGhlIHF1ZXN0aW9uOiBkb2VzIHRoZSBDR0lt
YWdlUmVmIGhhdmUgYWxwaGEgY2hhbm5uZWw/Ci0gICAgcmV0dXJuIHRydWU7CisgICAgQ0dJbWFn
ZUFscGhhSW5mbyBpbmZvID0gQ0dJbWFnZUdldEFscGhhSW5mbyhpbWFnZS5nZXQoKSk7CisgICAg
cmV0dXJuIChpbmZvID49IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkgJiYgKGluZm8g
PD0ga0NHSW1hZ2VBbHBoYUZpcnN0KTsKIH0KIAogQ29sb3IgbmF0aXZlSW1hZ2VTaW5nbGVQaXhl
bFNvbGlkQ29sb3IoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIu
Y3BwCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNyArMTQyLDcg
QEAgSW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0IAogICAgICAgICByZXR1
cm4gKnRoaXM7CiAKICAgICBjb3B5Qml0bWFwRGF0YShvdGhlcik7Ci0gICAgc2V0T3JpZ2luYWxG
cmFtZVJlY3Qob3RoZXIub3JpZ2luYWxGcmFtZVJlY3QoKSk7CisgICAgc2V0SGFzQWxwaGEob3Ro
ZXIubV9oYXNBbHBoYSk7CiAgICAgc2V0U3RhdHVzKG90aGVyLnN0YXR1cygpKTsKICAgICBzZXRE
dXJhdGlvbihvdGhlci5kdXJhdGlvbigpKTsKICAgICBzZXREaXNwb3NhbE1ldGhvZChvdGhlci5k
aXNwb3NhbE1ldGhvZCgpKTsKQEAgLTE1Miw4ICsxNTIsNyBAQCBJbWFnZUZyYW1lJiBJbWFnZUZy
YW1lOjpvcGVyYXRvcj0oY29uc3QgCiAKIHZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXJQaXhlbERhdGEo
KQogewotICAgIG1fYmFja2luZ1N0b3JlLmNsZWFyKCk7Ci0gICAgbV9ieXRlcyA9IDA7CisgICAg
bV9iYWNraW5nU3RvcmUgPSBudWxscHRyOwogICAgIG1fc3RhdHVzID0gRnJhbWVFbXB0eTsKICAg
ICAvLyBOT1RFOiBEbyBub3QgcmVzZXQgb3RoZXIgbWVtYmVycyBoZXJlOyBjbGVhckZyYW1lQnVm
ZmVyQ2FjaGUoKSBjYWxscyB0aGlzCiAgICAgLy8gdG8gZnJlZSB0aGUgYml0bWFwIGRhdGEsIGJ1
dCBvdGhlciBmdW5jdGlvbnMgbGlrZSBpbml0RnJhbWVCdWZmZXIoKSBhbmQKQEAgLTE2MywyNCAr
MTYyLDE2IEBAIHZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXJQaXhlbERhdGEoKQogCiB2b2lkIEltYWdl
RnJhbWU6Onplcm9GaWxsUGl4ZWxEYXRhKCkKIHsKLSAgICBtZW1zZXQobV9ieXRlcywgMCwgbV9z
aXplLndpZHRoKCkgKiBtX3NpemUuaGVpZ2h0KCkgKiBzaXplb2YoUGl4ZWxEYXRhKSk7CisgICAg
bV9iYWNraW5nU3RvcmUtPmNsZWFyKCk7CiAgICAgbV9oYXNBbHBoYSA9IHRydWU7CiB9CiAKIHZv
aWQgSW1hZ2VGcmFtZTo6emVyb0ZpbGxGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsK
LSAgICBBU1NFUlQoSW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHJlY3QpKTsK
LQogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2l6ZV90
IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkgKiBzaXplb2YoUGl4ZWxEYXRhKTsKLSAg
ICBQaXhlbERhdGEqIHN0YXJ0ID0gbV9ieXRlcyArIChyZWN0LnkoKSAqIHdpZHRoKCkpICsgcmVj
dC54KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0LmhlaWdodCgpOyArK2kpIHsKLSAg
ICAgICAgbWVtc2V0KHN0YXJ0LCAwLCByZWN0V2lkdGhJbkJ5dGVzKTsKLSAgICAgICAgc3RhcnQg
Kz0gd2lkdGgoKTsKLSAgICB9Ci0KKyAgICBtX2JhY2tpbmdTdG9yZS0+Y2xlYXJSZWN0KHJlY3Qp
OwogICAgIHNldEhhc0FscGhhKHRydWUpOwogfQogCkBAIC0xODksMjUgKzE4MCwxOSBAQCBib29s
IEltYWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKGNvbnN0IEltCiAgICAgaWYgKHRoaXMgPT0gJm90
aGVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fYmFja2luZ1N0b3JlID0gb3RoZXIu
bV9iYWNraW5nU3RvcmU7Ci0gICAgbV9ieXRlcyA9IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsKLSAg
ICBtX3NpemUgPSBvdGhlci5tX3NpemU7Ci0gICAgc2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBo
YSk7CisgICAgaWYgKG90aGVyLm1fYmFja2luZ1N0b3JlKQorICAgICAgICBtX2JhY2tpbmdTdG9y
ZSA9IEltYWdlQmFja2luZ1N0b3JlOjpjcmVhdGUoKm90aGVyLm1fYmFja2luZ1N0b3JlLmdldCgp
KTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKKyAgICAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJbWFnZUZyYW1lOjpzZXRTaXplKGludCBuZXdXaWR0
aCwgaW50IG5ld0hlaWdodCkKK2Jvb2wgSW1hZ2VGcmFtZTo6c2V0U2l6ZShjb25zdCBJbnRTaXpl
JiBzaXplKQogewotICAgIEFTU0VSVCghd2lkdGgoKSAmJiAhaGVpZ2h0KCkpOwotICAgIHNpemVf
dCBiYWNraW5nU3RvcmVTaXplID0gbmV3V2lkdGggKiBuZXdIZWlnaHQ7Ci0gICAgaWYgKCFtX2Jh
Y2tpbmdTdG9yZS50cnlSZXNlcnZlQ2FwYWNpdHkoYmFja2luZ1N0b3JlU2l6ZSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX2JhY2tpbmdTdG9yZS5yZXNpemUoYmFja2luZ1N0b3JlU2l6
ZSk7Ci0gICAgbV9ieXRlcyA9IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsKLSAgICBtX3NpemUgPSBJ
bnRTaXplKG5ld1dpZHRoLCBuZXdIZWlnaHQpOwotCi0gICAgemVyb0ZpbGxQaXhlbERhdGEoKTsK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICBBU1NFUlQoIW1fYmFja2luZ1N0b3JlKTsKKyAgICBtX2Jh
Y2tpbmdTdG9yZSA9IEltYWdlQmFja2luZ1N0b3JlOjpjcmVhdGUoc2l6ZSwgbV9wcmVtdWx0aXBs
eUFscGhhKTsKKyAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUgIT0gbnVsbHB0cjsKIH0KIAogYm9v
bCBJbWFnZUZyYW1lOjpoYXNBbHBoYSgpIGNvbnN0CkBAIC0yMjAsNiArMjA1LDEyIEBAIHZvaWQg
SW1hZ2VGcmFtZTo6c2V0SGFzQWxwaGEoYm9vbCBhbHBoYSkKICAgICBtX2hhc0FscGhhID0gYWxw
aGE7CiB9CiAKK3ZvaWQgSW1hZ2VGcmFtZTo6c2V0T3JpZ2luYWxGcmFtZVJlY3QoY29uc3QgSW50
UmVjdCYgZnJhbWVSZWN0KQoreworICAgIGlmIChtX2JhY2tpbmdTdG9yZSkKKyAgICAgICAgbV9i
YWNraW5nU3RvcmUtPnNldEZyYW1lUmVjdChmcmFtZVJlY3QpOworfQorCiB2b2lkIEltYWdlRnJh
bWU6OnNldFN0YXR1cyhGcmFtZVN0YXR1cyBzdGF0dXMpCiB7CiAgICAgbV9zdGF0dXMgPSBzdGF0
dXM7CkBAIC0yODYsNyArMjc3LDcgQEAgdW5zaWduZWQgSW1hZ2VEZWNvZGVyOjpmcmFtZUJ5dGVz
QXRJbmRleAogICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpIDw9IGluZGV4KQogICAg
ICAgICByZXR1cm4gMDsKICAgICAvLyBGSVhNRTogVXNlIHRoZSBkaW1lbnNpb24gb2YgdGhlIHJl
cXVlc3RlZCBmcmFtZS4KLSAgICByZXR1cm4gbV9zaXplLmFyZWEoKSAqIHNpemVvZihJbWFnZUZy
YW1lOjpQaXhlbERhdGEpOworICAgIHJldHVybiBtX3NpemUuYXJlYSgpICogc2l6ZW9mKFJHQkEz
Mik7CiB9CiAKIGZsb2F0IEltYWdlRGVjb2Rlcjo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90
IGluZGV4KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw4ICsyOCwxMCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkludFJlY3Qu
aCIKKyNpbmNsdWRlICJJbWFnZUJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIkltYWdlU291cmNl
LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybVNjcmVlbi5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC01Nyw3ICs1OSw2IEBAIHVzaW5nIENvbG9yUHJvZmlsZSA9
IFZlY3RvcjxjaGFyPjsKICAgICAgICAgICAgIERpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cyAgLy8g
Q2xlYXIgZnJhbWUgdG8gcHJldmlvdXMgZnJhbWVidWZmZXIKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gY29udGVudHMKICAgICAgICAgfTsKLSAgICAgICAgdHlwZWRl
ZiB1bnNpZ25lZCBQaXhlbERhdGE7CiAKICAgICAgICAgSW1hZ2VGcmFtZSgpOwogCkBAIC04Miwx
NDIgKzgzLDY0IEBAIHVzaW5nIENvbG9yUHJvZmlsZSA9IFZlY3RvcjxjaGFyPjsKICAgICAgICAg
Ly8gZW5kWS4KICAgICAgICAgdm9pZCBjb3B5Um93TlRpbWVzKGludCBzdGFydFgsIGludCBlbmRY
LCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHN0
YXJ0WCA8IHdpZHRoKCkpOwotICAgICAgICAgICAgQVNTRVJUKGVuZFggPD0gd2lkdGgoKSk7Ci0g
ICAgICAgICAgICBBU1NFUlQoc3RhcnRZIDwgaGVpZ2h0KCkpOwotICAgICAgICAgICAgQVNTRVJU
KGVuZFkgPD0gaGVpZ2h0KCkpOwotICAgICAgICAgICAgY29uc3QgaW50IHJvd0J5dGVzID0gKGVu
ZFggLSBzdGFydFgpICogc2l6ZW9mKFBpeGVsRGF0YSk7Ci0gICAgICAgICAgICBjb25zdCBQaXhl
bERhdGEqIGNvbnN0IHN0YXJ0QWRkciA9IGdldEFkZHIoc3RhcnRYLCBzdGFydFkpOwotICAgICAg
ICAgICAgZm9yIChpbnQgZGVzdFkgPSBzdGFydFkgKyAxOyBkZXN0WSA8IGVuZFk7ICsrZGVzdFkp
Ci0gICAgICAgICAgICAgICAgbWVtY3B5KGdldEFkZHIoc3RhcnRYLCBkZXN0WSksIHN0YXJ0QWRk
ciwgcm93Qnl0ZXMpOworICAgICAgICAgICAgbV9iYWNraW5nU3RvcmUtPnJlcGVhdEZpcnN0Um93
KEludFJlY3Qoc3RhcnRYLCBzdGFydFksIGVuZFggLXN0YXJ0WCAsIGVuZFkgLSBzdGFydFkpKTsK
ICAgICAgICAgfQogCiAgICAgICAgIC8vIEFsbG9jYXRlcyBzcGFjZSBmb3IgdGhlIHBpeGVsIGRh
dGEuICBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IHBpeGVscwogICAgICAgICAvLyBhcmUgd3Jp
dHRlbi4gIE11c3Qgb25seSBiZSBjYWxsZWQgb25jZS4gIFJldHVybnMgd2hldGhlciBhbGxvY2F0
aW9uCiAgICAgICAgIC8vIHN1Y2NlZWRlZC4KLSAgICAgICAgYm9vbCBzZXRTaXplKGludCBuZXdX
aWR0aCwgaW50IG5ld0hlaWdodCk7CisgICAgICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXpl
Jik7CisgICAgICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZ1N0b3Jl
LT5zaXplKCk7IH0KIAogICAgICAgICAvLyBSZXR1cm5zIGEgY2FsbGVyLW93bmVkIHBvaW50ZXIg
dG8gdGhlIHVuZGVybHlpbmcgbmF0aXZlIGltYWdlIGRhdGEuCiAgICAgICAgIC8vIChBY3R1YWwg
dXNlOiBUaGlzIHBvaW50ZXIgd2lsbCBiZSBvd25lZCBieSBCaXRtYXBJbWFnZSBhbmQgZnJlZWQg
aW4KICAgICAgICAgLy8gRnJhbWVEYXRhOjpjbGVhcigpKS4KLSAgICAgICAgTmF0aXZlSW1hZ2VQ
dHIgYXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0OworICAgICAgICBOYXRpdmVJbWFnZVB0ciBhc05l
d05hdGl2ZUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nU3RvcmUtPmltYWdlKCk7IH0K
IAorICAgICAgICBpbmxpbmUgSW1hZ2VCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlID8gbV9iYWNraW5nU3RvcmUuZ2V0KCkgOiBudWxscHRy
OyB9CisgICAgICAgIGlubGluZSBib29sIGhhc0JhY2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJu
IGJhY2tpbmdTdG9yZSgpOyB9CisgICAgICAgIAogICAgICAgICBib29sIGhhc0FscGhhKCkgY29u
c3Q7Ci0gICAgICAgIGNvbnN0IEludFJlY3QmIG9yaWdpbmFsRnJhbWVSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9vcmlnaW5hbEZyYW1lUmVjdDsgfQorICAgICAgICBJbnRSZWN0IG9yaWdpbmFsRnJh
bWVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nU3RvcmUgPyBtX2JhY2tpbmdTdG9yZS0+
ZnJhbWVSZWN0KCkgOiBJbnRSZWN0KCk7IH0KICAgICAgICAgRnJhbWVTdGF0dXMgc3RhdHVzKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KICAgICAgICAgdW5zaWduZWQgZHVyYXRpb24oKSBj
b25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9CiAgICAgICAgIEZyYW1lRGlzcG9zYWxNZXRob2Qg
ZGlzcG9zYWxNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3Bvc2FsTWV0aG9kOyB9CiAgICAg
ICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlbXVsdGlwbHlB
bHBoYTsgfQogCisgICAgICAgIHZvaWQgc2V0QmFja2luZ1N0b3JlKGNvbnN0IEltYWdlQmFja2lu
Z1N0b3JlKik7CisgICAgICAgIAogICAgICAgICB2b2lkIHNldEhhc0FscGhhKGJvb2wgYWxwaGEp
OwotICAgICAgICB2b2lkIHNldE9yaWdpbmFsRnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIHIpIHsg
bV9vcmlnaW5hbEZyYW1lUmVjdCA9IHI7IH0KKyAgICAgICAgdm9pZCBzZXRPcmlnaW5hbEZyYW1l
UmVjdChjb25zdCBJbnRSZWN0Jik7CiAgICAgICAgIHZvaWQgc2V0U3RhdHVzKEZyYW1lU3RhdHVz
IHN0YXR1cyk7CiAgICAgICAgIHZvaWQgc2V0RHVyYXRpb24odW5zaWduZWQgZHVyYXRpb24pIHsg
bV9kdXJhdGlvbiA9IGR1cmF0aW9uOyB9CiAgICAgICAgIHZvaWQgc2V0RGlzcG9zYWxNZXRob2Qo
RnJhbWVEaXNwb3NhbE1ldGhvZCBtZXRob2QpIHsgbV9kaXNwb3NhbE1ldGhvZCA9IG1ldGhvZDsg
fQogICAgICAgICB2b2lkIHNldFByZW11bHRpcGx5QWxwaGEoYm9vbCBwcmVtdWx0aXBseUFscGhh
KSB7IG1fcHJlbXVsdGlwbHlBbHBoYSA9IHByZW11bHRpcGx5QWxwaGE7IH0KIAotICAgICAgICBp
bmxpbmUgdm9pZCBzZXRSR0JBKGludCB4LCBpbnQgeSwgdW5zaWduZWQgciwgdW5zaWduZWQgZywg
dW5zaWduZWQgYiwgdW5zaWduZWQgYSkKLSAgICAgICAgewotICAgICAgICAgICAgc2V0UkdCQShn
ZXRBZGRyKHgsIHkpLCByLCBnLCBiLCBhKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlubGluZSBQ
aXhlbERhdGEqIGdldEFkZHIoaW50IHgsIGludCB5KQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gbV9ieXRlcyArICh5ICogd2lkdGgoKSkgKyB4OwotICAgICAgICB9Ci0KLSAgICAgICAg
aW5saW5lIGJvb2wgaGFzUGl4ZWxEYXRhKCkgY29uc3QKKyAgICAgICAgaW5saW5lIFJHQkEzMiog
Z2V0QWRkcihpbnQgeCwgaW50IHkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2J5
dGVzOworICAgICAgICAgICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlLT5hdCh4LCB5KTsKICAgICAg
ICAgfQogCi0gICAgICAgIC8vIFVzZSBmaXggcG9pbnQgbXVsdGlwbGllciBpbnN0ZWFkIG9mIGlu
dGVnZXIgZGl2aXNpb24gb3IgZmxvYXRpbmcgcG9pbnQgbWF0aC4KLSAgICAgICAgLy8gVGhpcyBt
dWx0aXBsZXIgcHJvZHVjZXMgZXhhY3RseSB0aGUgc2FtZSByZXN1bHQgZm9yIGFsbCB2YWx1ZXMg
aW4gcmFuZ2UgMCAtIDI1NS4KLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZpeFBvaW50
U2hpZnQgPSAyNDsKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZpeFBvaW50TXVsdCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPigxLjAgLyAyNTUuMCAqICgxIDw8IGZpeFBvaW50U2hpZnQp
KSArIDE7Ci0gICAgICAgIC8vIE11bHRpcGxpZXMgdW5zaWduZWQgdmFsdWUgYnkgZml4cG9pbnQg
dmFsdWUgYW5kIGNvbnZlcnRzIGJhY2sgdG8gdW5zaWduZWQuCi0gICAgICAgIHN0YXRpYyB1bnNp
Z25lZCBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkodW5zaWduZWQgZml4ZWQsIHVuc2lnbmVkIHYp
CisgICAgICAgIGlubGluZSB2b2lkIHNldFJHQkEoaW50IHgsIGludCB5LCB1bnNpZ25lZCByLCB1
bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQogICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gIChmaXhlZCAqIHYpID4+IGZpeFBvaW50U2hpZnQ7CisgICAgICAgICAgICBtX2Jh
Y2tpbmdTdG9yZS0+c2V0UkdCQSh4LCB5LCByLCBnLCBiLCBhKTsKICAgICAgICAgfQogCi0gICAg
ICAgIGlubGluZSB2b2lkIHNldFJHQkEoUGl4ZWxEYXRhKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNp
Z25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgICAgICBpbmxpbmUgdm9pZCBzZXRS
R0JBKFJHQkEzMiogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5z
aWduZWQgYSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAm
JiBhIDwgMjU1KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFhKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICpkZXN0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhTXVsdCA9IGEgKiBmaXhQb2lu
dE11bHQ7Ci0gICAgICAgICAgICAgICAgciA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShyLCBh
bHBoYU11bHQpOwotICAgICAgICAgICAgICAgIGcgPSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHko
ZywgYWxwaGFNdWx0KTsKLSAgICAgICAgICAgICAgICBiID0gZml4UG9pbnRVbnNpZ25lZE11bHRp
cGx5KGIsIGFscGhhTXVsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqZGVzdCA9IChh
IDw8IDI0IHwgciA8PCAxNiB8IGcgPDwgOCB8IGIpOworICAgICAgICAgICAgbV9iYWNraW5nU3Rv
cmUtPnNldFJHQkEoZGVzdCwgciwgZywgYiwgYSk7CiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShB
UE5HKQotICAgICAgICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRpdmlkZTI1NSh1bnNpZ25lZCBh
KQorICAgICAgICBpbmxpbmUgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIs
IHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiAoYSArIChhID4+IDgpICsgMSkgPj4gODsKLSAgICAgICAgfQotCi0gICAgICAg
IGlubGluZSB2b2lkIG92ZXJSR0JBKFBpeGVsRGF0YSogZGVzdCwgdW5zaWduZWQgciwgdW5zaWdu
ZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KCFhKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgaWYgKGEgPCAyNTUp
IHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBhRGVzdCA9ICgoKmRlc3QpID4+IDI0KSAmIDI1
NTsKLSAgICAgICAgICAgICAgICBpZiAoYURlc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgckRlc3QgPSAoKCpkZXN0KSA+PiAxNikgJiAyNTU7Ci0gICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGdEZXN0ID0gKCgqZGVzdCkgPj4gOCkgJiAyNTU7Ci0gICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGJEZXN0ID0gKCpkZXN0KSAmIDI1NTsKLSAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgYUF1eCA9IDI1NSAtIGE7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9wcmVt
dWx0aXBseUFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByRGVzdCA9IGRpdmlkZTI1
NShyRGVzdCAqIGFEZXN0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdEZXN0ID0gZGl2aWRl
MjU1KGdEZXN0ICogYURlc3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgYkRlc3QgPSBkaXZp
ZGUyNTUoYkRlc3QgKiBhRGVzdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgciA9IGRpdmlkZTI1NShyICogYSArIHJEZXN0ICogYUF1eCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGcgPSBkaXZpZGUyNTUoZyAqIGEgKyBnRGVzdCAqIGFBdXgpOwotICAgICAgICAg
ICAgICAgICAgICBiID0gZGl2aWRlMjU1KGIgKiBhICsgYkRlc3QgKiBhQXV4KTsKLSAgICAgICAg
ICAgICAgICAgICAgYSArPSBkaXZpZGUyNTUoYURlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHIgPSAociAqIDI1NSArIGEgLSAxKSAvIGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnID0g
KGcgKiAyNTUgKyBhIC0gMSkgLyBhOwotICAgICAgICAgICAgICAgICAgICAgICAgYiA9IChiICog
MjU1ICsgYSAtIDEpIC8gYTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAobV9wcmVtdWx0aXBseUFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgIHIg
PSBkaXZpZGUyNTUociAqIGEpOwotICAgICAgICAgICAgICAgICAgICBnID0gZGl2aWRlMjU1KGcg
KiBhKTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IGRpdmlkZTI1NShiICogYSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3QgPSAoYSA8PCAyNCB8
IHIgPDwgMTYgfCBnIDw8IDggfCBiKTsKKyAgICAgICAgICAgIG1fYmFja2luZ1N0b3JlLT5vdmVy
UkdCQShkZXN0LCByLCBnLCBiLCBhKTsKICAgICAgICAgfQogI2VuZGlmCiAKICAgICBwcml2YXRl
OgotICAgICAgICBpbnQgd2lkdGgoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gbV9zaXplLndpZHRoKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgaGVpZ2h0KCkgY29u
c3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIFZlY3RvcjxQaXhlbERhdGE+IG1fYmFja2luZ1N0b3JlOwotICAgICAg
ICBQaXhlbERhdGEqIG1fYnl0ZXM7IC8vIFRoZSBtZW1vcnkgaXMgYmFja2VkIGJ5IG1fYmFja2lu
Z1N0b3JlLgotICAgICAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKICAgICAgICAgYm9vbCBtX2hhc0Fs
cGhhOwotICAgICAgICBJbnRSZWN0IG1fb3JpZ2luYWxGcmFtZVJlY3Q7IC8vIFRoaXMgd2lsbCBh
bHdheXMganVzdCBiZSB0aGUgZW50aXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gYnVmZmVyIGV4Y2VwdCBmb3IgR0lGIGZyYW1lcyB3aG9zZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yaWdpbmFsIHJlY3Qgd2FzIHNtYWxsZXIgdGhh
biB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdmVyYWxsIGlt
YWdlIHNpemUuCiAgICAgICAgIEZyYW1lU3RhdHVzIG1fc3RhdHVzOwogICAgICAgICB1bnNpZ25l
ZCBtX2R1cmF0aW9uOwogICAgICAgICBGcmFtZURpc3Bvc2FsTWV0aG9kIG1fZGlzcG9zYWxNZXRo
b2Q7CkBAIC0yODcsMTEgKzIxMCwxMSBAQCB1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hh
cj47CiAKICAgICAgICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBzaXplIGlzIGxlZ2FsIChpLmUu
IG5vdCBnb2luZyB0byByZXN1bHQgaW4KICAgICAgICAgLy8gb3ZlcmZsb3cgZWxzZXdoZXJlKS4g
IElmIG5vdCwgbWFya3MgZGVjb2RpbmcgYXMgZmFpbGVkLgotICAgICAgICB2aXJ0dWFsIGJvb2wg
c2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQorICAgICAgICB2aXJ0dWFs
IGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoaXNPdmVyU2l6ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgICAgIGlmIChJbWFnZUJh
Y2tpbmdTdG9yZTo6aXNPdmVyU2l6ZShzaXplKSkKICAgICAgICAgICAgICAgICByZXR1cm4gc2V0
RmFpbGVkKCk7Ci0gICAgICAgICAgICBtX3NpemUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwor
ICAgICAgICAgICAgbV9zaXplID0gc2l6ZTsKICAgICAgICAgICAgIG1fc2l6ZUF2YWlsYWJsZSA9
IHRydWU7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMzg2LDE1ICsz
MDksNiBAQCB1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hhcj47CiAgICAgICAgIEltYWdl
T3JpZW50YXRpb24gbV9vcmllbnRhdGlvbjsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIC8vIFNv
bWUgY29kZSBwYXRocyBjb21wdXRlIHRoZSBzaXplIG9mIHRoZSBpbWFnZSBhcyAid2lkdGggKiBo
ZWlnaHQgKiA0IgotICAgICAgICAvLyBhbmQgcmV0dXJuIGl0IGFzIGEgKHNpZ25lZCkgaW50LiAg
QXZvaWQgb3ZlcmZsb3cuCi0gICAgICAgIHN0YXRpYyBib29sIGlzT3ZlclNpemUodW5zaWduZWQg
d2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQg
bG9uZyBsb25nIHRvdGFsX3NpemUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHdp
ZHRoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KGhlaWdodCk7Ci0gICAgICAgICAgICByZXR1cm4gdG90
YWxfc2l6ZSA+ICgoMSA8PCAyOSkgLSAxKTsKLSAgICAgICAgfQotCiAgICAgICAgIEludFNpemUg
bV9zaXplOwogICAgICAgICBib29sIG1fc2l6ZUF2YWlsYWJsZSB7IGZhbHNlIH07CiAjaWYgRU5B
QkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVh
ZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgs
NyArNzgsNyBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpkZWNvZGVCTVAoYm9vbCBvbmx5CiAgICAg
Ly8gSW5pdGlhbGl6ZSB0aGUgZnJhbWVidWZmZXIgaWYgbmVlZGVkLgogICAgIEFTU0VSVChtX2J1
ZmZlcik7ICAvLyBQYXJlbnQgc2hvdWxkIHNldCB0aGlzIGJlZm9yZSBhc2tpbmcgdXMgdG8gZGVj
b2RlIQogICAgIGlmIChtX2J1ZmZlci0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0
eSkgewotICAgICAgICBpZiAoIW1fYnVmZmVyLT5zZXRTaXplKG1fcGFyZW50LT5zaXplKCkud2lk
dGgoKSwgbV9wYXJlbnQtPnNpemUoKS5oZWlnaHQoKSkpCisgICAgICAgIGlmICghbV9idWZmZXIt
PnNldFNpemUobV9wYXJlbnQtPnNpemUoKSkpCiAgICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQt
PnNldEZhaWxlZCgpOyAvLyBVbmFibGUgdG8gYWxsb2NhdGUuCiAgICAgICAgIG1fYnVmZmVyLT5z
ZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKICAgICAgICAgLy8gc2V0U2l6ZSgp
IGNhbGxzIGVyYXNlQVJHQigpLCB3aGljaCByZXNldHMgdGhlIGFscGhhIGZsYWcsIHNvIHdlIGZv
cmNlCkBAIC04Niw5ICs4Niw2IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OmRlY29kZUJNUChib29s
IG9ubHkKICAgICAgICAgLy8gdGhlc2UgMHMgY291bGQgYWN0dWFsbHkgc2hvdyB0aHJvdWdoLgog
ICAgICAgICBtX2J1ZmZlci0+c2V0SGFzQWxwaGEoZmFsc2UpOwogCi0gICAgICAgIC8vIEZvciBC
TVBzLCB0aGUgZnJhbWUgYWx3YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2UuCi0gICAgICAgIG1f
YnVmZmVyLT5zZXRPcmlnaW5hbEZyYW1lUmVjdChJbnRSZWN0KEludFBvaW50KCksIG1fcGFyZW50
LT5zaXplKCkpKTsKLQogICAgICAgICBpZiAoIW1faXNUb3BEb3duKQogICAgICAgICAgICAgbV9j
b29yZC5zZXRZKG1fcGFyZW50LT5zaXplKCkuaGVpZ2h0KCkgLSAxKTsKICAgICB9CkBAIC0xNzEs
NyArMTY4LDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc0luZm9IZWFkZXIoKQogICAg
ICAgICByZXR1cm4gbV9wYXJlbnQtPnNldEZhaWxlZCgpOwogCiAgICAgLy8gU2V0IG91ciBzaXpl
LgotICAgIGlmICghbV9wYXJlbnQtPnNldFNpemUobV9pbmZvSGVhZGVyLmJpV2lkdGgsIG1faW5m
b0hlYWRlci5iaUhlaWdodCkpCisgICAgaWYgKCFtX3BhcmVudC0+c2V0U2l6ZShJbnRTaXplKG1f
aW5mb0hlYWRlci5iaVdpZHRoLCBtX2luZm9IZWFkZXIuYmlIZWlnaHQpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgLy8gRm9yIHBhbGV0dGVkIGltYWdlcywgYml0bWFwcyBjYW4gc2V0
IGJpQ2xyVXNlZCB0byAwIHRvIG1lYW4gImFsbApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VCYWNraW5nU3RvcmVDYWlyby5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1h
Z2VCYWNraW5nU3RvcmVDYWlyby5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VCYWNraW5nU3RvcmVDYWlyby5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklt
YWdlQmFja2luZ1N0b3JlLmgiCisKKyNpbmNsdWRlIDxjYWlyby5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQmFja2luZ1N0b3JlOjppbWFnZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9k
YXRhKAorICAgICAgICByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihjb25zdF9jYXN0
PFJHQkEzMio+KG1fcGl4ZWxzUHRyKSksCisgICAgICAgIENBSVJPX0ZPUk1BVF9BUkdCMzIsIHNp
emUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCksIHNpemUoKS53aWR0aCgpICogc2l6ZW9mKFJH
QkEzMikpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRklt
YWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02MCwxMiArNjAsMTIgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJs
ZSgpCiAgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCk7CiB9CiAKLWJv
b2wgR0lGSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWln
aHQpCitib29sIEdJRkltYWdlRGVjb2Rlcjo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQog
ewotICAgIGlmIChJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpICYmIHNpemUoKSA9PSBJ
bnRTaXplKHdpZHRoLCBoZWlnaHQpKQorICAgIGlmIChJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWls
YWJsZSgpICYmIHRoaXMtPnNpemUoKSA9PSBzaXplKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICAgIGlmICghSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHdpZHRoLCBoZWlnaHQpKQorICAgIGlmICgh
SW1hZ2VEZWNvZGVyOjpzZXRTaXplKHNpemUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKQEAgLTIxMywxMCArMjEzLDEwIEBAIGJv
b2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnMKIAogICAgIC8vIEluaXRpYWxp
emUgdGhlIGZyYW1lIGlmIG5lY2Vzc2FyeS4KICAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2Zy
YW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07Ci0gICAgaWYgKCgoYnVmZmVyLnN0YXR1cygpID09
IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkp
IHx8ICFidWZmZXIuaGFzUGl4ZWxEYXRhKCkpCisgICAgaWYgKCgoYnVmZmVyLnN0YXR1cygpID09
IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkp
IHx8ICFidWZmZXIuaGFzQmFja2luZ1N0b3JlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogY3VycmVudEFkZHJlc3MgPSBidWZmZXIuZ2V0QWRk
cih4QmVnaW4sIHlCZWdpbik7CisgICAgUkdCQTMyKiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZlci5n
ZXRBZGRyKHhCZWdpbiwgeUJlZ2luKTsKICAgICAvLyBXcml0ZSBvbmUgcm93J3Mgd29ydGggb2Yg
ZGF0YSBpbnRvIHRoZSBmcmFtZS4gIAogICAgIGZvciAoaW50IHggPSB4QmVnaW47IHggPCB4RW5k
OyArK3gpIHsKICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBzb3VyY2VWYWx1ZSA9IHJvd0J1
ZmZlclsobV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4KSAtIGZyYW1lQ29udGV4dC0+
eE9mZnNldF07CkBAIC0zNjEsNyArMzYxLDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRG
cmFtZUJ1ZmZlcih1bgogCiAgICAgaWYgKCFmcmFtZUluZGV4KSB7CiAgICAgICAgIC8vIFRoaXMg
aXMgdGhlIGZpcnN0IGZyYW1lLCBzbyB3ZSdyZSBub3QgcmVseWluZyBvbiBhbnkgcHJldmlvdXMg
ZGF0YS4KLSAgICAgICAgaWYgKCFidWZmZXItPnNldFNpemUoc2NhbGVkU2l6ZSgpLndpZHRoKCks
IHNjYWxlZFNpemUoKS5oZWlnaHQoKSkpCisgICAgICAgIGlmICghYnVmZmVyLT5zZXRTaXplKHNj
YWxlZFNpemUoKSkpCiAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgLy8gVGhlIHN0YXJ0aW5nIHN0YXRlIGZvciB0aGlzIGZyYW1lIGRlcGVuZHMg
b24gdGhlIHByZXZpb3VzIGZyYW1lJ3MKQEAgLTM4NywxMiArMzg3LDEyIEBAIGJvb2wgR0lGSW1h
Z2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW4KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIC8vIFdlIHdhbnQgdG8gY2xlYXIgdGhlIHByZXZpb3VzIGZyYW1lIHRvIHRyYW5zcGFyZW50
LCB3aXRob3V0CiAgICAgICAgICAgICAvLyBhZmZlY3RpbmcgcGl4ZWxzIGluIHRoZSBpbWFnZSBv
dXRzaWRlIG9mIHRoZSBmcmFtZS4KLSAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHByZXZSZWN0
ID0gcHJldkJ1ZmZlci0+b3JpZ2luYWxGcmFtZVJlY3QoKTsKKyAgICAgICAgICAgIEludFJlY3Qg
cHJldlJlY3QgPSBwcmV2QnVmZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgpOwogICAgICAgICAgICAg
Y29uc3QgSW50U2l6ZSYgYnVmZmVyU2l6ZSA9IHNjYWxlZFNpemUoKTsKICAgICAgICAgICAgIGlm
ICghZnJhbWVJbmRleCB8fCBwcmV2UmVjdC5jb250YWlucyhJbnRSZWN0KEludFBvaW50KCksIHNj
YWxlZFNpemUoKSkpKSB7CiAgICAgICAgICAgICAgICAgLy8gQ2xlYXJpbmcgdGhlIGZpcnN0IGZy
YW1lLCBvciBhIGZyYW1lIHRoZSBzaXplIG9mIHRoZSB3aG9sZQogICAgICAgICAgICAgICAgIC8v
IGltYWdlLCByZXN1bHRzIGluIGEgY29tcGxldGVseSBlbXB0eSBpbWFnZS4KLSAgICAgICAgICAg
ICAgICBpZiAoIWJ1ZmZlci0+c2V0U2l6ZShidWZmZXJTaXplLndpZHRoKCksIGJ1ZmZlclNpemUu
aGVpZ2h0KCkpKQorICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLT5zZXRTaXplKGJ1ZmZlclNp
emUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIENvcHkgdGhlIHdob2xlIHByZXZpb3VzIGJ1
ZmZlciwgdGhlbiBjbGVhciBqdXN0IGl0cyBmcmFtZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNv
ZGVyLmgJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyAr
NDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFN0cmluZyBmaWxlbmFtZUV4dGVu
c2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJnaWYiOyB9CiAgICAgICAgIHZvaWQgc2V0
RGF0YShTaGFyZWRCdWZmZXImIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKSBvdmVycmlkZTsK
ICAgICAgICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBvdmVycmlkZTsKLSAgICAgICAgYm9vbCBz
ZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpIG92ZXJyaWRlOworICAgICAg
ICBib29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwogICAgICAgICBzaXplX3Qg
ZnJhbWVDb3VudCgpIG92ZXJyaWRlOwogICAgICAgICBpbnQgcmVwZXRpdGlvbkNvdW50KCkgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgICAgIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXpl
X3QgaW5kZXgpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwCShyZXZp
c2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9n
aWYvR0lGSW1hZ2VSZWFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDcsNyArNDQ3LDcgQEAg
Ym9vbCBHSUZJbWFnZVJlYWRlcjo6cGFyc2Uoc2l6ZV90IGRhdGFQbwogCiAgICAgICAgICAgICAv
LyBDQUxMQkFDSzogSW5mb3JtIHRoZSBkZWNvZGVycGx1Z2luIG9mIG91ciBzaXplLgogICAgICAg
ICAgICAgLy8gTm90ZTogQSBzdWJzZXF1ZW50IGZyYW1lIG1pZ2h0IGhhdmUgZGltZW5zaW9ucyBs
YXJnZXIgdGhhbiB0aGUgInNjcmVlbiIgZGltZW5zaW9ucy4KLSAgICAgICAgICAgIGlmIChtX2Ns
aWVudCAmJiAhbV9jbGllbnQtPnNldFNpemUobV9zY3JlZW5XaWR0aCwgbV9zY3JlZW5IZWlnaHQp
KQorICAgICAgICAgICAgaWYgKG1fY2xpZW50ICYmICFtX2NsaWVudC0+c2V0U2l6ZShXZWJDb3Jl
OjpJbnRTaXplKG1fc2NyZWVuV2lkdGgsIG1fc2NyZWVuSGVpZ2h0KSkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBtX3NjcmVlbkJnY29sb3IgPSBjdXJyZW50
Q29tcG9uZW50WzVdOwpAQCAtNjY0LDcgKzY2NCw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnBh
cnNlKHNpemVfdCBkYXRhUG8KICAgICAgICAgICAgICAgICB5T2Zmc2V0ID0gMDsKIAogICAgICAg
ICAgICAgICAgIC8vIENBTExCQUNLOiBJbmZvcm0gdGhlIGRlY29kZXJwbHVnaW4gb2Ygb3VyIHNp
emUuCi0gICAgICAgICAgICAgICAgaWYgKG1fY2xpZW50ICYmICFtX2NsaWVudC0+c2V0U2l6ZSht
X3NjcmVlbldpZHRoLCBtX3NjcmVlbkhlaWdodCkpCisgICAgICAgICAgICAgICAgaWYgKG1fY2xp
ZW50ICYmICFtX2NsaWVudC0+c2V0U2l6ZShXZWJDb3JlOjpJbnRTaXplKG1fc2NyZWVuV2lkdGgs
IG1fc2NyZWVuSGVpZ2h0KSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9u
IDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9J
Q09JbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxMSArODgsMTEgQEAgSW50
U2l6ZSBJQ09JbWFnZURlY29kZXI6OmZyYW1lU2l6ZUF0SW5kZQogICAgIHJldHVybiAoaW5kZXgg
JiYgKGluZGV4IDwgbV9kaXJFbnRyaWVzLnNpemUoKSkpID8gbV9kaXJFbnRyaWVzW2luZGV4XS5t
X3NpemUgOiBzaXplKCk7CiB9CiAKLWJvb2wgSUNPSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHVuc2ln
bmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCitib29sIElDT0ltYWdlRGVjb2Rlcjo6c2V0U2l6
ZShjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIC8vIFRoZSBzaXplIGNhbGN1bGF0ZWQgaW5z
aWRlIHRoZSBCTVBJbWFnZVJlYWRlciBoYWQgYmV0dGVyIG1hdGNoIHRoZSBvbmUgaW4KICAgICAv
LyB0aGUgaWNvbiBkaXJlY3RvcnkuCi0gICAgcmV0dXJuIG1fZnJhbWVTaXplLmlzRW1wdHkoKSA/
IEltYWdlRGVjb2Rlcjo6c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSA6ICgoSW50U2l6ZSh3aWR0aCwg
aGVpZ2h0KSA9PSBtX2ZyYW1lU2l6ZSkgfHwgc2V0RmFpbGVkKCkpOworICAgIHJldHVybiBtX2Zy
YW1lU2l6ZS5pc0VtcHR5KCkgPyBJbWFnZURlY29kZXI6OnNldFNpemUoc2l6ZSkgOiAoc2l6ZSA9
PSBtX2ZyYW1lU2l6ZSkgfHwgc2V0RmFpbGVkKCkpOwogfQogCiBzaXplX3QgSUNPSW1hZ2VEZWNv
ZGVyOjpmcmFtZUNvdW50KCkKQEAgLTI3OSw3ICsyNzksNyBAQCBib29sIElDT0ltYWdlRGVjb2Rl
cjo6cHJvY2Vzc0RpcmVjdG9yeUVuCiAgICAgY29uc3QgSWNvbkRpcmVjdG9yeUVudHJ5JiBkaXJF
bnRyeSA9IG1fZGlyRW50cmllcy5maXJzdCgpOwogICAgIC8vIFRlY2huaWNhbGx5LCB0aGlzIG5l
eHQgY2FsbCBzaG91bGRuJ3QgYmUgYWJsZSB0byBmYWlsLCBzaW5jZSB0aGUgd2lkdGgKICAgICAv
LyBhbmQgaGVpZ2h0IGhlcmUgYXJlIGVhY2ggPD0gMjU2LCBhbmQgfG1fZnJhbWVTaXplfCBpcyBl
bXB0eS4KLSAgICByZXR1cm4gc2V0U2l6ZShkaXJFbnRyeS5tX3NpemUud2lkdGgoKSwgZGlyRW50
cnkubV9zaXplLmhlaWdodCgpKTsKKyAgICByZXR1cm4gc2V0U2l6ZShkaXJFbnRyeS5tX3NpemUp
OwogfQogCiBJQ09JbWFnZURlY29kZXI6Okljb25EaXJlY3RvcnlFbnRyeSBJQ09JbWFnZURlY29k
ZXI6OnJlYWREaXJlY3RvcnlFbnRyeSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oCShy
ZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9pY28vSUNPSW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIG92ZXJy
aWRlOwogICAgICAgICBJbnRTaXplIHNpemUoKSBvdmVycmlkZTsKICAgICAgICAgSW50U2l6ZSBm
cmFtZVNpemVBdEluZGV4KHNpemVfdCwgU3Vic2FtcGxpbmdMZXZlbCkgb3ZlcnJpZGU7Ci0gICAg
ICAgIGJvb2wgc2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KSBvdmVycmlk
ZTsKKyAgICAgICAgYm9vbCBzZXRTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKICAgICAg
ICAgc2l6ZV90IGZyYW1lQ291bnQoKSBvdmVycmlkZTsKICAgICAgICAgSW1hZ2VGcmFtZSogZnJh
bWVCdWZmZXJBdEluZGV4KHNpemVfdCkgb3ZlcnJpZGU7CiAgICAgICAgIC8vIENBVVRJT046IHNl
dEZhaWxlZCgpIGRlbGV0ZXMgYWxsIHJlYWRlcnMgYW5kIGRlY29kZXJzLiAgQmUgY2FyZWZ1bCB0
bwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVH
SW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiAyMDU2ODQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFn
ZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjIsNyArMzIyLDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgbV9zdGF0ZSA9IEpQRUdfU1RBUlRfREVDT01QUkVTUzsKIAogICAgICAgICAg
ICAgLy8gV2UgY2FuIGZpbGwgaW4gdGhlIHNpemUgbm93IHRoYXQgdGhlIGhlYWRlciBpcyBhdmFp
bGFibGUuCi0gICAgICAgICAgICBpZiAoIW1fZGVjb2Rlci0+c2V0U2l6ZShtX2luZm8uaW1hZ2Vf
d2lkdGgsIG1faW5mby5pbWFnZV9oZWlnaHQpKQorICAgICAgICAgICAgaWYgKCFtX2RlY29kZXIt
PnNldFNpemUoSW50U2l6ZShtX2luZm8uaW1hZ2Vfd2lkdGgsIG1faW5mby5pbWFnZV9oZWlnaHQp
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIG1fZGVjb2Rl
ci0+c2V0T3JpZW50YXRpb24ocmVhZEltYWdlT3JpZW50YXRpb24oaW5mbygpKSk7CkBAIC01MTks
OSArNTE5LDkgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQogICAg
IHJldHVybiBJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpOwogfQogCi1ib29sIEpQRUdJ
bWFnZURlY29kZXI6OnNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKK2Jv
b2wgSlBFR0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogewotICAg
IGlmICghSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHdpZHRoLCBoZWlnaHQpKQorICAgIGlmICghSW1h
Z2VEZWNvZGVyOjpzZXRTaXplKHNpemUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBw
cmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKQEAgLTU1MSw3ICs1NTEsNyBAQCBib29sIEpQ
RUdJbWFnZURlY29kZXI6OnNldEZhaWxlZCgpCiB9CiAKIHRlbXBsYXRlIDxKX0NPTE9SX1NQQUNF
IGNvbG9yU3BhY2U+Ci12b2lkIHNldFBpeGVsKEltYWdlRnJhbWUmIGJ1ZmZlciwgSW1hZ2VGcmFt
ZTo6UGl4ZWxEYXRhKiBjdXJyZW50QWRkcmVzcywgSlNBTVBBUlJBWSBzYW1wbGVzLCBpbnQgY29s
dW1uKQordm9pZCBzZXRQaXhlbChJbWFnZUZyYW1lJiBidWZmZXIsIFJHQkEzMiogY3VycmVudEFk
ZHJlc3MsIEpTQU1QQVJSQVkgc2FtcGxlcywgaW50IGNvbHVtbikKIHsKICAgICBKU0FNUExFKiBq
c2FtcGxlID0gKnNhbXBsZXMgKyBjb2x1bW4gKiAoY29sb3JTcGFjZSA9PSBKQ1NfUkdCID8gMyA6
IDQpOwogCkBAIC01OTQsNyArNTk0LDcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRT
Y2FubGluZXMoSQogICAgICAgICBpZiAoZGVzdFkgPCAwKQogICAgICAgICAgICAgY29udGludWU7
CiAKLSAgICAgICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZl
ci5nZXRBZGRyKDAsIGRlc3RZKTsKKyAgICAgICAgUkdCQTMyKiBjdXJyZW50QWRkcmVzcyA9IGJ1
ZmZlci5nZXRBZGRyKDAsIGRlc3RZKTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0
aDsgKyt4KSB7CiAgICAgICAgICAgICBzZXRQaXhlbDxjb2xvclNwYWNlPihidWZmZXIsIGN1cnJl
bnRBZGRyZXNzLCBzYW1wbGVzLCBpc1NjYWxlZCA/IG1fc2NhbGVkQ29sdW1uc1t4XSA6IHgpOwog
ICAgICAgICAgICAgKytjdXJyZW50QWRkcmVzczsKQEAgLTYxNywxNSArNjE3LDEyIEBAIGJvb2wg
SlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKCkKICAgICAvLyBJbml0aWFsaXplIHRo
ZSBmcmFtZWJ1ZmZlciBpZiBuZWVkZWQuCiAgICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFt
ZUJ1ZmZlckNhY2hlWzBdOwogICAgIGlmIChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6
RnJhbWVFbXB0eSkgewotICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNjYWxlZFNpemUoKS53
aWR0aCgpLCBzY2FsZWRTaXplKCkuaGVpZ2h0KCkpKQorICAgICAgICBpZiAoIWJ1ZmZlci5zZXRT
aXplKHNjYWxlZFNpemUoKSkpCiAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAg
ICAgIGJ1ZmZlci5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKICAgICAgICAg
Ly8gVGhlIGJ1ZmZlciBpcyB0cmFuc3BhcmVudCBvdXRzaWRlIHRoZSBkZWNvZGVkIGFyZWEgd2hp
bGUgdGhlIGltYWdlIGlzCiAgICAgICAgIC8vIGxvYWRpbmcuIFRoZSBjb21wbGV0ZWQgaW1hZ2Ug
d2lsbCBiZSBtYXJrZWQgZnVsbHkgb3BhcXVlIGluIGpwZWdDb21wbGV0ZSgpLgogICAgICAgICBi
dWZmZXIuc2V0SGFzQWxwaGEodHJ1ZSk7Ci0KLSAgICAgICAgLy8gRm9yIEpQRUdzLCB0aGUgZnJh
bWUgYWx3YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2UuCi0gICAgICAgIGJ1ZmZlci5zZXRPcmln
aW5hbEZyYW1lUmVjdChJbnRSZWN0KEludFBvaW50KCksIHNpemUoKSkpOwogICAgIH0KIAogICAg
IGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QqIGluZm8gPSBtX3JlYWRlci0+aW5mbygpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNv
ZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgLy8gSW1hZ2VEZWNvZGVyCiAgICAgICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuICJqcGciOyB9CiAgICAgICAgIGJvb2wgaXNTaXplQXZhaWxh
YmxlKCkgb3ZlcnJpZGU7Ci0gICAgICAgIGJvb2wgc2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5z
aWduZWQgaGVpZ2h0KSBvdmVycmlkZTsKKyAgICAgICAgYm9vbCBzZXRTaXplKGNvbnN0IEludFNp
emUmKSBvdmVycmlkZTsKICAgICAgICAgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNp
emVfdCBpbmRleCkgb3ZlcnJpZGU7CiAgICAgICAgIC8vIENBVVRJT046IHNldEZhaWxlZCgpIGRl
bGV0ZXMgfG1fcmVhZGVyfC4gIEJlIGNhcmVmdWwgdG8gYXZvaWQKICAgICAgICAgLy8gYWNjZXNz
aW5nIGRlbGV0ZWQgbWVtb3J5LCBlc3BlY2lhbGx5IHdoZW4gY2FsbGluZyB0aGlzIGZyb20gaW5z
aWRlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5H
SW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVj
b2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNSw5ICsyMzUsOSBAQCBib29sIFBOR0ltYWdl
RGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkKICAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1Np
emVBdmFpbGFibGUoKTsKIH0KIAotYm9vbCBQTkdJbWFnZURlY29kZXI6OnNldFNpemUodW5zaWdu
ZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKK2Jvb2wgUE5HSW1hZ2VEZWNvZGVyOjpzZXRTaXpl
KGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgaWYgKCFJbWFnZURlY29kZXI6OnNldFNpemUo
d2lkdGgsIGhlaWdodCkpCisgICAgaWYgKCFJbWFnZURlY29kZXI6OnNldFNpemUoc2l6ZSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHByZXBhcmVTY2FsZURhdGFJZk5lY2Vzc2FyeSgp
OwpAQCAtMjk1LDcgKzI5NSw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJBdmFpbGFi
bGUoKQogICAgIC8vIHdpbGwgY2Vhc2UgdG8gZXhpc3QuICBOb3RlIHRoYXQgd2UnbGwgc3RpbGwg
cHJvcGVybHkgc2V0IHRoZSBmYWlsdXJlIGZsYWcKICAgICAvLyBpbiB0aGlzIGNhc2UgYXMgc29v
biBhcyB3ZSBsb25nam1wKCkuCiAgICAgbV9kb05vdGhpbmdPbkZhaWx1cmUgPSB0cnVlOwotICAg
IGJvb2wgcmVzdWx0ID0gc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBib29sIHJlc3VsdCA9
IHNldFNpemUoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CiAgICAgbV9kb05vdGhpbmdPbkZhaWx1
cmUgPSBmYWxzZTsKICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICBsb25nam1wKEpNUEJVRihw
bmcpLCAxKTsKQEAgLTQxMSwxOSArNDExLDE5IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpoZWFk
ZXJBdmFpbGFibGUoKQogICAgIH0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldFBpeGVsUkdC
KEltYWdlRnJhbWU6OlBpeGVsRGF0YSogZGVzdCwgcG5nX2J5dGVwIHBpeGVsKQorc3RhdGljIGlu
bGluZSB2b2lkIHNldFBpeGVsUkdCKFJHQkEzMiogZGVzdCwgcG5nX2J5dGVwIHBpeGVsKQogewog
ICAgICpkZXN0ID0gMHhGRjAwMDAwMFUgfCBwaXhlbFswXSA8PCAxNiB8IHBpeGVsWzFdIDw8IDgg
fCBwaXhlbFsyXTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldFBpeGVsUkdCQShJbWFnZUZy
YW1lOjpQaXhlbERhdGEqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCwgdW5zaWduZWQgY2hhciYgbm9u
VHJpdmlhbEFscGhhTWFzaykKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJHQkEoUkdCQTMy
KiBkZXN0LCBwbmdfYnl0ZXAgcGl4ZWwsIHVuc2lnbmVkIGNoYXImIG5vblRyaXZpYWxBbHBoYU1h
c2spCiB7CiAgICAgdW5zaWduZWQgY2hhciBhID0gcGl4ZWxbM107CiAgICAgKmRlc3QgPSBhIDw8
IDI0IHwgcGl4ZWxbMF0gPDwgMTYgfCBwaXhlbFsxXSA8PCA4IHwgcGl4ZWxbMl07CiAgICAgbm9u
VHJpdmlhbEFscGhhTWFzayB8PSAoMjU1IC0gYSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBz
ZXRQaXhlbFByZW11bHRpcGxpZWRSR0JBKEltYWdlRnJhbWU6OlBpeGVsRGF0YSogZGVzdCwgcG5n
X2J5dGVwIHBpeGVsLCB1bnNpZ25lZCBjaGFyJiBub25Ucml2aWFsQWxwaGFNYXNrKQorc3RhdGlj
IGlubGluZSB2b2lkIHNldFBpeGVsUHJlbXVsdGlwbGllZFJHQkEoUkdCQTMyKiBkZXN0LCBwbmdf
Ynl0ZXAgcGl4ZWwsIHVuc2lnbmVkIGNoYXImIG5vblRyaXZpYWxBbHBoYU1hc2spCiB7CiAgICAg
dW5zaWduZWQgY2hhciBhID0gcGl4ZWxbM107CiAgICAgdW5zaWduZWQgY2hhciByID0gZmFzdERp
dmlkZUJ5MjU1KHBpeGVsWzBdICogYSk7CkBAIC00NDcsNyArNDQ3LDcgQEAgdm9pZCBQTkdJbWFn
ZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZwogICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1f
ZnJhbWVCdWZmZXJDYWNoZVttX2N1cnJlbnRGcmFtZV07CiAgICAgaWYgKGJ1ZmZlci5zdGF0dXMo
KSA9PSBJbWFnZUZyYW1lOjpGcmFtZUVtcHR5KSB7CiAgICAgICAgIHBuZ19zdHJ1Y3RwIHBuZyA9
IG1fcmVhZGVyLT5wbmdQdHIoKTsKLSAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzY2FsZWRT
aXplKCkud2lkdGgoKSwgc2NhbGVkU2l6ZSgpLmhlaWdodCgpKSkgeworICAgICAgICBpZiAoIWJ1
ZmZlci5zZXRTaXplKHNjYWxlZFNpemUoKSkpIHsKICAgICAgICAgICAgIGxvbmdqbXAoSk1QQlVG
KHBuZyksIDEpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC00NzEsOCArNDcx
LDYgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZwogICAgICAgICAg
ICAgaW5pdEZyYW1lQnVmZmVyKG1fY3VycmVudEZyYW1lKTsKICAgICAgICAgZWxzZQogI2VuZGlm
Ci0gICAgICAgIC8vIEZvciBQTkdzLCB0aGUgZnJhbWUgYWx3YXlzIGZpbGxzIHRoZSBlbnRpcmUg
aW1hZ2UuCi0gICAgICAgIGJ1ZmZlci5zZXRPcmlnaW5hbEZyYW1lUmVjdChJbnRSZWN0KEludFBv
aW50KCksIHNpemUoKSkpOwogICAgIH0KIAogICAgIC8qIGxpYnBuZyBjb21tZW50cyAoaGVyZSB0
byBleHBsYWluIHdoYXQgZm9sbG93cykuCkBAIC01MzEsNyArNTI5LDcgQEAgdm9pZCBQTkdJbWFn
ZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZwogICAgIH0KIAogICAgIC8vIFdyaXRlIHRoZSBk
ZWNvZGVkIHJvdyBwaXhlbHMgdG8gdGhlIGZyYW1lIGJ1ZmZlci4KLSAgICBJbWFnZUZyYW1lOjpQ
aXhlbERhdGEqIGFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcigwLCB5KTsKKyAgICBSR0JBMzIqIGFk
ZHJlc3MgPSBidWZmZXIuZ2V0QWRkcigwLCB5KTsKICAgICBpbnQgd2lkdGggPSBzY2FsZWRTaXpl
KCkud2lkdGgoKTsKICAgICB1bnNpZ25lZCBjaGFyIG5vblRyaXZpYWxBbHBoYU1hc2sgPSAwOwog
CkBAIC04MjAsNyArODE4LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZl
cihzaQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFdlIHdhbnQgdG8gY2xlYXIgdGhlIHByZXZp
b3VzIGZyYW1lIHRvIHRyYW5zcGFyZW50LCB3aXRob3V0CiAgICAgICAgIC8vIGFmZmVjdGluZyBw
aXhlbHMgaW4gdGhlIGltYWdlIG91dHNpZGUgb2YgdGhlIGZyYW1lLgotICAgICAgICBjb25zdCBJ
bnRSZWN0JiBwcmV2UmVjdCA9IHByZXZCdWZmZXItPm9yaWdpbmFsRnJhbWVSZWN0KCk7CisgICAg
ICAgIEludFJlY3QgcHJldlJlY3QgPSBwcmV2QnVmZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgpOwog
ICAgICAgICBpZiAoIWZyYW1lSW5kZXggfHwgcHJldlJlY3QuY29udGFpbnMoSW50UmVjdChJbnRQ
b2ludCgpLCBzY2FsZWRTaXplKCkpKSkgewogICAgICAgICAgICAgLy8gQ2xlYXJpbmcgdGhlIGZp
cnN0IGZyYW1lLCBvciBhIGZyYW1lIHRoZSBzaXplIG9mIHRoZSB3aG9sZQogICAgICAgICAgICAg
Ly8gaW1hZ2UsIHJlc3VsdHMgaW4gYSBjb21wbGV0ZWx5IGVtcHR5IGltYWdlLgpAQCAtODQ0LDcg
Kzg0Miw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKCkKICAgICBwbmdf
Ynl0ZXAgaW50ZXJsYWNlQnVmZmVyID0gbV9yZWFkZXItPmludGVybGFjZUJ1ZmZlcigpOwogCiAg
ICAgaWYgKG1fY3VycmVudEZyYW1lICYmIGludGVybGFjZUJ1ZmZlcikgewotICAgICAgICBjb25z
dCBJbnRSZWN0JiByZWN0ID0gYnVmZmVyLm9yaWdpbmFsRnJhbWVSZWN0KCk7CisgICAgICAgIElu
dFJlY3QgcmVjdCA9IGJ1ZmZlci5vcmlnaW5hbEZyYW1lUmVjdCgpOwogICAgICAgICBib29sIGhh
c0FscGhhID0gbV9yZWFkZXItPmhhc0FscGhhKCk7CiAgICAgICAgIHVuc2lnbmVkIGNvbG9yQ2hh
bm5lbHMgPSBoYXNBbHBoYSA/IDQgOiAzOwogICAgICAgICBib29sIG5vblRyaXZpYWxBbHBoYSA9
IGZhbHNlOwpAQCAtODU0LDcgKzg1Miw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNv
bXBsZXRlKCkKICNpZiBFTkFCTEUoSU1BR0VfREVDT0RFUl9ET1dOX1NBTVBMSU5HKQogICAgICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IHJlY3QubWF4WSgpIC0gcmVjdC55KCk7ICsreSkgewogICAg
ICAgICAgICAgcG5nX2J5dGVwIHJvdyA9IGludGVybGFjZUJ1ZmZlciArIChtX3NjYWxlZCA/IG1f
c2NhbGVkUm93c1t5XSA6IHkpICogY29sb3JDaGFubmVscyAqIHNpemUoKS53aWR0aCgpOwotICAg
ICAgICAgICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIo
cmVjdC54KCksIHkgKyByZWN0LnkoKSk7CisgICAgICAgICAgICBSR0JBMzIqIGFkZHJlc3MgPSBi
dWZmZXIuZ2V0QWRkcihyZWN0LngoKSwgeSArIHJlY3QueSgpKTsKICAgICAgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgcmVjdC5tYXhYKCkgLSByZWN0LngoKTsgKyt4KSB7CiAgICAgICAgICAg
ICAgICAgcG5nX2J5dGVwIHBpeGVsID0gcm93ICsgKG1fc2NhbGVkID8gbV9zY2FsZWRDb2x1bW5z
W3hdIDogeCkgKiBjb2xvckNoYW5uZWxzOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFscGhh
ID0gaGFzQWxwaGEgPyBwaXhlbFszXSA6IDI1NTsKQEAgLTg3MCw3ICs4NjgsNyBAQCB2b2lkIFBO
R0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAgICAgICAgIHBuZ19ieXRlcCByb3cgPSBp
bnRlcmxhY2VCdWZmZXI7CiAgICAgICAgIGZvciAoaW50IHkgPSByZWN0LnkoKTsgeSA8IHJlY3Qu
bWF4WSgpOyArK3ksIHJvdyArPSBjb2xvckNoYW5uZWxzICogc2l6ZSgpLndpZHRoKCkpIHsKICAg
ICAgICAgICAgIHBuZ19ieXRlcCBwaXhlbCA9IHJvdzsKLSAgICAgICAgICAgIEltYWdlRnJhbWU6
OlBpeGVsRGF0YSogYWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHJlY3QueCgpLCB5KTsKKyAgICAg
ICAgICAgIFJHQkEzMiogYWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHJlY3QueCgpLCB5KTsKICAg
ICAgICAgICAgIGZvciAoaW50IHggPSByZWN0LngoKTsgeCA8IHJlY3QubWF4WCgpOyArK3gsIHBp
eGVsICs9IGNvbG9yQ2hhbm5lbHMpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9
IGhhc0FscGhhID8gcGl4ZWxbM10gOiAyNTU7CiAgICAgICAgICAgICAgICAgbm9uVHJpdmlhbEFs
cGhhIHw9IGFscGhhIDwgMjU1OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAkocmV2aXNp
b24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5n
L1BOR0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0OCw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgaW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fcGxheUNvdW50LTE7IH0KICNlbmRpZgogICAgICAgICBib29sIGlzU2l6
ZUF2YWlsYWJsZSgpIG92ZXJyaWRlOwotICAgICAgICBib29sIHNldFNpemUodW5zaWduZWQgd2lk
dGgsIHVuc2lnbmVkIGhlaWdodCkgb3ZlcnJpZGU7CisgICAgICAgIGJvb2wgc2V0U2l6ZShjb25z
dCBJbnRTaXplJikgb3ZlcnJpZGU7CiAgICAgICAgIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJ
bmRleChzaXplX3QgaW5kZXgpIG92ZXJyaWRlOwogICAgICAgICAvLyBDQVVUSU9OOiBzZXRGYWls
ZWQoKSBkZWxldGVzIHxtX3JlYWRlcnwuICBCZSBjYXJlZnVsIHRvIGF2b2lkCiAgICAgICAgIC8v
IGFjY2Vzc2luZyBkZWxldGVkIG1lbW9yeSwgZXNwZWNpYWxseSB3aGVuIGNhbGxpbmcgdGhpcyBm
cm9tIGluc2lkZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
d2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwCShyZXZpc2lv
biAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJw
L1dFQlBJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1LDcgQEAg
Ym9vbCBXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBvbmx5UwogICAgICAgICAgICAgcmV0
dXJuIHNldEZhaWxlZCgpOwogICAgICAgICBtX2hhc0FscGhhID0gZmFsc2U7CiAjZW5kaWYKLSAg
ICAgICAgaWYgKCFzZXRTaXplKHdpZHRoLCBoZWlnaHQpKQorICAgICAgICBpZiAoIXNldFNpemUo
SW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSkpCiAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7
CiAgICAgfQogCkBAIC0xMjgsMTggKzEyOCwxNyBAQCBib29sIFdFQlBJbWFnZURlY29kZXI6OmRl
Y29kZShib29sIG9ubHlTCiAgICAgQVNTRVJUKGJ1ZmZlci5zdGF0dXMoKSAhPSBJbWFnZUZyYW1l
OjpGcmFtZUNvbXBsZXRlKTsKIAogICAgIGlmIChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFt
ZTo6RnJhbWVFbXB0eSkgewotICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNpemUoKS53aWR0
aCgpLCBzaXplKCkuaGVpZ2h0KCkpKQorICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNpemUo
KSkpCiAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgICAgIGJ1ZmZlci5zZXRT
dGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKICAgICAgICAgYnVmZmVyLnNldEhhc0Fs
cGhhKG1faGFzQWxwaGEpOwotICAgICAgICBidWZmZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50
UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKTsKICAgICB9CiAKICAgICBpZiAoIW1fZGVjb2Rlcikg
ewogICAgICAgICBXRUJQX0NTUF9NT0RFIG1vZGUgPSBvdXRwdXRNb2RlKG1faGFzQWxwaGEpOwog
ICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkKICAgICAgICAgICAgIG1vZGUgPSBvdXRw
dXRNb2RlKGZhbHNlKTsKLSAgICAgICAgaW50IHJvd1N0cmlkZSA9IHNpemUoKS53aWR0aCgpICog
c2l6ZW9mKEltYWdlRnJhbWU6OlBpeGVsRGF0YSk7CisgICAgICAgIGludCByb3dTdHJpZGUgPSBz
aXplKCkud2lkdGgoKSAqIHNpemVvZihSR0JBMzIpOwogICAgICAgICB1aW50OF90KiBvdXRwdXQg
PSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIuZ2V0QWRkcigwLCAwKSk7CiAgICAg
ICAgIGludCBvdXRwdXRTaXplID0gc2l6ZSgpLmhlaWdodCgpICogcm93U3RyaWRlOwogICAgICAg
ICBtX2RlY29kZXIgPSBXZWJQSU5ld1JHQihtb2RlLCBvdXRwdXQsIG91dHB1dFNpemUsIHJvd1N0
cmlkZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288472</attachid>
            <date>2016-09-09 18:46:38 -0700</date>
            <delta_ts>2016-09-09 19:08:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159679-20160909184410.patch</filename>
            <type>text/plain</type>
            <size>56609</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTc4MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBAQAorMjAxNi0wOS0wOSAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgdGhl
IHBpeGVsIGRhdGEgb2YgSW1hZ2VGcmFtZSB0byBhIHNlcGFyYXRlIGNsYXNzIG5hbWVkIEltYWdl
QmFja2luZ1N0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTk2NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNb3ZlIHRoZSBwaXhlbCBkYXRhIG1hbmlwdWxhdGlvbiBwYXJ0IGluIEltYWdlRnJhbWUg
aW50byBhIHNlcGFyYXRlIGNsYXNzCisgICAgICAgIGFuZCBhbGxvY2F0ZSBpdCBvbiBkZW1hbmQu
CisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5j
bWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbkNhaXJvLmNtYWtlOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2hhbm5lbCk6Cisg
ICAgICAgIChXZWJDb3JlOjp1bnByZW11bHRpcGxpZWRDaGFubmVsKToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VQcmVtdWx0aXBsaWVkUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlVW5QcmVt
dWx0aXBsaWVkUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpjb2xvckZyb21QcmVtdWx0aXBsaWVk
QVJHQik6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OmZh
c3RNdWx0aXBseUJ5MjU1KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tp
bmdTdG9yZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OkltYWdlQmFja2lu
Z1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRGcmFtZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OnNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCYWNraW5nU3RvcmU6OmZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJhY2tpbmdTdG9yZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3Rv
cmU6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJhY2tpbmdTdG9yZTo6cmVw
ZWF0Rmlyc3RSb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OmF0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRSR0JBKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpvdmVyUkdCQSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJhY2tpbmdTdG9yZTo6aW5Cb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
YWNraW5nU3RvcmU6OmlzT3ZlclNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L05hdGl2ZUltYWdlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmF0aXZlSW1hZ2VIYXNBbHBo
YSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojp6ZXJvRmlsbEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjb3B5
Qml0bWFwRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldE9yaWdpbmFsRnJhbWVSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVCeXRlc0F0SW5kZXgpOgorICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VGcmFtZTo6Y29weVJvd05UaW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6YmFja2luZ1N0b3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Omhhc0JhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpvcmlnaW5hbEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjpnZXRBZGRyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldFJH
QkEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6b3ZlclJHQkEpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWU6OnNldE9yaWdpbmFsRnJhbWVSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRnJhbWU6Omhhc1BpeGVsRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjpmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZTo6ZGl2aWRlMjU1KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWU6OndpZHRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWU6OmhlaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6
OmlzT3ZlclNpemUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2JtcC9CTVBJbWFnZVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRl
cjo6ZGVjb2RlQk1QKToKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpwcm9jZXNz
SW5mb0hlYWRlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1h
Z2VCYWNraW5nU3RvcmVDYWlyby5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
YWNraW5nU3RvcmU6OmltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9n
aWYvR0lGSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rl
cjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNv
ZGVkUm93KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVm
ZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNv
ZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVh
ZGVyLmNwcDoKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpwYXJzZSk6CisgICAgICAgICogcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJQ09JbWFnZURlY29kZXI6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SUNP
SW1hZ2VEZWNvZGVyOjpwcm9jZXNzRGlyZWN0b3J5RW50cmllcyk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VSZWFkZXI6OmRlY29kZSk6CisgICAgICAgIChXZWJD
b3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFBp
eGVsKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5l
cyk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNv
ZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVj
b2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnNldFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJBdmFpbGFibGUpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxSR0IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxS
R0JBKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVsUHJlbXVsdGlwbGllZFJHQkEpOgorICAg
ICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgICogcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldFQlBJbWFnZURlY29kZXI6OmRlY29kZSk6CisKIDIwMTYtMDktMDkgIENvbW1pdCBR
dWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJv
bGxpbmcgb3V0IHIyMDU3NzEuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFr
ZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQkocmV2aXNp
b24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UJKHdvcmtpbmcg
Y29weSkKQEAgLTE4MywxMCArMTgzLDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MveDExL1BsYXRmb3JtRGlzcGxheVgxMS5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy94MTEvWFVuaXF1ZVJlc291cmNlLmNwcAogCisgICAgcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VCYWNraW5nU3RvcmVDYWlyby5jcHAKICAgICBwbGF0Zm9y
bS9pbWFnZS1lbmNvZGVycy9KUEVHSW1hZ2VFbmNvZGVyLmNwcAogCi0gICAgcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCi0KICAgICBwbGF0Zm9ybS9u
ZXR3b3JrL2VmbC9OZXR3b3JrU3RhdGVOb3RpZmllckVmbC5jcHAKIAogICAgIHBsYXRmb3JtL25l
dHdvcmsvc291cC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNvdXAuY3BwCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUdUSy5jbWFrZQkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1HVEsuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw3ICsxNTUsNyBAQCBsaXN0KEFQ
UEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJz
LmNwcAogICAgIHBsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuY3BwCiAKLSAgICBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZUJhY2tpbmdTdG9yZUNhaXJvLmNwcAogCiAgICAgcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3RrL1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlR3RrLmNwcAog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UJKHJldmlzaW9uIDIwNTY4
NCkKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDcgKzQ2LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAKIAot
ICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAor
ICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3JlQ2Fpcm8u
Y3BwCiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvblN0dWIuY3Bw
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjI3NSw2ICsyMjc1LDcg
QEAKIAkJNTU1Qjg3RUMxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1NUI4N0VBMUNBQUYw
QUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAgKi87IH07CiAJCTU1NUI4N0VEMUNBQUYw
QUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVj
b2RlckNHLmggKi87IH07CiAJCTU1QTMzNkY3MUQ4MjA5RjQwMDIyQzRDNyAvKiBOYXRpdmVJbWFn
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVBMzM2
RjYxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi87IH07CisJCTU1QTMzNkY5MUQ4
MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVBMzM2RjgxRDgyMUUzQzAwMjJDNEM3IC8qIElt
YWdlQmFja2luZ1N0b3JlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTcwOUU4Q0QxRDQxM0Q0NzAwMzI0NEFDIC8qIFdlYktpdFN1YnRsZUNyeXB0
by5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzA5
RThDQTFENDEzQ0UzMDAzMjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5cHRvLmNwcCAqLzsgfTsKIAkJ
NTcwOUU4Q0UxRDQxM0Q1QjAwMzI0NEFDIC8qIEpTV2ViS2l0U3VidGxlQ3J5cHRvQ3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRkY4RjY2
MTgwNzQ2MDgwMDEzMjY3NCAvKiBKU1dlYktpdFN1YnRsZUNyeXB0b0N1c3RvbS5jcHAgKi87IH07
CiAJCTU3MDlFOENGMUQ0MTNEOUEwMDMyNDRBQyAvKiBXZWJLaXRTdWJ0bGVDcnlwdG8uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MDlFOENCMUQ0MTND
RTMwMDMyNDRBQyAvKiBXZWJLaXRTdWJ0bGVDcnlwdG8uaCAqLzsgfTsKQEAgLTkyOTEsNiArOTI5
Miw3IEBACiAJCTU1NUI4N0VBMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZURlY29kZXJDRy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1NUI4N0VCMUNBQUYwQUIwMDM0OTQyNSAv
KiBJbWFnZURlY29kZXJDRy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFn
ZURlY29kZXJDRy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUEzMzZGNjFEODIw
OUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTmF0aXZlSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVBMzM2
RjgxRDgyMUUzQzAwMjJDNEM3IC8qIEltYWdlQmFja2luZ1N0b3JlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQmFja2luZ1N0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTU1RDQwOEY3MUE3QzYzMTgwMEM3ODQ1MCAvKiBTVkdJbWFnZUNsaWVudHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHSW1hZ2VDbGllbnRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MDlFOENBMUQ0MTNDRTMwMDMyNDRBQyAvKiBX
ZWJLaXRTdWJ0bGVDcnlwdG8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2ViS2l0U3VidGxlQ3J5cHRvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTcwOUU4Q0IxRDQxM0NFMzAwMzI0NEFDIC8qIFdlYktpdFN1YnRsZUNyeXB0by5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRTdWJ0bGVDcnlwdG8uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwNzY5LDYgKzIwNzcxLDcgQEAKIAkJCQkzNzk5MTk5NDEy
MDBEREY0MDBFQTA0MUMgLyogV09GRkZpbGVGb3JtYXQuY3BwICovLAogCQkJCTM3OTkxOTk1MTIw
MERERjQwMEVBMDQxQyAvKiBXT0ZGRmlsZUZvcm1hdC5oICovLAogCQkJCTU1QTMzNkY2MUQ4MjA5
RjQwMDIyQzRDNyAvKiBOYXRpdmVJbWFnZS5oICovLAorCQkJCTU1QTMzNkY4MUQ4MjFFM0MwMDIy
QzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oICovLAogCQkJKTsKIAkJCXBhdGggPSBncmFwaGlj
czsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yNjMzOSw2ICsyNjM0Miw3IEBACiAJ
CQkJNTgyQ0IwNTMxQTc4QTE0QjAwQUZGQ0M0IC8qIFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21l
bnRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzVBMUVBN0QxNTJCQ0YwODAwNEQwMEI2
IC8qIFNpbXBsaWZ5TWFya3VwQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTcyQTdGMjEx
QzZFNTcxOTAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
NUEzMzZGOTFEODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTMxNzQxQUFEMTY2MzY2MDkwMDhBNUI3RSAvKiBTaW11bGF0ZWRDbGlja09wdGlv
bnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMDBEN0E1MTRBM0Y2MTkwMDczNDAxMSAvKiBTaW5j
UmVzYW1wbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTMyN0Q2MDExQTMzQTJCMDA0RjlENjUg
LyogU2lua0RvY3VtZW50LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDks
NiArNDksMTYgQEAgY29uc3QgUkdCQTMyIENvbG9yOjp0cmFuc3BhcmVudDsKIHN0YXRpYyBjb25z
dCBSR0JBMzIgbGlnaHRlbmVkQmxhY2sgPSAweEZGNTQ1NDU0Owogc3RhdGljIGNvbnN0IFJHQkEz
MiBkYXJrZW5lZFdoaXRlID0gMHhGRkFCQUJBQjsKIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBw
cmVtdWx0aXBsaWVkQ2hhbm5lbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBhKQoreworICAgIHJldHVy
biBmYXN0RGl2aWRlQnkyNTUoYyAqIGEgKyAyNTQpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2ln
bmVkIHVucHJlbXVsdGlwbGllZENoYW5uZWwodW5zaWduZWQgYywgdW5zaWduZWQgYSkKK3sKKyAg
ICByZXR1cm4gKGZhc3RNdWx0aXBseUJ5MjU1KGMpICsgYSAtIDEpIC8gYTsKK30KKwogUkdCQTMy
IG1ha2VSR0IoaW50IHIsIGludCBnLCBpbnQgYikKIHsKICAgICByZXR1cm4gMHhGRjAwMDAwMCB8
IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKHIsIDI1NSkpIDw8IDE2IHwgc3RkOjptYXgoMCwgc3RkOjpt
aW4oZywgMjU1KSkgPDwgOCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGIsIDI1NSkpOwpAQCAtNTks
NiArNjksMTYgQEAgUkdCQTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludAogICAg
IHJldHVybiBzdGQ6Om1heCgwLCBzdGQ6Om1pbihhLCAyNTUpKSA8PCAyNCB8IHN0ZDo6bWF4KDAs
IHN0ZDo6bWluKHIsIDI1NSkpIDw8IDE2IHwgc3RkOjptYXgoMCwgc3RkOjptaW4oZywgMjU1KSkg
PDwgOCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGIsIDI1NSkpOwogfQogCitSR0JBMzIgbWFrZVBy
ZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQoreworICAgIHJldHVy
biBtYWtlUkdCQShwcmVtdWx0aXBsaWVkQ2hhbm5lbChyLCBhKSwgcHJlbXVsdGlwbGllZENoYW5u
ZWwoZywgYSksIHByZW11bHRpcGxpZWRDaGFubmVsKGIsIGEpLCBhKTsKK30KKworUkdCQTMyIG1h
a2VVblByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQoreworICAg
IHJldHVybiBtYWtlUkdCQSh1bnByZW11bHRpcGxpZWRDaGFubmVsKHIsIGEpLCB1bnByZW11bHRp
cGxpZWRDaGFubmVsKGcsIGEpLCB1bnByZW11bHRpcGxpZWRDaGFubmVsKGIsIGEpLCBhKTsKK30K
Kwogc3RhdGljIGludCBjb2xvckZsb2F0VG9SR0JBQnl0ZShmbG9hdCBmKQogewogICAgIC8vIFdl
IHVzZSBscm91bmRmIGFuZCAyNTUgaW5zdGVhZCBvZiBuZXh0YWZ0ZXJmKDI1NiwgMCkgdG8gbWF0
Y2ggQ0cncyByb3VuZGluZwpAQCAtNDgyLDE0ICs1MDIsOSBAQCB2b2lkIENvbG9yOjpnZXRIU1Yo
ZG91YmxlJiBodWUsIGRvdWJsZSYgCiBDb2xvciBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQihS
R0JBMzIgcGl4ZWxDb2xvcikKIHsKICAgICBpbnQgYWxwaGEgPSBhbHBoYUNoYW5uZWwocGl4ZWxD
b2xvcik7Ci0gICAgaWYgKGFscGhhICYmIGFscGhhIDwgMjU1KSB7Ci0gICAgICAgIHJldHVybiBD
b2xvcjo6Y3JlYXRlVW5jaGVja2VkKAotICAgICAgICAgICAgcmVkQ2hhbm5lbChwaXhlbENvbG9y
KSAqIDI1NSAvIGFscGhhLAotICAgICAgICAgICAgZ3JlZW5DaGFubmVsKHBpeGVsQ29sb3IpICog
MjU1IC8gYWxwaGEsCi0gICAgICAgICAgICBibHVlQ2hhbm5lbChwaXhlbENvbG9yKSAqIDI1NSAv
IGFscGhhLAotICAgICAgICAgICAgYWxwaGEpOwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4g
Q29sb3IocGl4ZWxDb2xvcik7CisgICAgaWYgKGFscGhhICYmIGFscGhhIDwgMjU1KQorICAgICAg
ICBwaXhlbENvbG9yID0gbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEocmVkQ2hhbm5lbChwaXhlbENv
bG9yKSwgZ3JlZW5DaGFubmVsKHBpeGVsQ29sb3IpLCBibHVlQ2hhbm5lbChwaXhlbENvbG9yKSwg
YWxwaGEpOworICAgIHJldHVybiBDb2xvcihwaXhlbENvbG9yKTsKIH0KIAogUkdCQTMyIHByZW11
bHRpcGxpZWRBUkdCRnJvbUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTQ5NywxNCArNTEy
LDEwIEBAIFJHQkEzMiBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihjb25zdCAKICAgICB1bnNp
Z25lZCBwaXhlbENvbG9yOwogCiAgICAgdW5zaWduZWQgYWxwaGEgPSBjb2xvci5hbHBoYSgpOwot
ICAgIGlmIChhbHBoYSA8IDI1NSkgewotICAgICAgICBwaXhlbENvbG9yID0gQ29sb3I6OmNyZWF0
ZVVuY2hlY2tlZCgKLSAgICAgICAgICAgIGZhc3REaXZpZGVCeTI1NShjb2xvci5yZWQoKSAqIGFs
cGhhICsgMjU0KSwKLSAgICAgICAgICAgIGZhc3REaXZpZGVCeTI1NShjb2xvci5ncmVlbigpICog
YWxwaGEgKyAyNTQpLAotICAgICAgICAgICAgZmFzdERpdmlkZUJ5MjU1KGNvbG9yLmJsdWUoKSAq
IGFscGhhICsgMjU0KSwKLSAgICAgICAgICAgIGFscGhhKS5yZ2IoKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgIHBpeGVsQ29sb3IgPSBjb2xvci5yZ2IoKTsKKyAgICBpZiAoYWxwaGEgPCAyNTUpCisg
ICAgICAgIHBpeGVsQ29sb3IgPSBtYWtlUHJlbXVsdGlwbGllZFJHQkEoY29sb3IucmVkKCksIGNv
bG9yLmdyZWVuKCksIGNvbG9yLmJsdWUoKSwgYWxwaGEpOworICAgIGVsc2UKKyAgICAgICAgcGl4
ZWxDb2xvciA9IGNvbG9yLnJnYigpOwogCiAgICAgcmV0dXJuIHBpeGVsQ29sb3I7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgJKHJldmlzaW9uIDIwNTY4
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU1LDYgKzU1LDkgQEAgdHlwZWRlZiB1bnNpZ25lZCBSR0JBMzI7IC8vIERlcHJl
Y2F0ZWQ6IAogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VSR0IoaW50IHIsIGludCBnLCBpbnQg
Yik7CiBXRUJDT1JFX0VYUE9SVCBSR0JBMzIgbWFrZVJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwg
aW50IGEpOwogCitSR0JBMzIgbWFrZVByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50
IGIsIGludCBhKTsKK1JHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcs
IGludCBiLCBpbnQgYSk7CisKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBjb2xvcldpdGhPdmVycmlk
ZUFscGhhKFJHQkEzMiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSk7CiBXRUJDT1JFX0VYUE9S
VCBSR0JBMzIgY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIE9wdGlvbmFsPGZs
b2F0PiBvdmVycmlkZUFscGhhKTsKIApAQCAtMjE4LDYgKzIyMSw3IEBAIENvbG9yIGJsZW5kKGNv
bnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2wKIAogaW50IGRpZmZlcmVuY2VTcXVhcmVkKGNvbnN0
IENvbG9yJiwgY29uc3QgQ29sb3ImKTsKIAordWludDE2X3QgZmFzdE11bHRpcGx5QnkyNTUodWlu
dDE2X3QgdmFsdWUpOwogdWludDE2X3QgZmFzdERpdmlkZUJ5MjU1KHVpbnQxNl90KTsKIAogI2lm
IFVTRShDRykKQEAgLTI5MCw2ICsyOTQsMTEgQEAgaW5saW5lIHVpbnQ4X3Qgcm91bmRBbmRDbGFt
cENvbG9yQ2hhbm5lbAogICAgIHJldHVybiBzdGQ6Om1heCgwLmYsIHN0ZDo6bWluKDI1NS5mLCBz
dGQ6OnJvdW5kKHZhbHVlKSkpOwogfQogCitpbmxpbmUgdWludDE2X3QgZmFzdE11bHRpcGx5Qnky
NTUodWludDE2X3QgdmFsdWUpCit7CisgICAgcmV0dXJuICh2YWx1ZSA8PCA4KSAtIHZhbHVlOwor
fQorCiBpbmxpbmUgdWludDE2X3QgZmFzdERpdmlkZUJ5MjU1KHVpbnQxNl90IHZhbHVlKQogewog
ICAgIC8vIFdoaWxlIHRoaXMgaXMgYW4gYXBwcm94aW1hdGUgYWxnb3JpdGhtIGZvciBkaXZpc2lv
biBieSAyNTUsIGl0IGdpdmVzIHBlcmZlY3RseSBhY2N1cmF0ZSByZXN1bHRzIGZvciAxNi1iaXQg
dmFsdWVzLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNr
aW5nU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJhY2tpbmdTdG9yZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkludFJlY3Qu
aCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2UuaCIKKworI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFn
ZUJhY2tpbmdTdG9yZSB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJhY2tpbmdTdG9yZT4gY3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlw
bHlBbHBoYSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEltYWdlQmFj
a2luZ1N0b3JlPihzaXplLCBwcmVtdWx0aXBseUFscGhhKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQmFja2luZ1N0b3JlPiBjcmVhdGUoY29uc3QgSW1hZ2VCYWNr
aW5nU3RvcmUmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8
SW1hZ2VCYWNraW5nU3RvcmU+KG90aGVyKTsKKyAgICB9CisKKyAgICBJbWFnZUJhY2tpbmdTdG9y
ZShjb25zdCBJbnRTaXplJiBzaXplLCBib29sIHByZW11bHRpcGx5QWxwaGEgPSB0cnVlKQorICAg
ICAgICA6IG1fcHJlbXVsdGlwbHlBbHBoYShwcmVtdWx0aXBseUFscGhhKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFzaXplLmlzRW1wdHkoKSk7CisgICAgICAgIHNldFNpemUoc2l6ZSk7CisgICAg
fQorCisgICAgSW1hZ2VCYWNraW5nU3RvcmUoY29uc3QgSW1hZ2VCYWNraW5nU3RvcmUmIG90aGVy
KQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIG1fcGl4ZWxzID0gb3RoZXIubV9waXhlbHM7CisgICAgICAgIG1fcGl4ZWxz
UHRyID0gbV9waXhlbHMuZGF0YSgpOworICAgICAgICBtX3NpemUgPSBvdGhlci5tX3NpemU7Cisg
ICAgICAgIG1fcHJlbXVsdGlwbHlBbHBoYSA9IG90aGVyLm1fcHJlbXVsdGlwbHlBbHBoYTsKKyAg
ICB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZSgpIGNvbnN0OworCisgICAgYm9vbCBzZXRT
aXplKGNvbnN0IEludFNpemUmIHNpemUpCisgICAgeworICAgICAgICBpZiAoIW1fcGl4ZWxzLnRy
eVJlc2VydmVDYXBhY2l0eShzaXplLmFyZWEoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgbV9waXhlbHMucmVzaXplKHNpemUuYXJlYSgpKTsKKyAgICAgICAgbV9waXhl
bHNQdHIgPSBtX3BpeGVscy5kYXRhKCk7CisgICAgICAgIG1fc2l6ZSA9IHNpemU7CisgICAgICAg
IG1fZnJhbWVSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUpOworICAgICAgICBjbGVh
cigpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIHNldEZyYW1lUmVj
dChjb25zdCBJbnRSZWN0JiBmcmFtZVJlY3QpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fc2l6
ZS5pc0VtcHR5KCkpOworICAgICAgICBBU1NFUlQoaW5Cb3VuZHMoZnJhbWVSZWN0KSk7CisgICAg
ICAgIG1fZnJhbWVSZWN0ID0gZnJhbWVSZWN0OworICAgIH0KKworICAgIEludFNpemUgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIEludFJlY3QgZnJhbWVSZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9mcmFtZVJlY3Q7IH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAg
ICAgbWVtc2V0KG1fcGl4ZWxzUHRyLCAwLCBtX3NpemUuYXJlYSgpICogc2l6ZW9mKFJHQkEzMikp
OworICAgIH0KKworICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAg
eworICAgICAgICBpZiAocmVjdC5pc0VtcHR5KCkgfHwgIWluQm91bmRzKHJlY3QpKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIHNpemVfdCByZWN0V2lkdGhJbkJ5dGVzID0gcmVjdC53
aWR0aCgpICogc2l6ZW9mKFJHQkEzMik7CisgICAgICAgIFJHQkEzMiogc3RhcnQgPSBhdChyZWN0
LngoKSwgcmVjdC55KCkpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QuaGVpZ2h0
KCk7ICsraSkgeworICAgICAgICAgICAgbWVtc2V0KHN0YXJ0LCAwLCByZWN0V2lkdGhJbkJ5dGVz
KTsKKyAgICAgICAgICAgIHN0YXJ0ICs9IG1fc2l6ZS53aWR0aCgpOworICAgICAgICB9CisgICAg
fQorCisgICAgdm9pZCByZXBlYXRGaXJzdFJvdyhjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsK
KyAgICAgICAgaWYgKHJlY3QuaXNFbXB0eSgpIHx8ICFpbkJvdW5kcyhyZWN0KSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBzaXplX3QgcmVjdFdpZHRoSW5CeXRlcyA9IHJlY3Qud2lk
dGgoKSAqIHNpemVvZihSR0JBMzIpOworICAgICAgICBSR0JBMzIqIHNyYyA9IGF0KHJlY3QueCgp
LCByZWN0LnkoKSk7CisgICAgICAgIFJHQkEzMiogZGVzdCA9IHNyYyArIG1fc2l6ZS53aWR0aCgp
OworICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IHJlY3QuaGVpZ2h0KCk7ICsraSkgeworICAg
ICAgICAgICAgbWVtY3B5KGRlc3QsIHNyYywgcmVjdFdpZHRoSW5CeXRlcyk7CisgICAgICAgICAg
ICBkZXN0ICs9IG1fc2l6ZS53aWR0aCgpOworICAgICAgICB9CisgICAgfQorCisgICAgUkdCQTMy
KiBhdChpbnQgeCwgaW50IHkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9waXhlbHNQ
dHIgKyB5ICogbV9zaXplLndpZHRoKCkgKyB4OworICAgIH0KKworICAgIHZvaWQgc2V0UkdCQShp
bnQgeCwgaW50IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVk
IGEpCisgICAgeworICAgICAgICBzZXRSR0JBKGF0KHgsIHkpLCByLCBnLCBiLCBhKTsKKyAgICB9
CisKKyAgICB2b2lkIHNldFJHQkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBn
LCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgaWYgKG1fcHJlbXVsdGlw
bHlBbHBoYSAmJiAhYSkKKyAgICAgICAgICAgICpkZXN0ID0gMDsKKyAgICAgICAgZWxzZSBpZiAo
bV9wcmVtdWx0aXBseUFscGhhICYmIGEgPCAyNTUpCisgICAgICAgICAgICAqZGVzdCA9IG1ha2VQ
cmVtdWx0aXBsaWVkUkdCQShyLCBnLCBiLCBhKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
KmRlc3QgPSBtYWtlUkdCQShyLCBnLCBiLCBhKTsKKyAgICB9CisKKyAgICB2b2lkIG92ZXJSR0JB
KFJHQkEzMiogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWdu
ZWQgYSkKKyAgICB7CisgICAgICAgIGlmICghYSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBpZiAoYSA+PSAyNTUgfHwgIWFscGhhQ2hhbm5lbCgqZGVzdCkpIHsKKyAgICAgICAgICAg
IHNldFJHQkEoZGVzdCwgciwgZywgYiwgYSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkKKyAgICAgICAgICAgICpkZXN0
ID0gbWFrZVByZW11bHRpcGxpZWRSR0JBKHJlZENoYW5uZWwoKmRlc3QpLCBncmVlbkNoYW5uZWwo
KmRlc3QpLCBibHVlQ2hhbm5lbCgqZGVzdCksIGFscGhhQ2hhbm5lbCgqZGVzdCkpOworCisgICAg
ICAgIHVuc2lnbmVkIGQgPSAyNTUgLSBhOworCisgICAgICAgIHIgPSBmYXN0RGl2aWRlQnkyNTUo
ciAqIGEgKyByZWRDaGFubmVsKCpkZXN0KSAqIGQpOworICAgICAgICBnID0gZmFzdERpdmlkZUJ5
MjU1KGcgKiBhICsgZ3JlZW5DaGFubmVsKCpkZXN0KSAqIGQpOworICAgICAgICBiID0gZmFzdERp
dmlkZUJ5MjU1KGIgKiBhICsgYmx1ZUNoYW5uZWwoKmRlc3QpICogZCk7CisgICAgICAgIGEgKz0g
ZmFzdERpdmlkZUJ5MjU1KGQgKiBhbHBoYUNoYW5uZWwoKmRlc3QpKTsKKworICAgICAgICBpZiAo
bV9wcmVtdWx0aXBseUFscGhhKQorICAgICAgICAgICAgKmRlc3QgPSBtYWtlUkdCQShyLCBnLCBi
LCBhKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKmRlc3QgPSBtYWtlVW5QcmVtdWx0aXBs
aWVkUkdCQShyLCBnLCBiLCBhKTsKKyAgICB9CisKKyAgICBib29sIGluQm91bmRzKGNvbnN0IElu
dFJlY3QmIHJlY3QpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSW50UmVjdChJbnRQb2lu
dCgpLCBtX3NpemUpLmNvbnRhaW5zKHJlY3QpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlz
T3ZlclNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAgIHN0YXRpYyB1bnNp
Z25lZCBsb25nIGxvbmcgTWF4UGl4ZWxzID0gKCgxIDw8IDI5KSAtIDEpOworICAgICAgICB1bnNp
Z25lZCBsb25nIGxvbmcgcGl4ZWxzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihz
aXplLndpZHRoKCkpICogc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzaXplLmhlaWdo
dCgpKTsKKyAgICAgICAgcmV0dXJuIHBpeGVscyA+IE1heFBpeGVsczsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgVmVjdG9yPFJHQkEzMj4gbV9waXhlbHM7CisgICAgUkdCQTMyKiBtX3BpeGVsc1B0
ciB7IG51bGxwdHIgfTsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICBJbnRSZWN0IG1fZnJhbWVS
ZWN0OyAvLyBUaGlzIHdpbGwgYWx3YXlzIGp1c3QgYmUgdGhlIGVudGlyZSBidWZmZXIgZXhjZXB0
IGZvciBHSUYgYW5kIFBORyBmcmFtZXMKKyAgICBib29sIG1fcHJlbXVsdGlwbHlBbHBoYSB7IHRy
dWUgfTsKK307CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L05hdGl2ZUltYWdlQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDcsMTAgKzQ3LDEwIEBAIEludFNpemUgbmF0aXZlSW1hZ2VTaXplKGNvbnN0
IE5hdGl2ZUltYWcKICAgICByZXR1cm4gaW1hZ2UgPyBJbnRTaXplKENHSW1hZ2VHZXRXaWR0aChp
bWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkpKSA6IEludFNpemUoKTsK
IH0KIAotYm9vbCBuYXRpdmVJbWFnZUhhc0FscGhhKGNvbnN0IE5hdGl2ZUltYWdlUHRyJikKK2Jv
b2wgbmF0aXZlSW1hZ2VIYXNBbHBoYShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UpCiB7Ci0g
ICAgLy8gRklYTUU6IEFuc3dlciBjb3JyZWN0bHkgdGhlIHF1ZXN0aW9uOiBkb2VzIHRoZSBDR0lt
YWdlUmVmIGhhdmUgYWxwaGEgY2hhbm5uZWw/Ci0gICAgcmV0dXJuIHRydWU7CisgICAgQ0dJbWFn
ZUFscGhhSW5mbyBpbmZvID0gQ0dJbWFnZUdldEFscGhhSW5mbyhpbWFnZS5nZXQoKSk7CisgICAg
cmV0dXJuIChpbmZvID49IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkgJiYgKGluZm8g
PD0ga0NHSW1hZ2VBbHBoYUZpcnN0KTsKIH0KIAogQ29sb3IgbmF0aXZlSW1hZ2VTaW5nbGVQaXhl
bFNvbGlkQ29sb3IoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIu
Y3BwCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNyArMTQyLDcg
QEAgSW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0IAogICAgICAgICByZXR1
cm4gKnRoaXM7CiAKICAgICBjb3B5Qml0bWFwRGF0YShvdGhlcik7Ci0gICAgc2V0T3JpZ2luYWxG
cmFtZVJlY3Qob3RoZXIub3JpZ2luYWxGcmFtZVJlY3QoKSk7CisgICAgc2V0SGFzQWxwaGEob3Ro
ZXIubV9oYXNBbHBoYSk7CiAgICAgc2V0U3RhdHVzKG90aGVyLnN0YXR1cygpKTsKICAgICBzZXRE
dXJhdGlvbihvdGhlci5kdXJhdGlvbigpKTsKICAgICBzZXREaXNwb3NhbE1ldGhvZChvdGhlci5k
aXNwb3NhbE1ldGhvZCgpKTsKQEAgLTE1Miw4ICsxNTIsNyBAQCBJbWFnZUZyYW1lJiBJbWFnZUZy
YW1lOjpvcGVyYXRvcj0oY29uc3QgCiAKIHZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXJQaXhlbERhdGEo
KQogewotICAgIG1fYmFja2luZ1N0b3JlLmNsZWFyKCk7Ci0gICAgbV9ieXRlcyA9IDA7CisgICAg
bV9iYWNraW5nU3RvcmUgPSBudWxscHRyOwogICAgIG1fc3RhdHVzID0gRnJhbWVFbXB0eTsKICAg
ICAvLyBOT1RFOiBEbyBub3QgcmVzZXQgb3RoZXIgbWVtYmVycyBoZXJlOyBjbGVhckZyYW1lQnVm
ZmVyQ2FjaGUoKSBjYWxscyB0aGlzCiAgICAgLy8gdG8gZnJlZSB0aGUgYml0bWFwIGRhdGEsIGJ1
dCBvdGhlciBmdW5jdGlvbnMgbGlrZSBpbml0RnJhbWVCdWZmZXIoKSBhbmQKQEAgLTE2MywyNCAr
MTYyLDE2IEBAIHZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXJQaXhlbERhdGEoKQogCiB2b2lkIEltYWdl
RnJhbWU6Onplcm9GaWxsUGl4ZWxEYXRhKCkKIHsKLSAgICBtZW1zZXQobV9ieXRlcywgMCwgbV9z
aXplLndpZHRoKCkgKiBtX3NpemUuaGVpZ2h0KCkgKiBzaXplb2YoUGl4ZWxEYXRhKSk7CisgICAg
bV9iYWNraW5nU3RvcmUtPmNsZWFyKCk7CiAgICAgbV9oYXNBbHBoYSA9IHRydWU7CiB9CiAKIHZv
aWQgSW1hZ2VGcmFtZTo6emVyb0ZpbGxGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsK
LSAgICBBU1NFUlQoSW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHJlY3QpKTsK
LQogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2l6ZV90
IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkgKiBzaXplb2YoUGl4ZWxEYXRhKTsKLSAg
ICBQaXhlbERhdGEqIHN0YXJ0ID0gbV9ieXRlcyArIChyZWN0LnkoKSAqIHdpZHRoKCkpICsgcmVj
dC54KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0LmhlaWdodCgpOyArK2kpIHsKLSAg
ICAgICAgbWVtc2V0KHN0YXJ0LCAwLCByZWN0V2lkdGhJbkJ5dGVzKTsKLSAgICAgICAgc3RhcnQg
Kz0gd2lkdGgoKTsKLSAgICB9Ci0KKyAgICBtX2JhY2tpbmdTdG9yZS0+Y2xlYXJSZWN0KHJlY3Qp
OwogICAgIHNldEhhc0FscGhhKHRydWUpOwogfQogCkBAIC0xODksMjUgKzE4MCwxOSBAQCBib29s
IEltYWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKGNvbnN0IEltCiAgICAgaWYgKHRoaXMgPT0gJm90
aGVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fYmFja2luZ1N0b3JlID0gb3RoZXIu
bV9iYWNraW5nU3RvcmU7Ci0gICAgbV9ieXRlcyA9IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsKLSAg
ICBtX3NpemUgPSBvdGhlci5tX3NpemU7Ci0gICAgc2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBo
YSk7CisgICAgaWYgKG90aGVyLm1fYmFja2luZ1N0b3JlKQorICAgICAgICBtX2JhY2tpbmdTdG9y
ZSA9IEltYWdlQmFja2luZ1N0b3JlOjpjcmVhdGUoKm90aGVyLm1fYmFja2luZ1N0b3JlLmdldCgp
KTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKKyAgICAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJbWFnZUZyYW1lOjpzZXRTaXplKGludCBuZXdXaWR0
aCwgaW50IG5ld0hlaWdodCkKK2Jvb2wgSW1hZ2VGcmFtZTo6c2V0U2l6ZShjb25zdCBJbnRTaXpl
JiBzaXplKQogewotICAgIEFTU0VSVCghd2lkdGgoKSAmJiAhaGVpZ2h0KCkpOwotICAgIHNpemVf
dCBiYWNraW5nU3RvcmVTaXplID0gbmV3V2lkdGggKiBuZXdIZWlnaHQ7Ci0gICAgaWYgKCFtX2Jh
Y2tpbmdTdG9yZS50cnlSZXNlcnZlQ2FwYWNpdHkoYmFja2luZ1N0b3JlU2l6ZSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX2JhY2tpbmdTdG9yZS5yZXNpemUoYmFja2luZ1N0b3JlU2l6
ZSk7Ci0gICAgbV9ieXRlcyA9IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsKLSAgICBtX3NpemUgPSBJ
bnRTaXplKG5ld1dpZHRoLCBuZXdIZWlnaHQpOwotCi0gICAgemVyb0ZpbGxQaXhlbERhdGEoKTsK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICBBU1NFUlQoIW1fYmFja2luZ1N0b3JlKTsKKyAgICBtX2Jh
Y2tpbmdTdG9yZSA9IEltYWdlQmFja2luZ1N0b3JlOjpjcmVhdGUoc2l6ZSwgbV9wcmVtdWx0aXBs
eUFscGhhKTsKKyAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUgIT0gbnVsbHB0cjsKIH0KIAogYm9v
bCBJbWFnZUZyYW1lOjpoYXNBbHBoYSgpIGNvbnN0CkBAIC0yMjAsNiArMjA1LDEyIEBAIHZvaWQg
SW1hZ2VGcmFtZTo6c2V0SGFzQWxwaGEoYm9vbCBhbHBoYSkKICAgICBtX2hhc0FscGhhID0gYWxw
aGE7CiB9CiAKK3ZvaWQgSW1hZ2VGcmFtZTo6c2V0T3JpZ2luYWxGcmFtZVJlY3QoY29uc3QgSW50
UmVjdCYgZnJhbWVSZWN0KQoreworICAgIGlmIChtX2JhY2tpbmdTdG9yZSkKKyAgICAgICAgbV9i
YWNraW5nU3RvcmUtPnNldEZyYW1lUmVjdChmcmFtZVJlY3QpOworfQorCiB2b2lkIEltYWdlRnJh
bWU6OnNldFN0YXR1cyhGcmFtZVN0YXR1cyBzdGF0dXMpCiB7CiAgICAgbV9zdGF0dXMgPSBzdGF0
dXM7CkBAIC0yODYsNyArMjc3LDcgQEAgdW5zaWduZWQgSW1hZ2VEZWNvZGVyOjpmcmFtZUJ5dGVz
QXRJbmRleAogICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpIDw9IGluZGV4KQogICAg
ICAgICByZXR1cm4gMDsKICAgICAvLyBGSVhNRTogVXNlIHRoZSBkaW1lbnNpb24gb2YgdGhlIHJl
cXVlc3RlZCBmcmFtZS4KLSAgICByZXR1cm4gbV9zaXplLmFyZWEoKSAqIHNpemVvZihJbWFnZUZy
YW1lOjpQaXhlbERhdGEpOworICAgIHJldHVybiBtX3NpemUuYXJlYSgpICogc2l6ZW9mKFJHQkEz
Mik7CiB9CiAKIGZsb2F0IEltYWdlRGVjb2Rlcjo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90
IGluZGV4KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw4ICsyOCwxMCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkludFJlY3Qu
aCIKKyNpbmNsdWRlICJJbWFnZUJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIkltYWdlU291cmNl
LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybVNjcmVlbi5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC01Nyw3ICs1OSw2IEBAIHVzaW5nIENvbG9yUHJvZmlsZSA9
IFZlY3RvcjxjaGFyPjsKICAgICAgICAgICAgIERpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cyAgLy8g
Q2xlYXIgZnJhbWUgdG8gcHJldmlvdXMgZnJhbWVidWZmZXIKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gY29udGVudHMKICAgICAgICAgfTsKLSAgICAgICAgdHlwZWRl
ZiB1bnNpZ25lZCBQaXhlbERhdGE7CiAKICAgICAgICAgSW1hZ2VGcmFtZSgpOwogCkBAIC04Miwx
NDIgKzgzLDY0IEBAIHVzaW5nIENvbG9yUHJvZmlsZSA9IFZlY3RvcjxjaGFyPjsKICAgICAgICAg
Ly8gZW5kWS4KICAgICAgICAgdm9pZCBjb3B5Um93TlRpbWVzKGludCBzdGFydFgsIGludCBlbmRY
LCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHN0
YXJ0WCA8IHdpZHRoKCkpOwotICAgICAgICAgICAgQVNTRVJUKGVuZFggPD0gd2lkdGgoKSk7Ci0g
ICAgICAgICAgICBBU1NFUlQoc3RhcnRZIDwgaGVpZ2h0KCkpOwotICAgICAgICAgICAgQVNTRVJU
KGVuZFkgPD0gaGVpZ2h0KCkpOwotICAgICAgICAgICAgY29uc3QgaW50IHJvd0J5dGVzID0gKGVu
ZFggLSBzdGFydFgpICogc2l6ZW9mKFBpeGVsRGF0YSk7Ci0gICAgICAgICAgICBjb25zdCBQaXhl
bERhdGEqIGNvbnN0IHN0YXJ0QWRkciA9IGdldEFkZHIoc3RhcnRYLCBzdGFydFkpOwotICAgICAg
ICAgICAgZm9yIChpbnQgZGVzdFkgPSBzdGFydFkgKyAxOyBkZXN0WSA8IGVuZFk7ICsrZGVzdFkp
Ci0gICAgICAgICAgICAgICAgbWVtY3B5KGdldEFkZHIoc3RhcnRYLCBkZXN0WSksIHN0YXJ0QWRk
ciwgcm93Qnl0ZXMpOworICAgICAgICAgICAgbV9iYWNraW5nU3RvcmUtPnJlcGVhdEZpcnN0Um93
KEludFJlY3Qoc3RhcnRYLCBzdGFydFksIGVuZFggLXN0YXJ0WCAsIGVuZFkgLSBzdGFydFkpKTsK
ICAgICAgICAgfQogCiAgICAgICAgIC8vIEFsbG9jYXRlcyBzcGFjZSBmb3IgdGhlIHBpeGVsIGRh
dGEuICBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IHBpeGVscwogICAgICAgICAvLyBhcmUgd3Jp
dHRlbi4gIE11c3Qgb25seSBiZSBjYWxsZWQgb25jZS4gIFJldHVybnMgd2hldGhlciBhbGxvY2F0
aW9uCiAgICAgICAgIC8vIHN1Y2NlZWRlZC4KLSAgICAgICAgYm9vbCBzZXRTaXplKGludCBuZXdX
aWR0aCwgaW50IG5ld0hlaWdodCk7CisgICAgICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXpl
Jik7CisgICAgICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZ1N0b3Jl
LT5zaXplKCk7IH0KIAogICAgICAgICAvLyBSZXR1cm5zIGEgY2FsbGVyLW93bmVkIHBvaW50ZXIg
dG8gdGhlIHVuZGVybHlpbmcgbmF0aXZlIGltYWdlIGRhdGEuCiAgICAgICAgIC8vIChBY3R1YWwg
dXNlOiBUaGlzIHBvaW50ZXIgd2lsbCBiZSBvd25lZCBieSBCaXRtYXBJbWFnZSBhbmQgZnJlZWQg
aW4KICAgICAgICAgLy8gRnJhbWVEYXRhOjpjbGVhcigpKS4KLSAgICAgICAgTmF0aXZlSW1hZ2VQ
dHIgYXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0OworICAgICAgICBOYXRpdmVJbWFnZVB0ciBhc05l
d05hdGl2ZUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nU3RvcmUtPmltYWdlKCk7IH0K
IAorICAgICAgICBpbmxpbmUgSW1hZ2VCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlID8gbV9iYWNraW5nU3RvcmUuZ2V0KCkgOiBudWxscHRy
OyB9CisgICAgICAgIGlubGluZSBib29sIGhhc0JhY2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJu
IGJhY2tpbmdTdG9yZSgpOyB9CisgICAgICAgIAogICAgICAgICBib29sIGhhc0FscGhhKCkgY29u
c3Q7Ci0gICAgICAgIGNvbnN0IEludFJlY3QmIG9yaWdpbmFsRnJhbWVSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9vcmlnaW5hbEZyYW1lUmVjdDsgfQorICAgICAgICBJbnRSZWN0IG9yaWdpbmFsRnJh
bWVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nU3RvcmUgPyBtX2JhY2tpbmdTdG9yZS0+
ZnJhbWVSZWN0KCkgOiBJbnRSZWN0KCk7IH0KICAgICAgICAgRnJhbWVTdGF0dXMgc3RhdHVzKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KICAgICAgICAgdW5zaWduZWQgZHVyYXRpb24oKSBj
b25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9CiAgICAgICAgIEZyYW1lRGlzcG9zYWxNZXRob2Qg
ZGlzcG9zYWxNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3Bvc2FsTWV0aG9kOyB9CiAgICAg
ICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlbXVsdGlwbHlB
bHBoYTsgfQogCisgICAgICAgIHZvaWQgc2V0QmFja2luZ1N0b3JlKGNvbnN0IEltYWdlQmFja2lu
Z1N0b3JlKik7CisgICAgICAgIAogICAgICAgICB2b2lkIHNldEhhc0FscGhhKGJvb2wgYWxwaGEp
OwotICAgICAgICB2b2lkIHNldE9yaWdpbmFsRnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIHIpIHsg
bV9vcmlnaW5hbEZyYW1lUmVjdCA9IHI7IH0KKyAgICAgICAgdm9pZCBzZXRPcmlnaW5hbEZyYW1l
UmVjdChjb25zdCBJbnRSZWN0Jik7CiAgICAgICAgIHZvaWQgc2V0U3RhdHVzKEZyYW1lU3RhdHVz
IHN0YXR1cyk7CiAgICAgICAgIHZvaWQgc2V0RHVyYXRpb24odW5zaWduZWQgZHVyYXRpb24pIHsg
bV9kdXJhdGlvbiA9IGR1cmF0aW9uOyB9CiAgICAgICAgIHZvaWQgc2V0RGlzcG9zYWxNZXRob2Qo
RnJhbWVEaXNwb3NhbE1ldGhvZCBtZXRob2QpIHsgbV9kaXNwb3NhbE1ldGhvZCA9IG1ldGhvZDsg
fQogICAgICAgICB2b2lkIHNldFByZW11bHRpcGx5QWxwaGEoYm9vbCBwcmVtdWx0aXBseUFscGhh
KSB7IG1fcHJlbXVsdGlwbHlBbHBoYSA9IHByZW11bHRpcGx5QWxwaGE7IH0KIAotICAgICAgICBp
bmxpbmUgdm9pZCBzZXRSR0JBKGludCB4LCBpbnQgeSwgdW5zaWduZWQgciwgdW5zaWduZWQgZywg
dW5zaWduZWQgYiwgdW5zaWduZWQgYSkKLSAgICAgICAgewotICAgICAgICAgICAgc2V0UkdCQShn
ZXRBZGRyKHgsIHkpLCByLCBnLCBiLCBhKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlubGluZSBQ
aXhlbERhdGEqIGdldEFkZHIoaW50IHgsIGludCB5KQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gbV9ieXRlcyArICh5ICogd2lkdGgoKSkgKyB4OwotICAgICAgICB9Ci0KLSAgICAgICAg
aW5saW5lIGJvb2wgaGFzUGl4ZWxEYXRhKCkgY29uc3QKKyAgICAgICAgaW5saW5lIFJHQkEzMiog
Z2V0QWRkcihpbnQgeCwgaW50IHkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2J5
dGVzOworICAgICAgICAgICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlLT5hdCh4LCB5KTsKICAgICAg
ICAgfQogCi0gICAgICAgIC8vIFVzZSBmaXggcG9pbnQgbXVsdGlwbGllciBpbnN0ZWFkIG9mIGlu
dGVnZXIgZGl2aXNpb24gb3IgZmxvYXRpbmcgcG9pbnQgbWF0aC4KLSAgICAgICAgLy8gVGhpcyBt
dWx0aXBsZXIgcHJvZHVjZXMgZXhhY3RseSB0aGUgc2FtZSByZXN1bHQgZm9yIGFsbCB2YWx1ZXMg
aW4gcmFuZ2UgMCAtIDI1NS4KLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZpeFBvaW50
U2hpZnQgPSAyNDsKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZpeFBvaW50TXVsdCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPigxLjAgLyAyNTUuMCAqICgxIDw8IGZpeFBvaW50U2hpZnQp
KSArIDE7Ci0gICAgICAgIC8vIE11bHRpcGxpZXMgdW5zaWduZWQgdmFsdWUgYnkgZml4cG9pbnQg
dmFsdWUgYW5kIGNvbnZlcnRzIGJhY2sgdG8gdW5zaWduZWQuCi0gICAgICAgIHN0YXRpYyB1bnNp
Z25lZCBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkodW5zaWduZWQgZml4ZWQsIHVuc2lnbmVkIHYp
CisgICAgICAgIGlubGluZSB2b2lkIHNldFJHQkEoaW50IHgsIGludCB5LCB1bnNpZ25lZCByLCB1
bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQogICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gIChmaXhlZCAqIHYpID4+IGZpeFBvaW50U2hpZnQ7CisgICAgICAgICAgICBtX2Jh
Y2tpbmdTdG9yZS0+c2V0UkdCQSh4LCB5LCByLCBnLCBiLCBhKTsKICAgICAgICAgfQogCi0gICAg
ICAgIGlubGluZSB2b2lkIHNldFJHQkEoUGl4ZWxEYXRhKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNp
Z25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgICAgICBpbmxpbmUgdm9pZCBzZXRS
R0JBKFJHQkEzMiogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5z
aWduZWQgYSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAm
JiBhIDwgMjU1KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFhKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICpkZXN0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhTXVsdCA9IGEgKiBmaXhQb2lu
dE11bHQ7Ci0gICAgICAgICAgICAgICAgciA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShyLCBh
bHBoYU11bHQpOwotICAgICAgICAgICAgICAgIGcgPSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHko
ZywgYWxwaGFNdWx0KTsKLSAgICAgICAgICAgICAgICBiID0gZml4UG9pbnRVbnNpZ25lZE11bHRp
cGx5KGIsIGFscGhhTXVsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqZGVzdCA9IChh
IDw8IDI0IHwgciA8PCAxNiB8IGcgPDwgOCB8IGIpOworICAgICAgICAgICAgbV9iYWNraW5nU3Rv
cmUtPnNldFJHQkEoZGVzdCwgciwgZywgYiwgYSk7CiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShB
UE5HKQotICAgICAgICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRpdmlkZTI1NSh1bnNpZ25lZCBh
KQorICAgICAgICBpbmxpbmUgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIs
IHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiAoYSArIChhID4+IDgpICsgMSkgPj4gODsKLSAgICAgICAgfQotCi0gICAgICAg
IGlubGluZSB2b2lkIG92ZXJSR0JBKFBpeGVsRGF0YSogZGVzdCwgdW5zaWduZWQgciwgdW5zaWdu
ZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KCFhKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgaWYgKGEgPCAyNTUp
IHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBhRGVzdCA9ICgoKmRlc3QpID4+IDI0KSAmIDI1
NTsKLSAgICAgICAgICAgICAgICBpZiAoYURlc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgckRlc3QgPSAoKCpkZXN0KSA+PiAxNikgJiAyNTU7Ci0gICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGdEZXN0ID0gKCgqZGVzdCkgPj4gOCkgJiAyNTU7Ci0gICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGJEZXN0ID0gKCpkZXN0KSAmIDI1NTsKLSAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgYUF1eCA9IDI1NSAtIGE7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9wcmVt
dWx0aXBseUFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByRGVzdCA9IGRpdmlkZTI1
NShyRGVzdCAqIGFEZXN0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdEZXN0ID0gZGl2aWRl
MjU1KGdEZXN0ICogYURlc3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgYkRlc3QgPSBkaXZp
ZGUyNTUoYkRlc3QgKiBhRGVzdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgciA9IGRpdmlkZTI1NShyICogYSArIHJEZXN0ICogYUF1eCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGcgPSBkaXZpZGUyNTUoZyAqIGEgKyBnRGVzdCAqIGFBdXgpOwotICAgICAgICAg
ICAgICAgICAgICBiID0gZGl2aWRlMjU1KGIgKiBhICsgYkRlc3QgKiBhQXV4KTsKLSAgICAgICAg
ICAgICAgICAgICAgYSArPSBkaXZpZGUyNTUoYURlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHIgPSAociAqIDI1NSArIGEgLSAxKSAvIGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnID0g
KGcgKiAyNTUgKyBhIC0gMSkgLyBhOwotICAgICAgICAgICAgICAgICAgICAgICAgYiA9IChiICog
MjU1ICsgYSAtIDEpIC8gYTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAobV9wcmVtdWx0aXBseUFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgIHIg
PSBkaXZpZGUyNTUociAqIGEpOwotICAgICAgICAgICAgICAgICAgICBnID0gZGl2aWRlMjU1KGcg
KiBhKTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IGRpdmlkZTI1NShiICogYSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3QgPSAoYSA8PCAyNCB8
IHIgPDwgMTYgfCBnIDw8IDggfCBiKTsKKyAgICAgICAgICAgIG1fYmFja2luZ1N0b3JlLT5vdmVy
UkdCQShkZXN0LCByLCBnLCBiLCBhKTsKICAgICAgICAgfQogI2VuZGlmCiAKICAgICBwcml2YXRl
OgotICAgICAgICBpbnQgd2lkdGgoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gbV9zaXplLndpZHRoKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgaGVpZ2h0KCkgY29u
c3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIFZlY3RvcjxQaXhlbERhdGE+IG1fYmFja2luZ1N0b3JlOwotICAgICAg
ICBQaXhlbERhdGEqIG1fYnl0ZXM7IC8vIFRoZSBtZW1vcnkgaXMgYmFja2VkIGJ5IG1fYmFja2lu
Z1N0b3JlLgotICAgICAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKICAgICAgICAgYm9vbCBtX2hhc0Fs
cGhhOwotICAgICAgICBJbnRSZWN0IG1fb3JpZ2luYWxGcmFtZVJlY3Q7IC8vIFRoaXMgd2lsbCBh
bHdheXMganVzdCBiZSB0aGUgZW50aXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gYnVmZmVyIGV4Y2VwdCBmb3IgR0lGIGZyYW1lcyB3aG9zZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yaWdpbmFsIHJlY3Qgd2FzIHNtYWxsZXIgdGhh
biB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdmVyYWxsIGlt
YWdlIHNpemUuCiAgICAgICAgIEZyYW1lU3RhdHVzIG1fc3RhdHVzOwogICAgICAgICB1bnNpZ25l
ZCBtX2R1cmF0aW9uOwogICAgICAgICBGcmFtZURpc3Bvc2FsTWV0aG9kIG1fZGlzcG9zYWxNZXRo
b2Q7CkBAIC0yODcsMTEgKzIxMCwxMSBAQCB1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hh
cj47CiAKICAgICAgICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBzaXplIGlzIGxlZ2FsIChpLmUu
IG5vdCBnb2luZyB0byByZXN1bHQgaW4KICAgICAgICAgLy8gb3ZlcmZsb3cgZWxzZXdoZXJlKS4g
IElmIG5vdCwgbWFya3MgZGVjb2RpbmcgYXMgZmFpbGVkLgotICAgICAgICB2aXJ0dWFsIGJvb2wg
c2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQorICAgICAgICB2aXJ0dWFs
IGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoaXNPdmVyU2l6ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgICAgIGlmIChJbWFnZUJh
Y2tpbmdTdG9yZTo6aXNPdmVyU2l6ZShzaXplKSkKICAgICAgICAgICAgICAgICByZXR1cm4gc2V0
RmFpbGVkKCk7Ci0gICAgICAgICAgICBtX3NpemUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwor
ICAgICAgICAgICAgbV9zaXplID0gc2l6ZTsKICAgICAgICAgICAgIG1fc2l6ZUF2YWlsYWJsZSA9
IHRydWU7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMzg2LDE1ICsz
MDksNiBAQCB1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hhcj47CiAgICAgICAgIEltYWdl
T3JpZW50YXRpb24gbV9vcmllbnRhdGlvbjsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIC8vIFNv
bWUgY29kZSBwYXRocyBjb21wdXRlIHRoZSBzaXplIG9mIHRoZSBpbWFnZSBhcyAid2lkdGggKiBo
ZWlnaHQgKiA0IgotICAgICAgICAvLyBhbmQgcmV0dXJuIGl0IGFzIGEgKHNpZ25lZCkgaW50LiAg
QXZvaWQgb3ZlcmZsb3cuCi0gICAgICAgIHN0YXRpYyBib29sIGlzT3ZlclNpemUodW5zaWduZWQg
d2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQg
bG9uZyBsb25nIHRvdGFsX3NpemUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHdp
ZHRoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KGhlaWdodCk7Ci0gICAgICAgICAgICByZXR1cm4gdG90
YWxfc2l6ZSA+ICgoMSA8PCAyOSkgLSAxKTsKLSAgICAgICAgfQotCiAgICAgICAgIEludFNpemUg
bV9zaXplOwogICAgICAgICBib29sIG1fc2l6ZUF2YWlsYWJsZSB7IGZhbHNlIH07CiAjaWYgRU5B
QkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVh
ZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgs
NyArNzgsNyBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpkZWNvZGVCTVAoYm9vbCBvbmx5CiAgICAg
Ly8gSW5pdGlhbGl6ZSB0aGUgZnJhbWVidWZmZXIgaWYgbmVlZGVkLgogICAgIEFTU0VSVChtX2J1
ZmZlcik7ICAvLyBQYXJlbnQgc2hvdWxkIHNldCB0aGlzIGJlZm9yZSBhc2tpbmcgdXMgdG8gZGVj
b2RlIQogICAgIGlmIChtX2J1ZmZlci0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0
eSkgewotICAgICAgICBpZiAoIW1fYnVmZmVyLT5zZXRTaXplKG1fcGFyZW50LT5zaXplKCkud2lk
dGgoKSwgbV9wYXJlbnQtPnNpemUoKS5oZWlnaHQoKSkpCisgICAgICAgIGlmICghbV9idWZmZXIt
PnNldFNpemUobV9wYXJlbnQtPnNpemUoKSkpCiAgICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQt
PnNldEZhaWxlZCgpOyAvLyBVbmFibGUgdG8gYWxsb2NhdGUuCiAgICAgICAgIG1fYnVmZmVyLT5z
ZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKICAgICAgICAgLy8gc2V0U2l6ZSgp
IGNhbGxzIGVyYXNlQVJHQigpLCB3aGljaCByZXNldHMgdGhlIGFscGhhIGZsYWcsIHNvIHdlIGZv
cmNlCkBAIC04Niw5ICs4Niw2IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OmRlY29kZUJNUChib29s
IG9ubHkKICAgICAgICAgLy8gdGhlc2UgMHMgY291bGQgYWN0dWFsbHkgc2hvdyB0aHJvdWdoLgog
ICAgICAgICBtX2J1ZmZlci0+c2V0SGFzQWxwaGEoZmFsc2UpOwogCi0gICAgICAgIC8vIEZvciBC
TVBzLCB0aGUgZnJhbWUgYWx3YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2UuCi0gICAgICAgIG1f
YnVmZmVyLT5zZXRPcmlnaW5hbEZyYW1lUmVjdChJbnRSZWN0KEludFBvaW50KCksIG1fcGFyZW50
LT5zaXplKCkpKTsKLQogICAgICAgICBpZiAoIW1faXNUb3BEb3duKQogICAgICAgICAgICAgbV9j
b29yZC5zZXRZKG1fcGFyZW50LT5zaXplKCkuaGVpZ2h0KCkgLSAxKTsKICAgICB9CkBAIC0xNzEs
NyArMTY4LDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc0luZm9IZWFkZXIoKQogICAg
ICAgICByZXR1cm4gbV9wYXJlbnQtPnNldEZhaWxlZCgpOwogCiAgICAgLy8gU2V0IG91ciBzaXpl
LgotICAgIGlmICghbV9wYXJlbnQtPnNldFNpemUobV9pbmZvSGVhZGVyLmJpV2lkdGgsIG1faW5m
b0hlYWRlci5iaUhlaWdodCkpCisgICAgaWYgKCFtX3BhcmVudC0+c2V0U2l6ZShJbnRTaXplKG1f
aW5mb0hlYWRlci5iaVdpZHRoLCBtX2luZm9IZWFkZXIuYmlIZWlnaHQpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgLy8gRm9yIHBhbGV0dGVkIGltYWdlcywgYml0bWFwcyBjYW4gc2V0
IGJpQ2xyVXNlZCB0byAwIHRvIG1lYW4gImFsbApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VCYWNraW5nU3RvcmVDYWlyby5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1h
Z2VCYWNraW5nU3RvcmVDYWlyby5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VCYWNraW5nU3RvcmVDYWlyby5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklt
YWdlQmFja2luZ1N0b3JlLmgiCisKKyNpbmNsdWRlIDxjYWlyby5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQmFja2luZ1N0b3JlOjppbWFnZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9k
YXRhKAorICAgICAgICByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihjb25zdF9jYXN0
PFJHQkEzMio+KG1fcGl4ZWxzUHRyKSksCisgICAgICAgIENBSVJPX0ZPUk1BVF9BUkdCMzIsIHNp
emUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCksIHNpemUoKS53aWR0aCgpICogc2l6ZW9mKFJH
QkEzMikpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRklt
YWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02MCwxMiArNjAsMTIgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJs
ZSgpCiAgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCk7CiB9CiAKLWJv
b2wgR0lGSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWln
aHQpCitib29sIEdJRkltYWdlRGVjb2Rlcjo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQog
ewotICAgIGlmIChJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpICYmIHNpemUoKSA9PSBJ
bnRTaXplKHdpZHRoLCBoZWlnaHQpKQorICAgIGlmIChJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWls
YWJsZSgpICYmIHRoaXMtPnNpemUoKSA9PSBzaXplKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICAgIGlmICghSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHdpZHRoLCBoZWlnaHQpKQorICAgIGlmICgh
SW1hZ2VEZWNvZGVyOjpzZXRTaXplKHNpemUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKQEAgLTIxMywxMCArMjEzLDEwIEBAIGJv
b2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnMKIAogICAgIC8vIEluaXRpYWxp
emUgdGhlIGZyYW1lIGlmIG5lY2Vzc2FyeS4KICAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2Zy
YW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07Ci0gICAgaWYgKCgoYnVmZmVyLnN0YXR1cygpID09
IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkp
IHx8ICFidWZmZXIuaGFzUGl4ZWxEYXRhKCkpCisgICAgaWYgKCgoYnVmZmVyLnN0YXR1cygpID09
IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkp
IHx8ICFidWZmZXIuaGFzQmFja2luZ1N0b3JlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogY3VycmVudEFkZHJlc3MgPSBidWZmZXIuZ2V0QWRk
cih4QmVnaW4sIHlCZWdpbik7CisgICAgUkdCQTMyKiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZlci5n
ZXRBZGRyKHhCZWdpbiwgeUJlZ2luKTsKICAgICAvLyBXcml0ZSBvbmUgcm93J3Mgd29ydGggb2Yg
ZGF0YSBpbnRvIHRoZSBmcmFtZS4gIAogICAgIGZvciAoaW50IHggPSB4QmVnaW47IHggPCB4RW5k
OyArK3gpIHsKICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBzb3VyY2VWYWx1ZSA9IHJvd0J1
ZmZlclsobV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4KSAtIGZyYW1lQ29udGV4dC0+
eE9mZnNldF07CkBAIC0zNjEsNyArMzYxLDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRG
cmFtZUJ1ZmZlcih1bgogCiAgICAgaWYgKCFmcmFtZUluZGV4KSB7CiAgICAgICAgIC8vIFRoaXMg
aXMgdGhlIGZpcnN0IGZyYW1lLCBzbyB3ZSdyZSBub3QgcmVseWluZyBvbiBhbnkgcHJldmlvdXMg
ZGF0YS4KLSAgICAgICAgaWYgKCFidWZmZXItPnNldFNpemUoc2NhbGVkU2l6ZSgpLndpZHRoKCks
IHNjYWxlZFNpemUoKS5oZWlnaHQoKSkpCisgICAgICAgIGlmICghYnVmZmVyLT5zZXRTaXplKHNj
YWxlZFNpemUoKSkpCiAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgLy8gVGhlIHN0YXJ0aW5nIHN0YXRlIGZvciB0aGlzIGZyYW1lIGRlcGVuZHMg
b24gdGhlIHByZXZpb3VzIGZyYW1lJ3MKQEAgLTM4NywxMiArMzg3LDEyIEBAIGJvb2wgR0lGSW1h
Z2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW4KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIC8vIFdlIHdhbnQgdG8gY2xlYXIgdGhlIHByZXZpb3VzIGZyYW1lIHRvIHRyYW5zcGFyZW50
LCB3aXRob3V0CiAgICAgICAgICAgICAvLyBhZmZlY3RpbmcgcGl4ZWxzIGluIHRoZSBpbWFnZSBv
dXRzaWRlIG9mIHRoZSBmcmFtZS4KLSAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHByZXZSZWN0
ID0gcHJldkJ1ZmZlci0+b3JpZ2luYWxGcmFtZVJlY3QoKTsKKyAgICAgICAgICAgIEludFJlY3Qg
cHJldlJlY3QgPSBwcmV2QnVmZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgpOwogICAgICAgICAgICAg
Y29uc3QgSW50U2l6ZSYgYnVmZmVyU2l6ZSA9IHNjYWxlZFNpemUoKTsKICAgICAgICAgICAgIGlm
ICghZnJhbWVJbmRleCB8fCBwcmV2UmVjdC5jb250YWlucyhJbnRSZWN0KEludFBvaW50KCksIHNj
YWxlZFNpemUoKSkpKSB7CiAgICAgICAgICAgICAgICAgLy8gQ2xlYXJpbmcgdGhlIGZpcnN0IGZy
YW1lLCBvciBhIGZyYW1lIHRoZSBzaXplIG9mIHRoZSB3aG9sZQogICAgICAgICAgICAgICAgIC8v
IGltYWdlLCByZXN1bHRzIGluIGEgY29tcGxldGVseSBlbXB0eSBpbWFnZS4KLSAgICAgICAgICAg
ICAgICBpZiAoIWJ1ZmZlci0+c2V0U2l6ZShidWZmZXJTaXplLndpZHRoKCksIGJ1ZmZlclNpemUu
aGVpZ2h0KCkpKQorICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLT5zZXRTaXplKGJ1ZmZlclNp
emUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIENvcHkgdGhlIHdob2xlIHByZXZpb3VzIGJ1
ZmZlciwgdGhlbiBjbGVhciBqdXN0IGl0cyBmcmFtZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNv
ZGVyLmgJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyAr
NDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFN0cmluZyBmaWxlbmFtZUV4dGVu
c2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJnaWYiOyB9CiAgICAgICAgIHZvaWQgc2V0
RGF0YShTaGFyZWRCdWZmZXImIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKSBvdmVycmlkZTsK
ICAgICAgICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBvdmVycmlkZTsKLSAgICAgICAgYm9vbCBz
ZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpIG92ZXJyaWRlOworICAgICAg
ICBib29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwogICAgICAgICBzaXplX3Qg
ZnJhbWVDb3VudCgpIG92ZXJyaWRlOwogICAgICAgICBpbnQgcmVwZXRpdGlvbkNvdW50KCkgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgICAgIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXpl
X3QgaW5kZXgpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwCShyZXZp
c2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9n
aWYvR0lGSW1hZ2VSZWFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDcsNyArNDQ3LDcgQEAg
Ym9vbCBHSUZJbWFnZVJlYWRlcjo6cGFyc2Uoc2l6ZV90IGRhdGFQbwogCiAgICAgICAgICAgICAv
LyBDQUxMQkFDSzogSW5mb3JtIHRoZSBkZWNvZGVycGx1Z2luIG9mIG91ciBzaXplLgogICAgICAg
ICAgICAgLy8gTm90ZTogQSBzdWJzZXF1ZW50IGZyYW1lIG1pZ2h0IGhhdmUgZGltZW5zaW9ucyBs
YXJnZXIgdGhhbiB0aGUgInNjcmVlbiIgZGltZW5zaW9ucy4KLSAgICAgICAgICAgIGlmIChtX2Ns
aWVudCAmJiAhbV9jbGllbnQtPnNldFNpemUobV9zY3JlZW5XaWR0aCwgbV9zY3JlZW5IZWlnaHQp
KQorICAgICAgICAgICAgaWYgKG1fY2xpZW50ICYmICFtX2NsaWVudC0+c2V0U2l6ZShXZWJDb3Jl
OjpJbnRTaXplKG1fc2NyZWVuV2lkdGgsIG1fc2NyZWVuSGVpZ2h0KSkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBtX3NjcmVlbkJnY29sb3IgPSBjdXJyZW50
Q29tcG9uZW50WzVdOwpAQCAtNjY0LDcgKzY2NCw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnBh
cnNlKHNpemVfdCBkYXRhUG8KICAgICAgICAgICAgICAgICB5T2Zmc2V0ID0gMDsKIAogICAgICAg
ICAgICAgICAgIC8vIENBTExCQUNLOiBJbmZvcm0gdGhlIGRlY29kZXJwbHVnaW4gb2Ygb3VyIHNp
emUuCi0gICAgICAgICAgICAgICAgaWYgKG1fY2xpZW50ICYmICFtX2NsaWVudC0+c2V0U2l6ZSht
X3NjcmVlbldpZHRoLCBtX3NjcmVlbkhlaWdodCkpCisgICAgICAgICAgICAgICAgaWYgKG1fY2xp
ZW50ICYmICFtX2NsaWVudC0+c2V0U2l6ZShXZWJDb3JlOjpJbnRTaXplKG1fc2NyZWVuV2lkdGgs
IG1fc2NyZWVuSGVpZ2h0KSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9u
IDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9J
Q09JbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxMSArODgsMTEgQEAgSW50
U2l6ZSBJQ09JbWFnZURlY29kZXI6OmZyYW1lU2l6ZUF0SW5kZQogICAgIHJldHVybiAoaW5kZXgg
JiYgKGluZGV4IDwgbV9kaXJFbnRyaWVzLnNpemUoKSkpID8gbV9kaXJFbnRyaWVzW2luZGV4XS5t
X3NpemUgOiBzaXplKCk7CiB9CiAKLWJvb2wgSUNPSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHVuc2ln
bmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCitib29sIElDT0ltYWdlRGVjb2Rlcjo6c2V0U2l6
ZShjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIC8vIFRoZSBzaXplIGNhbGN1bGF0ZWQgaW5z
aWRlIHRoZSBCTVBJbWFnZVJlYWRlciBoYWQgYmV0dGVyIG1hdGNoIHRoZSBvbmUgaW4KICAgICAv
LyB0aGUgaWNvbiBkaXJlY3RvcnkuCi0gICAgcmV0dXJuIG1fZnJhbWVTaXplLmlzRW1wdHkoKSA/
IEltYWdlRGVjb2Rlcjo6c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSA6ICgoSW50U2l6ZSh3aWR0aCwg
aGVpZ2h0KSA9PSBtX2ZyYW1lU2l6ZSkgfHwgc2V0RmFpbGVkKCkpOworICAgIHJldHVybiBtX2Zy
YW1lU2l6ZS5pc0VtcHR5KCkgPyBJbWFnZURlY29kZXI6OnNldFNpemUoc2l6ZSkgOiAoKHNpemUg
PT0gbV9mcmFtZVNpemUpIHx8IHNldEZhaWxlZCgpKTsKIH0KIAogc2l6ZV90IElDT0ltYWdlRGVj
b2Rlcjo6ZnJhbWVDb3VudCgpCkBAIC0yNzksNyArMjc5LDcgQEAgYm9vbCBJQ09JbWFnZURlY29k
ZXI6OnByb2Nlc3NEaXJlY3RvcnlFbgogICAgIGNvbnN0IEljb25EaXJlY3RvcnlFbnRyeSYgZGly
RW50cnkgPSBtX2RpckVudHJpZXMuZmlyc3QoKTsKICAgICAvLyBUZWNobmljYWxseSwgdGhpcyBu
ZXh0IGNhbGwgc2hvdWxkbid0IGJlIGFibGUgdG8gZmFpbCwgc2luY2UgdGhlIHdpZHRoCiAgICAg
Ly8gYW5kIGhlaWdodCBoZXJlIGFyZSBlYWNoIDw9IDI1NiwgYW5kIHxtX2ZyYW1lU2l6ZXwgaXMg
ZW1wdHkuCi0gICAgcmV0dXJuIHNldFNpemUoZGlyRW50cnkubV9zaXplLndpZHRoKCksIGRpckVu
dHJ5Lm1fc2l6ZS5oZWlnaHQoKSk7CisgICAgcmV0dXJuIHNldFNpemUoZGlyRW50cnkubV9zaXpl
KTsKIH0KIAogSUNPSW1hZ2VEZWNvZGVyOjpJY29uRGlyZWN0b3J5RW50cnkgSUNPSW1hZ2VEZWNv
ZGVyOjpyZWFkRGlyZWN0b3J5RW50cnkoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaAko
cmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBvdmVy
cmlkZTsKICAgICAgICAgSW50U2l6ZSBzaXplKCkgb3ZlcnJpZGU7CiAgICAgICAgIEludFNpemUg
ZnJhbWVTaXplQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwpIG92ZXJyaWRlOwotICAg
ICAgICBib29sIHNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkgb3ZlcnJp
ZGU7CisgICAgICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7CiAgICAg
ICAgIHNpemVfdCBmcmFtZUNvdW50KCkgb3ZlcnJpZGU7CiAgICAgICAgIEltYWdlRnJhbWUqIGZy
YW1lQnVmZmVyQXRJbmRleChzaXplX3QpIG92ZXJyaWRlOwogICAgICAgICAvLyBDQVVUSU9OOiBz
ZXRGYWlsZWQoKSBkZWxldGVzIGFsbCByZWFkZXJzIGFuZCBkZWNvZGVycy4gIEJlIGNhcmVmdWwg
dG8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBF
R0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1h
Z2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIyLDcgKzMyMiw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIG1fc3RhdGUgPSBKUEVHX1NUQVJUX0RFQ09NUFJFU1M7CiAKICAgICAgICAg
ICAgIC8vIFdlIGNhbiBmaWxsIGluIHRoZSBzaXplIG5vdyB0aGF0IHRoZSBoZWFkZXIgaXMgYXZh
aWxhYmxlLgotICAgICAgICAgICAgaWYgKCFtX2RlY29kZXItPnNldFNpemUobV9pbmZvLmltYWdl
X3dpZHRoLCBtX2luZm8uaW1hZ2VfaGVpZ2h0KSkKKyAgICAgICAgICAgIGlmICghbV9kZWNvZGVy
LT5zZXRTaXplKEludFNpemUobV9pbmZvLmltYWdlX3dpZHRoLCBtX2luZm8uaW1hZ2VfaGVpZ2h0
KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBtX2RlY29k
ZXItPnNldE9yaWVudGF0aW9uKHJlYWRJbWFnZU9yaWVudGF0aW9uKGluZm8oKSkpOwpAQCAtNTE5
LDkgKzUxOSw5IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkKICAg
ICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsKIH0KIAotYm9vbCBKUEVH
SW1hZ2VEZWNvZGVyOjpzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCiti
b29sIEpQRUdJbWFnZURlY29kZXI6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAg
ICBpZiAoIUltYWdlRGVjb2Rlcjo6c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICBpZiAoIUlt
YWdlRGVjb2Rlcjo6c2V0U2l6ZShzaXplKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
cHJlcGFyZVNjYWxlRGF0YUlmTmVjZXNzYXJ5KCk7CkBAIC01NTEsNyArNTUxLDcgQEAgYm9vbCBK
UEVHSW1hZ2VEZWNvZGVyOjpzZXRGYWlsZWQoKQogfQogCiB0ZW1wbGF0ZSA8Sl9DT0xPUl9TUEFD
RSBjb2xvclNwYWNlPgotdm9pZCBzZXRQaXhlbChJbWFnZUZyYW1lJiBidWZmZXIsIEltYWdlRnJh
bWU6OlBpeGVsRGF0YSogY3VycmVudEFkZHJlc3MsIEpTQU1QQVJSQVkgc2FtcGxlcywgaW50IGNv
bHVtbikKK3ZvaWQgc2V0UGl4ZWwoSW1hZ2VGcmFtZSYgYnVmZmVyLCBSR0JBMzIqIGN1cnJlbnRB
ZGRyZXNzLCBKU0FNUEFSUkFZIHNhbXBsZXMsIGludCBjb2x1bW4pCiB7CiAgICAgSlNBTVBMRSog
anNhbXBsZSA9ICpzYW1wbGVzICsgY29sdW1uICogKGNvbG9yU3BhY2UgPT0gSkNTX1JHQiA/IDMg
OiA0KTsKIApAQCAtNTk0LDcgKzU5NCw3IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0
U2NhbmxpbmVzKEkKICAgICAgICAgaWYgKGRlc3RZIDwgMCkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogY3VycmVudEFkZHJlc3MgPSBidWZm
ZXIuZ2V0QWRkcigwLCBkZXN0WSk7CisgICAgICAgIFJHQkEzMiogY3VycmVudEFkZHJlc3MgPSBi
dWZmZXIuZ2V0QWRkcigwLCBkZXN0WSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lk
dGg7ICsreCkgewogICAgICAgICAgICAgc2V0UGl4ZWw8Y29sb3JTcGFjZT4oYnVmZmVyLCBjdXJy
ZW50QWRkcmVzcywgc2FtcGxlcywgaXNTY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4KTsK
ICAgICAgICAgICAgICsrY3VycmVudEFkZHJlc3M7CkBAIC02MTcsMTUgKzYxNywxMiBAQCBib29s
IEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcygpCiAgICAgLy8gSW5pdGlhbGl6ZSB0
aGUgZnJhbWVidWZmZXIgaWYgbmVlZGVkLgogICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJh
bWVCdWZmZXJDYWNoZVswXTsKICAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IEltYWdlRnJhbWU6
OkZyYW1lRW1wdHkpIHsKLSAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzY2FsZWRTaXplKCku
d2lkdGgoKSwgc2NhbGVkU2l6ZSgpLmhlaWdodCgpKSkKKyAgICAgICAgaWYgKCFidWZmZXIuc2V0
U2l6ZShzY2FsZWRTaXplKCkpKQogICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAg
ICAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CiAgICAgICAg
IC8vIFRoZSBidWZmZXIgaXMgdHJhbnNwYXJlbnQgb3V0c2lkZSB0aGUgZGVjb2RlZCBhcmVhIHdo
aWxlIHRoZSBpbWFnZSBpcwogICAgICAgICAvLyBsb2FkaW5nLiBUaGUgY29tcGxldGVkIGltYWdl
IHdpbGwgYmUgbWFya2VkIGZ1bGx5IG9wYXF1ZSBpbiBqcGVnQ29tcGxldGUoKS4KICAgICAgICAg
YnVmZmVyLnNldEhhc0FscGhhKHRydWUpOwotCi0gICAgICAgIC8vIEZvciBKUEVHcywgdGhlIGZy
YW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgotICAgICAgICBidWZmZXIuc2V0T3Jp
Z2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKTsKICAgICB9CiAKICAg
ICBqcGVnX2RlY29tcHJlc3Nfc3RydWN0KiBpbmZvID0gbV9yZWFkZXItPmluZm8oKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVj
b2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIC8vIEltYWdlRGVjb2RlcgogICAgICAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiAianBnIjsgfQogICAgICAgICBib29sIGlzU2l6ZUF2YWls
YWJsZSgpIG92ZXJyaWRlOwotICAgICAgICBib29sIHNldFNpemUodW5zaWduZWQgd2lkdGgsIHVu
c2lnbmVkIGhlaWdodCkgb3ZlcnJpZGU7CisgICAgICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRT
aXplJikgb3ZlcnJpZGU7CiAgICAgICAgIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChz
aXplX3QgaW5kZXgpIG92ZXJyaWRlOwogICAgICAgICAvLyBDQVVUSU9OOiBzZXRGYWlsZWQoKSBk
ZWxldGVzIHxtX3JlYWRlcnwuICBCZSBjYXJlZnVsIHRvIGF2b2lkCiAgICAgICAgIC8vIGFjY2Vz
c2luZyBkZWxldGVkIG1lbW9yeSwgZXNwZWNpYWxseSB3aGVuIGNhbGxpbmcgdGhpcyBmcm9tIGlu
c2lkZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BO
R0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDIwNTY4NCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURl
Y29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsOSArMjM1LDkgQEAgYm9vbCBQTkdJbWFn
ZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpCiAgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6aXNT
aXplQXZhaWxhYmxlKCk7CiB9CiAKLWJvb2wgUE5HSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHVuc2ln
bmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCitib29sIFBOR0ltYWdlRGVjb2Rlcjo6c2V0U2l6
ZShjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIGlmICghSW1hZ2VEZWNvZGVyOjpzZXRTaXpl
KHdpZHRoLCBoZWlnaHQpKQorICAgIGlmICghSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHNpemUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3Nhcnko
KTsKQEAgLTI5NSw3ICsyOTUsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxh
YmxlKCkKICAgICAvLyB3aWxsIGNlYXNlIHRvIGV4aXN0LiAgTm90ZSB0aGF0IHdlJ2xsIHN0aWxs
IHByb3Blcmx5IHNldCB0aGUgZmFpbHVyZSBmbGFnCiAgICAgLy8gaW4gdGhpcyBjYXNlIGFzIHNv
b24gYXMgd2UgbG9uZ2ptcCgpLgogICAgIG1fZG9Ob3RoaW5nT25GYWlsdXJlID0gdHJ1ZTsKLSAg
ICBib29sIHJlc3VsdCA9IHNldFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgYm9vbCByZXN1bHQg
PSBzZXRTaXplKEludFNpemUod2lkdGgsIGhlaWdodCkpOwogICAgIG1fZG9Ob3RoaW5nT25GYWls
dXJlID0gZmFsc2U7CiAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgbG9uZ2ptcChKTVBCVUYo
cG5nKSwgMSk7CkBAIC00MTEsMTkgKzQxMSwxOSBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVh
ZGVyQXZhaWxhYmxlKCkKICAgICB9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJH
QihJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCkKK3N0YXRpYyBp
bmxpbmUgdm9pZCBzZXRQaXhlbFJHQihSR0JBMzIqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCkKIHsK
ICAgICAqZGVzdCA9IDB4RkYwMDAwMDBVIHwgcGl4ZWxbMF0gPDwgMTYgfCBwaXhlbFsxXSA8PCA4
IHwgcGl4ZWxbMl07CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJHQkEoSW1hZ2VG
cmFtZTo6UGl4ZWxEYXRhKiBkZXN0LCBwbmdfYnl0ZXAgcGl4ZWwsIHVuc2lnbmVkIGNoYXImIG5v
blRyaXZpYWxBbHBoYU1hc2spCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxSR0JBKFJHQkEz
MiogZGVzdCwgcG5nX2J5dGVwIHBpeGVsLCB1bnNpZ25lZCBjaGFyJiBub25Ucml2aWFsQWxwaGFN
YXNrKQogewogICAgIHVuc2lnbmVkIGNoYXIgYSA9IHBpeGVsWzNdOwogICAgICpkZXN0ID0gYSA8
PCAyNCB8IHBpeGVsWzBdIDw8IDE2IHwgcGl4ZWxbMV0gPDwgOCB8IHBpeGVsWzJdOwogICAgIG5v
blRyaXZpYWxBbHBoYU1hc2sgfD0gKDI1NSAtIGEpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQg
c2V0UGl4ZWxQcmVtdWx0aXBsaWVkUkdCQShJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGRlc3QsIHBu
Z19ieXRlcCBwaXhlbCwgdW5zaWduZWQgY2hhciYgbm9uVHJpdmlhbEFscGhhTWFzaykKK3N0YXRp
YyBpbmxpbmUgdm9pZCBzZXRQaXhlbFByZW11bHRpcGxpZWRSR0JBKFJHQkEzMiogZGVzdCwgcG5n
X2J5dGVwIHBpeGVsLCB1bnNpZ25lZCBjaGFyJiBub25Ucml2aWFsQWxwaGFNYXNrKQogewogICAg
IHVuc2lnbmVkIGNoYXIgYSA9IHBpeGVsWzNdOwogICAgIHVuc2lnbmVkIGNoYXIgciA9IGZhc3RE
aXZpZGVCeTI1NShwaXhlbFswXSAqIGEpOwpAQCAtNDQ3LDcgKzQ0Nyw3IEBAIHZvaWQgUE5HSW1h
Z2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWcKICAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBt
X2ZyYW1lQnVmZmVyQ2FjaGVbbV9jdXJyZW50RnJhbWVdOwogICAgIGlmIChidWZmZXIuc3RhdHVz
KCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgewogICAgICAgICBwbmdfc3RydWN0cCBwbmcg
PSBtX3JlYWRlci0+cG5nUHRyKCk7Ci0gICAgICAgIGlmICghYnVmZmVyLnNldFNpemUoc2NhbGVk
U2l6ZSgpLndpZHRoKCksIHNjYWxlZFNpemUoKS5oZWlnaHQoKSkpIHsKKyAgICAgICAgaWYgKCFi
dWZmZXIuc2V0U2l6ZShzY2FsZWRTaXplKCkpKSB7CiAgICAgICAgICAgICBsb25nam1wKEpNUEJV
RihwbmcpLCAxKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNDcxLDggKzQ3
MSw2IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWcKICAgICAgICAg
ICAgIGluaXRGcmFtZUJ1ZmZlcihtX2N1cnJlbnRGcmFtZSk7CiAgICAgICAgIGVsc2UKICNlbmRp
ZgotICAgICAgICAvLyBGb3IgUE5HcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJl
IGltYWdlLgotICAgICAgICBidWZmZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQ
b2ludCgpLCBzaXplKCkpKTsKICAgICB9CiAKICAgICAvKiBsaWJwbmcgY29tbWVudHMgKGhlcmUg
dG8gZXhwbGFpbiB3aGF0IGZvbGxvd3MpLgpAQCAtNTMxLDcgKzUyOSw3IEBAIHZvaWQgUE5HSW1h
Z2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWcKICAgICB9CiAKICAgICAvLyBXcml0ZSB0aGUg
ZGVjb2RlZCByb3cgcGl4ZWxzIHRvIHRoZSBmcmFtZSBidWZmZXIuCi0gICAgSW1hZ2VGcmFtZTo6
UGl4ZWxEYXRhKiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoMCwgeSk7CisgICAgUkdCQTMyKiBh
ZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoMCwgeSk7CiAgICAgaW50IHdpZHRoID0gc2NhbGVkU2l6
ZSgpLndpZHRoKCk7CiAgICAgdW5zaWduZWQgY2hhciBub25Ucml2aWFsQWxwaGFNYXNrID0gMDsK
IApAQCAtODIwLDcgKzgxOCw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZm
ZXIoc2kKICAgICB9IGVsc2UgewogICAgICAgICAvLyBXZSB3YW50IHRvIGNsZWFyIHRoZSBwcmV2
aW91cyBmcmFtZSB0byB0cmFuc3BhcmVudCwgd2l0aG91dAogICAgICAgICAvLyBhZmZlY3Rpbmcg
cGl4ZWxzIGluIHRoZSBpbWFnZSBvdXRzaWRlIG9mIHRoZSBmcmFtZS4KLSAgICAgICAgY29uc3Qg
SW50UmVjdCYgcHJldlJlY3QgPSBwcmV2QnVmZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgpOworICAg
ICAgICBJbnRSZWN0IHByZXZSZWN0ID0gcHJldkJ1ZmZlci0+b3JpZ2luYWxGcmFtZVJlY3QoKTsK
ICAgICAgICAgaWYgKCFmcmFtZUluZGV4IHx8IHByZXZSZWN0LmNvbnRhaW5zKEludFJlY3QoSW50
UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpIHsKICAgICAgICAgICAgIC8vIENsZWFyaW5nIHRoZSBm
aXJzdCBmcmFtZSwgb3IgYSBmcmFtZSB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUKICAgICAgICAgICAg
IC8vIGltYWdlLCByZXN1bHRzIGluIGEgY29tcGxldGVseSBlbXB0eSBpbWFnZS4KQEAgLTg0NCw3
ICs4NDIsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAgICAgcG5n
X2J5dGVwIGludGVybGFjZUJ1ZmZlciA9IG1fcmVhZGVyLT5pbnRlcmxhY2VCdWZmZXIoKTsKIAog
ICAgIGlmIChtX2N1cnJlbnRGcmFtZSAmJiBpbnRlcmxhY2VCdWZmZXIpIHsKLSAgICAgICAgY29u
c3QgSW50UmVjdCYgcmVjdCA9IGJ1ZmZlci5vcmlnaW5hbEZyYW1lUmVjdCgpOworICAgICAgICBJ
bnRSZWN0IHJlY3QgPSBidWZmZXIub3JpZ2luYWxGcmFtZVJlY3QoKTsKICAgICAgICAgYm9vbCBo
YXNBbHBoYSA9IG1fcmVhZGVyLT5oYXNBbHBoYSgpOwogICAgICAgICB1bnNpZ25lZCBjb2xvckNo
YW5uZWxzID0gaGFzQWxwaGEgPyA0IDogMzsKICAgICAgICAgYm9vbCBub25Ucml2aWFsQWxwaGEg
PSBmYWxzZTsKQEAgLTg1NCw3ICs4NTIsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVD
b21wbGV0ZSgpCiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKICAgICAg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCByZWN0Lm1heFkoKSAtIHJlY3QueSgpOyArK3kpIHsKICAg
ICAgICAgICAgIHBuZ19ieXRlcCByb3cgPSBpbnRlcmxhY2VCdWZmZXIgKyAobV9zY2FsZWQgPyBt
X3NjYWxlZFJvd3NbeV0gOiB5KSAqIGNvbG9yQ2hhbm5lbHMgKiBzaXplKCkud2lkdGgoKTsKLSAg
ICAgICAgICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogYWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRy
KHJlY3QueCgpLCB5ICsgcmVjdC55KCkpOworICAgICAgICAgICAgUkdCQTMyKiBhZGRyZXNzID0g
YnVmZmVyLmdldEFkZHIocmVjdC54KCksIHkgKyByZWN0LnkoKSk7CiAgICAgICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHJlY3QubWF4WCgpIC0gcmVjdC54KCk7ICsreCkgewogICAgICAgICAg
ICAgICAgIHBuZ19ieXRlcCBwaXhlbCA9IHJvdyArIChtX3NjYWxlZCA/IG1fc2NhbGVkQ29sdW1u
c1t4XSA6IHgpICogY29sb3JDaGFubmVsczsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhbHBo
YSA9IGhhc0FscGhhID8gcGl4ZWxbM10gOiAyNTU7CkBAIC04NzAsNyArODY4LDcgQEAgdm9pZCBQ
TkdJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUoKQogICAgICAgICBwbmdfYnl0ZXAgcm93ID0g
aW50ZXJsYWNlQnVmZmVyOwogICAgICAgICBmb3IgKGludCB5ID0gcmVjdC55KCk7IHkgPCByZWN0
Lm1heFkoKTsgKyt5LCByb3cgKz0gY29sb3JDaGFubmVscyAqIHNpemUoKS53aWR0aCgpKSB7CiAg
ICAgICAgICAgICBwbmdfYnl0ZXAgcGl4ZWwgPSByb3c7Ci0gICAgICAgICAgICBJbWFnZUZyYW1l
OjpQaXhlbERhdGEqIGFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcihyZWN0LngoKSwgeSk7CisgICAg
ICAgICAgICBSR0JBMzIqIGFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcihyZWN0LngoKSwgeSk7CiAg
ICAgICAgICAgICBmb3IgKGludCB4ID0gcmVjdC54KCk7IHggPCByZWN0Lm1heFgoKTsgKyt4LCBw
aXhlbCArPSBjb2xvckNoYW5uZWxzKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEg
PSBoYXNBbHBoYSA/IHBpeGVsWzNdIDogMjU1OwogICAgICAgICAgICAgICAgIG5vblRyaXZpYWxB
bHBoYSB8PSBhbHBoYSA8IDI1NTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgJKHJldmlz
aW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Bu
Zy9QTkdJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGludCByZXBldGl0aW9uQ291bnQoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX3BsYXlDb3VudC0xOyB9CiAjZW5kaWYKICAgICAgICAgYm9vbCBpc1Np
emVBdmFpbGFibGUoKSBvdmVycmlkZTsKLSAgICAgICAgYm9vbCBzZXRTaXplKHVuc2lnbmVkIHdp
ZHRoLCB1bnNpZ25lZCBoZWlnaHQpIG92ZXJyaWRlOworICAgICAgICBib29sIHNldFNpemUoY29u
c3QgSW50U2l6ZSYpIG92ZXJyaWRlOwogICAgICAgICBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0
SW5kZXgoc2l6ZV90IGluZGV4KSBvdmVycmlkZTsKICAgICAgICAgLy8gQ0FVVElPTjogc2V0RmFp
bGVkKCkgZGVsZXRlcyB8bV9yZWFkZXJ8LiAgQmUgY2FyZWZ1bCB0byBhdm9pZAogICAgICAgICAv
LyBhY2Nlc3NpbmcgZGVsZXRlZCBtZW1vcnksIGVzcGVjaWFsbHkgd2hlbiBjYWxsaW5nIHRoaXMg
ZnJvbSBpbnNpZGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNp
b24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2Vi
cC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBA
IGJvb2wgV0VCUEltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgb25seVMKICAgICAgICAgICAgIHJl
dHVybiBzZXRGYWlsZWQoKTsKICAgICAgICAgbV9oYXNBbHBoYSA9IGZhbHNlOwogI2VuZGlmCi0g
ICAgICAgIGlmICghc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgaWYgKCFzZXRTaXpl
KEludFNpemUod2lkdGgsIGhlaWdodCkpKQogICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgp
OwogICAgIH0KIApAQCAtMTI4LDE4ICsxMjgsMTcgQEAgYm9vbCBXRUJQSW1hZ2VEZWNvZGVyOjpk
ZWNvZGUoYm9vbCBvbmx5UwogICAgIEFTU0VSVChidWZmZXIuc3RhdHVzKCkgIT0gSW1hZ2VGcmFt
ZTo6RnJhbWVDb21wbGV0ZSk7CiAKICAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IEltYWdlRnJh
bWU6OkZyYW1lRW1wdHkpIHsKLSAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzaXplKCkud2lk
dGgoKSwgc2l6ZSgpLmhlaWdodCgpKSkKKyAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzaXpl
KCkpKQogICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgICAgICBidWZmZXIuc2V0
U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIGJ1ZmZlci5zZXRIYXNB
bHBoYShtX2hhc0FscGhhKTsKLSAgICAgICAgYnVmZmVyLnNldE9yaWdpbmFsRnJhbWVSZWN0KElu
dFJlY3QoSW50UG9pbnQoKSwgc2l6ZSgpKSk7CiAgICAgfQogCiAgICAgaWYgKCFtX2RlY29kZXIp
IHsKICAgICAgICAgV0VCUF9DU1BfTU9ERSBtb2RlID0gb3V0cHV0TW9kZShtX2hhc0FscGhhKTsK
ICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpCiAgICAgICAgICAgICBtb2RlID0gb3V0
cHV0TW9kZShmYWxzZSk7Ci0gICAgICAgIGludCByb3dTdHJpZGUgPSBzaXplKCkud2lkdGgoKSAq
IHNpemVvZihJbWFnZUZyYW1lOjpQaXhlbERhdGEpOworICAgICAgICBpbnQgcm93U3RyaWRlID0g
c2l6ZSgpLndpZHRoKCkgKiBzaXplb2YoUkdCQTMyKTsKICAgICAgICAgdWludDhfdCogb3V0cHV0
ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyLmdldEFkZHIoMCwgMCkpOwogICAg
ICAgICBpbnQgb3V0cHV0U2l6ZSA9IHNpemUoKS5oZWlnaHQoKSAqIHJvd1N0cmlkZTsKICAgICAg
ICAgbV9kZWNvZGVyID0gV2ViUElOZXdSR0IobW9kZSwgb3V0cHV0LCBvdXRwdXRTaXplLCByb3dT
dHJpZGUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288475</attachid>
            <date>2016-09-09 19:08:09 -0700</date>
            <delta_ts>2016-09-12 12:16:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159679-20160909190541.patch</filename>
            <type>text/plain</type>
            <size>56657</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTc4MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBAQAorMjAxNi0wOS0wOSAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgdGhl
IHBpeGVsIGRhdGEgb2YgSW1hZ2VGcmFtZSB0byBhIHNlcGFyYXRlIGNsYXNzIG5hbWVkIEltYWdl
QmFja2luZ1N0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTk2NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNb3ZlIHRoZSBwaXhlbCBkYXRhIG1hbmlwdWxhdGlvbiBwYXJ0IGluIEltYWdlRnJhbWUg
aW50byBhIHNlcGFyYXRlIGNsYXNzCisgICAgICAgIGFuZCBhbGxvY2F0ZSBpdCBvbiBkZW1hbmQu
CisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5j
bWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbkNhaXJvLmNtYWtlOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Db2xvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2hhbm5lbCk6Cisg
ICAgICAgIChXZWJDb3JlOjp1bnByZW11bHRpcGxpZWRDaGFubmVsKToKKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VQcmVtdWx0aXBsaWVkUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjptYWtlVW5QcmVt
dWx0aXBsaWVkUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpjb2xvckZyb21QcmVtdWx0aXBsaWVk
QVJHQik6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcik6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OmZh
c3RNdWx0aXBseUJ5MjU1KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tp
bmdTdG9yZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OkltYWdlQmFja2lu
Z1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRTaXplKToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRGcmFtZVJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OnNpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCYWNraW5nU3RvcmU6OmZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUJhY2tpbmdTdG9yZTo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3Rv
cmU6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJhY2tpbmdTdG9yZTo6cmVw
ZWF0Rmlyc3RSb3cpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OmF0KToK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRSR0JBKToKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpvdmVyUkdCQSk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJhY2tpbmdTdG9yZTo6aW5Cb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
YWNraW5nU3RvcmU6OmlzT3ZlclNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nn
L05hdGl2ZUltYWdlQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmF0aXZlSW1hZ2VIYXNBbHBo
YSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFn
ZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
Ojp6ZXJvRmlsbEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjb3B5
Qml0bWFwRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldE9yaWdpbmFsRnJhbWVSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJhbWVCeXRlc0F0SW5kZXgpOgorICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VGcmFtZTo6Y29weVJvd05UaW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZy
YW1lOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6YmFja2luZ1N0b3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Omhhc0JhY2tpbmdTdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUZyYW1lOjpvcmlnaW5hbEZyYW1lUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjpnZXRBZGRyKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNldFJH
QkEpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6b3ZlclJHQkEpOgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWU6OnNldE9yaWdpbmFsRnJhbWVSZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlRnJhbWU6Omhhc1BpeGVsRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjpmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW1hZ2VGcmFtZTo6ZGl2aWRlMjU1KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWU6OndpZHRoKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RnJhbWU6OmhlaWdodCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6
OmlzT3ZlclNpemUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2JtcC9CTVBJbWFnZVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRl
cjo6ZGVjb2RlQk1QKToKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpwcm9jZXNz
SW5mb0hlYWRlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1h
Z2VCYWNraW5nU3RvcmVDYWlyby5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
YWNraW5nU3RvcmU6OmltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9n
aWYvR0lGSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rl
cjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNv
ZGVkUm93KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVm
ZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNv
ZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVh
ZGVyLmNwcDoKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpwYXJzZSk6CisgICAgICAgICogcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpJQ09JbWFnZURlY29kZXI6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6SUNP
SW1hZ2VEZWNvZGVyOjpwcm9jZXNzRGlyZWN0b3J5RW50cmllcyk6IERlbGV0ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VSZWFkZXI6OmRlY29kZSk6CisgICAgICAgIChXZWJD
b3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFBp
eGVsKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5l
cyk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNv
ZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVj
b2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnNldFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJBdmFpbGFibGUpOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxSR0IpOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxS
R0JBKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVsUHJlbXVsdGlwbGllZFJHQkEpOgorICAg
ICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpyb3dBdmFpbGFibGUpOgorICAgICAgICAo
V2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmg6CisgICAgICAgICogcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldFQlBJbWFnZURlY29kZXI6OmRlY29kZSk6CisKIDIwMTYtMDktMDkgIENvbW1pdCBR
dWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJv
bGxpbmcgb3V0IHIyMDU3NzEuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFr
ZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQkocmV2aXNp
b24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UJKHdvcmtpbmcg
Y29weSkKQEAgLTE4MywxMCArMTgzLDkgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MveDExL1BsYXRmb3JtRGlzcGxheVgxMS5jcHAKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy94MTEvWFVuaXF1ZVJlc291cmNlLmNwcAogCisgICAgcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VCYWNraW5nU3RvcmVDYWlyby5jcHAKICAgICBwbGF0Zm9y
bS9pbWFnZS1lbmNvZGVycy9KUEVHSW1hZ2VFbmNvZGVyLmNwcAogCi0gICAgcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCi0KICAgICBwbGF0Zm9ybS9u
ZXR3b3JrL2VmbC9OZXR3b3JrU3RhdGVOb3RpZmllckVmbC5jcHAKIAogICAgIHBsYXRmb3JtL25l
dHdvcmsvc291cC9BdXRoZW50aWNhdGlvbkNoYWxsZW5nZVNvdXAuY3BwCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUdUSy5jbWFrZQkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvUGxh
dGZvcm1HVEsuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTE1NSw3ICsxNTUsNyBAQCBsaXN0KEFQ
UEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ndGsvVGVtcG9yYXJ5TGlua1N0dWJz
LmNwcAogICAgIHBsYXRmb3JtL2d0ay9Vc2VyQWdlbnRHdGsuY3BwCiAKLSAgICBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKKyAgICBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZUJhY2tpbmdTdG9yZUNhaXJvLmNwcAogCiAgICAgcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3RrL1NEUFByb2Nlc3NvclNjcmlwdFJlc291cmNlR3RrLmNwcAog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UJKHJldmlzaW9uIDIwNTY4
NCkKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDcgKzQ2LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhRm91bmRhdGlvbi5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy93aW4vU2ltcGxlRm9udERhdGFDYWlyb1dpbi5jcHAKIAot
ICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAor
ICAgIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3JlQ2Fpcm8u
Y3BwCiAKICAgICBwbGF0Zm9ybS9uZXR3b3JrL05ldHdvcmtTdG9yYWdlU2Vzc2lvblN0dWIuY3Bw
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjI3NSw2ICsyMjc1LDcg
QEAKIAkJNTU1Qjg3RUMxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1NUI4N0VBMUNBQUYw
QUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAgKi87IH07CiAJCTU1NUI4N0VEMUNBQUYw
QUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVj
b2RlckNHLmggKi87IH07CiAJCTU1QTMzNkY3MUQ4MjA5RjQwMDIyQzRDNyAvKiBOYXRpdmVJbWFn
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVBMzM2
RjYxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi87IH07CisJCTU1QTMzNkY5MUQ4
MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTVBMzM2RjgxRDgyMUUzQzAwMjJDNEM3IC8qIElt
YWdlQmFja2luZ1N0b3JlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNTcwOUU4Q0QxRDQxM0Q0NzAwMzI0NEFDIC8qIFdlYktpdFN1YnRsZUNyeXB0
by5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzA5
RThDQTFENDEzQ0UzMDAzMjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5cHRvLmNwcCAqLzsgfTsKIAkJ
NTcwOUU4Q0UxRDQxM0Q1QjAwMzI0NEFDIC8qIEpTV2ViS2l0U3VidGxlQ3J5cHRvQ3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRkY4RjY2
MTgwNzQ2MDgwMDEzMjY3NCAvKiBKU1dlYktpdFN1YnRsZUNyeXB0b0N1c3RvbS5jcHAgKi87IH07
CiAJCTU3MDlFOENGMUQ0MTNEOUEwMDMyNDRBQyAvKiBXZWJLaXRTdWJ0bGVDcnlwdG8uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3MDlFOENCMUQ0MTND
RTMwMDMyNDRBQyAvKiBXZWJLaXRTdWJ0bGVDcnlwdG8uaCAqLzsgfTsKQEAgLTkyOTEsNiArOTI5
Miw3IEBACiAJCTU1NUI4N0VBMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbWFnZURlY29kZXJDRy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1NUI4N0VCMUNBQUYwQUIwMDM0OTQyNSAv
KiBJbWFnZURlY29kZXJDRy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbWFn
ZURlY29kZXJDRy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NUEzMzZGNjFEODIw
OUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gTmF0aXZlSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTVBMzM2
RjgxRDgyMUUzQzAwMjJDNEM3IC8qIEltYWdlQmFja2luZ1N0b3JlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEltYWdlQmFja2luZ1N0b3JlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTU1RDQwOEY3MUE3QzYzMTgwMEM3ODQ1MCAvKiBTVkdJbWFnZUNsaWVudHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHSW1hZ2VDbGllbnRzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU3MDlFOENBMUQ0MTNDRTMwMDMyNDRBQyAvKiBX
ZWJLaXRTdWJ0bGVDcnlwdG8uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV2ViS2l0U3VidGxlQ3J5cHRvLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTcwOUU4Q0IxRDQxM0NFMzAwMzI0NEFDIC8qIFdlYktpdFN1YnRsZUNyeXB0by5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJLaXRTdWJ0bGVDcnlwdG8uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwNzY5LDYgKzIwNzcxLDcgQEAKIAkJCQkzNzk5MTk5NDEy
MDBEREY0MDBFQTA0MUMgLyogV09GRkZpbGVGb3JtYXQuY3BwICovLAogCQkJCTM3OTkxOTk1MTIw
MERERjQwMEVBMDQxQyAvKiBXT0ZGRmlsZUZvcm1hdC5oICovLAogCQkJCTU1QTMzNkY2MUQ4MjA5
RjQwMDIyQzRDNyAvKiBOYXRpdmVJbWFnZS5oICovLAorCQkJCTU1QTMzNkY4MUQ4MjFFM0MwMDIy
QzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oICovLAogCQkJKTsKIAkJCXBhdGggPSBncmFwaGlj
czsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yNjMzOSw2ICsyNjM0Miw3IEBACiAJ
CQkJNTgyQ0IwNTMxQTc4QTE0QjAwQUZGQ0M0IC8qIFNpbXBsZUxpbmVMYXlvdXRUZXh0RnJhZ21l
bnRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzVBMUVBN0QxNTJCQ0YwODAwNEQwMEI2
IC8qIFNpbXBsaWZ5TWFya3VwQ29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTcyQTdGMjEx
QzZFNTcxOTAwOUM2MTQ5IC8qIFNpbXVsYXRlZENsaWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQk1
NUEzMzZGOTFEODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTMxNzQxQUFEMTY2MzY2MDkwMDhBNUI3RSAvKiBTaW11bGF0ZWRDbGlja09wdGlv
bnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZEMDBEN0E1MTRBM0Y2MTkwMDczNDAxMSAvKiBTaW5j
UmVzYW1wbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTMyN0Q2MDExQTMzQTJCMDA0RjlENjUg
LyogU2lua0RvY3VtZW50LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDks
NiArNDksMTYgQEAgY29uc3QgUkdCQTMyIENvbG9yOjp0cmFuc3BhcmVudDsKIHN0YXRpYyBjb25z
dCBSR0JBMzIgbGlnaHRlbmVkQmxhY2sgPSAweEZGNTQ1NDU0Owogc3RhdGljIGNvbnN0IFJHQkEz
MiBkYXJrZW5lZFdoaXRlID0gMHhGRkFCQUJBQjsKIAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBw
cmVtdWx0aXBsaWVkQ2hhbm5lbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBhKQoreworICAgIHJldHVy
biBmYXN0RGl2aWRlQnkyNTUoYyAqIGEgKyAyNTQpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2ln
bmVkIHVucHJlbXVsdGlwbGllZENoYW5uZWwodW5zaWduZWQgYywgdW5zaWduZWQgYSkKK3sKKyAg
ICByZXR1cm4gKGZhc3RNdWx0aXBseUJ5MjU1KGMpICsgYSAtIDEpIC8gYTsKK30KKwogUkdCQTMy
IG1ha2VSR0IoaW50IHIsIGludCBnLCBpbnQgYikKIHsKICAgICByZXR1cm4gMHhGRjAwMDAwMCB8
IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKHIsIDI1NSkpIDw8IDE2IHwgc3RkOjptYXgoMCwgc3RkOjpt
aW4oZywgMjU1KSkgPDwgOCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGIsIDI1NSkpOwpAQCAtNTks
NiArNjksMTYgQEAgUkdCQTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludAogICAg
IHJldHVybiBzdGQ6Om1heCgwLCBzdGQ6Om1pbihhLCAyNTUpKSA8PCAyNCB8IHN0ZDo6bWF4KDAs
IHN0ZDo6bWluKHIsIDI1NSkpIDw8IDE2IHwgc3RkOjptYXgoMCwgc3RkOjptaW4oZywgMjU1KSkg
PDwgOCB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGIsIDI1NSkpOwogfQogCitSR0JBMzIgbWFrZVBy
ZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQoreworICAgIHJldHVy
biBtYWtlUkdCQShwcmVtdWx0aXBsaWVkQ2hhbm5lbChyLCBhKSwgcHJlbXVsdGlwbGllZENoYW5u
ZWwoZywgYSksIHByZW11bHRpcGxpZWRDaGFubmVsKGIsIGEpLCBhKTsKK30KKworUkdCQTMyIG1h
a2VVblByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQoreworICAg
IHJldHVybiBtYWtlUkdCQSh1bnByZW11bHRpcGxpZWRDaGFubmVsKHIsIGEpLCB1bnByZW11bHRp
cGxpZWRDaGFubmVsKGcsIGEpLCB1bnByZW11bHRpcGxpZWRDaGFubmVsKGIsIGEpLCBhKTsKK30K
Kwogc3RhdGljIGludCBjb2xvckZsb2F0VG9SR0JBQnl0ZShmbG9hdCBmKQogewogICAgIC8vIFdl
IHVzZSBscm91bmRmIGFuZCAyNTUgaW5zdGVhZCBvZiBuZXh0YWZ0ZXJmKDI1NiwgMCkgdG8gbWF0
Y2ggQ0cncyByb3VuZGluZwpAQCAtNDgyLDE0ICs1MDIsOSBAQCB2b2lkIENvbG9yOjpnZXRIU1Yo
ZG91YmxlJiBodWUsIGRvdWJsZSYgCiBDb2xvciBjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQihS
R0JBMzIgcGl4ZWxDb2xvcikKIHsKICAgICBpbnQgYWxwaGEgPSBhbHBoYUNoYW5uZWwocGl4ZWxD
b2xvcik7Ci0gICAgaWYgKGFscGhhICYmIGFscGhhIDwgMjU1KSB7Ci0gICAgICAgIHJldHVybiBD
b2xvcjo6Y3JlYXRlVW5jaGVja2VkKAotICAgICAgICAgICAgcmVkQ2hhbm5lbChwaXhlbENvbG9y
KSAqIDI1NSAvIGFscGhhLAotICAgICAgICAgICAgZ3JlZW5DaGFubmVsKHBpeGVsQ29sb3IpICog
MjU1IC8gYWxwaGEsCi0gICAgICAgICAgICBibHVlQ2hhbm5lbChwaXhlbENvbG9yKSAqIDI1NSAv
IGFscGhhLAotICAgICAgICAgICAgYWxwaGEpOwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4g
Q29sb3IocGl4ZWxDb2xvcik7CisgICAgaWYgKGFscGhhICYmIGFscGhhIDwgMjU1KQorICAgICAg
ICBwaXhlbENvbG9yID0gbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEocmVkQ2hhbm5lbChwaXhlbENv
bG9yKSwgZ3JlZW5DaGFubmVsKHBpeGVsQ29sb3IpLCBibHVlQ2hhbm5lbChwaXhlbENvbG9yKSwg
YWxwaGEpOworICAgIHJldHVybiBDb2xvcihwaXhlbENvbG9yKTsKIH0KIAogUkdCQTMyIHByZW11
bHRpcGxpZWRBUkdCRnJvbUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTQ5NywxNCArNTEy
LDEwIEBAIFJHQkEzMiBwcmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcihjb25zdCAKICAgICB1bnNp
Z25lZCBwaXhlbENvbG9yOwogCiAgICAgdW5zaWduZWQgYWxwaGEgPSBjb2xvci5hbHBoYSgpOwot
ICAgIGlmIChhbHBoYSA8IDI1NSkgewotICAgICAgICBwaXhlbENvbG9yID0gQ29sb3I6OmNyZWF0
ZVVuY2hlY2tlZCgKLSAgICAgICAgICAgIGZhc3REaXZpZGVCeTI1NShjb2xvci5yZWQoKSAqIGFs
cGhhICsgMjU0KSwKLSAgICAgICAgICAgIGZhc3REaXZpZGVCeTI1NShjb2xvci5ncmVlbigpICog
YWxwaGEgKyAyNTQpLAotICAgICAgICAgICAgZmFzdERpdmlkZUJ5MjU1KGNvbG9yLmJsdWUoKSAq
IGFscGhhICsgMjU0KSwKLSAgICAgICAgICAgIGFscGhhKS5yZ2IoKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgIHBpeGVsQ29sb3IgPSBjb2xvci5yZ2IoKTsKKyAgICBpZiAoYWxwaGEgPCAyNTUpCisg
ICAgICAgIHBpeGVsQ29sb3IgPSBtYWtlUHJlbXVsdGlwbGllZFJHQkEoY29sb3IucmVkKCksIGNv
bG9yLmdyZWVuKCksIGNvbG9yLmJsdWUoKSwgYWxwaGEpOworICAgIGVsc2UKKyAgICAgICAgcGl4
ZWxDb2xvciA9IGNvbG9yLnJnYigpOwogCiAgICAgcmV0dXJuIHBpeGVsQ29sb3I7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgJKHJldmlzaW9uIDIwNTY4
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU1LDYgKzU1LDkgQEAgdHlwZWRlZiB1bnNpZ25lZCBSR0JBMzI7IC8vIERlcHJl
Y2F0ZWQ6IAogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VSR0IoaW50IHIsIGludCBnLCBpbnQg
Yik7CiBXRUJDT1JFX0VYUE9SVCBSR0JBMzIgbWFrZVJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwg
aW50IGEpOwogCitSR0JBMzIgbWFrZVByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50
IGIsIGludCBhKTsKK1JHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcs
IGludCBiLCBpbnQgYSk7CisKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBjb2xvcldpdGhPdmVycmlk
ZUFscGhhKFJHQkEzMiBjb2xvciwgZmxvYXQgb3ZlcnJpZGVBbHBoYSk7CiBXRUJDT1JFX0VYUE9S
VCBSR0JBMzIgY29sb3JXaXRoT3ZlcnJpZGVBbHBoYShSR0JBMzIgY29sb3IsIE9wdGlvbmFsPGZs
b2F0PiBvdmVycmlkZUFscGhhKTsKIApAQCAtMjE4LDYgKzIyMSw3IEBAIENvbG9yIGJsZW5kKGNv
bnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2wKIAogaW50IGRpZmZlcmVuY2VTcXVhcmVkKGNvbnN0
IENvbG9yJiwgY29uc3QgQ29sb3ImKTsKIAordWludDE2X3QgZmFzdE11bHRpcGx5QnkyNTUodWlu
dDE2X3QgdmFsdWUpOwogdWludDE2X3QgZmFzdERpdmlkZUJ5MjU1KHVpbnQxNl90KTsKIAogI2lm
IFVTRShDRykKQEAgLTI5MCw2ICsyOTQsMTEgQEAgaW5saW5lIHVpbnQ4X3Qgcm91bmRBbmRDbGFt
cENvbG9yQ2hhbm5lbAogICAgIHJldHVybiBzdGQ6Om1heCgwLmYsIHN0ZDo6bWluKDI1NS5mLCBz
dGQ6OnJvdW5kKHZhbHVlKSkpOwogfQogCitpbmxpbmUgdWludDE2X3QgZmFzdE11bHRpcGx5Qnky
NTUodWludDE2X3QgdmFsdWUpCit7CisgICAgcmV0dXJuICh2YWx1ZSA8PCA4KSAtIHZhbHVlOwor
fQorCiBpbmxpbmUgdWludDE2X3QgZmFzdERpdmlkZUJ5MjU1KHVpbnQxNl90IHZhbHVlKQogewog
ICAgIC8vIFdoaWxlIHRoaXMgaXMgYW4gYXBwcm94aW1hdGUgYWxnb3JpdGhtIGZvciBkaXZpc2lv
biBieSAyNTUsIGl0IGdpdmVzIHBlcmZlY3RseSBhY2N1cmF0ZSByZXN1bHRzIGZvciAxNi1iaXQg
dmFsdWVzLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNr
aW5nU3RvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJhY2tpbmdTdG9yZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0b3JlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkludFJlY3Qu
aCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2UuaCIKKworI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbWFn
ZUJhY2tpbmdTdG9yZSB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJhY2tpbmdTdG9yZT4gY3JlYXRlKGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlw
bHlBbHBoYSkKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEltYWdlQmFj
a2luZ1N0b3JlPihzaXplLCBwcmVtdWx0aXBseUFscGhhKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPEltYWdlQmFja2luZ1N0b3JlPiBjcmVhdGUoY29uc3QgSW1hZ2VCYWNr
aW5nU3RvcmUmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8
SW1hZ2VCYWNraW5nU3RvcmU+KG90aGVyKTsKKyAgICB9CisKKyAgICBJbWFnZUJhY2tpbmdTdG9y
ZShjb25zdCBJbnRTaXplJiBzaXplLCBib29sIHByZW11bHRpcGx5QWxwaGEgPSB0cnVlKQorICAg
ICAgICA6IG1fcHJlbXVsdGlwbHlBbHBoYShwcmVtdWx0aXBseUFscGhhKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFzaXplLmlzRW1wdHkoKSk7CisgICAgICAgIHNldFNpemUoc2l6ZSk7CisgICAg
fQorCisgICAgSW1hZ2VCYWNraW5nU3RvcmUoY29uc3QgSW1hZ2VCYWNraW5nU3RvcmUmIG90aGVy
KQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMgPT0gJm90aGVyKQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIG1fcGl4ZWxzID0gb3RoZXIubV9waXhlbHM7CisgICAgICAgIG1fcGl4ZWxz
UHRyID0gbV9waXhlbHMuZGF0YSgpOworICAgICAgICBtX3NpemUgPSBvdGhlci5tX3NpemU7Cisg
ICAgICAgIG1fcHJlbXVsdGlwbHlBbHBoYSA9IG90aGVyLm1fcHJlbXVsdGlwbHlBbHBoYTsKKyAg
ICB9CisKKyAgICBOYXRpdmVJbWFnZVB0ciBpbWFnZSgpIGNvbnN0OworCisgICAgYm9vbCBzZXRT
aXplKGNvbnN0IEludFNpemUmIHNpemUpCisgICAgeworICAgICAgICBpZiAoIW1fcGl4ZWxzLnRy
eVJlc2VydmVDYXBhY2l0eShzaXplLmFyZWEoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgbV9waXhlbHMucmVzaXplKHNpemUuYXJlYSgpKTsKKyAgICAgICAgbV9waXhl
bHNQdHIgPSBtX3BpeGVscy5kYXRhKCk7CisgICAgICAgIG1fc2l6ZSA9IHNpemU7CisgICAgICAg
IG1fZnJhbWVSZWN0ID0gSW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUpOworICAgICAgICBjbGVh
cigpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIHNldEZyYW1lUmVj
dChjb25zdCBJbnRSZWN0JiBmcmFtZVJlY3QpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fc2l6
ZS5pc0VtcHR5KCkpOworICAgICAgICBBU1NFUlQoaW5Cb3VuZHMoZnJhbWVSZWN0KSk7CisgICAg
ICAgIG1fZnJhbWVSZWN0ID0gZnJhbWVSZWN0OworICAgIH0KKworICAgIEludFNpemUgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIEludFJlY3QgZnJhbWVSZWN0KCkgY29uc3Qg
eyByZXR1cm4gbV9mcmFtZVJlY3Q7IH0KKworICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAg
ICAgbWVtc2V0KG1fcGl4ZWxzUHRyLCAwLCBtX3NpemUuYXJlYSgpICogc2l6ZW9mKFJHQkEzMikp
OworICAgIH0KKworICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAg
eworICAgICAgICBpZiAocmVjdC5pc0VtcHR5KCkgfHwgIWluQm91bmRzKHJlY3QpKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIHNpemVfdCByZWN0V2lkdGhJbkJ5dGVzID0gcmVjdC53
aWR0aCgpICogc2l6ZW9mKFJHQkEzMik7CisgICAgICAgIFJHQkEzMiogc3RhcnQgPSBhdChyZWN0
LngoKSwgcmVjdC55KCkpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY3QuaGVpZ2h0
KCk7ICsraSkgeworICAgICAgICAgICAgbWVtc2V0KHN0YXJ0LCAwLCByZWN0V2lkdGhJbkJ5dGVz
KTsKKyAgICAgICAgICAgIHN0YXJ0ICs9IG1fc2l6ZS53aWR0aCgpOworICAgICAgICB9CisgICAg
fQorCisgICAgdm9pZCByZXBlYXRGaXJzdFJvdyhjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsK
KyAgICAgICAgaWYgKHJlY3QuaXNFbXB0eSgpIHx8ICFpbkJvdW5kcyhyZWN0KSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBzaXplX3QgcmVjdFdpZHRoSW5CeXRlcyA9IHJlY3Qud2lk
dGgoKSAqIHNpemVvZihSR0JBMzIpOworICAgICAgICBSR0JBMzIqIHNyYyA9IGF0KHJlY3QueCgp
LCByZWN0LnkoKSk7CisgICAgICAgIFJHQkEzMiogZGVzdCA9IHNyYyArIG1fc2l6ZS53aWR0aCgp
OworICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IHJlY3QuaGVpZ2h0KCk7ICsraSkgeworICAg
ICAgICAgICAgbWVtY3B5KGRlc3QsIHNyYywgcmVjdFdpZHRoSW5CeXRlcyk7CisgICAgICAgICAg
ICBkZXN0ICs9IG1fc2l6ZS53aWR0aCgpOworICAgICAgICB9CisgICAgfQorCisgICAgUkdCQTMy
KiBhdChpbnQgeCwgaW50IHkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9waXhlbHNQ
dHIgKyB5ICogbV9zaXplLndpZHRoKCkgKyB4OworICAgIH0KKworICAgIHZvaWQgc2V0UkdCQShp
bnQgeCwgaW50IHksIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVk
IGEpCisgICAgeworICAgICAgICBzZXRSR0JBKGF0KHgsIHkpLCByLCBnLCBiLCBhKTsKKyAgICB9
CisKKyAgICB2b2lkIHNldFJHQkEoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25lZCBn
LCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgaWYgKG1fcHJlbXVsdGlw
bHlBbHBoYSAmJiAhYSkKKyAgICAgICAgICAgICpkZXN0ID0gMDsKKyAgICAgICAgZWxzZSBpZiAo
bV9wcmVtdWx0aXBseUFscGhhICYmIGEgPCAyNTUpCisgICAgICAgICAgICAqZGVzdCA9IG1ha2VQ
cmVtdWx0aXBsaWVkUkdCQShyLCBnLCBiLCBhKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
KmRlc3QgPSBtYWtlUkdCQShyLCBnLCBiLCBhKTsKKyAgICB9CisKKyAgICB2b2lkIG92ZXJSR0JB
KFJHQkEzMiogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWdu
ZWQgYSkKKyAgICB7CisgICAgICAgIGlmICghYSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBpZiAoYSA+PSAyNTUgfHwgIWFscGhhQ2hhbm5lbCgqZGVzdCkpIHsKKyAgICAgICAgICAg
IHNldFJHQkEoZGVzdCwgciwgZywgYiwgYSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkKKyAgICAgICAgICAgICpkZXN0
ID0gbWFrZVByZW11bHRpcGxpZWRSR0JBKHJlZENoYW5uZWwoKmRlc3QpLCBncmVlbkNoYW5uZWwo
KmRlc3QpLCBibHVlQ2hhbm5lbCgqZGVzdCksIGFscGhhQ2hhbm5lbCgqZGVzdCkpOworCisgICAg
ICAgIHVuc2lnbmVkIGQgPSAyNTUgLSBhOworCisgICAgICAgIHIgPSBmYXN0RGl2aWRlQnkyNTUo
ciAqIGEgKyByZWRDaGFubmVsKCpkZXN0KSAqIGQpOworICAgICAgICBnID0gZmFzdERpdmlkZUJ5
MjU1KGcgKiBhICsgZ3JlZW5DaGFubmVsKCpkZXN0KSAqIGQpOworICAgICAgICBiID0gZmFzdERp
dmlkZUJ5MjU1KGIgKiBhICsgYmx1ZUNoYW5uZWwoKmRlc3QpICogZCk7CisgICAgICAgIGEgKz0g
ZmFzdERpdmlkZUJ5MjU1KGQgKiBhbHBoYUNoYW5uZWwoKmRlc3QpKTsKKworICAgICAgICBpZiAo
bV9wcmVtdWx0aXBseUFscGhhKQorICAgICAgICAgICAgKmRlc3QgPSBtYWtlUkdCQShyLCBnLCBi
LCBhKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKmRlc3QgPSBtYWtlVW5QcmVtdWx0aXBs
aWVkUkdCQShyLCBnLCBiLCBhKTsKKyAgICB9CisKKyAgICBib29sIGluQm91bmRzKGNvbnN0IElu
dFJlY3QmIHJlY3QpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSW50UmVjdChJbnRQb2lu
dCgpLCBtX3NpemUpLmNvbnRhaW5zKHJlY3QpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlz
T3ZlclNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAgIHN0YXRpYyB1bnNp
Z25lZCBsb25nIGxvbmcgTWF4UGl4ZWxzID0gKCgxIDw8IDI5KSAtIDEpOworICAgICAgICB1bnNp
Z25lZCBsb25nIGxvbmcgcGl4ZWxzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihz
aXplLndpZHRoKCkpICogc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihzaXplLmhlaWdo
dCgpKTsKKyAgICAgICAgcmV0dXJuIHBpeGVscyA+IE1heFBpeGVsczsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgVmVjdG9yPFJHQkEzMj4gbV9waXhlbHM7CisgICAgUkdCQTMyKiBtX3BpeGVsc1B0
ciB7IG51bGxwdHIgfTsKKyAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICBJbnRSZWN0IG1fZnJhbWVS
ZWN0OyAvLyBUaGlzIHdpbGwgYWx3YXlzIGp1c3QgYmUgdGhlIGVudGlyZSBidWZmZXIgZXhjZXB0
IGZvciBHSUYgYW5kIFBORyBmcmFtZXMKKyAgICBib29sIG1fcHJlbXVsdGlwbHlBbHBoYSB7IHRy
dWUgfTsKK307CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nn
L05hdGl2ZUltYWdlQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3BwCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDcsMTAgKzQ3LDEwIEBAIEludFNpemUgbmF0aXZlSW1hZ2VTaXplKGNvbnN0
IE5hdGl2ZUltYWcKICAgICByZXR1cm4gaW1hZ2UgPyBJbnRTaXplKENHSW1hZ2VHZXRXaWR0aChp
bWFnZS5nZXQoKSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UuZ2V0KCkpKSA6IEludFNpemUoKTsK
IH0KIAotYm9vbCBuYXRpdmVJbWFnZUhhc0FscGhhKGNvbnN0IE5hdGl2ZUltYWdlUHRyJikKK2Jv
b2wgbmF0aXZlSW1hZ2VIYXNBbHBoYShjb25zdCBOYXRpdmVJbWFnZVB0ciYgaW1hZ2UpCiB7Ci0g
ICAgLy8gRklYTUU6IEFuc3dlciBjb3JyZWN0bHkgdGhlIHF1ZXN0aW9uOiBkb2VzIHRoZSBDR0lt
YWdlUmVmIGhhdmUgYWxwaGEgY2hhbm5uZWw/Ci0gICAgcmV0dXJuIHRydWU7CisgICAgQ0dJbWFn
ZUFscGhhSW5mbyBpbmZvID0gQ0dJbWFnZUdldEFscGhhSW5mbyhpbWFnZS5nZXQoKSk7CisgICAg
cmV0dXJuIChpbmZvID49IGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCkgJiYgKGluZm8g
PD0ga0NHSW1hZ2VBbHBoYUZpcnN0KTsKIH0KIAogQ29sb3IgbmF0aXZlSW1hZ2VTaW5nbGVQaXhl
bFNvbGlkQ29sb3IoY29uc3QgTmF0aXZlSW1hZ2VQdHImIGltYWdlKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIu
Y3BwCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDIsNyArMTQyLDcg
QEAgSW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0IAogICAgICAgICByZXR1
cm4gKnRoaXM7CiAKICAgICBjb3B5Qml0bWFwRGF0YShvdGhlcik7Ci0gICAgc2V0T3JpZ2luYWxG
cmFtZVJlY3Qob3RoZXIub3JpZ2luYWxGcmFtZVJlY3QoKSk7CisgICAgc2V0SGFzQWxwaGEob3Ro
ZXIubV9oYXNBbHBoYSk7CiAgICAgc2V0U3RhdHVzKG90aGVyLnN0YXR1cygpKTsKICAgICBzZXRE
dXJhdGlvbihvdGhlci5kdXJhdGlvbigpKTsKICAgICBzZXREaXNwb3NhbE1ldGhvZChvdGhlci5k
aXNwb3NhbE1ldGhvZCgpKTsKQEAgLTE1Miw4ICsxNTIsNyBAQCBJbWFnZUZyYW1lJiBJbWFnZUZy
YW1lOjpvcGVyYXRvcj0oY29uc3QgCiAKIHZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXJQaXhlbERhdGEo
KQogewotICAgIG1fYmFja2luZ1N0b3JlLmNsZWFyKCk7Ci0gICAgbV9ieXRlcyA9IDA7CisgICAg
bV9iYWNraW5nU3RvcmUgPSBudWxscHRyOwogICAgIG1fc3RhdHVzID0gRnJhbWVFbXB0eTsKICAg
ICAvLyBOT1RFOiBEbyBub3QgcmVzZXQgb3RoZXIgbWVtYmVycyBoZXJlOyBjbGVhckZyYW1lQnVm
ZmVyQ2FjaGUoKSBjYWxscyB0aGlzCiAgICAgLy8gdG8gZnJlZSB0aGUgYml0bWFwIGRhdGEsIGJ1
dCBvdGhlciBmdW5jdGlvbnMgbGlrZSBpbml0RnJhbWVCdWZmZXIoKSBhbmQKQEAgLTE2MywyNCAr
MTYyLDE2IEBAIHZvaWQgSW1hZ2VGcmFtZTo6Y2xlYXJQaXhlbERhdGEoKQogCiB2b2lkIEltYWdl
RnJhbWU6Onplcm9GaWxsUGl4ZWxEYXRhKCkKIHsKLSAgICBtZW1zZXQobV9ieXRlcywgMCwgbV9z
aXplLndpZHRoKCkgKiBtX3NpemUuaGVpZ2h0KCkgKiBzaXplb2YoUGl4ZWxEYXRhKSk7CisgICAg
bV9iYWNraW5nU3RvcmUtPmNsZWFyKCk7CiAgICAgbV9oYXNBbHBoYSA9IHRydWU7CiB9CiAKIHZv
aWQgSW1hZ2VGcmFtZTo6emVyb0ZpbGxGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsK
LSAgICBBU1NFUlQoSW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHJlY3QpKTsK
LQogICAgIGlmIChyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2l6ZV90
IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkgKiBzaXplb2YoUGl4ZWxEYXRhKTsKLSAg
ICBQaXhlbERhdGEqIHN0YXJ0ID0gbV9ieXRlcyArIChyZWN0LnkoKSAqIHdpZHRoKCkpICsgcmVj
dC54KCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWN0LmhlaWdodCgpOyArK2kpIHsKLSAg
ICAgICAgbWVtc2V0KHN0YXJ0LCAwLCByZWN0V2lkdGhJbkJ5dGVzKTsKLSAgICAgICAgc3RhcnQg
Kz0gd2lkdGgoKTsKLSAgICB9Ci0KKyAgICBtX2JhY2tpbmdTdG9yZS0+Y2xlYXJSZWN0KHJlY3Qp
OwogICAgIHNldEhhc0FscGhhKHRydWUpOwogfQogCkBAIC0xODksMjUgKzE4MCwxOSBAQCBib29s
IEltYWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKGNvbnN0IEltCiAgICAgaWYgKHRoaXMgPT0gJm90
aGVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIG1fYmFja2luZ1N0b3JlID0gb3RoZXIu
bV9iYWNraW5nU3RvcmU7Ci0gICAgbV9ieXRlcyA9IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsKLSAg
ICBtX3NpemUgPSBvdGhlci5tX3NpemU7Ci0gICAgc2V0SGFzQWxwaGEob3RoZXIubV9oYXNBbHBo
YSk7CisgICAgaWYgKG90aGVyLm1fYmFja2luZ1N0b3JlKQorICAgICAgICBtX2JhY2tpbmdTdG9y
ZSA9IEltYWdlQmFja2luZ1N0b3JlOjpjcmVhdGUoKm90aGVyLm1fYmFja2luZ1N0b3JlLmdldCgp
KTsKKyAgICBlbHNlCisgICAgICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKKyAgICAKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBJbWFnZUZyYW1lOjpzZXRTaXplKGludCBuZXdXaWR0
aCwgaW50IG5ld0hlaWdodCkKK2Jvb2wgSW1hZ2VGcmFtZTo6c2V0U2l6ZShjb25zdCBJbnRTaXpl
JiBzaXplKQogewotICAgIEFTU0VSVCghd2lkdGgoKSAmJiAhaGVpZ2h0KCkpOwotICAgIHNpemVf
dCBiYWNraW5nU3RvcmVTaXplID0gbmV3V2lkdGggKiBuZXdIZWlnaHQ7Ci0gICAgaWYgKCFtX2Jh
Y2tpbmdTdG9yZS50cnlSZXNlcnZlQ2FwYWNpdHkoYmFja2luZ1N0b3JlU2l6ZSkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBtX2JhY2tpbmdTdG9yZS5yZXNpemUoYmFja2luZ1N0b3JlU2l6
ZSk7Ci0gICAgbV9ieXRlcyA9IG1fYmFja2luZ1N0b3JlLmRhdGEoKTsKLSAgICBtX3NpemUgPSBJ
bnRTaXplKG5ld1dpZHRoLCBuZXdIZWlnaHQpOwotCi0gICAgemVyb0ZpbGxQaXhlbERhdGEoKTsK
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICBBU1NFUlQoIW1fYmFja2luZ1N0b3JlKTsKKyAgICBtX2Jh
Y2tpbmdTdG9yZSA9IEltYWdlQmFja2luZ1N0b3JlOjpjcmVhdGUoc2l6ZSwgbV9wcmVtdWx0aXBs
eUFscGhhKTsKKyAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUgIT0gbnVsbHB0cjsKIH0KIAogYm9v
bCBJbWFnZUZyYW1lOjpoYXNBbHBoYSgpIGNvbnN0CkBAIC0yMjAsNiArMjA1LDEyIEBAIHZvaWQg
SW1hZ2VGcmFtZTo6c2V0SGFzQWxwaGEoYm9vbCBhbHBoYSkKICAgICBtX2hhc0FscGhhID0gYWxw
aGE7CiB9CiAKK3ZvaWQgSW1hZ2VGcmFtZTo6c2V0T3JpZ2luYWxGcmFtZVJlY3QoY29uc3QgSW50
UmVjdCYgZnJhbWVSZWN0KQoreworICAgIGlmIChtX2JhY2tpbmdTdG9yZSkKKyAgICAgICAgbV9i
YWNraW5nU3RvcmUtPnNldEZyYW1lUmVjdChmcmFtZVJlY3QpOworfQorCiB2b2lkIEltYWdlRnJh
bWU6OnNldFN0YXR1cyhGcmFtZVN0YXR1cyBzdGF0dXMpCiB7CiAgICAgbV9zdGF0dXMgPSBzdGF0
dXM7CkBAIC0yODYsNyArMjc3LDcgQEAgdW5zaWduZWQgSW1hZ2VEZWNvZGVyOjpmcmFtZUJ5dGVz
QXRJbmRleAogICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuc2l6ZSgpIDw9IGluZGV4KQogICAg
ICAgICByZXR1cm4gMDsKICAgICAvLyBGSVhNRTogVXNlIHRoZSBkaW1lbnNpb24gb2YgdGhlIHJl
cXVlc3RlZCBmcmFtZS4KLSAgICByZXR1cm4gbV9zaXplLmFyZWEoKSAqIHNpemVvZihJbWFnZUZy
YW1lOjpQaXhlbERhdGEpOworICAgIHJldHVybiBtX3NpemUuYXJlYSgpICogc2l6ZW9mKFJHQkEz
Mik7CiB9CiAKIGZsb2F0IEltYWdlRGVjb2Rlcjo6ZnJhbWVEdXJhdGlvbkF0SW5kZXgoc2l6ZV90
IGluZGV4KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw4ICsyOCwxMCBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkludFJlY3Qu
aCIKKyNpbmNsdWRlICJJbWFnZUJhY2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIkltYWdlU291cmNl
LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybVNjcmVlbi5oIgogI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2luY2x1ZGUg
PHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC01Nyw3ICs1OSw2IEBAIHVzaW5nIENvbG9yUHJvZmlsZSA9
IFZlY3RvcjxjaGFyPjsKICAgICAgICAgICAgIERpc3Bvc2VPdmVyd3JpdGVQcmV2aW91cyAgLy8g
Q2xlYXIgZnJhbWUgdG8gcHJldmlvdXMgZnJhbWVidWZmZXIKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gY29udGVudHMKICAgICAgICAgfTsKLSAgICAgICAgdHlwZWRl
ZiB1bnNpZ25lZCBQaXhlbERhdGE7CiAKICAgICAgICAgSW1hZ2VGcmFtZSgpOwogCkBAIC04Miwx
NDIgKzgzLDY0IEBAIHVzaW5nIENvbG9yUHJvZmlsZSA9IFZlY3RvcjxjaGFyPjsKICAgICAgICAg
Ly8gZW5kWS4KICAgICAgICAgdm9pZCBjb3B5Um93TlRpbWVzKGludCBzdGFydFgsIGludCBlbmRY
LCBpbnQgc3RhcnRZLCBpbnQgZW5kWSkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHN0
YXJ0WCA8IHdpZHRoKCkpOwotICAgICAgICAgICAgQVNTRVJUKGVuZFggPD0gd2lkdGgoKSk7Ci0g
ICAgICAgICAgICBBU1NFUlQoc3RhcnRZIDwgaGVpZ2h0KCkpOwotICAgICAgICAgICAgQVNTRVJU
KGVuZFkgPD0gaGVpZ2h0KCkpOwotICAgICAgICAgICAgY29uc3QgaW50IHJvd0J5dGVzID0gKGVu
ZFggLSBzdGFydFgpICogc2l6ZW9mKFBpeGVsRGF0YSk7Ci0gICAgICAgICAgICBjb25zdCBQaXhl
bERhdGEqIGNvbnN0IHN0YXJ0QWRkciA9IGdldEFkZHIoc3RhcnRYLCBzdGFydFkpOwotICAgICAg
ICAgICAgZm9yIChpbnQgZGVzdFkgPSBzdGFydFkgKyAxOyBkZXN0WSA8IGVuZFk7ICsrZGVzdFkp
Ci0gICAgICAgICAgICAgICAgbWVtY3B5KGdldEFkZHIoc3RhcnRYLCBkZXN0WSksIHN0YXJ0QWRk
ciwgcm93Qnl0ZXMpOworICAgICAgICAgICAgbV9iYWNraW5nU3RvcmUtPnJlcGVhdEZpcnN0Um93
KEludFJlY3Qoc3RhcnRYLCBzdGFydFksIGVuZFggLXN0YXJ0WCAsIGVuZFkgLSBzdGFydFkpKTsK
ICAgICAgICAgfQogCiAgICAgICAgIC8vIEFsbG9jYXRlcyBzcGFjZSBmb3IgdGhlIHBpeGVsIGRh
dGEuICBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IHBpeGVscwogICAgICAgICAvLyBhcmUgd3Jp
dHRlbi4gIE11c3Qgb25seSBiZSBjYWxsZWQgb25jZS4gIFJldHVybnMgd2hldGhlciBhbGxvY2F0
aW9uCiAgICAgICAgIC8vIHN1Y2NlZWRlZC4KLSAgICAgICAgYm9vbCBzZXRTaXplKGludCBuZXdX
aWR0aCwgaW50IG5ld0hlaWdodCk7CisgICAgICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXpl
Jik7CisgICAgICAgIEludFNpemUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZ1N0b3Jl
LT5zaXplKCk7IH0KIAogICAgICAgICAvLyBSZXR1cm5zIGEgY2FsbGVyLW93bmVkIHBvaW50ZXIg
dG8gdGhlIHVuZGVybHlpbmcgbmF0aXZlIGltYWdlIGRhdGEuCiAgICAgICAgIC8vIChBY3R1YWwg
dXNlOiBUaGlzIHBvaW50ZXIgd2lsbCBiZSBvd25lZCBieSBCaXRtYXBJbWFnZSBhbmQgZnJlZWQg
aW4KICAgICAgICAgLy8gRnJhbWVEYXRhOjpjbGVhcigpKS4KLSAgICAgICAgTmF0aXZlSW1hZ2VQ
dHIgYXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0OworICAgICAgICBOYXRpdmVJbWFnZVB0ciBhc05l
d05hdGl2ZUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nU3RvcmUtPmltYWdlKCk7IH0K
IAorICAgICAgICBpbmxpbmUgSW1hZ2VCYWNraW5nU3RvcmUqIGJhY2tpbmdTdG9yZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlID8gbV9iYWNraW5nU3RvcmUuZ2V0KCkgOiBudWxscHRy
OyB9CisgICAgICAgIGlubGluZSBib29sIGhhc0JhY2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJu
IGJhY2tpbmdTdG9yZSgpOyB9CisgICAgICAgIAogICAgICAgICBib29sIGhhc0FscGhhKCkgY29u
c3Q7Ci0gICAgICAgIGNvbnN0IEludFJlY3QmIG9yaWdpbmFsRnJhbWVSZWN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9vcmlnaW5hbEZyYW1lUmVjdDsgfQorICAgICAgICBJbnRSZWN0IG9yaWdpbmFsRnJh
bWVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nU3RvcmUgPyBtX2JhY2tpbmdTdG9yZS0+
ZnJhbWVSZWN0KCkgOiBJbnRSZWN0KCk7IH0KICAgICAgICAgRnJhbWVTdGF0dXMgc3RhdHVzKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KICAgICAgICAgdW5zaWduZWQgZHVyYXRpb24oKSBj
b25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9CiAgICAgICAgIEZyYW1lRGlzcG9zYWxNZXRob2Qg
ZGlzcG9zYWxNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX2Rpc3Bvc2FsTWV0aG9kOyB9CiAgICAg
ICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlbXVsdGlwbHlB
bHBoYTsgfQogCisgICAgICAgIHZvaWQgc2V0QmFja2luZ1N0b3JlKGNvbnN0IEltYWdlQmFja2lu
Z1N0b3JlKik7CisgICAgICAgIAogICAgICAgICB2b2lkIHNldEhhc0FscGhhKGJvb2wgYWxwaGEp
OwotICAgICAgICB2b2lkIHNldE9yaWdpbmFsRnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIHIpIHsg
bV9vcmlnaW5hbEZyYW1lUmVjdCA9IHI7IH0KKyAgICAgICAgdm9pZCBzZXRPcmlnaW5hbEZyYW1l
UmVjdChjb25zdCBJbnRSZWN0Jik7CiAgICAgICAgIHZvaWQgc2V0U3RhdHVzKEZyYW1lU3RhdHVz
IHN0YXR1cyk7CiAgICAgICAgIHZvaWQgc2V0RHVyYXRpb24odW5zaWduZWQgZHVyYXRpb24pIHsg
bV9kdXJhdGlvbiA9IGR1cmF0aW9uOyB9CiAgICAgICAgIHZvaWQgc2V0RGlzcG9zYWxNZXRob2Qo
RnJhbWVEaXNwb3NhbE1ldGhvZCBtZXRob2QpIHsgbV9kaXNwb3NhbE1ldGhvZCA9IG1ldGhvZDsg
fQogICAgICAgICB2b2lkIHNldFByZW11bHRpcGx5QWxwaGEoYm9vbCBwcmVtdWx0aXBseUFscGhh
KSB7IG1fcHJlbXVsdGlwbHlBbHBoYSA9IHByZW11bHRpcGx5QWxwaGE7IH0KIAotICAgICAgICBp
bmxpbmUgdm9pZCBzZXRSR0JBKGludCB4LCBpbnQgeSwgdW5zaWduZWQgciwgdW5zaWduZWQgZywg
dW5zaWduZWQgYiwgdW5zaWduZWQgYSkKLSAgICAgICAgewotICAgICAgICAgICAgc2V0UkdCQShn
ZXRBZGRyKHgsIHkpLCByLCBnLCBiLCBhKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlubGluZSBQ
aXhlbERhdGEqIGdldEFkZHIoaW50IHgsIGludCB5KQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gbV9ieXRlcyArICh5ICogd2lkdGgoKSkgKyB4OwotICAgICAgICB9Ci0KLSAgICAgICAg
aW5saW5lIGJvb2wgaGFzUGl4ZWxEYXRhKCkgY29uc3QKKyAgICAgICAgaW5saW5lIFJHQkEzMiog
Z2V0QWRkcihpbnQgeCwgaW50IHkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX2J5
dGVzOworICAgICAgICAgICAgcmV0dXJuIG1fYmFja2luZ1N0b3JlLT5hdCh4LCB5KTsKICAgICAg
ICAgfQogCi0gICAgICAgIC8vIFVzZSBmaXggcG9pbnQgbXVsdGlwbGllciBpbnN0ZWFkIG9mIGlu
dGVnZXIgZGl2aXNpb24gb3IgZmxvYXRpbmcgcG9pbnQgbWF0aC4KLSAgICAgICAgLy8gVGhpcyBt
dWx0aXBsZXIgcHJvZHVjZXMgZXhhY3RseSB0aGUgc2FtZSByZXN1bHQgZm9yIGFsbCB2YWx1ZXMg
aW4gcmFuZ2UgMCAtIDI1NS4KLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZpeFBvaW50
U2hpZnQgPSAyNDsKLSAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGZpeFBvaW50TXVsdCA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPigxLjAgLyAyNTUuMCAqICgxIDw8IGZpeFBvaW50U2hpZnQp
KSArIDE7Ci0gICAgICAgIC8vIE11bHRpcGxpZXMgdW5zaWduZWQgdmFsdWUgYnkgZml4cG9pbnQg
dmFsdWUgYW5kIGNvbnZlcnRzIGJhY2sgdG8gdW5zaWduZWQuCi0gICAgICAgIHN0YXRpYyB1bnNp
Z25lZCBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkodW5zaWduZWQgZml4ZWQsIHVuc2lnbmVkIHYp
CisgICAgICAgIGlubGluZSB2b2lkIHNldFJHQkEoaW50IHgsIGludCB5LCB1bnNpZ25lZCByLCB1
bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQogICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gIChmaXhlZCAqIHYpID4+IGZpeFBvaW50U2hpZnQ7CisgICAgICAgICAgICBtX2Jh
Y2tpbmdTdG9yZS0+c2V0UkdCQSh4LCB5LCByLCBnLCBiLCBhKTsKICAgICAgICAgfQogCi0gICAg
ICAgIGlubGluZSB2b2lkIHNldFJHQkEoUGl4ZWxEYXRhKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNp
Z25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgICAgICBpbmxpbmUgdm9pZCBzZXRS
R0JBKFJHQkEzMiogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5z
aWduZWQgYSkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAm
JiBhIDwgMjU1KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFhKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICpkZXN0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhTXVsdCA9IGEgKiBmaXhQb2lu
dE11bHQ7Ci0gICAgICAgICAgICAgICAgciA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShyLCBh
bHBoYU11bHQpOwotICAgICAgICAgICAgICAgIGcgPSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHko
ZywgYWxwaGFNdWx0KTsKLSAgICAgICAgICAgICAgICBiID0gZml4UG9pbnRVbnNpZ25lZE11bHRp
cGx5KGIsIGFscGhhTXVsdCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAqZGVzdCA9IChh
IDw8IDI0IHwgciA8PCAxNiB8IGcgPDwgOCB8IGIpOworICAgICAgICAgICAgbV9iYWNraW5nU3Rv
cmUtPnNldFJHQkEoZGVzdCwgciwgZywgYiwgYSk7CiAgICAgICAgIH0KIAogI2lmIEVOQUJMRShB
UE5HKQotICAgICAgICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRpdmlkZTI1NSh1bnNpZ25lZCBh
KQorICAgICAgICBpbmxpbmUgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIs
IHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiAoYSArIChhID4+IDgpICsgMSkgPj4gODsKLSAgICAgICAgfQotCi0gICAgICAg
IGlubGluZSB2b2lkIG92ZXJSR0JBKFBpeGVsRGF0YSogZGVzdCwgdW5zaWduZWQgciwgdW5zaWdu
ZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYg
KCFhKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgaWYgKGEgPCAyNTUp
IHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBhRGVzdCA9ICgoKmRlc3QpID4+IDI0KSAmIDI1
NTsKLSAgICAgICAgICAgICAgICBpZiAoYURlc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgckRlc3QgPSAoKCpkZXN0KSA+PiAxNikgJiAyNTU7Ci0gICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGdEZXN0ID0gKCgqZGVzdCkgPj4gOCkgJiAyNTU7Ci0gICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGJEZXN0ID0gKCpkZXN0KSAmIDI1NTsKLSAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgYUF1eCA9IDI1NSAtIGE7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9wcmVt
dWx0aXBseUFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByRGVzdCA9IGRpdmlkZTI1
NShyRGVzdCAqIGFEZXN0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdEZXN0ID0gZGl2aWRl
MjU1KGdEZXN0ICogYURlc3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgYkRlc3QgPSBkaXZp
ZGUyNTUoYkRlc3QgKiBhRGVzdCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgciA9IGRpdmlkZTI1NShyICogYSArIHJEZXN0ICogYUF1eCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGcgPSBkaXZpZGUyNTUoZyAqIGEgKyBnRGVzdCAqIGFBdXgpOwotICAgICAgICAg
ICAgICAgICAgICBiID0gZGl2aWRlMjU1KGIgKiBhICsgYkRlc3QgKiBhQXV4KTsKLSAgICAgICAg
ICAgICAgICAgICAgYSArPSBkaXZpZGUyNTUoYURlc3QgKiBhQXV4KTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHIgPSAociAqIDI1NSArIGEgLSAxKSAvIGE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnID0g
KGcgKiAyNTUgKyBhIC0gMSkgLyBhOwotICAgICAgICAgICAgICAgICAgICAgICAgYiA9IChiICog
MjU1ICsgYSAtIDEpIC8gYTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAobV9wcmVtdWx0aXBseUFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgIHIg
PSBkaXZpZGUyNTUociAqIGEpOwotICAgICAgICAgICAgICAgICAgICBnID0gZGl2aWRlMjU1KGcg
KiBhKTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IGRpdmlkZTI1NShiICogYSk7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRlc3QgPSAoYSA8PCAyNCB8
IHIgPDwgMTYgfCBnIDw8IDggfCBiKTsKKyAgICAgICAgICAgIG1fYmFja2luZ1N0b3JlLT5vdmVy
UkdCQShkZXN0LCByLCBnLCBiLCBhKTsKICAgICAgICAgfQogI2VuZGlmCiAKICAgICBwcml2YXRl
OgotICAgICAgICBpbnQgd2lkdGgoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gbV9zaXplLndpZHRoKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpbnQgaGVpZ2h0KCkgY29u
c3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIFZlY3RvcjxQaXhlbERhdGE+IG1fYmFja2luZ1N0b3JlOwotICAgICAg
ICBQaXhlbERhdGEqIG1fYnl0ZXM7IC8vIFRoZSBtZW1vcnkgaXMgYmFja2VkIGJ5IG1fYmFja2lu
Z1N0b3JlLgotICAgICAgICBJbnRTaXplIG1fc2l6ZTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PEltYWdlQmFja2luZ1N0b3JlPiBtX2JhY2tpbmdTdG9yZTsKICAgICAgICAgYm9vbCBtX2hhc0Fs
cGhhOwotICAgICAgICBJbnRSZWN0IG1fb3JpZ2luYWxGcmFtZVJlY3Q7IC8vIFRoaXMgd2lsbCBh
bHdheXMganVzdCBiZSB0aGUgZW50aXJlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gYnVmZmVyIGV4Y2VwdCBmb3IgR0lGIGZyYW1lcyB3aG9zZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yaWdpbmFsIHJlY3Qgd2FzIHNtYWxsZXIgdGhh
biB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvdmVyYWxsIGlt
YWdlIHNpemUuCiAgICAgICAgIEZyYW1lU3RhdHVzIG1fc3RhdHVzOwogICAgICAgICB1bnNpZ25l
ZCBtX2R1cmF0aW9uOwogICAgICAgICBGcmFtZURpc3Bvc2FsTWV0aG9kIG1fZGlzcG9zYWxNZXRo
b2Q7CkBAIC0yODcsMTEgKzIxMCwxMSBAQCB1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hh
cj47CiAKICAgICAgICAgLy8gUmV0dXJucyB3aGV0aGVyIHRoZSBzaXplIGlzIGxlZ2FsIChpLmUu
IG5vdCBnb2luZyB0byByZXN1bHQgaW4KICAgICAgICAgLy8gb3ZlcmZsb3cgZWxzZXdoZXJlKS4g
IElmIG5vdCwgbWFya3MgZGVjb2RpbmcgYXMgZmFpbGVkLgotICAgICAgICB2aXJ0dWFsIGJvb2wg
c2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQorICAgICAgICB2aXJ0dWFs
IGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAoaXNPdmVyU2l6ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgICAgIGlmIChJbWFnZUJh
Y2tpbmdTdG9yZTo6aXNPdmVyU2l6ZShzaXplKSkKICAgICAgICAgICAgICAgICByZXR1cm4gc2V0
RmFpbGVkKCk7Ci0gICAgICAgICAgICBtX3NpemUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOwor
ICAgICAgICAgICAgbV9zaXplID0gc2l6ZTsKICAgICAgICAgICAgIG1fc2l6ZUF2YWlsYWJsZSA9
IHRydWU7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMzg2LDE1ICsz
MDksNiBAQCB1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hhcj47CiAgICAgICAgIEltYWdl
T3JpZW50YXRpb24gbV9vcmllbnRhdGlvbjsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIC8vIFNv
bWUgY29kZSBwYXRocyBjb21wdXRlIHRoZSBzaXplIG9mIHRoZSBpbWFnZSBhcyAid2lkdGggKiBo
ZWlnaHQgKiA0IgotICAgICAgICAvLyBhbmQgcmV0dXJuIGl0IGFzIGEgKHNpZ25lZCkgaW50LiAg
QXZvaWQgb3ZlcmZsb3cuCi0gICAgICAgIHN0YXRpYyBib29sIGlzT3ZlclNpemUodW5zaWduZWQg
d2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKLSAgICAgICAgewotICAgICAgICAgICAgdW5zaWduZWQg
bG9uZyBsb25nIHRvdGFsX3NpemUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KHdp
ZHRoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KGhlaWdodCk7Ci0gICAgICAgICAgICByZXR1cm4gdG90
YWxfc2l6ZSA+ICgoMSA8PCAyOSkgLSAxKTsKLSAgICAgICAgfQotCiAgICAgICAgIEludFNpemUg
bV9zaXplOwogICAgICAgICBib29sIG1fc2l6ZUF2YWlsYWJsZSB7IGZhbHNlIH07CiAjaWYgRU5B
QkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVh
ZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvYm1wL0JNUEltYWdlUmVhZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgs
NyArNzgsNyBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpkZWNvZGVCTVAoYm9vbCBvbmx5CiAgICAg
Ly8gSW5pdGlhbGl6ZSB0aGUgZnJhbWVidWZmZXIgaWYgbmVlZGVkLgogICAgIEFTU0VSVChtX2J1
ZmZlcik7ICAvLyBQYXJlbnQgc2hvdWxkIHNldCB0aGlzIGJlZm9yZSBhc2tpbmcgdXMgdG8gZGVj
b2RlIQogICAgIGlmIChtX2J1ZmZlci0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0
eSkgewotICAgICAgICBpZiAoIW1fYnVmZmVyLT5zZXRTaXplKG1fcGFyZW50LT5zaXplKCkud2lk
dGgoKSwgbV9wYXJlbnQtPnNpemUoKS5oZWlnaHQoKSkpCisgICAgICAgIGlmICghbV9idWZmZXIt
PnNldFNpemUobV9wYXJlbnQtPnNpemUoKSkpCiAgICAgICAgICAgICByZXR1cm4gbV9wYXJlbnQt
PnNldEZhaWxlZCgpOyAvLyBVbmFibGUgdG8gYWxsb2NhdGUuCiAgICAgICAgIG1fYnVmZmVyLT5z
ZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKICAgICAgICAgLy8gc2V0U2l6ZSgp
IGNhbGxzIGVyYXNlQVJHQigpLCB3aGljaCByZXNldHMgdGhlIGFscGhhIGZsYWcsIHNvIHdlIGZv
cmNlCkBAIC04Niw5ICs4Niw2IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OmRlY29kZUJNUChib29s
IG9ubHkKICAgICAgICAgLy8gdGhlc2UgMHMgY291bGQgYWN0dWFsbHkgc2hvdyB0aHJvdWdoLgog
ICAgICAgICBtX2J1ZmZlci0+c2V0SGFzQWxwaGEoZmFsc2UpOwogCi0gICAgICAgIC8vIEZvciBC
TVBzLCB0aGUgZnJhbWUgYWx3YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2UuCi0gICAgICAgIG1f
YnVmZmVyLT5zZXRPcmlnaW5hbEZyYW1lUmVjdChJbnRSZWN0KEludFBvaW50KCksIG1fcGFyZW50
LT5zaXplKCkpKTsKLQogICAgICAgICBpZiAoIW1faXNUb3BEb3duKQogICAgICAgICAgICAgbV9j
b29yZC5zZXRZKG1fcGFyZW50LT5zaXplKCkuaGVpZ2h0KCkgLSAxKTsKICAgICB9CkBAIC0xNzEs
NyArMTY4LDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc0luZm9IZWFkZXIoKQogICAg
ICAgICByZXR1cm4gbV9wYXJlbnQtPnNldEZhaWxlZCgpOwogCiAgICAgLy8gU2V0IG91ciBzaXpl
LgotICAgIGlmICghbV9wYXJlbnQtPnNldFNpemUobV9pbmZvSGVhZGVyLmJpV2lkdGgsIG1faW5m
b0hlYWRlci5iaUhlaWdodCkpCisgICAgaWYgKCFtX3BhcmVudC0+c2V0U2l6ZShJbnRTaXplKG1f
aW5mb0hlYWRlci5iaVdpZHRoLCBtX2luZm9IZWFkZXIuYmlIZWlnaHQpKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgLy8gRm9yIHBhbGV0dGVkIGltYWdlcywgYml0bWFwcyBjYW4gc2V0
IGJpQ2xyVXNlZCB0byAwIHRvIG1lYW4gImFsbApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VCYWNraW5nU3RvcmVDYWlyby5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1h
Z2VCYWNraW5nU3RvcmVDYWlyby5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VCYWNraW5nU3RvcmVDYWlyby5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIklt
YWdlQmFja2luZ1N0b3JlLmgiCisKKyNpbmNsdWRlIDxjYWlyby5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK05hdGl2ZUltYWdlUHRyIEltYWdlQmFja2luZ1N0b3JlOjppbWFnZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9k
YXRhKAorICAgICAgICByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihjb25zdF9jYXN0
PFJHQkEzMio+KG1fcGl4ZWxzUHRyKSksCisgICAgICAgIENBSVJPX0ZPUk1BVF9BUkdCMzIsIHNp
emUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCksIHNpemUoKS53aWR0aCgpICogc2l6ZW9mKFJH
QkEzMikpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRklt
YWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02MCwxMiArNjAsMTIgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJs
ZSgpCiAgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCk7CiB9CiAKLWJv
b2wgR0lGSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWln
aHQpCitib29sIEdJRkltYWdlRGVjb2Rlcjo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQog
ewotICAgIGlmIChJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpICYmIHNpemUoKSA9PSBJ
bnRTaXplKHdpZHRoLCBoZWlnaHQpKQorICAgIGlmIChJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWls
YWJsZSgpICYmIHRoaXMtPnNpemUoKSA9PSBzaXplKQogICAgICAgICByZXR1cm4gdHJ1ZTsKIAot
ICAgIGlmICghSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHdpZHRoLCBoZWlnaHQpKQorICAgIGlmICgh
SW1hZ2VEZWNvZGVyOjpzZXRTaXplKHNpemUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKQEAgLTIxMywxMCArMjEzLDEwIEBAIGJv
b2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnMKIAogICAgIC8vIEluaXRpYWxp
emUgdGhlIGZyYW1lIGlmIG5lY2Vzc2FyeS4KICAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBtX2Zy
YW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07Ci0gICAgaWYgKCgoYnVmZmVyLnN0YXR1cygpID09
IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkp
IHx8ICFidWZmZXIuaGFzUGl4ZWxEYXRhKCkpCisgICAgaWYgKCgoYnVmZmVyLnN0YXR1cygpID09
IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJbmRleCkp
IHx8ICFidWZmZXIuaGFzQmFja2luZ1N0b3JlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAot
ICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogY3VycmVudEFkZHJlc3MgPSBidWZmZXIuZ2V0QWRk
cih4QmVnaW4sIHlCZWdpbik7CisgICAgUkdCQTMyKiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZlci5n
ZXRBZGRyKHhCZWdpbiwgeUJlZ2luKTsKICAgICAvLyBXcml0ZSBvbmUgcm93J3Mgd29ydGggb2Yg
ZGF0YSBpbnRvIHRoZSBmcmFtZS4gIAogICAgIGZvciAoaW50IHggPSB4QmVnaW47IHggPCB4RW5k
OyArK3gpIHsKICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBzb3VyY2VWYWx1ZSA9IHJvd0J1
ZmZlclsobV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4KSAtIGZyYW1lQ29udGV4dC0+
eE9mZnNldF07CkBAIC0zNjEsNyArMzYxLDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRG
cmFtZUJ1ZmZlcih1bgogCiAgICAgaWYgKCFmcmFtZUluZGV4KSB7CiAgICAgICAgIC8vIFRoaXMg
aXMgdGhlIGZpcnN0IGZyYW1lLCBzbyB3ZSdyZSBub3QgcmVseWluZyBvbiBhbnkgcHJldmlvdXMg
ZGF0YS4KLSAgICAgICAgaWYgKCFidWZmZXItPnNldFNpemUoc2NhbGVkU2l6ZSgpLndpZHRoKCks
IHNjYWxlZFNpemUoKS5oZWlnaHQoKSkpCisgICAgICAgIGlmICghYnVmZmVyLT5zZXRTaXplKHNj
YWxlZFNpemUoKSkpCiAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgLy8gVGhlIHN0YXJ0aW5nIHN0YXRlIGZvciB0aGlzIGZyYW1lIGRlcGVuZHMg
b24gdGhlIHByZXZpb3VzIGZyYW1lJ3MKQEAgLTM4NywxMiArMzg3LDEyIEBAIGJvb2wgR0lGSW1h
Z2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW4KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIC8vIFdlIHdhbnQgdG8gY2xlYXIgdGhlIHByZXZpb3VzIGZyYW1lIHRvIHRyYW5zcGFyZW50
LCB3aXRob3V0CiAgICAgICAgICAgICAvLyBhZmZlY3RpbmcgcGl4ZWxzIGluIHRoZSBpbWFnZSBv
dXRzaWRlIG9mIHRoZSBmcmFtZS4KLSAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHByZXZSZWN0
ID0gcHJldkJ1ZmZlci0+b3JpZ2luYWxGcmFtZVJlY3QoKTsKKyAgICAgICAgICAgIEludFJlY3Qg
cHJldlJlY3QgPSBwcmV2QnVmZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgpOwogICAgICAgICAgICAg
Y29uc3QgSW50U2l6ZSYgYnVmZmVyU2l6ZSA9IHNjYWxlZFNpemUoKTsKICAgICAgICAgICAgIGlm
ICghZnJhbWVJbmRleCB8fCBwcmV2UmVjdC5jb250YWlucyhJbnRSZWN0KEludFBvaW50KCksIHNj
YWxlZFNpemUoKSkpKSB7CiAgICAgICAgICAgICAgICAgLy8gQ2xlYXJpbmcgdGhlIGZpcnN0IGZy
YW1lLCBvciBhIGZyYW1lIHRoZSBzaXplIG9mIHRoZSB3aG9sZQogICAgICAgICAgICAgICAgIC8v
IGltYWdlLCByZXN1bHRzIGluIGEgY29tcGxldGVseSBlbXB0eSBpbWFnZS4KLSAgICAgICAgICAg
ICAgICBpZiAoIWJ1ZmZlci0+c2V0U2l6ZShidWZmZXJTaXplLndpZHRoKCksIGJ1ZmZlclNpemUu
aGVpZ2h0KCkpKQorICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLT5zZXRTaXplKGJ1ZmZlclNp
emUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIENvcHkgdGhlIHdob2xlIHByZXZpb3VzIGJ1
ZmZlciwgdGhlbiBjbGVhciBqdXN0IGl0cyBmcmFtZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNv
ZGVyLmgJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyAr
NDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFN0cmluZyBmaWxlbmFtZUV4dGVu
c2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJnaWYiOyB9CiAgICAgICAgIHZvaWQgc2V0
RGF0YShTaGFyZWRCdWZmZXImIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKSBvdmVycmlkZTsK
ICAgICAgICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBvdmVycmlkZTsKLSAgICAgICAgYm9vbCBz
ZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpIG92ZXJyaWRlOworICAgICAg
ICBib29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwogICAgICAgICBzaXplX3Qg
ZnJhbWVDb3VudCgpIG92ZXJyaWRlOwogICAgICAgICBpbnQgcmVwZXRpdGlvbkNvdW50KCkgY29u
c3Qgb3ZlcnJpZGU7CiAgICAgICAgIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXpl
X3QgaW5kZXgpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwCShyZXZp
c2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9n
aWYvR0lGSW1hZ2VSZWFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDcsNyArNDQ3LDcgQEAg
Ym9vbCBHSUZJbWFnZVJlYWRlcjo6cGFyc2Uoc2l6ZV90IGRhdGFQbwogCiAgICAgICAgICAgICAv
LyBDQUxMQkFDSzogSW5mb3JtIHRoZSBkZWNvZGVycGx1Z2luIG9mIG91ciBzaXplLgogICAgICAg
ICAgICAgLy8gTm90ZTogQSBzdWJzZXF1ZW50IGZyYW1lIG1pZ2h0IGhhdmUgZGltZW5zaW9ucyBs
YXJnZXIgdGhhbiB0aGUgInNjcmVlbiIgZGltZW5zaW9ucy4KLSAgICAgICAgICAgIGlmIChtX2Ns
aWVudCAmJiAhbV9jbGllbnQtPnNldFNpemUobV9zY3JlZW5XaWR0aCwgbV9zY3JlZW5IZWlnaHQp
KQorICAgICAgICAgICAgaWYgKG1fY2xpZW50ICYmICFtX2NsaWVudC0+c2V0U2l6ZShXZWJDb3Jl
OjpJbnRTaXplKG1fc2NyZWVuV2lkdGgsIG1fc2NyZWVuSGVpZ2h0KSkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBtX3NjcmVlbkJnY29sb3IgPSBjdXJyZW50
Q29tcG9uZW50WzVdOwpAQCAtNjY0LDcgKzY2NCw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnBh
cnNlKHNpemVfdCBkYXRhUG8KICAgICAgICAgICAgICAgICB5T2Zmc2V0ID0gMDsKIAogICAgICAg
ICAgICAgICAgIC8vIENBTExCQUNLOiBJbmZvcm0gdGhlIGRlY29kZXJwbHVnaW4gb2Ygb3VyIHNp
emUuCi0gICAgICAgICAgICAgICAgaWYgKG1fY2xpZW50ICYmICFtX2NsaWVudC0+c2V0U2l6ZSht
X3NjcmVlbldpZHRoLCBtX3NjcmVlbkhlaWdodCkpCisgICAgICAgICAgICAgICAgaWYgKG1fY2xp
ZW50ICYmICFtX2NsaWVudC0+c2V0U2l6ZShXZWJDb3JlOjpJbnRTaXplKG1fc2NyZWVuV2lkdGgs
IG1fc2NyZWVuSGVpZ2h0KSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9u
IDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9J
Q09JbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxMSArODgsMTEgQEAgSW50
U2l6ZSBJQ09JbWFnZURlY29kZXI6OmZyYW1lU2l6ZUF0SW5kZQogICAgIHJldHVybiAoaW5kZXgg
JiYgKGluZGV4IDwgbV9kaXJFbnRyaWVzLnNpemUoKSkpID8gbV9kaXJFbnRyaWVzW2luZGV4XS5t
X3NpemUgOiBzaXplKCk7CiB9CiAKLWJvb2wgSUNPSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHVuc2ln
bmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCitib29sIElDT0ltYWdlRGVjb2Rlcjo6c2V0U2l6
ZShjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIC8vIFRoZSBzaXplIGNhbGN1bGF0ZWQgaW5z
aWRlIHRoZSBCTVBJbWFnZVJlYWRlciBoYWQgYmV0dGVyIG1hdGNoIHRoZSBvbmUgaW4KICAgICAv
LyB0aGUgaWNvbiBkaXJlY3RvcnkuCi0gICAgcmV0dXJuIG1fZnJhbWVTaXplLmlzRW1wdHkoKSA/
IEltYWdlRGVjb2Rlcjo6c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSA6ICgoSW50U2l6ZSh3aWR0aCwg
aGVpZ2h0KSA9PSBtX2ZyYW1lU2l6ZSkgfHwgc2V0RmFpbGVkKCkpOworICAgIHJldHVybiBtX2Zy
YW1lU2l6ZS5pc0VtcHR5KCkgPyBJbWFnZURlY29kZXI6OnNldFNpemUoc2l6ZSkgOiAoKHNpemUg
PT0gbV9mcmFtZVNpemUpIHx8IHNldEZhaWxlZCgpKTsKIH0KIAogc2l6ZV90IElDT0ltYWdlRGVj
b2Rlcjo6ZnJhbWVDb3VudCgpCkBAIC0yNzksNyArMjc5LDcgQEAgYm9vbCBJQ09JbWFnZURlY29k
ZXI6OnByb2Nlc3NEaXJlY3RvcnlFbgogICAgIGNvbnN0IEljb25EaXJlY3RvcnlFbnRyeSYgZGly
RW50cnkgPSBtX2RpckVudHJpZXMuZmlyc3QoKTsKICAgICAvLyBUZWNobmljYWxseSwgdGhpcyBu
ZXh0IGNhbGwgc2hvdWxkbid0IGJlIGFibGUgdG8gZmFpbCwgc2luY2UgdGhlIHdpZHRoCiAgICAg
Ly8gYW5kIGhlaWdodCBoZXJlIGFyZSBlYWNoIDw9IDI1NiwgYW5kIHxtX2ZyYW1lU2l6ZXwgaXMg
ZW1wdHkuCi0gICAgcmV0dXJuIHNldFNpemUoZGlyRW50cnkubV9zaXplLndpZHRoKCksIGRpckVu
dHJ5Lm1fc2l6ZS5oZWlnaHQoKSk7CisgICAgcmV0dXJuIHNldFNpemUoZGlyRW50cnkubV9zaXpl
KTsKIH0KIAogSUNPSW1hZ2VEZWNvZGVyOjpJY29uRGlyZWN0b3J5RW50cnkgSUNPSW1hZ2VEZWNv
ZGVyOjpyZWFkRGlyZWN0b3J5RW50cnkoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaAko
cmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBvdmVy
cmlkZTsKICAgICAgICAgSW50U2l6ZSBzaXplKCkgb3ZlcnJpZGU7CiAgICAgICAgIEludFNpemUg
ZnJhbWVTaXplQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwpIG92ZXJyaWRlOwotICAg
ICAgICBib29sIHNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkgb3ZlcnJp
ZGU7CisgICAgICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7CiAgICAg
ICAgIHNpemVfdCBmcmFtZUNvdW50KCkgb3ZlcnJpZGU7CiAgICAgICAgIEltYWdlRnJhbWUqIGZy
YW1lQnVmZmVyQXRJbmRleChzaXplX3QpIG92ZXJyaWRlOwogICAgICAgICAvLyBDQVVUSU9OOiBz
ZXRGYWlsZWQoKSBkZWxldGVzIGFsbCByZWFkZXJzIGFuZCBkZWNvZGVycy4gIEJlIGNhcmVmdWwg
dG8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBF
R0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1h
Z2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIyLDcgKzMyMiw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIG1fc3RhdGUgPSBKUEVHX1NUQVJUX0RFQ09NUFJFU1M7CiAKICAgICAgICAg
ICAgIC8vIFdlIGNhbiBmaWxsIGluIHRoZSBzaXplIG5vdyB0aGF0IHRoZSBoZWFkZXIgaXMgYXZh
aWxhYmxlLgotICAgICAgICAgICAgaWYgKCFtX2RlY29kZXItPnNldFNpemUobV9pbmZvLmltYWdl
X3dpZHRoLCBtX2luZm8uaW1hZ2VfaGVpZ2h0KSkKKyAgICAgICAgICAgIGlmICghbV9kZWNvZGVy
LT5zZXRTaXplKEludFNpemUobV9pbmZvLmltYWdlX3dpZHRoLCBtX2luZm8uaW1hZ2VfaGVpZ2h0
KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBtX2RlY29k
ZXItPnNldE9yaWVudGF0aW9uKHJlYWRJbWFnZU9yaWVudGF0aW9uKGluZm8oKSkpOwpAQCAtNTE5
LDkgKzUxOSw5IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkKICAg
ICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsKIH0KIAotYm9vbCBKUEVH
SW1hZ2VEZWNvZGVyOjpzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCiti
b29sIEpQRUdJbWFnZURlY29kZXI6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAg
ICBpZiAoIUltYWdlRGVjb2Rlcjo6c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICBpZiAoIUlt
YWdlRGVjb2Rlcjo6c2V0U2l6ZShzaXplKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
cHJlcGFyZVNjYWxlRGF0YUlmTmVjZXNzYXJ5KCk7CkBAIC01NTEsNyArNTUxLDcgQEAgYm9vbCBK
UEVHSW1hZ2VEZWNvZGVyOjpzZXRGYWlsZWQoKQogfQogCiB0ZW1wbGF0ZSA8Sl9DT0xPUl9TUEFD
RSBjb2xvclNwYWNlPgotdm9pZCBzZXRQaXhlbChJbWFnZUZyYW1lJiBidWZmZXIsIEltYWdlRnJh
bWU6OlBpeGVsRGF0YSogY3VycmVudEFkZHJlc3MsIEpTQU1QQVJSQVkgc2FtcGxlcywgaW50IGNv
bHVtbikKK3ZvaWQgc2V0UGl4ZWwoSW1hZ2VGcmFtZSYgYnVmZmVyLCBSR0JBMzIqIGN1cnJlbnRB
ZGRyZXNzLCBKU0FNUEFSUkFZIHNhbXBsZXMsIGludCBjb2x1bW4pCiB7CiAgICAgSlNBTVBMRSog
anNhbXBsZSA9ICpzYW1wbGVzICsgY29sdW1uICogKGNvbG9yU3BhY2UgPT0gSkNTX1JHQiA/IDMg
OiA0KTsKIApAQCAtNTk0LDcgKzU5NCw3IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0
U2NhbmxpbmVzKEkKICAgICAgICAgaWYgKGRlc3RZIDwgMCkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogY3VycmVudEFkZHJlc3MgPSBidWZm
ZXIuZ2V0QWRkcigwLCBkZXN0WSk7CisgICAgICAgIFJHQkEzMiogY3VycmVudEFkZHJlc3MgPSBi
dWZmZXIuZ2V0QWRkcigwLCBkZXN0WSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lk
dGg7ICsreCkgewogICAgICAgICAgICAgc2V0UGl4ZWw8Y29sb3JTcGFjZT4oYnVmZmVyLCBjdXJy
ZW50QWRkcmVzcywgc2FtcGxlcywgaXNTY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4KTsK
ICAgICAgICAgICAgICsrY3VycmVudEFkZHJlc3M7CkBAIC02MTcsMTUgKzYxNywxMiBAQCBib29s
IEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcygpCiAgICAgLy8gSW5pdGlhbGl6ZSB0
aGUgZnJhbWVidWZmZXIgaWYgbmVlZGVkLgogICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJh
bWVCdWZmZXJDYWNoZVswXTsKICAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IEltYWdlRnJhbWU6
OkZyYW1lRW1wdHkpIHsKLSAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzY2FsZWRTaXplKCku
d2lkdGgoKSwgc2NhbGVkU2l6ZSgpLmhlaWdodCgpKSkKKyAgICAgICAgaWYgKCFidWZmZXIuc2V0
U2l6ZShzY2FsZWRTaXplKCkpKQogICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAg
ICAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CiAgICAgICAg
IC8vIFRoZSBidWZmZXIgaXMgdHJhbnNwYXJlbnQgb3V0c2lkZSB0aGUgZGVjb2RlZCBhcmVhIHdo
aWxlIHRoZSBpbWFnZSBpcwogICAgICAgICAvLyBsb2FkaW5nLiBUaGUgY29tcGxldGVkIGltYWdl
IHdpbGwgYmUgbWFya2VkIGZ1bGx5IG9wYXF1ZSBpbiBqcGVnQ29tcGxldGUoKS4KICAgICAgICAg
YnVmZmVyLnNldEhhc0FscGhhKHRydWUpOwotCi0gICAgICAgIC8vIEZvciBKUEVHcywgdGhlIGZy
YW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgotICAgICAgICBidWZmZXIuc2V0T3Jp
Z2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKTsKICAgICB9CiAKICAg
ICBqcGVnX2RlY29tcHJlc3Nfc3RydWN0KiBpbmZvID0gbV9yZWFkZXItPmluZm8oKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVj
b2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIC8vIEltYWdlRGVjb2RlcgogICAgICAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiAianBnIjsgfQogICAgICAgICBib29sIGlzU2l6ZUF2YWls
YWJsZSgpIG92ZXJyaWRlOwotICAgICAgICBib29sIHNldFNpemUodW5zaWduZWQgd2lkdGgsIHVu
c2lnbmVkIGhlaWdodCkgb3ZlcnJpZGU7CisgICAgICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRT
aXplJikgb3ZlcnJpZGU7CiAgICAgICAgIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChz
aXplX3QgaW5kZXgpIG92ZXJyaWRlOwogICAgICAgICAvLyBDQVVUSU9OOiBzZXRGYWlsZWQoKSBk
ZWxldGVzIHxtX3JlYWRlcnwuICBCZSBjYXJlZnVsIHRvIGF2b2lkCiAgICAgICAgIC8vIGFjY2Vz
c2luZyBkZWxldGVkIG1lbW9yeSwgZXNwZWNpYWxseSB3aGVuIGNhbGxpbmcgdGhpcyBmcm9tIGlu
c2lkZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BO
R0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDIwNTY4NCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURl
Y29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzUsOSArMjM1LDkgQEAgYm9vbCBQTkdJbWFn
ZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpCiAgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6aXNT
aXplQXZhaWxhYmxlKCk7CiB9CiAKLWJvb2wgUE5HSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHVuc2ln
bmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCitib29sIFBOR0ltYWdlRGVjb2Rlcjo6c2V0U2l6
ZShjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIGlmICghSW1hZ2VEZWNvZGVyOjpzZXRTaXpl
KHdpZHRoLCBoZWlnaHQpKQorICAgIGlmICghSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHNpemUpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3Nhcnko
KTsKQEAgLTI5NSw3ICsyOTUsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxh
YmxlKCkKICAgICAvLyB3aWxsIGNlYXNlIHRvIGV4aXN0LiAgTm90ZSB0aGF0IHdlJ2xsIHN0aWxs
IHByb3Blcmx5IHNldCB0aGUgZmFpbHVyZSBmbGFnCiAgICAgLy8gaW4gdGhpcyBjYXNlIGFzIHNv
b24gYXMgd2UgbG9uZ2ptcCgpLgogICAgIG1fZG9Ob3RoaW5nT25GYWlsdXJlID0gdHJ1ZTsKLSAg
ICBib29sIHJlc3VsdCA9IHNldFNpemUod2lkdGgsIGhlaWdodCk7CisgICAgYm9vbCByZXN1bHQg
PSBzZXRTaXplKEludFNpemUod2lkdGgsIGhlaWdodCkpOwogICAgIG1fZG9Ob3RoaW5nT25GYWls
dXJlID0gZmFsc2U7CiAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAgbG9uZ2ptcChKTVBCVUYo
cG5nKSwgMSk7CkBAIC00MTEsMTkgKzQxMSwxOSBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aGVh
ZGVyQXZhaWxhYmxlKCkKICAgICB9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJH
QihJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCkKK3N0YXRpYyBp
bmxpbmUgdm9pZCBzZXRQaXhlbFJHQihSR0JBMzIqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCkKIHsK
ICAgICAqZGVzdCA9IDB4RkYwMDAwMDBVIHwgcGl4ZWxbMF0gPDwgMTYgfCBwaXhlbFsxXSA8PCA4
IHwgcGl4ZWxbMl07CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJHQkEoSW1hZ2VG
cmFtZTo6UGl4ZWxEYXRhKiBkZXN0LCBwbmdfYnl0ZXAgcGl4ZWwsIHVuc2lnbmVkIGNoYXImIG5v
blRyaXZpYWxBbHBoYU1hc2spCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxSR0JBKFJHQkEz
MiogZGVzdCwgcG5nX2J5dGVwIHBpeGVsLCB1bnNpZ25lZCBjaGFyJiBub25Ucml2aWFsQWxwaGFN
YXNrKQogewogICAgIHVuc2lnbmVkIGNoYXIgYSA9IHBpeGVsWzNdOwogICAgICpkZXN0ID0gYSA8
PCAyNCB8IHBpeGVsWzBdIDw8IDE2IHwgcGl4ZWxbMV0gPDwgOCB8IHBpeGVsWzJdOwogICAgIG5v
blRyaXZpYWxBbHBoYU1hc2sgfD0gKDI1NSAtIGEpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQg
c2V0UGl4ZWxQcmVtdWx0aXBsaWVkUkdCQShJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGRlc3QsIHBu
Z19ieXRlcCBwaXhlbCwgdW5zaWduZWQgY2hhciYgbm9uVHJpdmlhbEFscGhhTWFzaykKK3N0YXRp
YyBpbmxpbmUgdm9pZCBzZXRQaXhlbFByZW11bHRpcGxpZWRSR0JBKFJHQkEzMiogZGVzdCwgcG5n
X2J5dGVwIHBpeGVsLCB1bnNpZ25lZCBjaGFyJiBub25Ucml2aWFsQWxwaGFNYXNrKQogewogICAg
IHVuc2lnbmVkIGNoYXIgYSA9IHBpeGVsWzNdOwogICAgIHVuc2lnbmVkIGNoYXIgciA9IGZhc3RE
aXZpZGVCeTI1NShwaXhlbFswXSAqIGEpOwpAQCAtNDQ3LDcgKzQ0Nyw3IEBAIHZvaWQgUE5HSW1h
Z2VEZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWcKICAgICBJbWFnZUZyYW1lJiBidWZmZXIgPSBt
X2ZyYW1lQnVmZmVyQ2FjaGVbbV9jdXJyZW50RnJhbWVdOwogICAgIGlmIChidWZmZXIuc3RhdHVz
KCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgewogICAgICAgICBwbmdfc3RydWN0cCBwbmcg
PSBtX3JlYWRlci0+cG5nUHRyKCk7Ci0gICAgICAgIGlmICghYnVmZmVyLnNldFNpemUoc2NhbGVk
U2l6ZSgpLndpZHRoKCksIHNjYWxlZFNpemUoKS5oZWlnaHQoKSkpIHsKKyAgICAgICAgaWYgKCFi
dWZmZXIuc2V0U2l6ZShzY2FsZWRTaXplKCkpKSB7CiAgICAgICAgICAgICBsb25nam1wKEpNUEJV
RihwbmcpLCAxKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNDY5LDEwICs0
NjksNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnCiAjaWYgRU5B
QkxFKEFQTkcpCiAgICAgICAgIGlmIChtX2N1cnJlbnRGcmFtZSkKICAgICAgICAgICAgIGluaXRG
cmFtZUJ1ZmZlcihtX2N1cnJlbnRGcmFtZSk7Ci0gICAgICAgIGVsc2UKICNlbmRpZgotICAgICAg
ICAvLyBGb3IgUE5HcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgot
ICAgICAgICBidWZmZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBz
aXplKCkpKTsKICAgICB9CiAKICAgICAvKiBsaWJwbmcgY29tbWVudHMgKGhlcmUgdG8gZXhwbGFp
biB3aGF0IGZvbGxvd3MpLgpAQCAtNTMxLDcgKzUyOCw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVy
Ojpyb3dBdmFpbGFibGUodW5zaWcKICAgICB9CiAKICAgICAvLyBXcml0ZSB0aGUgZGVjb2RlZCBy
b3cgcGl4ZWxzIHRvIHRoZSBmcmFtZSBidWZmZXIuCi0gICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRh
KiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoMCwgeSk7CisgICAgUkdCQTMyKiBhZGRyZXNzID0g
YnVmZmVyLmdldEFkZHIoMCwgeSk7CiAgICAgaW50IHdpZHRoID0gc2NhbGVkU2l6ZSgpLndpZHRo
KCk7CiAgICAgdW5zaWduZWQgY2hhciBub25Ucml2aWFsQWxwaGFNYXNrID0gMDsKIApAQCAtODIw
LDcgKzgxNyw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIoc2kKICAg
ICB9IGVsc2UgewogICAgICAgICAvLyBXZSB3YW50IHRvIGNsZWFyIHRoZSBwcmV2aW91cyBmcmFt
ZSB0byB0cmFuc3BhcmVudCwgd2l0aG91dAogICAgICAgICAvLyBhZmZlY3RpbmcgcGl4ZWxzIGlu
IHRoZSBpbWFnZSBvdXRzaWRlIG9mIHRoZSBmcmFtZS4KLSAgICAgICAgY29uc3QgSW50UmVjdCYg
cHJldlJlY3QgPSBwcmV2QnVmZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgpOworICAgICAgICBJbnRS
ZWN0IHByZXZSZWN0ID0gcHJldkJ1ZmZlci0+b3JpZ2luYWxGcmFtZVJlY3QoKTsKICAgICAgICAg
aWYgKCFmcmFtZUluZGV4IHx8IHByZXZSZWN0LmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwg
c2NhbGVkU2l6ZSgpKSkpIHsKICAgICAgICAgICAgIC8vIENsZWFyaW5nIHRoZSBmaXJzdCBmcmFt
ZSwgb3IgYSBmcmFtZSB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUKICAgICAgICAgICAgIC8vIGltYWdl
LCByZXN1bHRzIGluIGEgY29tcGxldGVseSBlbXB0eSBpbWFnZS4KQEAgLTg0NCw3ICs4NDEsNyBA
QCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAgICAgcG5nX2J5dGVwIGlu
dGVybGFjZUJ1ZmZlciA9IG1fcmVhZGVyLT5pbnRlcmxhY2VCdWZmZXIoKTsKIAogICAgIGlmICht
X2N1cnJlbnRGcmFtZSAmJiBpbnRlcmxhY2VCdWZmZXIpIHsKLSAgICAgICAgY29uc3QgSW50UmVj
dCYgcmVjdCA9IGJ1ZmZlci5vcmlnaW5hbEZyYW1lUmVjdCgpOworICAgICAgICBJbnRSZWN0IHJl
Y3QgPSBidWZmZXIub3JpZ2luYWxGcmFtZVJlY3QoKTsKICAgICAgICAgYm9vbCBoYXNBbHBoYSA9
IG1fcmVhZGVyLT5oYXNBbHBoYSgpOwogICAgICAgICB1bnNpZ25lZCBjb2xvckNoYW5uZWxzID0g
aGFzQWxwaGEgPyA0IDogMzsKICAgICAgICAgYm9vbCBub25Ucml2aWFsQWxwaGEgPSBmYWxzZTsK
QEAgLTg1NCw3ICs4NTEsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgp
CiAjaWYgRU5BQkxFKElNQUdFX0RFQ09ERVJfRE9XTl9TQU1QTElORykKICAgICAgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCByZWN0Lm1heFkoKSAtIHJlY3QueSgpOyArK3kpIHsKICAgICAgICAgICAg
IHBuZ19ieXRlcCByb3cgPSBpbnRlcmxhY2VCdWZmZXIgKyAobV9zY2FsZWQgPyBtX3NjYWxlZFJv
d3NbeV0gOiB5KSAqIGNvbG9yQ2hhbm5lbHMgKiBzaXplKCkud2lkdGgoKTsKLSAgICAgICAgICAg
IEltYWdlRnJhbWU6OlBpeGVsRGF0YSogYWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHJlY3QueCgp
LCB5ICsgcmVjdC55KCkpOworICAgICAgICAgICAgUkdCQTMyKiBhZGRyZXNzID0gYnVmZmVyLmdl
dEFkZHIocmVjdC54KCksIHkgKyByZWN0LnkoKSk7CiAgICAgICAgICAgICBmb3IgKGludCB4ID0g
MDsgeCA8IHJlY3QubWF4WCgpIC0gcmVjdC54KCk7ICsreCkgewogICAgICAgICAgICAgICAgIHBu
Z19ieXRlcCBwaXhlbCA9IHJvdyArIChtX3NjYWxlZCA/IG1fc2NhbGVkQ29sdW1uc1t4XSA6IHgp
ICogY29sb3JDaGFubmVsczsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IGhhc0Fs
cGhhID8gcGl4ZWxbM10gOiAyNTU7CkBAIC04NzAsNyArODY3LDcgQEAgdm9pZCBQTkdJbWFnZURl
Y29kZXI6OmZyYW1lQ29tcGxldGUoKQogICAgICAgICBwbmdfYnl0ZXAgcm93ID0gaW50ZXJsYWNl
QnVmZmVyOwogICAgICAgICBmb3IgKGludCB5ID0gcmVjdC55KCk7IHkgPCByZWN0Lm1heFkoKTsg
Kyt5LCByb3cgKz0gY29sb3JDaGFubmVscyAqIHNpemUoKS53aWR0aCgpKSB7CiAgICAgICAgICAg
ICBwbmdfYnl0ZXAgcGl4ZWwgPSByb3c7Ci0gICAgICAgICAgICBJbWFnZUZyYW1lOjpQaXhlbERh
dGEqIGFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcihyZWN0LngoKSwgeSk7CisgICAgICAgICAgICBS
R0JBMzIqIGFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcihyZWN0LngoKSwgeSk7CiAgICAgICAgICAg
ICBmb3IgKGludCB4ID0gcmVjdC54KCk7IHggPCByZWN0Lm1heFgoKTsgKyt4LCBwaXhlbCArPSBj
b2xvckNoYW5uZWxzKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBoYXNBbHBo
YSA/IHBpeGVsWzNdIDogMjU1OwogICAgICAgICAgICAgICAgIG5vblRyaXZpYWxBbHBoYSB8PSBh
bHBoYSA8IDI1NTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L3BuZy9QTkdJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgJKHJldmlzaW9uIDIwNTY4
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFn
ZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIGludCByZXBldGl0aW9uQ291bnQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBtX3BsYXlDb3VudC0xOyB9CiAjZW5kaWYKICAgICAgICAgYm9vbCBpc1NpemVBdmFpbGFi
bGUoKSBvdmVycmlkZTsKLSAgICAgICAgYm9vbCBzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNp
Z25lZCBoZWlnaHQpIG92ZXJyaWRlOworICAgICAgICBib29sIHNldFNpemUoY29uc3QgSW50U2l6
ZSYpIG92ZXJyaWRlOwogICAgICAgICBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6
ZV90IGluZGV4KSBvdmVycmlkZTsKICAgICAgICAgLy8gQ0FVVElPTjogc2V0RmFpbGVkKCkgZGVs
ZXRlcyB8bV9yZWFkZXJ8LiAgQmUgY2FyZWZ1bCB0byBhdm9pZAogICAgICAgICAvLyBhY2Nlc3Np
bmcgZGVsZXRlZCBtZW1vcnksIGVzcGVjaWFsbHkgd2hlbiBjYWxsaW5nIHRoaXMgZnJvbSBpbnNp
ZGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3dlYnAvV0VC
UEltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1h
Z2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzExNSw3IEBAIGJvb2wgV0VC
UEltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgb25seVMKICAgICAgICAgICAgIHJldHVybiBzZXRG
YWlsZWQoKTsKICAgICAgICAgbV9oYXNBbHBoYSA9IGZhbHNlOwogI2VuZGlmCi0gICAgICAgIGlm
ICghc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgaWYgKCFzZXRTaXplKEludFNpemUo
d2lkdGgsIGhlaWdodCkpKQogICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgIH0K
IApAQCAtMTI4LDE4ICsxMjgsMTcgQEAgYm9vbCBXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9v
bCBvbmx5UwogICAgIEFTU0VSVChidWZmZXIuc3RhdHVzKCkgIT0gSW1hZ2VGcmFtZTo6RnJhbWVD
b21wbGV0ZSk7CiAKICAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1l
RW1wdHkpIHsKLSAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzaXplKCkud2lkdGgoKSwgc2l6
ZSgpLmhlaWdodCgpKSkKKyAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzaXplKCkpKQogICAg
ICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgICAgICBidWZmZXIuc2V0U3RhdHVzKElt
YWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShtX2hh
c0FscGhhKTsKLSAgICAgICAgYnVmZmVyLnNldE9yaWdpbmFsRnJhbWVSZWN0KEludFJlY3QoSW50
UG9pbnQoKSwgc2l6ZSgpKSk7CiAgICAgfQogCiAgICAgaWYgKCFtX2RlY29kZXIpIHsKICAgICAg
ICAgV0VCUF9DU1BfTU9ERSBtb2RlID0gb3V0cHV0TW9kZShtX2hhc0FscGhhKTsKICAgICAgICAg
aWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpCiAgICAgICAgICAgICBtb2RlID0gb3V0cHV0TW9kZShm
YWxzZSk7Ci0gICAgICAgIGludCByb3dTdHJpZGUgPSBzaXplKCkud2lkdGgoKSAqIHNpemVvZihJ
bWFnZUZyYW1lOjpQaXhlbERhdGEpOworICAgICAgICBpbnQgcm93U3RyaWRlID0gc2l6ZSgpLndp
ZHRoKCkgKiBzaXplb2YoUkdCQTMyKTsKICAgICAgICAgdWludDhfdCogb3V0cHV0ID0gcmVpbnRl
cnByZXRfY2FzdDx1aW50OF90Kj4oYnVmZmVyLmdldEFkZHIoMCwgMCkpOwogICAgICAgICBpbnQg
b3V0cHV0U2l6ZSA9IHNpemUoKS5oZWlnaHQoKSAqIHJvd1N0cmlkZTsKICAgICAgICAgbV9kZWNv
ZGVyID0gV2ViUElOZXdSR0IobW9kZSwgb3V0cHV0LCBvdXRwdXRTaXplLCByb3dTdHJpZGUpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288598</attachid>
            <date>2016-09-12 12:16:14 -0700</date>
            <delta_ts>2016-09-12 13:12:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159679-20160912121340.patch</filename>
            <type>text/plain</type>
            <size>62335</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNyBAQAorMjAxNi0wOS0xMiAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgdGhl
IHBpeGVsIGRhdGEgb2YgSW1hZ2VGcmFtZSB0byBhIHNlcGFyYXRlIGNsYXNzIG5hbWVkIEltYWdl
QmFja2luZ1N0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTk2NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNb3ZlIHRoZSBwaXhlbCBkYXRhIG1hbmlwdWxhdGlvbiBwYXJ0IGluIEltYWdlRnJhbWUg
aW50byBhIHNlcGFyYXRlIGNsYXNzCisgICAgICAgIGFuZCBhbGxvY2F0ZSBpdCBvbiBkZW1hbmQu
CisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5j
bWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbkNhaXJvLmNtYWtlOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgQWRkIEltYWdlQmFja2luZ1N0
b3JlQ2Fpcm8uY3BwIGFuZCByZW1vdmUgSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwIGZyb20gdGhlCisg
ICAgICAgIFdlYktpdCBwcm9qZWN0cy4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZENoYW5uZWwp
OiBjaGFubmVsID0gY2hhbm5lbCAqIGFscGhhIC8gMjU1LgorICAgICAgICAoV2ViQ29yZTo6dW5w
cmVtdWx0aXBsaWVkQ2hhbm5lbCk6IGNoYW5uZWwgPSBjaGFubmVsICogMjU1IC8gYWxwaGEuCisg
ICAgICAgIChXZWJDb3JlOjptYWtlUHJlbXVsdGlwbGllZFJHQkEpOiBVbi1wcmVtdWx0aXBsaWVk
IGNoYW5uZWxzIHRvIHByZW11bHRpcGxpZWQgUkdCQTMyLgorICAgICAgICAoV2ViQ29yZTo6bWFr
ZVVuUHJlbXVsdGlwbGllZFJHQkEpOiBQcmVtdWx0aXBsaWVkIGNoYW5uZWxzIHRvIHVuLXByZW11
bHRpcGxpZWQgUkdCQTMyLgorICAgICAgICAoV2ViQ29yZTo6Y29sb3JGcm9tUHJlbXVsdGlwbGll
ZEFSR0IpOiBVc2UgbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEuCisgICAgICAgIChXZWJDb3JlOjpw
cmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcik6IFVzZSBtYWtlUHJlbXVsdGlwbGllZFJHQkEuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OmZh
c3RNdWx0aXBseUJ5MjU1KTogeCAqIDI1NSA9IHggKiAyNTYgLSB4ID0geCA8PCA4IC0geC4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0b3JlLmg6IEFkZGVkLiBU
aGUgcHVycG9zZSBvZiB0aGlzIGNsYXNzIGlzCisgICAgICAgIHRvIG1ha2UgdGhlIHBpeGVscyBk
YXRhIG9wdGlvbmFsIGluIEltYWdlRnJhbWUuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCYWNraW5nU3RvcmU6OmNyZWF0ZSk6IENyZWF0ZXMgYSBuZXcgSW1hZ2VCYWNraW5nU3Rv
cmUuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJhY2tpbmdTdG9yZTo6c2V0U2l6ZSk6IENoYW5n
ZXMgdGhlIHBpeGVscyBzaXplLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6
OnNldEZyYW1lUmVjdCk6IFRoaXMgd2lsbCBhbHdheXMganVzdCBiZSB0aGUgZW50aXJlIGJ1ZmZl
ciBleGNlcHQgZm9yIEdJRiBhbmQgUE5HIGZyYW1lcy4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QmFja2luZ1N0b3JlOjpzaXplKTogUmV0dXJucyB0aGUgcGl4ZWxzIHNpemUuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJhY2tpbmdTdG9yZTo6ZnJhbWVSZWN0KTogUmV0dXJucyB0aGUgcGl4ZWxz
IGZyYW1lIHJlY3RhbmdsZS4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpj
bGVhcik6IENsZWFycyB0aGUgZW50aXJlIGltYWdlLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
YWNraW5nU3RvcmU6OmNsZWFyUmVjdCk6IENsZWFycyBhIHJlY3RhbmdsZSBpbiB0aGUgaW1hZ2Uu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJhY2tpbmdTdG9yZTo6cmVwZWF0Rmlyc3RSb3cpOiBS
ZXBlYXRzIHRoZSBmaXJzdCByb3cgaW4gYSByZWN0YW5nbGUgaW4gdGhlIGltYWdlLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OmF0KTogUmV0dXJucyBhIHBvaW50ZXIgdG8g
YSBwaXhlbCBkYXRhLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OnNldFJH
QkEpOiBTZXRzIHRoZSBjb2xvciBvZiBhIHBpeGVsIGluIHRoZSBpbWFnZS4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpvdmVyUkdCQSk6IEJsZW5kIGEgY29sb3Igd2l0aCBh
IHBpeGVsIGluIHRoZSBpbWFnZS4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3Jl
OjppbkJvdW5kcyk6IENoZWNrcyBpZiBhIHJlY3RhbmdsZSBpcyBpbiB0aGUgYm91bmRzIG9mIHRo
ZSBpbWFnZS4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjppc092ZXJTaXpl
KTogQ2hlY2tzIHdoZXRoZXIgYSBzaXplIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQgZm9yIGFuIGlt
YWdlLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OkltYWdlQmFja2luZ1N0
b3JlKToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6bmF0aXZlSW1hZ2VIYXNBbHBoYSk6IEltcGxlbWVudCB0aGlz
IGZ1bmN0aW9uLiBTZWUgY29tbWVudHMgaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1ODY4NC4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om9w
ZXJhdG9yPSk6IGNvcHlCaXRtYXBEYXRhKCkgbm93IGNvcGllcyB0aGUgZnJhbWVSZWN0IG9mIHRo
ZSBJbWFnZUJhY2tpbmdTdG9yZS4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNsZWFy
UGl4ZWxEYXRhKTogVGhlIHBpeGVscyBkYXRhIGFuZCB0aGUgcG9pbnRlciB0byB0aGVzZSBwaXhl
bHMgYXJlIG5vdyBpbmNsdWRlZCBpbiB0aGUgSW1hZ2VCYWNraW5nU3RvcmUuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSk6IENsZWFyaW5nIHRoZSBpbWFn
ZSBwaXhlbHMgYXJlIG5vdyBpbiBJbWFnZUJhY2tpbmdTdG9yZTo6Y2xlYXIoKS4KKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRnJhbWU6Onplcm9GaWxsRnJhbWVSZWN0KTogQ2xlYXJpbmcgdGhlIGlt
YWdlIHBpeGVscyBhcmUgbm93IGluIEltYWdlQmFja2luZ1N0b3JlOjpjbGVhclJlY3QoKS4KKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKTogV2UgZWl0aGVyIG5l
ZWQgdG8gY3JlYXRlIGEgbmV3IEltYWdlQmFja2luZ1N0b3JlIG9yIG51bGxpZnkgdGhlIGN1cnJl
bnQgb25lLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6IEltYWdlRnJh
bWU6OnNldFNpemUoKSBpcyBzdXBwb3NlZCB0byBiZSBjYWxsZWQgb25jZSBhbmQgdG8gY3JlYXRl
IHRoZSBJbWFnZUJhY2tpbmdTdG9yZS4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNl
dE9yaWdpbmFsRnJhbWVSZWN0KTogRGVsZWdhdGUgdGhpcyBjYWxsIHRvIEltYWdlQmFja2luZ1N0
b3JlOjpzZXRGcmFtZVJlY3QoKS4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJh
bWVCeXRlc0F0SW5kZXgpOiBJbWFnZUZyYW1lOjpQaXhlbERhdGEgY2FuIGJlIHJlcGxhY2VkIGJ5
IFJHQkEzMi4KKworICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rl
ci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weVJvd05UaW1lcyk6IFRoZSBp
bXBsZW1lbnRhdGlvbiB3YXMgbW92ZWQgdG8gSW1hZ2VCYWNraW5nU3RvcmU6OnJlcGVhdEZpcnN0
Um93KCkuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzaXplKTogR2V0cyB0aGUgc2l6
ZSBvZiBhbiBpbWFnZSBmcm9tIGl0cyBJbWFnZUJhY2tpbmdTdG9yZS4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1hZ2UpOiBHZXRzIGEgTnRhaXZlSW1hZ2VQdHIg
ZnJvbSB0aGUgSW1hZ2VCYWNraW5nU3RvcmUuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
OjpiYWNraW5nU3RvcmUpOiBSZXR1cm5zIGEgcmF3IHBvaW50ZXIgdG8gdGhlIEltYWdlQmFja2lu
Z1N0b3JlLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6aGFzQmFja2luZ1N0b3JlKTog
UmV0dXJucyB3aGV0aGVyIHRoZSBJbWFnZUZyYW1lIGhhcyBhbiBJbWFnZUJhY2tpbmdTdG9yZS4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om9yaWdpbmFsRnJhbWVSZWN0KTogUmV0dXJu
cyB0aGUgZnJhbWVSZWN0IG9mIHRoZSBpbWFnZSBmcm9tIGl0cyBJbWFnZUJhY2tpbmdTdG9yZS4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmdldEFkZHIpOiBEZWxlZ2F0ZXMgdGhlIGNh
bGwgdG8gdGhlIEltYWdlQmFja2luZ1N0b3JlLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFt
ZTo6c2V0UkdCQSk6IERlbGVnYXRlcyB0aGUgY2FsbCB0byB0aGUgSW1hZ2VCYWNraW5nU3RvcmUu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpvdmVyUkdCQSk6IERlbGVnYXRlcyB0aGUg
Y2FsbCB0byB0aGUgSW1hZ2VCYWNraW5nU3RvcmUuCisgICAgICAgIAorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGVyOjpzZXRTaXplKTogc2V0U2l6ZSgpIG5vdyB0YWtlcyBhbiBJbnRTaXpl
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0T3JpZ2luYWxGcmFtZVJlY3QpOiBE
ZWxldGVkLiBNb3ZlZCB0byBJbWFnZURlY29kZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6aGFzUGl4ZWxEYXRhKTogRGVsZXRlZC4gUmVuYW1lZCB0byBJbWFnZUZyYW1lOjpo
YXNCYWNraW5nU3RvcmUoKS4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmZpeFBvaW50
VW5zaWduZWRNdWx0aXBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
OjpkaXZpZGUyNTUpOiBEZWxldGVkLiBSZXBsYWNlZCBieSBmYXN0RGl2aWRlQnkyNTUoKSBmcm9t
IENvbG9yLmguCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjp3aWR0aCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpoZWlnaHQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjppc092ZXJTaXplKTogRGVsZXRlZC4gTW92ZWQgdG8g
SW1hZ2VCYWNraW5nU3RvcmU6OmlzT3ZlclNpemUoKS4KKworICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpC
TVBJbWFnZVJlYWRlcjo6ZGVjb2RlQk1QKToKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVh
ZGVyOjpwcm9jZXNzSW5mb0hlYWRlcik6CisgICAgICAgIEltYWdlRnJhbWU6OnNldFNpemUoKSBh
bmQgSW1hZ2VEZWNvZGVyOjpzZXRTaXplKCkgYm90aCB0YWtlIGFuIEludFNpemUgbm93LgorICAg
ICAgICBJbWFnZUJhY2tpbmdTdG9yZSBzZXRzIGl0cyBmcmFtZVJlY3QgdG8gdGhlIGVudGlyZSBp
bWFnZSBieSBkZWZhdWx0LgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9JbWFnZUJhY2tpbmdTdG9yZUNhaXJvLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJhY2tpbmdTdG9yZTo6aW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgSW1hZ2VCYWNraW5nU3RvcmU6OmltYWdlKCkgbm93IHJlcGxhY2VzIEltYWdlRnJhbWU6OmFz
TmV3TmF0aXZlSW1hZ2UoKS4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFn
ZURlY29kZXI6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpo
YXZlRGVjb2RlZFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmluaXRG
cmFtZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRklt
YWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJ
bWFnZVJlYWRlci5jcHA6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6cGFyc2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SUNPSW1hZ2VEZWNvZGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OklDT0ltYWdlRGVjb2Rlcjo6cHJvY2Vzc0RpcmVjdG9yeUVudHJpZXMpOgorICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlUmVhZGVyOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SlBFR0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhl
bCk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rl
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29k
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpzZXRTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldFBpeGVsUkdCKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVsUkdC
QSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhlbFByZW11bHRpcGxpZWRSR0JBKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICAtIFNlbmQgYW4gSW50U2l6
ZSB0byBJbWFnZUZyYW1lOjpzZXRTaXplKCkgYW5kIEltYWdlRGVjb2Rlcjo6c2V0U2l6ZSgpLgor
ICAgICAgICAtIFJlcGxhY2UgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhIGJ5IFJHQkEzMi4KKyAgICAg
ICAgLSBObyBuZWVkIHRvIGNhbGwgSW1hZ2VGcmFtZTo6c2V0T3JpZ2luYWxGcmFtZVJlY3QoKSBp
ZiB0aGlzIHNldHMgdGhlCisgICAgICAgICAgZnJhbWVSZWN0IHRvIHRoZSBlbnRpcmUgaW1hZ2Ug
cmVjdGFuZ2xlIHNpbmNlIHRoaXMgaXMgZG9uZSBieSBkZWZhdWx0CisgICAgICAgICAgaW4gSW1h
Z2VCYWNraW5nU3RvcmU6OnNldFNpemUoKS4KKwogMjAxNi0wOS0xMiAgU2ltb24gRnJhc2VyICA8
c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIC13ZWJraXQtdHJhbnNpdGlv
bi0qIGFuZCAtd2Via2l0LWFuaW1hdGlvbi0qIHByb3BlcnRpZXMgYmUgcHVyZSBhbGlhc2VzIG9m
IHRoZSB1bnByZWZpeGVkIG9uZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNt
YWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCShyZXZp
c2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQkod29ya2lu
ZyBjb3B5KQpAQCAtMTgzLDEwICsxODMsOSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3gxMS9YVW5pcXVlUmVzb3VyY2UuY3BwCiAKKyAgICBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZUJhY2tpbmdTdG9yZUNhaXJvLmNwcAogICAgIHBsYXRm
b3JtL2ltYWdlLWVuY29kZXJzL0pQRUdJbWFnZUVuY29kZXIuY3BwCiAKLSAgICBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKLQogICAgIHBsYXRmb3Jt
L25ldHdvcmsvZWZsL05ldHdvcmtTdGF0ZU5vdGlmaWVyRWZsLmNwcAogCiAgICAgcGxhdGZvcm0v
bmV0d29yay9zb3VwL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU291cC5jcHAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtR1RLLmNtYWtlCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUdUSy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTU1LDcgKzE1NSw3IEBAIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1
YnMuY3BwCiAgICAgcGxhdGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5jcHAKIAotICAgIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAorICAgIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCiAKICAgICBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9ndGsvU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2VHdGsuY3Bw
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQkocmV2aXNpb24gMjA1
Njg0KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQkod29ya2luZyBj
b3B5KQpAQCAtNDYsNyArNDYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAog
Ci0gICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3Bw
CisgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VCYWNraW5nU3RvcmVDYWly
by5jcHAKIAogICAgIHBsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU3R1Yi5j
cHAKIApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMjc1LDYgKzIyNzUs
NyBAQAogCQk1NTVCODdFQzFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU1Qjg3RUExQ0FB
RjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLzsgfTsKIAkJNTU1Qjg3RUQxQ0FB
RjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VE
ZWNvZGVyQ0cuaCAqLzsgfTsKIAkJNTVBMzM2RjcxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUlt
YWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUEz
MzZGNjFEODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLzsgfTsKKwkJNTVBMzM2Rjkx
RDgyMUUzQzAwMjJDNEM3IC8qIEltYWdlQmFja2luZ1N0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUEzMzZGODFEODIxRTNDMDAyMkM0QzcgLyog
SW1hZ2VCYWNraW5nU3RvcmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk1NzA5RThDRDFENDEzRDQ3MDAzMjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5
cHRvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3
MDlFOENBMUQ0MTNDRTMwMDMyNDRBQyAvKiBXZWJLaXRTdWJ0bGVDcnlwdG8uY3BwICovOyB9Owog
CQk1NzA5RThDRTFENDEzRDVCMDAzMjQ0QUMgLyogSlNXZWJLaXRTdWJ0bGVDcnlwdG9DdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFGRjhG
NjYxODA3NDYwODAwMTMyNjc0IC8qIEpTV2ViS2l0U3VidGxlQ3J5cHRvQ3VzdG9tLmNwcCAqLzsg
fTsKIAkJNTcwOUU4Q0YxRDQxM0Q5QTAwMzI0NEFDIC8qIFdlYktpdFN1YnRsZUNyeXB0by5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcwOUU4Q0IxRDQx
M0NFMzAwMzI0NEFDIC8qIFdlYktpdFN1YnRsZUNyeXB0by5oICovOyB9OwpAQCAtOTI5MSw2ICs5
MjkyLDcgQEAKIAkJNTU1Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1
IC8qIEltYWdlRGVjb2RlckNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElt
YWdlRGVjb2RlckNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1QTMzNkY2MUQ4
MjA5RjQwMDIyQzRDNyAvKiBOYXRpdmVJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBOYXRpdmVJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NUEz
MzZGODFEODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCYWNraW5nU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTVENDA4RjcxQTdDNjMxODAwQzc4NDUwIC8qIFNWR0ltYWdlQ2xpZW50
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdJbWFnZUNsaWVudHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcwOUU4Q0ExRDQxM0NFMzAwMzI0NEFDIC8q
IFdlYktpdFN1YnRsZUNyeXB0by5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXZWJLaXRTdWJ0bGVDcnlwdG8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1NzA5RThDQjFENDEzQ0UzMDAzMjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5cHRvLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdFN1YnRsZUNyeXB0by5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA3NjksNiArMjA3NzEsNyBAQAogCQkJCTM3OTkxOTk0
MTIwMERERjQwMEVBMDQxQyAvKiBXT0ZGRmlsZUZvcm1hdC5jcHAgKi8sCiAJCQkJMzc5OTE5OTUx
MjAwRERGNDAwRUEwNDFDIC8qIFdPRkZGaWxlRm9ybWF0LmggKi8sCiAJCQkJNTVBMzM2RjYxRDgy
MDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi8sCisJCQkJNTVBMzM2RjgxRDgyMUUzQzAw
MjJDNEM3IC8qIEltYWdlQmFja2luZ1N0b3JlLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGdyYXBo
aWNzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI2MzM5LDYgKzI2MzQyLDcgQEAK
IAkJCQk1ODJDQjA1MzFBNzhBMTRCMDBBRkZDQzQgLyogU2ltcGxlTGluZUxheW91dFRleHRGcmFn
bWVudEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNUExRUE3RDE1MkJDRjA4MDA0RDAw
QjYgLyogU2ltcGxpZnlNYXJrdXBDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzJBN0Yy
MTFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCBpbiBIZWFkZXJzICovLAorCQkJ
CTU1QTMzNkY5MUQ4MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzE3NDFBQUQxNjYzNjYwOTAwOEE1QjdFIC8qIFNpbXVsYXRlZENsaWNrT3B0
aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQwMEQ3QTUxNEEzRjYxOTAwNzM0MDExIC8qIFNp
bmNSZXNhbXBsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMzI3RDYwMTFBMzNBMkIwMDRGOUQ2
NSAvKiBTaW5rRG9jdW1lbnQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw2ICs0OSwxNiBAQCBjb25zdCBSR0JBMzIgQ29sb3I6OnRyYW5zcGFyZW50Owogc3RhdGljIGNv
bnN0IFJHQkEzMiBsaWdodGVuZWRCbGFjayA9IDB4RkY1NDU0NTQ7CiBzdGF0aWMgY29uc3QgUkdC
QTMyIGRhcmtlbmVkV2hpdGUgPSAweEZGQUJBQkFCOwogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVk
IHByZW11bHRpcGxpZWRDaGFubmVsKHVuc2lnbmVkIGMsIHVuc2lnbmVkIGEpCit7CisgICAgcmV0
dXJuIGZhc3REaXZpZGVCeTI1NShjICogYSArIDI1NCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5z
aWduZWQgdW5wcmVtdWx0aXBsaWVkQ2hhbm5lbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBhKQorewor
ICAgIHJldHVybiAoZmFzdE11bHRpcGx5QnkyNTUoYykgKyBhIC0gMSkgLyBhOworfQorCiBSR0JB
MzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBiKQogewogICAgIHJldHVybiAweEZGMDAwMDAw
IHwgc3RkOjptYXgoMCwgc3RkOjptaW4ociwgMjU1KSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6
Om1pbihnLCAyNTUpKSA8PCA4IHwgc3RkOjptYXgoMCwgc3RkOjptaW4oYiwgMjU1KSk7CkBAIC01
OSw2ICs2OSwxNiBAQCBSR0JBMzIgbWFrZVJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50CiAg
ICAgcmV0dXJuIHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGEsIDI1NSkpIDw8IDI0IHwgc3RkOjptYXgo
MCwgc3RkOjptaW4ociwgMjU1KSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAyNTUp
KSA8PCA4IHwgc3RkOjptYXgoMCwgc3RkOjptaW4oYiwgMjU1KSk7CiB9CiAKK1JHQkEzMiBtYWtl
UHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCit7CisgICAgcmV0
dXJuIG1ha2VSR0JBKHByZW11bHRpcGxpZWRDaGFubmVsKHIsIGEpLCBwcmVtdWx0aXBsaWVkQ2hh
bm5lbChnLCBhKSwgcHJlbXVsdGlwbGllZENoYW5uZWwoYiwgYSksIGEpOworfQorCitSR0JBMzIg
bWFrZVVuUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCit7Cisg
ICAgcmV0dXJuIG1ha2VSR0JBKHVucHJlbXVsdGlwbGllZENoYW5uZWwociwgYSksIHVucHJlbXVs
dGlwbGllZENoYW5uZWwoZywgYSksIHVucHJlbXVsdGlwbGllZENoYW5uZWwoYiwgYSksIGEpOwor
fQorCiBzdGF0aWMgaW50IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGZsb2F0IGYpCiB7CiAgICAgLy8g
V2UgdXNlIGxyb3VuZGYgYW5kIDI1NSBpbnN0ZWFkIG9mIG5leHRhZnRlcmYoMjU2LCAwKSB0byBt
YXRjaCBDRydzIHJvdW5kaW5nCkBAIC00ODIsMTQgKzUwMiw5IEBAIHZvaWQgQ29sb3I6OmdldEhT
Vihkb3VibGUmIGh1ZSwgZG91YmxlJiAKIENvbG9yIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdC
KFJHQkEzMiBwaXhlbENvbG9yKQogewogICAgIGludCBhbHBoYSA9IGFscGhhQ2hhbm5lbChwaXhl
bENvbG9yKTsKLSAgICBpZiAoYWxwaGEgJiYgYWxwaGEgPCAyNTUpIHsKLSAgICAgICAgcmV0dXJu
IENvbG9yOjpjcmVhdGVVbmNoZWNrZWQoCi0gICAgICAgICAgICByZWRDaGFubmVsKHBpeGVsQ29s
b3IpICogMjU1IC8gYWxwaGEsCi0gICAgICAgICAgICBncmVlbkNoYW5uZWwocGl4ZWxDb2xvcikg
KiAyNTUgLyBhbHBoYSwKLSAgICAgICAgICAgIGJsdWVDaGFubmVsKHBpeGVsQ29sb3IpICogMjU1
IC8gYWxwaGEsCi0gICAgICAgICAgICBhbHBoYSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldHVy
biBDb2xvcihwaXhlbENvbG9yKTsKKyAgICBpZiAoYWxwaGEgJiYgYWxwaGEgPCAyNTUpCisgICAg
ICAgIHBpeGVsQ29sb3IgPSBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShyZWRDaGFubmVsKHBpeGVs
Q29sb3IpLCBncmVlbkNoYW5uZWwocGl4ZWxDb2xvciksIGJsdWVDaGFubmVsKHBpeGVsQ29sb3Ip
LCBhbHBoYSk7CisgICAgcmV0dXJuIENvbG9yKHBpeGVsQ29sb3IpOwogfQogCiBSR0JBMzIgcHJl
bXVsdGlwbGllZEFSR0JGcm9tQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpAQCAtNDk3LDE0ICs1
MTIsMTAgQEAgUkdCQTMyIHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKGNvbnN0IAogICAgIHVu
c2lnbmVkIHBpeGVsQ29sb3I7CiAKICAgICB1bnNpZ25lZCBhbHBoYSA9IGNvbG9yLmFscGhhKCk7
Ci0gICAgaWYgKGFscGhhIDwgMjU1KSB7Ci0gICAgICAgIHBpeGVsQ29sb3IgPSBDb2xvcjo6Y3Jl
YXRlVW5jaGVja2VkKAotICAgICAgICAgICAgZmFzdERpdmlkZUJ5MjU1KGNvbG9yLnJlZCgpICog
YWxwaGEgKyAyNTQpLAotICAgICAgICAgICAgZmFzdERpdmlkZUJ5MjU1KGNvbG9yLmdyZWVuKCkg
KiBhbHBoYSArIDI1NCksCi0gICAgICAgICAgICBmYXN0RGl2aWRlQnkyNTUoY29sb3IuYmx1ZSgp
ICogYWxwaGEgKyAyNTQpLAotICAgICAgICAgICAgYWxwaGEpLnJnYigpOwotICAgIH0gZWxzZQot
ICAgICAgICAgcGl4ZWxDb2xvciA9IGNvbG9yLnJnYigpOworICAgIGlmIChhbHBoYSA8IDI1NSkK
KyAgICAgICAgcGl4ZWxDb2xvciA9IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShjb2xvci5yZWQoKSwg
Y29sb3IuZ3JlZW4oKSwgY29sb3IuYmx1ZSgpLCBhbHBoYSk7CisgICAgZWxzZQorICAgICAgICBw
aXhlbENvbG9yID0gY29sb3IucmdiKCk7CiAKICAgICByZXR1cm4gcGl4ZWxDb2xvcjsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjA1
Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUsNiArNTUsOSBAQCB0eXBlZGVmIHVuc2lnbmVkIFJHQkEzMjsgLy8gRGVw
cmVjYXRlZDogCiBXRUJDT1JFX0VYUE9SVCBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGlu
dCBiKTsKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcsIGludCBi
LCBpbnQgYSk7CiAKK1JHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBp
bnQgYiwgaW50IGEpOworUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQg
ZywgaW50IGIsIGludCBhKTsKKwogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIGNvbG9yV2l0aE92ZXJy
aWRlQWxwaGEoUkdCQTMyIGNvbG9yLCBmbG9hdCBvdmVycmlkZUFscGhhKTsKIFdFQkNPUkVfRVhQ
T1JUIFJHQkEzMiBjb2xvcldpdGhPdmVycmlkZUFscGhhKFJHQkEzMiBjb2xvciwgT3B0aW9uYWw8
ZmxvYXQ+IG92ZXJyaWRlQWxwaGEpOwogCkBAIC0yMTgsNiArMjIxLDcgQEAgQ29sb3IgYmxlbmQo
Y29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbAogCiBpbnQgZGlmZmVyZW5jZVNxdWFyZWQoY29u
c3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOwogCit1aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1
aW50MTZfdCB2YWx1ZSk7CiB1aW50MTZfdCBmYXN0RGl2aWRlQnkyNTUodWludDE2X3QpOwogCiAj
aWYgVVNFKENHKQpAQCAtMjkwLDYgKzI5NCwxMSBAQCBpbmxpbmUgdWludDhfdCByb3VuZEFuZENs
YW1wQ29sb3JDaGFubmVsCiAgICAgcmV0dXJuIHN0ZDo6bWF4KDAuZiwgc3RkOjptaW4oMjU1LmYs
IHN0ZDo6cm91bmQodmFsdWUpKSk7CiB9CiAKK2lubGluZSB1aW50MTZfdCBmYXN0TXVsdGlwbHlC
eTI1NSh1aW50MTZfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gKHZhbHVlIDw8IDgpIC0gdmFsdWU7
Cit9CisKIGlubGluZSB1aW50MTZfdCBmYXN0RGl2aWRlQnkyNTUodWludDE2X3QgdmFsdWUpCiB7
CiAgICAgLy8gV2hpbGUgdGhpcyBpcyBhbiBhcHByb3hpbWF0ZSBhbGdvcml0aG0gZm9yIGRpdmlz
aW9uIGJ5IDI1NSwgaXQgZ2l2ZXMgcGVyZmVjdGx5IGFjY3VyYXRlIHJlc3VsdHMgZm9yIDE2LWJp
dCB2YWx1ZXMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJh
Y2tpbmdTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQmFja2luZ1N0b3JlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiSW50UmVj
dC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgorCisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElt
YWdlQmFja2luZ1N0b3JlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQmFja2luZ1N0b3JlPiBjcmVhdGUoY29u
c3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhID0gdHJ1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCYWNraW5nU3RvcmU+KG5ldyBJbWFn
ZUJhY2tpbmdTdG9yZShzaXplLCBwcmVtdWx0aXBseUFscGhhKSk7CisgICAgfQorCisgICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJhY2tpbmdTdG9yZT4gY3JlYXRlKGNvbnN0IEltYWdl
QmFja2luZ1N0b3JlJiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCYWNraW5nU3RvcmU+KG5ldyBJbWFnZUJhY2tpbmdTdG9yZShvdGhlcikpOworICAg
IH0KKworICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlKCkgY29uc3Q7CisKKyAgICBib29sIHNldFNp
emUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAgIGlmIChzaXplLmlzRW1wdHko
KSB8fCAhbV9waXhlbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUuYXJlYSgpKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBtX3BpeGVscy5yZXNpemUoc2l6ZS5hcmVhKCkp
OworICAgICAgICBtX3BpeGVsc1B0ciA9IG1fcGl4ZWxzLmRhdGEoKTsKKyAgICAgICAgbV9zaXpl
ID0gc2l6ZTsKKyAgICAgICAgbV9mcmFtZVJlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIG1fc2l6
ZSk7CisgICAgICAgIGNsZWFyKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIGZyYW1lUmVjdCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVCghbV9zaXplLmlzRW1wdHkoKSk7CisgICAgICAgIEFTU0VSVChpbkJvdW5kcyhm
cmFtZVJlY3QpKTsKKyAgICAgICAgbV9mcmFtZVJlY3QgPSBmcmFtZVJlY3Q7CisgICAgfQorCisg
ICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIGNv
bnN0IEludFJlY3QmIGZyYW1lUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0OyB9CisK
KyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1lbXNldChtX3BpeGVsc1B0ciwgMCwg
bV9zaXplLmFyZWEoKSAqIHNpemVvZihSR0JBMzIpKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFy
UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHJlY3QuaXNFbXB0
eSgpIHx8ICFpbkJvdW5kcyhyZWN0KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBz
aXplX3QgcmVjdFdpZHRoSW5CeXRlcyA9IHJlY3Qud2lkdGgoKSAqIHNpemVvZihSR0JBMzIpOwor
ICAgICAgICBSR0JBMzIqIHN0YXJ0ID0gYXQocmVjdC54KCksIHJlY3QueSgpKTsKKyAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCByZWN0LmhlaWdodCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1l
bXNldChzdGFydCwgMCwgcmVjdFdpZHRoSW5CeXRlcyk7CisgICAgICAgICAgICBzdGFydCArPSBt
X3NpemUud2lkdGgoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgcmVwZWF0Rmlyc3RS
b3coY29uc3QgSW50UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIGlmIChyZWN0LmlzRW1wdHko
KSB8fCAhaW5Cb3VuZHMocmVjdCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc2l6
ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkgKiBzaXplb2YoUkdCQTMyKTsKKyAg
ICAgICAgUkdCQTMyKiBzcmMgPSBhdChyZWN0LngoKSwgcmVjdC55KCkpOworICAgICAgICBSR0JB
MzIqIGRlc3QgPSBzcmMgKyBtX3NpemUud2lkdGgoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDE7
IGkgPCByZWN0LmhlaWdodCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1lbWNweShkZXN0LCBzcmMs
IHJlY3RXaWR0aEluQnl0ZXMpOworICAgICAgICAgICAgZGVzdCArPSBtX3NpemUud2lkdGgoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIFJHQkEzMiogYXQoaW50IHgsIGludCB5KSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcGl4ZWxzUHRyICsgeSAqIG1fc2l6ZS53aWR0aCgpICsg
eDsKKyAgICB9CisKKyAgICB2b2lkIHNldFJHQkEoaW50IHgsIGludCB5LCB1bnNpZ25lZCByLCB1
bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgc2V0UkdC
QShhdCh4LCB5KSwgciwgZywgYiwgYSk7CisgICAgfQorCisgICAgdm9pZCBzZXRSR0JBKFJHQkEz
MiogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkK
KyAgICB7CisgICAgICAgIGlmIChtX3ByZW11bHRpcGx5QWxwaGEgJiYgIWEpCisgICAgICAgICAg
ICAqZGVzdCA9IDA7CisgICAgICAgIGVsc2UgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAmJiBhIDwg
MjU1KQorICAgICAgICAgICAgKmRlc3QgPSBtYWtlUHJlbXVsdGlwbGllZFJHQkEociwgZywgYiwg
YSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpkZXN0ID0gbWFrZVJHQkEociwgZywgYiwg
YSk7CisgICAgfQorCisgICAgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIs
IHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAgeworICAgICAgICBpZiAo
IWEpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKGEgPj0gMjU1IHx8ICFhbHBo
YUNoYW5uZWwoKmRlc3QpKSB7CisgICAgICAgICAgICBzZXRSR0JBKGRlc3QsIHIsIGcsIGIsIGEp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX3ByZW11
bHRpcGx5QWxwaGEpCisgICAgICAgICAgICAqZGVzdCA9IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShy
ZWRDaGFubmVsKCpkZXN0KSwgZ3JlZW5DaGFubmVsKCpkZXN0KSwgYmx1ZUNoYW5uZWwoKmRlc3Qp
LCBhbHBoYUNoYW5uZWwoKmRlc3QpKTsKKworICAgICAgICB1bnNpZ25lZCBkID0gMjU1IC0gYTsK
KworICAgICAgICByID0gZmFzdERpdmlkZUJ5MjU1KHIgKiBhICsgcmVkQ2hhbm5lbCgqZGVzdCkg
KiBkKTsKKyAgICAgICAgZyA9IGZhc3REaXZpZGVCeTI1NShnICogYSArIGdyZWVuQ2hhbm5lbCgq
ZGVzdCkgKiBkKTsKKyAgICAgICAgYiA9IGZhc3REaXZpZGVCeTI1NShiICogYSArIGJsdWVDaGFu
bmVsKCpkZXN0KSAqIGQpOworICAgICAgICBhICs9IGZhc3REaXZpZGVCeTI1NShkICogYWxwaGFD
aGFubmVsKCpkZXN0KSk7CisKKyAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSkKKyAgICAg
ICAgICAgICpkZXN0ID0gbWFrZVJHQkEociwgZywgYiwgYSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICpkZXN0ID0gbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEociwgZywgYiwgYSk7CisgICAg
fQorCisgICAgYm9vbCBpbkJvdW5kcyhjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXplKS5jb250YWlucyhyZWN0
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc092ZXJTaXplKGNvbnN0IEludFNpemUmIHNp
emUpCisgICAgeworICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIE1heFBpeGVscyA9
ICgoMSA8PCAyOSkgLSAxKTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHBpeGVscyA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6ZS53aWR0aCgpKSAqIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIHJldHVybiBwaXhl
bHMgPiBNYXhQaXhlbHM7CisgICAgfQorCitwcml2YXRlOgorICAgIEltYWdlQmFja2luZ1N0b3Jl
KGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSA9IHRydWUpCisgICAg
ICAgIDogbV9wcmVtdWx0aXBseUFscGhhKHByZW11bHRpcGx5QWxwaGEpCisgICAgeworICAgICAg
ICBBU1NFUlQoIXNpemUuaXNFbXB0eSgpICYmICFpc092ZXJTaXplKHNpemUpKTsKKyAgICAgICAg
c2V0U2l6ZShzaXplKTsKKyAgICB9CisKKyAgICBJbWFnZUJhY2tpbmdTdG9yZShjb25zdCBJbWFn
ZUJhY2tpbmdTdG9yZSYgb3RoZXIpCisgICAgICAgIDogbV9waXhlbHMob3RoZXIubV9waXhlbHMp
CisgICAgICAgICwgbV9zaXplKG90aGVyLm1fc2l6ZSkKKyAgICAgICAgLCBtX3ByZW11bHRpcGx5
QWxwaGEob3RoZXIubV9wcmVtdWx0aXBseUFscGhhKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFt
X3NpemUuaXNFbXB0eSgpICYmICFpc092ZXJTaXplKG1fc2l6ZSkpOworICAgICAgICBtX3BpeGVs
c1B0ciA9IG1fcGl4ZWxzLmRhdGEoKTsKKyAgICB9CisKKyAgICBWZWN0b3I8UkdCQTMyPiBtX3Bp
eGVsczsKKyAgICBSR0JBMzIqIG1fcGl4ZWxzUHRyIHsgbnVsbHB0ciB9OworICAgIEludFNpemUg
bV9zaXplOworICAgIEludFJlY3QgbV9mcmFtZVJlY3Q7IC8vIFRoaXMgd2lsbCBhbHdheXMganVz
dCBiZSB0aGUgZW50aXJlIGJ1ZmZlciBleGNlcHQgZm9yIEdJRiBhbmQgUE5HIGZyYW1lcworICAg
IGJvb2wgbV9wcmVtdWx0aXBseUFscGhhIHsgdHJ1ZSB9OworfTsKKworfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5j
cHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL05hdGl2ZUltYWdlQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxMCArNDcsMTAgQEAg
SW50U2l6ZSBuYXRpdmVJbWFnZVNpemUoY29uc3QgTmF0aXZlSW1hZwogICAgIHJldHVybiBpbWFn
ZSA/IEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGltYWdlLmdldCgpKSwgQ0dJbWFnZUdldEhlaWdo
dChpbWFnZS5nZXQoKSkpIDogSW50U2l6ZSgpOwogfQogCi1ib29sIG5hdGl2ZUltYWdlSGFzQWxw
aGEoY29uc3QgTmF0aXZlSW1hZ2VQdHImKQorYm9vbCBuYXRpdmVJbWFnZUhhc0FscGhhKGNvbnN0
IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSkKIHsKLSAgICAvLyBGSVhNRTogQW5zd2VyIGNvcnJlY3Rs
eSB0aGUgcXVlc3Rpb246IGRvZXMgdGhlIENHSW1hZ2VSZWYgaGF2ZSBhbHBoYSBjaGFubm5lbD8K
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICBDR0ltYWdlQWxwaGFJbmZvIGluZm8gPSBDR0ltYWdlR2V0
QWxwaGFJbmZvKGltYWdlLmdldCgpKTsKKyAgICByZXR1cm4gKGluZm8gPj0ga0NHSW1hZ2VBbHBo
YVByZW11bHRpcGxpZWRMYXN0KSAmJiAoaW5mbyA8PSBrQ0dJbWFnZUFscGhhRmlyc3QpOwogfQog
CiBDb2xvciBuYXRpdmVJbWFnZVNpbmdsZVBpeGVsU29saWRDb2xvcihjb25zdCBOYXRpdmVJbWFn
ZVB0ciYgaW1hZ2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9JbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIsNyBAQCBJbWFnZUZyYW1lJiBJbWFnZUZyYW1lOjpv
cGVyYXRvcj0oY29uc3QgCiAgICAgICAgIHJldHVybiAqdGhpczsKIAogICAgIGNvcHlCaXRtYXBE
YXRhKG90aGVyKTsKLSAgICBzZXRPcmlnaW5hbEZyYW1lUmVjdChvdGhlci5vcmlnaW5hbEZyYW1l
UmVjdCgpKTsKKyAgICBzZXRIYXNBbHBoYShvdGhlci5tX2hhc0FscGhhKTsKICAgICBzZXRTdGF0
dXMob3RoZXIuc3RhdHVzKCkpOwogICAgIHNldER1cmF0aW9uKG90aGVyLmR1cmF0aW9uKCkpOwog
ICAgIHNldERpc3Bvc2FsTWV0aG9kKG90aGVyLmRpc3Bvc2FsTWV0aG9kKCkpOwpAQCAtMTUyLDgg
KzE1Miw3IEBAIEltYWdlRnJhbWUmIEltYWdlRnJhbWU6Om9wZXJhdG9yPShjb25zdCAKIAogdm9p
ZCBJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSgpCiB7Ci0gICAgbV9iYWNraW5nU3RvcmUuY2xl
YXIoKTsKLSAgICBtX2J5dGVzID0gMDsKKyAgICBtX2JhY2tpbmdTdG9yZSA9IG51bGxwdHI7CiAg
ICAgbV9zdGF0dXMgPSBGcmFtZUVtcHR5OwogICAgIC8vIE5PVEU6IERvIG5vdCByZXNldCBvdGhl
ciBtZW1iZXJzIGhlcmU7IGNsZWFyRnJhbWVCdWZmZXJDYWNoZSgpIGNhbGxzIHRoaXMKICAgICAv
LyB0byBmcmVlIHRoZSBiaXRtYXAgZGF0YSwgYnV0IG90aGVyIGZ1bmN0aW9ucyBsaWtlIGluaXRG
cmFtZUJ1ZmZlcigpIGFuZApAQCAtMTYzLDI0ICsxNjIsMTYgQEAgdm9pZCBJbWFnZUZyYW1lOjpj
bGVhclBpeGVsRGF0YSgpCiAKIHZvaWQgSW1hZ2VGcmFtZTo6emVyb0ZpbGxQaXhlbERhdGEoKQog
ewotICAgIG1lbXNldChtX2J5dGVzLCAwLCBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQo
KSAqIHNpemVvZihQaXhlbERhdGEpKTsKKyAgICBtX2JhY2tpbmdTdG9yZS0+Y2xlYXIoKTsKICAg
ICBtX2hhc0FscGhhID0gdHJ1ZTsKIH0KIAogdm9pZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbEZyYW1l
UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIEFTU0VSVChJbnRSZWN0KEludFBvaW50
KCksIG1fc2l6ZSkuY29udGFpbnMocmVjdCkpOwotCiAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBzaXplX3QgcmVjdFdpZHRoSW5CeXRlcyA9IHJlY3Qud2lk
dGgoKSAqIHNpemVvZihQaXhlbERhdGEpOwotICAgIFBpeGVsRGF0YSogc3RhcnQgPSBtX2J5dGVz
ICsgKHJlY3QueSgpICogd2lkdGgoKSkgKyByZWN0LngoKTsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IHJlY3QuaGVpZ2h0KCk7ICsraSkgewotICAgICAgICBtZW1zZXQoc3RhcnQsIDAsIHJlY3RX
aWR0aEluQnl0ZXMpOwotICAgICAgICBzdGFydCArPSB3aWR0aCgpOwotICAgIH0KLQorICAgIG1f
YmFja2luZ1N0b3JlLT5jbGVhclJlY3QocmVjdCk7CiAgICAgc2V0SGFzQWxwaGEodHJ1ZSk7CiB9
CiAKQEAgLTE4OSwyNSArMTgwLDE5IEBAIGJvb2wgSW1hZ2VGcmFtZTo6Y29weUJpdG1hcERhdGEo
Y29uc3QgSW0KICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwog
Ci0gICAgbV9iYWNraW5nU3RvcmUgPSBvdGhlci5tX2JhY2tpbmdTdG9yZTsKLSAgICBtX2J5dGVz
ID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOwotICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKLSAg
ICBzZXRIYXNBbHBoYShvdGhlci5tX2hhc0FscGhhKTsKKyAgICBpZiAob3RoZXIubV9iYWNraW5n
U3RvcmUpCisgICAgICAgIG1fYmFja2luZ1N0b3JlID0gSW1hZ2VCYWNraW5nU3RvcmU6OmNyZWF0
ZSgqb3RoZXIubV9iYWNraW5nU3RvcmUuZ2V0KCkpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNr
aW5nU3RvcmUgPSBudWxscHRyOworICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElt
YWdlRnJhbWU6OnNldFNpemUoaW50IG5ld1dpZHRoLCBpbnQgbmV3SGVpZ2h0KQorYm9vbCBJbWFn
ZUZyYW1lOjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgQVNTRVJUKCF3aWR0
aCgpICYmICFoZWlnaHQoKSk7Ci0gICAgc2l6ZV90IGJhY2tpbmdTdG9yZVNpemUgPSBuZXdXaWR0
aCAqIG5ld0hlaWdodDsKLSAgICBpZiAoIW1fYmFja2luZ1N0b3JlLnRyeVJlc2VydmVDYXBhY2l0
eShiYWNraW5nU3RvcmVTaXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fYmFja2lu
Z1N0b3JlLnJlc2l6ZShiYWNraW5nU3RvcmVTaXplKTsKLSAgICBtX2J5dGVzID0gbV9iYWNraW5n
U3RvcmUuZGF0YSgpOwotICAgIG1fc2l6ZSA9IEludFNpemUobmV3V2lkdGgsIG5ld0hlaWdodCk7
Ci0KLSAgICB6ZXJvRmlsbFBpeGVsRGF0YSgpOwotICAgIHJldHVybiB0cnVlOworICAgIEFTU0VS
VCghbV9iYWNraW5nU3RvcmUpOworICAgIG1fYmFja2luZ1N0b3JlID0gSW1hZ2VCYWNraW5nU3Rv
cmU6OmNyZWF0ZShzaXplLCBtX3ByZW11bHRpcGx5QWxwaGEpOworICAgIHJldHVybiBtX2JhY2tp
bmdTdG9yZSAhPSBudWxscHRyOwogfQogCiBib29sIEltYWdlRnJhbWU6Omhhc0FscGhhKCkgY29u
c3QKQEAgLTIyMCw2ICsyMDUsMTIgQEAgdm9pZCBJbWFnZUZyYW1lOjpzZXRIYXNBbHBoYShib29s
IGFscGhhKQogICAgIG1faGFzQWxwaGEgPSBhbHBoYTsKIH0KIAordm9pZCBJbWFnZUZyYW1lOjpz
ZXRPcmlnaW5hbEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiBmcmFtZVJlY3QpCit7CisgICAgaWYg
KG1fYmFja2luZ1N0b3JlKQorICAgICAgICBtX2JhY2tpbmdTdG9yZS0+c2V0RnJhbWVSZWN0KGZy
YW1lUmVjdCk7Cit9CisKIHZvaWQgSW1hZ2VGcmFtZTo6c2V0U3RhdHVzKEZyYW1lU3RhdHVzIHN0
YXR1cykKIHsKICAgICBtX3N0YXR1cyA9IHN0YXR1czsKQEAgLTI4Niw3ICsyNzcsNyBAQCB1bnNp
Z25lZCBJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4CiAgICAgaWYgKG1fZnJhbWVCdWZm
ZXJDYWNoZS5zaXplKCkgPD0gaW5kZXgpCiAgICAgICAgIHJldHVybiAwOwogICAgIC8vIEZJWE1F
OiBVc2UgdGhlIGRpbWVuc2lvbiBvZiB0aGUgcmVxdWVzdGVkIGZyYW1lLgotICAgIHJldHVybiBt
X3NpemUuYXJlYSgpICogc2l6ZW9mKEltYWdlRnJhbWU6OlBpeGVsRGF0YSk7CisgICAgcmV0dXJu
IG1fc2l6ZS5hcmVhKCkgKiBzaXplb2YoUkdCQTMyKTsKIH0KIAogZmxvYXQgSW1hZ2VEZWNvZGVy
OjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkocmV2
aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
SW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDEwIEBACiAKICNwcmFn
bWEgb25jZQogCi0jaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkltYWdlQmFja2luZ1N0
b3JlLmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisj
aW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW5jbHVk
ZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTU3LDcg
KzU5LDYgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICAgICAg
RGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzICAvLyBDbGVhciBmcmFtZSB0byBwcmV2aW91cyBmcmFt
ZWJ1ZmZlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb250ZW50
cwogICAgICAgICB9OwotICAgICAgICB0eXBlZGVmIHVuc2lnbmVkIFBpeGVsRGF0YTsKIAogICAg
ICAgICBJbWFnZUZyYW1lKCk7CiAKQEAgLTgyLDE0MiArODMsNjYgQEAgdXNpbmcgQ29sb3JQcm9m
aWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICAvLyBlbmRZLgogICAgICAgICB2b2lkIGNvcHlS
b3dOVGltZXMoaW50IHN0YXJ0WCwgaW50IGVuZFgsIGludCBzdGFydFksIGludCBlbmRZKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhcnRYIDwgd2lkdGgoKSk7Ci0gICAgICAgICAg
ICBBU1NFUlQoZW5kWCA8PSB3aWR0aCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChzdGFydFkgPCBo
ZWlnaHQoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoZW5kWSA8PSBoZWlnaHQoKSk7Ci0gICAgICAg
ICAgICBjb25zdCBpbnQgcm93Qnl0ZXMgPSAoZW5kWCAtIHN0YXJ0WCkgKiBzaXplb2YoUGl4ZWxE
YXRhKTsKLSAgICAgICAgICAgIGNvbnN0IFBpeGVsRGF0YSogY29uc3Qgc3RhcnRBZGRyID0gZ2V0
QWRkcihzdGFydFgsIHN0YXJ0WSk7Ci0gICAgICAgICAgICBmb3IgKGludCBkZXN0WSA9IHN0YXJ0
WSArIDE7IGRlc3RZIDwgZW5kWTsgKytkZXN0WSkKLSAgICAgICAgICAgICAgICBtZW1jcHkoZ2V0
QWRkcihzdGFydFgsIGRlc3RZKSwgc3RhcnRBZGRyLCByb3dCeXRlcyk7CisgICAgICAgICAgICBt
X2JhY2tpbmdTdG9yZS0+cmVwZWF0Rmlyc3RSb3coSW50UmVjdChzdGFydFgsIHN0YXJ0WSwgZW5k
WCAtc3RhcnRYICwgZW5kWSAtIHN0YXJ0WSkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gQWxs
b2NhdGVzIHNwYWNlIGZvciB0aGUgcGl4ZWwgZGF0YS4gIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBh
bnkgcGl4ZWxzCiAgICAgICAgIC8vIGFyZSB3cml0dGVuLiAgTXVzdCBvbmx5IGJlIGNhbGxlZCBv
bmNlLiAgUmV0dXJucyB3aGV0aGVyIGFsbG9jYXRpb24KICAgICAgICAgLy8gc3VjY2VlZGVkLgot
ICAgICAgICBib29sIHNldFNpemUoaW50IG5ld1dpZHRoLCBpbnQgbmV3SGVpZ2h0KTsKKyAgICAg
ICAgYm9vbCBzZXRTaXplKGNvbnN0IEludFNpemUmKTsKKyAgICAgICAgSW50U2l6ZSBzaXplKCkg
Y29uc3QgeyBtX2JhY2tpbmdTdG9yZSA/IHJldHVybiBtX2JhY2tpbmdTdG9yZS0+c2l6ZSgpIDog
SW50U2l6ZSgpOyB9CiAKICAgICAgICAgLy8gUmV0dXJucyBhIGNhbGxlci1vd25lZCBwb2ludGVy
IHRvIHRoZSB1bmRlcmx5aW5nIG5hdGl2ZSBpbWFnZSBkYXRhLgogICAgICAgICAvLyAoQWN0dWFs
IHVzZTogVGhpcyBwb2ludGVyIHdpbGwgYmUgb3duZWQgYnkgQml0bWFwSW1hZ2UgYW5kIGZyZWVk
IGluCiAgICAgICAgIC8vIEZyYW1lRGF0YTo6Y2xlYXIoKSkuCi0gICAgICAgIE5hdGl2ZUltYWdl
UHRyIGFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdDsKKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIgYXNO
ZXdOYXRpdmVJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlID8gbV9iYWNraW5n
U3RvcmUtPmltYWdlKCkgOiBudWxscHRyOyB9CiAKKyAgICAgICAgaW5saW5lIEltYWdlQmFja2lu
Z1N0b3JlKiBiYWNraW5nU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmdTdG9yZSA/IG1f
YmFja2luZ1N0b3JlLmdldCgpIDogbnVsbHB0cjsgfQorICAgICAgICBpbmxpbmUgYm9vbCBoYXNC
YWNraW5nU3RvcmUoKSBjb25zdCB7IHJldHVybiBiYWNraW5nU3RvcmUoKTsgfQorICAgICAgICAK
ICAgICAgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0OwotICAgICAgICBjb25zdCBJbnRSZWN0JiBv
cmlnaW5hbEZyYW1lUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luYWxGcmFtZVJlY3Q7IH0K
KyAgICAgICAgSW50UmVjdCBvcmlnaW5hbEZyYW1lUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFj
a2luZ1N0b3JlID8gbV9iYWNraW5nU3RvcmUtPmZyYW1lUmVjdCgpIDogSW50UmVjdCgpOyB9CiAg
ICAgICAgIEZyYW1lU3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CiAg
ICAgICAgIHVuc2lnbmVkIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQog
ICAgICAgICBGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKCkgY29uc3QgeyByZXR1
cm4gbV9kaXNwb3NhbE1ldGhvZDsgfQogICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEoKSBj
b25zdCB7IHJldHVybiBtX3ByZW11bHRpcGx5QWxwaGE7IH0KIAogICAgICAgICB2b2lkIHNldEhh
c0FscGhhKGJvb2wgYWxwaGEpOwotICAgICAgICB2b2lkIHNldE9yaWdpbmFsRnJhbWVSZWN0KGNv
bnN0IEludFJlY3QmIHIpIHsgbV9vcmlnaW5hbEZyYW1lUmVjdCA9IHI7IH0KKyAgICAgICAgdm9p
ZCBzZXRPcmlnaW5hbEZyYW1lUmVjdChjb25zdCBJbnRSZWN0Jik7CiAgICAgICAgIHZvaWQgc2V0
U3RhdHVzKEZyYW1lU3RhdHVzIHN0YXR1cyk7CiAgICAgICAgIHZvaWQgc2V0RHVyYXRpb24odW5z
aWduZWQgZHVyYXRpb24pIHsgbV9kdXJhdGlvbiA9IGR1cmF0aW9uOyB9CiAgICAgICAgIHZvaWQg
c2V0RGlzcG9zYWxNZXRob2QoRnJhbWVEaXNwb3NhbE1ldGhvZCBtZXRob2QpIHsgbV9kaXNwb3Nh
bE1ldGhvZCA9IG1ldGhvZDsgfQogICAgICAgICB2b2lkIHNldFByZW11bHRpcGx5QWxwaGEoYm9v
bCBwcmVtdWx0aXBseUFscGhhKSB7IG1fcHJlbXVsdGlwbHlBbHBoYSA9IHByZW11bHRpcGx5QWxw
aGE7IH0KIAotICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKGludCB4LCBpbnQgeSwgdW5zaWdu
ZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKLSAgICAgICAgewotICAg
ICAgICAgICAgc2V0UkdCQShnZXRBZGRyKHgsIHkpLCByLCBnLCBiLCBhKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlubGluZSBQaXhlbERhdGEqIGdldEFkZHIoaW50IHgsIGludCB5KQorICAgICAg
ICBpbmxpbmUgUkdCQTMyKiBnZXRBZGRyKGludCB4LCBpbnQgeSkKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIG1fYnl0ZXMgKyAoeSAqIHdpZHRoKCkpICsgeDsKKyAgICAgICAgICAgIEFT
U0VSVChtX2JhY2tpbmdTdG9yZSk7CisgICAgICAgICAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUt
PmF0KHgsIHkpOwogICAgICAgICB9CiAKLSAgICAgICAgaW5saW5lIGJvb2wgaGFzUGl4ZWxEYXRh
KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXM7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBVc2UgZml4IHBvaW50IG11bHRpcGxpZXIgaW5zdGVhZCBvZiBpbnRl
Z2VyIGRpdmlzaW9uIG9yIGZsb2F0aW5nIHBvaW50IG1hdGguCi0gICAgICAgIC8vIFRoaXMgbXVs
dGlwbGVyIHByb2R1Y2VzIGV4YWN0bHkgdGhlIHNhbWUgcmVzdWx0IGZvciBhbGwgdmFsdWVzIGlu
IHJhbmdlIDAgLSAyNTUuCi0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmaXhQb2ludFNo
aWZ0ID0gMjQ7Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmaXhQb2ludE11bHQgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oMS4wIC8gMjU1LjAgKiAoMSA8PCBmaXhQb2ludFNoaWZ0KSkg
KyAxOwotICAgICAgICAvLyBNdWx0aXBsaWVzIHVuc2lnbmVkIHZhbHVlIGJ5IGZpeHBvaW50IHZh
bHVlIGFuZCBjb252ZXJ0cyBiYWNrIHRvIHVuc2lnbmVkLgotICAgICAgICBzdGF0aWMgdW5zaWdu
ZWQgZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KHVuc2lnbmVkIGZpeGVkLCB1bnNpZ25lZCB2KQor
ICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKGludCB4LCBpbnQgeSwgdW5zaWduZWQgciwgdW5z
aWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuICAoZml4ZWQgKiB2KSA+PiBmaXhQb2ludFNoaWZ0OworICAgICAgICAgICAgQVNTRVJU
KG1fYmFja2luZ1N0b3JlKTsKKyAgICAgICAgICAgIG1fYmFja2luZ1N0b3JlLT5zZXRSR0JBKHgs
IHksIHIsIGcsIGIsIGEpOwogICAgICAgICB9CiAKLSAgICAgICAgaW5saW5lIHZvaWQgc2V0UkdC
QShQaXhlbERhdGEqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVu
c2lnbmVkIGEpCisgICAgICAgIGlubGluZSB2b2lkIHNldFJHQkEoUkdCQTMyKiBkZXN0LCB1bnNp
Z25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAobV9wcmVtdWx0aXBseUFscGhhICYmIGEgPCAyNTUpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoIWEpIHsKLSAgICAgICAgICAgICAgICAgICAgKmRlc3QgPSAwOwotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgdW5zaWduZWQgYWxwaGFNdWx0ID0gYSAqIGZpeFBvaW50TXVsdDsKLSAgICAgICAgICAgICAg
ICByID0gZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KHIsIGFscGhhTXVsdCk7Ci0gICAgICAgICAg
ICAgICAgZyA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShnLCBhbHBoYU11bHQpOwotICAgICAg
ICAgICAgICAgIGIgPSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkoYiwgYWxwaGFNdWx0KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICpkZXN0ID0gKGEgPDwgMjQgfCByIDw8IDE2IHwgZyA8
PCA4IHwgYik7CisgICAgICAgICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOworICAgICAgICAg
ICAgbV9iYWNraW5nU3RvcmUtPnNldFJHQkEoZGVzdCwgciwgZywgYiwgYSk7CiAgICAgICAgIH0K
IAogI2lmIEVOQUJMRShBUE5HKQotICAgICAgICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRpdmlk
ZTI1NSh1bnNpZ25lZCBhKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKGEgKyAoYSA+
PiA4KSArIDEpID4+IDg7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmxpbmUgdm9pZCBvdmVyUkdC
QShQaXhlbERhdGEqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVu
c2lnbmVkIGEpCisgICAgICAgIGlubGluZSB2b2lkIG92ZXJSR0JBKFJHQkEzMiogZGVzdCwgdW5z
aWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKICAgICAgICAgewot
ICAgICAgICAgICAgaWYgKCFhKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAg
ICAgaWYgKGEgPCAyNTUpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBhRGVzdCA9ICgoKmRl
c3QpID4+IDI0KSAmIDI1NTsKLSAgICAgICAgICAgICAgICBpZiAoYURlc3QpIHsKLSAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgckRlc3QgPSAoKCpkZXN0KSA+PiAxNikgJiAyNTU7Ci0gICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGdEZXN0ID0gKCgqZGVzdCkgPj4gOCkgJiAyNTU7Ci0g
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJEZXN0ID0gKCpkZXN0KSAmIDI1NTsKLSAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgYUF1eCA9IDI1NSAtIGE7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
RGVzdCA9IGRpdmlkZTI1NShyRGVzdCAqIGFEZXN0KTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGdEZXN0ID0gZGl2aWRlMjU1KGdEZXN0ICogYURlc3QpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYkRlc3QgPSBkaXZpZGUyNTUoYkRlc3QgKiBhRGVzdCk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgciA9IGRpdmlkZTI1NShyICogYSArIHJEZXN0ICogYUF1
eCk7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSBkaXZpZGUyNTUoZyAqIGEgKyBnRGVzdCAqIGFB
dXgpOwotICAgICAgICAgICAgICAgICAgICBiID0gZGl2aWRlMjU1KGIgKiBhICsgYkRlc3QgKiBh
QXV4KTsKLSAgICAgICAgICAgICAgICAgICAgYSArPSBkaXZpZGUyNTUoYURlc3QgKiBhQXV4KTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHIgPSAociAqIDI1NSArIGEgLSAxKSAvIGE7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBnID0gKGcgKiAyNTUgKyBhIC0gMSkgLyBhOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYiA9IChiICogMjU1ICsgYSAtIDEpIC8gYTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9wcmVtdWx0aXBseUFscGhhKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHIgPSBkaXZpZGUyNTUociAqIGEpOwotICAgICAgICAgICAgICAgICAgICBn
ID0gZGl2aWRlMjU1KGcgKiBhKTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IGRpdmlkZTI1NShi
ICogYSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRl
c3QgPSAoYSA8PCAyNCB8IHIgPDwgMTYgfCBnIDw8IDggfCBiKTsKKyAgICAgICAgICAgIEFTU0VS
VChtX2JhY2tpbmdTdG9yZSk7CisgICAgICAgICAgICBtX2JhY2tpbmdTdG9yZS0+b3ZlclJHQkEo
ZGVzdCwgciwgZywgYiwgYSk7CiAgICAgICAgIH0KICNlbmRpZgogCiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgaW50IHdpZHRoKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1f
c2l6ZS53aWR0aCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3NpemUuaGVpZ2h0KCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBWZWN0b3I8UGl4ZWxEYXRhPiBtX2JhY2tpbmdTdG9yZTsKLSAgICAgICAgUGl4
ZWxEYXRhKiBtX2J5dGVzOyAvLyBUaGUgbWVtb3J5IGlzIGJhY2tlZCBieSBtX2JhY2tpbmdTdG9y
ZS4KLSAgICAgICAgSW50U2l6ZSBtX3NpemU7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CiAgICAgICAgIGJvb2wgbV9oYXNBbHBoYTsK
LSAgICAgICAgSW50UmVjdCBtX29yaWdpbmFsRnJhbWVSZWN0OyAvLyBUaGlzIHdpbGwgYWx3YXlz
IGp1c3QgYmUgdGhlIGVudGlyZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGJ1ZmZlciBleGNlcHQgZm9yIEdJRiBmcmFtZXMgd2hvc2UKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBvcmlnaW5hbCByZWN0IHdhcyBzbWFsbGVyIHRoYW4gdGhl
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3ZlcmFsbCBpbWFnZSBz
aXplLgogICAgICAgICBGcmFtZVN0YXR1cyBtX3N0YXR1czsKICAgICAgICAgdW5zaWduZWQgbV9k
dXJhdGlvbjsKICAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBtX2Rpc3Bvc2FsTWV0aG9kOwpA
QCAtMjg3LDExICsyMTIsMTEgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+Owog
CiAgICAgICAgIC8vIFJldHVybnMgd2hldGhlciB0aGUgc2l6ZSBpcyBsZWdhbCAoaS5lLiBub3Qg
Z29pbmcgdG8gcmVzdWx0IGluCiAgICAgICAgIC8vIG92ZXJmbG93IGVsc2V3aGVyZSkuICBJZiBu
b3QsIG1hcmtzIGRlY29kaW5nIGFzIGZhaWxlZC4KLSAgICAgICAgdmlydHVhbCBib29sIHNldFNp
emUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKKyAgICAgICAgdmlydHVhbCBib29s
IHNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICAgICAgewotICAgICAgICAgICAgaWYg
KGlzT3ZlclNpemUod2lkdGgsIGhlaWdodCkpCisgICAgICAgICAgICBpZiAoSW1hZ2VCYWNraW5n
U3RvcmU6OmlzT3ZlclNpemUoc2l6ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxl
ZCgpOwotICAgICAgICAgICAgbV9zaXplID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAg
ICAgICAgIG1fc2l6ZSA9IHNpemU7CiAgICAgICAgICAgICBtX3NpemVBdmFpbGFibGUgPSB0cnVl
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTM4NiwxNSArMzExLDYg
QEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICBJbWFnZU9yaWVu
dGF0aW9uIG1fb3JpZW50YXRpb247CiAKICAgICBwcml2YXRlOgotICAgICAgICAvLyBTb21lIGNv
ZGUgcGF0aHMgY29tcHV0ZSB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UgYXMgIndpZHRoICogaGVpZ2h0
ICogNCIKLSAgICAgICAgLy8gYW5kIHJldHVybiBpdCBhcyBhIChzaWduZWQpIGludC4gIEF2b2lk
IG92ZXJmbG93LgotICAgICAgICBzdGF0aWMgYm9vbCBpc092ZXJTaXplKHVuc2lnbmVkIHdpZHRo
LCB1bnNpZ25lZCBoZWlnaHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcg
bG9uZyB0b3RhbF9zaXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPih3aWR0aCkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc3RhdGljX2Nhc3Q8
dW5zaWduZWQgbG9uZyBsb25nPihoZWlnaHQpOwotICAgICAgICAgICAgcmV0dXJuIHRvdGFsX3Np
emUgPiAoKDEgPDwgMjkpIC0gMSk7Ci0gICAgICAgIH0KLQogICAgICAgICBJbnRTaXplIG1fc2l6
ZTsKICAgICAgICAgYm9vbCBtX3NpemVBdmFpbGFibGUgeyBmYWxzZSB9OwogI2lmIEVOQUJMRShJ
TUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5j
cHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4
LDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6ZGVjb2RlQk1QKGJvb2wgb25seQogICAgIC8vIElu
aXRpYWxpemUgdGhlIGZyYW1lYnVmZmVyIGlmIG5lZWRlZC4KICAgICBBU1NFUlQobV9idWZmZXIp
OyAgLy8gUGFyZW50IHNob3VsZCBzZXQgdGhpcyBiZWZvcmUgYXNraW5nIHVzIHRvIGRlY29kZSEK
ICAgICBpZiAobV9idWZmZXItPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpIHsK
LSAgICAgICAgaWYgKCFtX2J1ZmZlci0+c2V0U2l6ZShtX3BhcmVudC0+c2l6ZSgpLndpZHRoKCks
IG1fcGFyZW50LT5zaXplKCkuaGVpZ2h0KCkpKQorICAgICAgICBpZiAoIW1fYnVmZmVyLT5zZXRT
aXplKG1fcGFyZW50LT5zaXplKCkpKQogICAgICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5zZXRG
YWlsZWQoKTsgLy8gVW5hYmxlIHRvIGFsbG9jYXRlLgogICAgICAgICBtX2J1ZmZlci0+c2V0U3Rh
dHVzKEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIC8vIHNldFNpemUoKSBjYWxs
cyBlcmFzZUFSR0IoKSwgd2hpY2ggcmVzZXRzIHRoZSBhbHBoYSBmbGFnLCBzbyB3ZSBmb3JjZQpA
QCAtODYsOSArODYsNiBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpkZWNvZGVCTVAoYm9vbCBvbmx5
CiAgICAgICAgIC8vIHRoZXNlIDBzIGNvdWxkIGFjdHVhbGx5IHNob3cgdGhyb3VnaC4KICAgICAg
ICAgbV9idWZmZXItPnNldEhhc0FscGhhKGZhbHNlKTsKIAotICAgICAgICAvLyBGb3IgQk1Qcywg
dGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgotICAgICAgICBtX2J1ZmZl
ci0+c2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBtX3BhcmVudC0+c2l6
ZSgpKSk7Ci0KICAgICAgICAgaWYgKCFtX2lzVG9wRG93bikKICAgICAgICAgICAgIG1fY29vcmQu
c2V0WShtX3BhcmVudC0+c2l6ZSgpLmhlaWdodCgpIC0gMSk7CiAgICAgfQpAQCAtMTcxLDcgKzE2
OCw3IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NJbmZvSGVhZGVyKCkKICAgICAgICAg
cmV0dXJuIG1fcGFyZW50LT5zZXRGYWlsZWQoKTsKIAogICAgIC8vIFNldCBvdXIgc2l6ZS4KLSAg
ICBpZiAoIW1fcGFyZW50LT5zZXRTaXplKG1faW5mb0hlYWRlci5iaVdpZHRoLCBtX2luZm9IZWFk
ZXIuYmlIZWlnaHQpKQorICAgIGlmICghbV9wYXJlbnQtPnNldFNpemUoSW50U2l6ZShtX2luZm9I
ZWFkZXIuYmlXaWR0aCwgbV9pbmZvSGVhZGVyLmJpSGVpZ2h0KSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIC8vIEZvciBwYWxldHRlZCBpbWFnZXMsIGJpdG1hcHMgY2FuIHNldCBiaUNs
clVzZWQgdG8gMCB0byBtZWFuICJhbGwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFj
a2luZ1N0b3JlQ2Fpcm8uY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJh
Y2tpbmdTdG9yZS5oIgorCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJhY2tpbmdTdG9yZTo6aW1hZ2UoKSBjb25zdAorewor
ICAgIHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgK
KyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oY29uc3RfY2FzdDxSR0JB
MzIqPihtX3BpeGVsc1B0cikpLAorICAgICAgICBDQUlST19GT1JNQVRfQVJHQjMyLCBzaXplKCku
d2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpLCBzaXplKCkud2lkdGgoKSAqIHNpemVvZihSR0JBMzIp
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFn
ZURlY29kZXJDYWlyby5jcHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAkobm9uZXhp
c3RlbnQpCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZURlY29k
ZXIuaCIKLQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotTmF0
aXZlSW1hZ2VQdHIgSW1hZ2VGcmFtZTo6YXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKAotICAg
ICAgICByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihjb25zdF9jYXN0PFBpeGVsRGF0
YSo+KG1fYnl0ZXMpKSwKLSAgICAgICAgQ0FJUk9fRk9STUFUX0FSR0IzMiwgd2lkdGgoKSwgaGVp
Z2h0KCksIHdpZHRoKCkgKiBzaXplb2YoUGl4ZWxEYXRhKSkpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxl
dGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNp
b24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lm
L0dJRkltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDEyICs2MCwxMiBAQCBi
b29sIEdJRkltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkKICAgICByZXR1cm4gSW1hZ2VE
ZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsKIH0KIAotYm9vbCBHSUZJbWFnZURlY29kZXI6OnNl
dFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKK2Jvb2wgR0lGSW1hZ2VEZWNv
ZGVyOjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgaWYgKEltYWdlRGVjb2Rl
cjo6aXNTaXplQXZhaWxhYmxlKCkgJiYgc2l6ZSgpID09IEludFNpemUod2lkdGgsIGhlaWdodCkp
CisgICAgaWYgKEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkgJiYgdGhpcy0+c2l6ZSgp
ID09IHNpemUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKCFJbWFnZURlY29kZXI6
OnNldFNpemUod2lkdGgsIGhlaWdodCkpCisgICAgaWYgKCFJbWFnZURlY29kZXI6OnNldFNpemUo
c2l6ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHByZXBhcmVTY2FsZURhdGFJZk5l
Y2Vzc2FyeSgpOwpAQCAtMjEzLDEwICsyMTMsMTAgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6Omhh
dmVEZWNvZGVkUm93KHVucwogCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgaWYgbmVjZXNz
YXJ5LgogICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUlu
ZGV4XTsKLSAgICBpZiAoKChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0
eSkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkgfHwgIWJ1ZmZlci5oYXNQaXhlbERh
dGEoKSkKKyAgICBpZiAoKChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0
eSkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkgfHwgIWJ1ZmZlci5oYXNCYWNraW5n
U3RvcmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW1hZ2VGcmFtZTo6UGl4ZWxE
YXRhKiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHhCZWdpbiwgeUJlZ2luKTsKKyAg
ICBSR0JBMzIqIGN1cnJlbnRBZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoeEJlZ2luLCB5QmVnaW4p
OwogICAgIC8vIFdyaXRlIG9uZSByb3cncyB3b3J0aCBvZiBkYXRhIGludG8gdGhlIGZyYW1lLiAg
CiAgICAgZm9yIChpbnQgeCA9IHhCZWdpbjsgeCA8IHhFbmQ7ICsreCkgewogICAgICAgICBjb25z
dCB1bnNpZ25lZCBjaGFyIHNvdXJjZVZhbHVlID0gcm93QnVmZmVyWyhtX3NjYWxlZCA/IG1fc2Nh
bGVkQ29sdW1uc1t4XSA6IHgpIC0gZnJhbWVDb250ZXh0LT54T2Zmc2V0XTsKQEAgLTM2MSw3ICsz
NjEsNyBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuCiAKICAgICBp
ZiAoIWZyYW1lSW5kZXgpIHsKICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgZnJhbWUsIHNv
IHdlJ3JlIG5vdCByZWx5aW5nIG9uIGFueSBwcmV2aW91cyBkYXRhLgotICAgICAgICBpZiAoIWJ1
ZmZlci0+c2V0U2l6ZShzY2FsZWRTaXplKCkud2lkdGgoKSwgc2NhbGVkU2l6ZSgpLmhlaWdodCgp
KSkKKyAgICAgICAgaWYgKCFidWZmZXItPnNldFNpemUoc2NhbGVkU2l6ZSgpKSkKICAgICAgICAg
ICAgIHJldHVybiBzZXRGYWlsZWQoKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBUaGUgc3Rh
cnRpbmcgc3RhdGUgZm9yIHRoaXMgZnJhbWUgZGVwZW5kcyBvbiB0aGUgcHJldmlvdXMgZnJhbWUn
cwpAQCAtMzg3LDEyICszODcsMTIgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1
ZmZlcih1bgogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBjbGVh
ciB0aGUgcHJldmlvdXMgZnJhbWUgdG8gdHJhbnNwYXJlbnQsIHdpdGhvdXQKICAgICAgICAgICAg
IC8vIGFmZmVjdGluZyBwaXhlbHMgaW4gdGhlIGltYWdlIG91dHNpZGUgb2YgdGhlIGZyYW1lLgot
ICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcHJldlJlY3QgPSBwcmV2QnVmZmVyLT5vcmlnaW5h
bEZyYW1lUmVjdCgpOworICAgICAgICAgICAgSW50UmVjdCBwcmV2UmVjdCA9IHByZXZCdWZmZXIt
Pm9yaWdpbmFsRnJhbWVSZWN0KCk7CiAgICAgICAgICAgICBjb25zdCBJbnRTaXplJiBidWZmZXJT
aXplID0gc2NhbGVkU2l6ZSgpOwogICAgICAgICAgICAgaWYgKCFmcmFtZUluZGV4IHx8IHByZXZS
ZWN0LmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpIHsKICAgICAg
ICAgICAgICAgICAvLyBDbGVhcmluZyB0aGUgZmlyc3QgZnJhbWUsIG9yIGEgZnJhbWUgdGhlIHNp
emUgb2YgdGhlIHdob2xlCiAgICAgICAgICAgICAgICAgLy8gaW1hZ2UsIHJlc3VsdHMgaW4gYSBj
b21wbGV0ZWx5IGVtcHR5IGltYWdlLgotICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLT5zZXRT
aXplKGJ1ZmZlclNpemUud2lkdGgoKSwgYnVmZmVyU2l6ZS5oZWlnaHQoKSkpCisgICAgICAgICAg
ICAgICAgaWYgKCFidWZmZXItPnNldFNpemUoYnVmZmVyU2l6ZSkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzZXRGYWlsZWQoKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgLy8gQ29weSB0aGUgd2hvbGUgcHJldmlvdXMgYnVmZmVyLCB0aGVuIGNsZWFyIGp1c3Qg
aXRzIGZyYW1lLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Z2lmL0dJRkltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAkocmV2aXNpb24gMjA1Njg0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdl
RGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gImdpZiI7IH0KICAgICAgICAgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciYgZGF0
YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpIG92ZXJyaWRlOwogICAgICAgICBib29sIGlzU2l6ZUF2
YWlsYWJsZSgpIG92ZXJyaWRlOwotICAgICAgICBib29sIHNldFNpemUodW5zaWduZWQgd2lkdGgs
IHVuc2lnbmVkIGhlaWdodCkgb3ZlcnJpZGU7CisgICAgICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJ
bnRTaXplJikgb3ZlcnJpZGU7CiAgICAgICAgIHNpemVfdCBmcmFtZUNvdW50KCkgb3ZlcnJpZGU7
CiAgICAgICAgIGludCByZXBldGl0aW9uQ291bnQoKSBjb25zdCBvdmVycmlkZTsKICAgICAgICAg
SW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkgb3ZlcnJpZGU7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VS
ZWFkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0Nyw3ICs0NDcsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpw
YXJzZShzaXplX3QgZGF0YVBvCiAKICAgICAgICAgICAgIC8vIENBTExCQUNLOiBJbmZvcm0gdGhl
IGRlY29kZXJwbHVnaW4gb2Ygb3VyIHNpemUuCiAgICAgICAgICAgICAvLyBOb3RlOiBBIHN1YnNl
cXVlbnQgZnJhbWUgbWlnaHQgaGF2ZSBkaW1lbnNpb25zIGxhcmdlciB0aGFuIHRoZSAic2NyZWVu
IiBkaW1lbnNpb25zLgotICAgICAgICAgICAgaWYgKG1fY2xpZW50ICYmICFtX2NsaWVudC0+c2V0
U2l6ZShtX3NjcmVlbldpZHRoLCBtX3NjcmVlbkhlaWdodCkpCisgICAgICAgICAgICBpZiAobV9j
bGllbnQgJiYgIW1fY2xpZW50LT5zZXRTaXplKFdlYkNvcmU6OkludFNpemUobV9zY3JlZW5XaWR0
aCwgbV9zY3JlZW5IZWlnaHQpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICAgICAgICAgIG1fc2NyZWVuQmdjb2xvciA9IGN1cnJlbnRDb21wb25lbnRbNV07CkBAIC02NjQs
NyArNjY0LDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cGFyc2Uoc2l6ZV90IGRhdGFQbwogICAg
ICAgICAgICAgICAgIHlPZmZzZXQgPSAwOwogCiAgICAgICAgICAgICAgICAgLy8gQ0FMTEJBQ0s6
IEluZm9ybSB0aGUgZGVjb2RlcnBsdWdpbiBvZiBvdXIgc2l6ZS4KLSAgICAgICAgICAgICAgICBp
ZiAobV9jbGllbnQgJiYgIW1fY2xpZW50LT5zZXRTaXplKG1fc2NyZWVuV2lkdGgsIG1fc2NyZWVu
SGVpZ2h0KSkKKyAgICAgICAgICAgICAgICBpZiAobV9jbGllbnQgJiYgIW1fY2xpZW50LT5zZXRT
aXplKFdlYkNvcmU6OkludFNpemUobV9zY3JlZW5XaWR0aCwgbV9zY3JlZW5IZWlnaHQpKSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg4LDExICs4OCwxMSBAQCBJbnRTaXplIElDT0ltYWdlRGVjb2Rlcjo6
ZnJhbWVTaXplQXRJbmRlCiAgICAgcmV0dXJuIChpbmRleCAmJiAoaW5kZXggPCBtX2RpckVudHJp
ZXMuc2l6ZSgpKSkgPyBtX2RpckVudHJpZXNbaW5kZXhdLm1fc2l6ZSA6IHNpemUoKTsKIH0KIAot
Ym9vbCBJQ09JbWFnZURlY29kZXI6OnNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhl
aWdodCkKK2Jvb2wgSUNPSW1hZ2VEZWNvZGVyOjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUp
CiB7CiAgICAgLy8gVGhlIHNpemUgY2FsY3VsYXRlZCBpbnNpZGUgdGhlIEJNUEltYWdlUmVhZGVy
IGhhZCBiZXR0ZXIgbWF0Y2ggdGhlIG9uZSBpbgogICAgIC8vIHRoZSBpY29uIGRpcmVjdG9yeS4K
LSAgICByZXR1cm4gbV9mcmFtZVNpemUuaXNFbXB0eSgpID8gSW1hZ2VEZWNvZGVyOjpzZXRTaXpl
KHdpZHRoLCBoZWlnaHQpIDogKChJbnRTaXplKHdpZHRoLCBoZWlnaHQpID09IG1fZnJhbWVTaXpl
KSB8fCBzZXRGYWlsZWQoKSk7CisgICAgcmV0dXJuIG1fZnJhbWVTaXplLmlzRW1wdHkoKSA/IElt
YWdlRGVjb2Rlcjo6c2V0U2l6ZShzaXplKSA6ICgoc2l6ZSA9PSBtX2ZyYW1lU2l6ZSkgfHwgc2V0
RmFpbGVkKCkpOwogfQogCiBzaXplX3QgSUNPSW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KCkKQEAg
LTI3OSw3ICsyNzksNyBAQCBib29sIElDT0ltYWdlRGVjb2Rlcjo6cHJvY2Vzc0RpcmVjdG9yeUVu
CiAgICAgY29uc3QgSWNvbkRpcmVjdG9yeUVudHJ5JiBkaXJFbnRyeSA9IG1fZGlyRW50cmllcy5m
aXJzdCgpOwogICAgIC8vIFRlY2huaWNhbGx5LCB0aGlzIG5leHQgY2FsbCBzaG91bGRuJ3QgYmUg
YWJsZSB0byBmYWlsLCBzaW5jZSB0aGUgd2lkdGgKICAgICAvLyBhbmQgaGVpZ2h0IGhlcmUgYXJl
IGVhY2ggPD0gMjU2LCBhbmQgfG1fZnJhbWVTaXplfCBpcyBlbXB0eS4KLSAgICByZXR1cm4gc2V0
U2l6ZShkaXJFbnRyeS5tX3NpemUud2lkdGgoKSwgZGlyRW50cnkubV9zaXplLmhlaWdodCgpKTsK
KyAgICByZXR1cm4gc2V0U2l6ZShkaXJFbnRyeS5tX3NpemUpOwogfQogCiBJQ09JbWFnZURlY29k
ZXI6Okljb25EaXJlY3RvcnlFbnRyeSBJQ09JbWFnZURlY29kZXI6OnJlYWREaXJlY3RvcnlFbnRy
eSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNP
SW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAyMDU2ODQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIG92ZXJyaWRlOwogICAgICAgICBJbnRTaXpl
IHNpemUoKSBvdmVycmlkZTsKICAgICAgICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVf
dCwgU3Vic2FtcGxpbmdMZXZlbCkgb3ZlcnJpZGU7Ci0gICAgICAgIGJvb2wgc2V0U2l6ZSh1bnNp
Z25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KSBvdmVycmlkZTsKKyAgICAgICAgYm9vbCBzZXRT
aXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKICAgICAgICAgc2l6ZV90IGZyYW1lQ291bnQo
KSBvdmVycmlkZTsKICAgICAgICAgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVf
dCkgb3ZlcnJpZGU7CiAgICAgICAgIC8vIENBVVRJT046IHNldEZhaWxlZCgpIGRlbGV0ZXMgYWxs
IHJlYWRlcnMgYW5kIGRlY29kZXJzLiAgQmUgY2FyZWZ1bCB0bwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQ
RUdJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMjIsNyArMzIyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgbV9zdGF0ZSA9
IEpQRUdfU1RBUlRfREVDT01QUkVTUzsKIAogICAgICAgICAgICAgLy8gV2UgY2FuIGZpbGwgaW4g
dGhlIHNpemUgbm93IHRoYXQgdGhlIGhlYWRlciBpcyBhdmFpbGFibGUuCi0gICAgICAgICAgICBp
ZiAoIW1fZGVjb2Rlci0+c2V0U2l6ZShtX2luZm8uaW1hZ2Vfd2lkdGgsIG1faW5mby5pbWFnZV9o
ZWlnaHQpKQorICAgICAgICAgICAgaWYgKCFtX2RlY29kZXItPnNldFNpemUoSW50U2l6ZShtX2lu
Zm8uaW1hZ2Vfd2lkdGgsIG1faW5mby5pbWFnZV9oZWlnaHQpKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIG1fZGVjb2Rlci0+c2V0T3JpZW50YXRpb24ocmVh
ZEltYWdlT3JpZW50YXRpb24oaW5mbygpKSk7CkBAIC01MTksOSArNTE5LDkgQEAgYm9vbCBKUEVH
SW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQogICAgIHJldHVybiBJbWFnZURlY29kZXI6
OmlzU2l6ZUF2YWlsYWJsZSgpOwogfQogCi1ib29sIEpQRUdJbWFnZURlY29kZXI6OnNldFNpemUo
dW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKK2Jvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6
c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIGlmICghSW1hZ2VEZWNvZGVyOjpz
ZXRTaXplKHdpZHRoLCBoZWlnaHQpKQorICAgIGlmICghSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHNp
emUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNl
c3NhcnkoKTsKQEAgLTU1MSw3ICs1NTEsNyBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6OnNldEZh
aWxlZCgpCiB9CiAKIHRlbXBsYXRlIDxKX0NPTE9SX1NQQUNFIGNvbG9yU3BhY2U+Ci12b2lkIHNl
dFBpeGVsKEltYWdlRnJhbWUmIGJ1ZmZlciwgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBjdXJyZW50
QWRkcmVzcywgSlNBTVBBUlJBWSBzYW1wbGVzLCBpbnQgY29sdW1uKQordm9pZCBzZXRQaXhlbChJ
bWFnZUZyYW1lJiBidWZmZXIsIFJHQkEzMiogY3VycmVudEFkZHJlc3MsIEpTQU1QQVJSQVkgc2Ft
cGxlcywgaW50IGNvbHVtbikKIHsKICAgICBKU0FNUExFKiBqc2FtcGxlID0gKnNhbXBsZXMgKyBj
b2x1bW4gKiAoY29sb3JTcGFjZSA9PSBKQ1NfUkdCID8gMyA6IDQpOwogCkBAIC01OTQsNyArNTk0
LDcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoSQogICAgICAgICBp
ZiAoZGVzdFkgPCAwKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgSW1hZ2VGcmFt
ZTo6UGl4ZWxEYXRhKiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKDAsIGRlc3RZKTsK
KyAgICAgICAgUkdCQTMyKiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKDAsIGRlc3RZ
KTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgKyt4KSB7CiAgICAgICAgICAg
ICBzZXRQaXhlbDxjb2xvclNwYWNlPihidWZmZXIsIGN1cnJlbnRBZGRyZXNzLCBzYW1wbGVzLCBp
c1NjYWxlZCA/IG1fc2NhbGVkQ29sdW1uc1t4XSA6IHgpOwogICAgICAgICAgICAgKytjdXJyZW50
QWRkcmVzczsKQEAgLTYxNywxNSArNjE3LDEyIEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0
cHV0U2NhbmxpbmVzKCkKICAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZWJ1ZmZlciBpZiBuZWVk
ZWQuCiAgICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwogICAg
IGlmIChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgewotICAgICAg
ICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNjYWxlZFNpemUoKS53aWR0aCgpLCBzY2FsZWRTaXplKCku
aGVpZ2h0KCkpKQorICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNjYWxlZFNpemUoKSkpCiAg
ICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMo
SW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKICAgICAgICAgLy8gVGhlIGJ1ZmZlciBpcyB0cmFu
c3BhcmVudCBvdXRzaWRlIHRoZSBkZWNvZGVkIGFyZWEgd2hpbGUgdGhlIGltYWdlIGlzCiAgICAg
ICAgIC8vIGxvYWRpbmcuIFRoZSBjb21wbGV0ZWQgaW1hZ2Ugd2lsbCBiZSBtYXJrZWQgZnVsbHkg
b3BhcXVlIGluIGpwZWdDb21wbGV0ZSgpLgogICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEodHJ1
ZSk7Ci0KLSAgICAgICAgLy8gRm9yIEpQRUdzLCB0aGUgZnJhbWUgYWx3YXlzIGZpbGxzIHRoZSBl
bnRpcmUgaW1hZ2UuCi0gICAgICAgIGJ1ZmZlci5zZXRPcmlnaW5hbEZyYW1lUmVjdChJbnRSZWN0
KEludFBvaW50KCksIHNpemUoKSkpOwogICAgIH0KIAogICAgIGpwZWdfZGVjb21wcmVzc19zdHJ1
Y3QqIGluZm8gPSBtX3JlYWRlci0+aW5mbygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNv
ZGVyLmgJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3
ICs1MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gSW1hZ2VEZWNvZGVyCiAg
ICAgICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
ICJqcGciOyB9CiAgICAgICAgIGJvb2wgaXNTaXplQXZhaWxhYmxlKCkgb3ZlcnJpZGU7Ci0gICAg
ICAgIGJvb2wgc2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KSBvdmVycmlk
ZTsKKyAgICAgICAgYm9vbCBzZXRTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKICAgICAg
ICAgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkgb3ZlcnJpZGU7
CiAgICAgICAgIC8vIENBVVRJT046IHNldEZhaWxlZCgpIGRlbGV0ZXMgfG1fcmVhZGVyfC4gIEJl
IGNhcmVmdWwgdG8gYXZvaWQKICAgICAgICAgLy8gYWNjZXNzaW5nIGRlbGV0ZWQgbWVtb3J5LCBl
c3BlY2lhbGx5IHdoZW4gY2FsbGluZyB0aGlzIGZyb20gaW5zaWRlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5H
SW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIzNSw5ICsyMzUsOSBAQCBib29sIFBOR0ltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxh
YmxlKCkKICAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsKIH0KIAot
Ym9vbCBQTkdJbWFnZURlY29kZXI6OnNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhl
aWdodCkKK2Jvb2wgUE5HSW1hZ2VEZWNvZGVyOjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUp
CiB7Ci0gICAgaWYgKCFJbWFnZURlY29kZXI6OnNldFNpemUod2lkdGgsIGhlaWdodCkpCisgICAg
aWYgKCFJbWFnZURlY29kZXI6OnNldFNpemUoc2l6ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIHByZXBhcmVTY2FsZURhdGFJZk5lY2Vzc2FyeSgpOwpAQCAtMjk1LDcgKzI5NSw3IEBA
IHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJBdmFpbGFibGUoKQogICAgIC8vIHdpbGwgY2Vh
c2UgdG8gZXhpc3QuICBOb3RlIHRoYXQgd2UnbGwgc3RpbGwgcHJvcGVybHkgc2V0IHRoZSBmYWls
dXJlIGZsYWcKICAgICAvLyBpbiB0aGlzIGNhc2UgYXMgc29vbiBhcyB3ZSBsb25nam1wKCkuCiAg
ICAgbV9kb05vdGhpbmdPbkZhaWx1cmUgPSB0cnVlOwotICAgIGJvb2wgcmVzdWx0ID0gc2V0U2l6
ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBib29sIHJlc3VsdCA9IHNldFNpemUoSW50U2l6ZSh3aWR0
aCwgaGVpZ2h0KSk7CiAgICAgbV9kb05vdGhpbmdPbkZhaWx1cmUgPSBmYWxzZTsKICAgICBpZiAo
IXJlc3VsdCkgewogICAgICAgICBsb25nam1wKEpNUEJVRihwbmcpLCAxKTsKQEAgLTQxMSwxOSAr
NDExLDE5IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJBdmFpbGFibGUoKQogICAgIH0K
IH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldFBpeGVsUkdCKEltYWdlRnJhbWU6OlBpeGVsRGF0
YSogZGVzdCwgcG5nX2J5dGVwIHBpeGVsKQorc3RhdGljIGlubGluZSB2b2lkIHNldFBpeGVsUkdC
KFJHQkEzMiogZGVzdCwgcG5nX2J5dGVwIHBpeGVsKQogewogICAgICpkZXN0ID0gMHhGRjAwMDAw
MFUgfCBwaXhlbFswXSA8PCAxNiB8IHBpeGVsWzFdIDw8IDggfCBwaXhlbFsyXTsKIH0KIAotc3Rh
dGljIGlubGluZSB2b2lkIHNldFBpeGVsUkdCQShJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGRlc3Qs
IHBuZ19ieXRlcCBwaXhlbCwgdW5zaWduZWQgY2hhciYgbm9uVHJpdmlhbEFscGhhTWFzaykKK3N0
YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJHQkEoUkdCQTMyKiBkZXN0LCBwbmdfYnl0ZXAgcGl4
ZWwsIHVuc2lnbmVkIGNoYXImIG5vblRyaXZpYWxBbHBoYU1hc2spCiB7CiAgICAgdW5zaWduZWQg
Y2hhciBhID0gcGl4ZWxbM107CiAgICAgKmRlc3QgPSBhIDw8IDI0IHwgcGl4ZWxbMF0gPDwgMTYg
fCBwaXhlbFsxXSA8PCA4IHwgcGl4ZWxbMl07CiAgICAgbm9uVHJpdmlhbEFscGhhTWFzayB8PSAo
MjU1IC0gYSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFByZW11bHRpcGxpZWRS
R0JBKEltYWdlRnJhbWU6OlBpeGVsRGF0YSogZGVzdCwgcG5nX2J5dGVwIHBpeGVsLCB1bnNpZ25l
ZCBjaGFyJiBub25Ucml2aWFsQWxwaGFNYXNrKQorc3RhdGljIGlubGluZSB2b2lkIHNldFBpeGVs
UHJlbXVsdGlwbGllZFJHQkEoUkdCQTMyKiBkZXN0LCBwbmdfYnl0ZXAgcGl4ZWwsIHVuc2lnbmVk
IGNoYXImIG5vblRyaXZpYWxBbHBoYU1hc2spCiB7CiAgICAgdW5zaWduZWQgY2hhciBhID0gcGl4
ZWxbM107CiAgICAgdW5zaWduZWQgY2hhciByID0gZmFzdERpdmlkZUJ5MjU1KHBpeGVsWzBdICog
YSk7CkBAIC00NDcsNyArNDQ3LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJs
ZSh1bnNpZwogICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVttX2N1
cnJlbnRGcmFtZV07CiAgICAgaWYgKGJ1ZmZlci5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFt
ZUVtcHR5KSB7CiAgICAgICAgIHBuZ19zdHJ1Y3RwIHBuZyA9IG1fcmVhZGVyLT5wbmdQdHIoKTsK
LSAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzY2FsZWRTaXplKCkud2lkdGgoKSwgc2NhbGVk
U2l6ZSgpLmhlaWdodCgpKSkgeworICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNjYWxlZFNp
emUoKSkpIHsKICAgICAgICAgICAgIGxvbmdqbXAoSk1QQlVGKHBuZyksIDEpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CkBAIC00NjksMTAgKzQ2OSw3IEBAIHZvaWQgUE5HSW1hZ2VE
ZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWcKICNpZiBFTkFCTEUoQVBORykKICAgICAgICAgaWYg
KG1fY3VycmVudEZyYW1lKQogICAgICAgICAgICAgaW5pdEZyYW1lQnVmZmVyKG1fY3VycmVudEZy
YW1lKTsKLSAgICAgICAgZWxzZQogI2VuZGlmCi0gICAgICAgIC8vIEZvciBQTkdzLCB0aGUgZnJh
bWUgYWx3YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2UuCi0gICAgICAgIGJ1ZmZlci5zZXRPcmln
aW5hbEZyYW1lUmVjdChJbnRSZWN0KEludFBvaW50KCksIHNpemUoKSkpOwogICAgIH0KIAogICAg
IC8qIGxpYnBuZyBjb21tZW50cyAoaGVyZSB0byBleHBsYWluIHdoYXQgZm9sbG93cykuCkBAIC01
MzEsNyArNTI4LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZwog
ICAgIH0KIAogICAgIC8vIFdyaXRlIHRoZSBkZWNvZGVkIHJvdyBwaXhlbHMgdG8gdGhlIGZyYW1l
IGJ1ZmZlci4KLSAgICBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGFkZHJlc3MgPSBidWZmZXIuZ2V0
QWRkcigwLCB5KTsKKyAgICBSR0JBMzIqIGFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcigwLCB5KTsK
ICAgICBpbnQgd2lkdGggPSBzY2FsZWRTaXplKCkud2lkdGgoKTsKICAgICB1bnNpZ25lZCBjaGFy
IG5vblRyaXZpYWxBbHBoYU1hc2sgPSAwOwogCkBAIC04MjAsNyArODE3LDcgQEAgdm9pZCBQTkdJ
bWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcihzaQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8v
IFdlIHdhbnQgdG8gY2xlYXIgdGhlIHByZXZpb3VzIGZyYW1lIHRvIHRyYW5zcGFyZW50LCB3aXRo
b3V0CiAgICAgICAgIC8vIGFmZmVjdGluZyBwaXhlbHMgaW4gdGhlIGltYWdlIG91dHNpZGUgb2Yg
dGhlIGZyYW1lLgotICAgICAgICBjb25zdCBJbnRSZWN0JiBwcmV2UmVjdCA9IHByZXZCdWZmZXIt
Pm9yaWdpbmFsRnJhbWVSZWN0KCk7CisgICAgICAgIEludFJlY3QgcHJldlJlY3QgPSBwcmV2QnVm
ZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgpOwogICAgICAgICBpZiAoIWZyYW1lSW5kZXggfHwgcHJl
dlJlY3QuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzY2FsZWRTaXplKCkpKSkgewogICAg
ICAgICAgICAgLy8gQ2xlYXJpbmcgdGhlIGZpcnN0IGZyYW1lLCBvciBhIGZyYW1lIHRoZSBzaXpl
IG9mIHRoZSB3aG9sZQogICAgICAgICAgICAgLy8gaW1hZ2UsIHJlc3VsdHMgaW4gYSBjb21wbGV0
ZWx5IGVtcHR5IGltYWdlLgpAQCAtODQ0LDcgKzg0MSw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVy
OjpmcmFtZUNvbXBsZXRlKCkKICAgICBwbmdfYnl0ZXAgaW50ZXJsYWNlQnVmZmVyID0gbV9yZWFk
ZXItPmludGVybGFjZUJ1ZmZlcigpOwogCiAgICAgaWYgKG1fY3VycmVudEZyYW1lICYmIGludGVy
bGFjZUJ1ZmZlcikgewotICAgICAgICBjb25zdCBJbnRSZWN0JiByZWN0ID0gYnVmZmVyLm9yaWdp
bmFsRnJhbWVSZWN0KCk7CisgICAgICAgIEludFJlY3QgcmVjdCA9IGJ1ZmZlci5vcmlnaW5hbEZy
YW1lUmVjdCgpOwogICAgICAgICBib29sIGhhc0FscGhhID0gbV9yZWFkZXItPmhhc0FscGhhKCk7
CiAgICAgICAgIHVuc2lnbmVkIGNvbG9yQ2hhbm5lbHMgPSBoYXNBbHBoYSA/IDQgOiAzOwogICAg
ICAgICBib29sIG5vblRyaXZpYWxBbHBoYSA9IGZhbHNlOwpAQCAtODU0LDcgKzg1MSw3IEBAIHZv
aWQgUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKCkKICNpZiBFTkFCTEUoSU1BR0VfREVD
T0RFUl9ET1dOX1NBTVBMSU5HKQogICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHJlY3QubWF4
WSgpIC0gcmVjdC55KCk7ICsreSkgewogICAgICAgICAgICAgcG5nX2J5dGVwIHJvdyA9IGludGVy
bGFjZUJ1ZmZlciArIChtX3NjYWxlZCA/IG1fc2NhbGVkUm93c1t5XSA6IHkpICogY29sb3JDaGFu
bmVscyAqIHNpemUoKS53aWR0aCgpOwotICAgICAgICAgICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRh
KiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIocmVjdC54KCksIHkgKyByZWN0LnkoKSk7CisgICAg
ICAgICAgICBSR0JBMzIqIGFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcihyZWN0LngoKSwgeSArIHJl
Y3QueSgpKTsKICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgcmVjdC5tYXhYKCkgLSBy
ZWN0LngoKTsgKyt4KSB7CiAgICAgICAgICAgICAgICAgcG5nX2J5dGVwIHBpeGVsID0gcm93ICsg
KG1fc2NhbGVkID8gbV9zY2FsZWRDb2x1bW5zW3hdIDogeCkgKiBjb2xvckNoYW5uZWxzOwogICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gaGFzQWxwaGEgPyBwaXhlbFszXSA6IDI1NTsK
QEAgLTg3MCw3ICs4NjcsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgp
CiAgICAgICAgIHBuZ19ieXRlcCByb3cgPSBpbnRlcmxhY2VCdWZmZXI7CiAgICAgICAgIGZvciAo
aW50IHkgPSByZWN0LnkoKTsgeSA8IHJlY3QubWF4WSgpOyArK3ksIHJvdyArPSBjb2xvckNoYW5u
ZWxzICogc2l6ZSgpLndpZHRoKCkpIHsKICAgICAgICAgICAgIHBuZ19ieXRlcCBwaXhlbCA9IHJv
dzsKLSAgICAgICAgICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogYWRkcmVzcyA9IGJ1ZmZlci5n
ZXRBZGRyKHJlY3QueCgpLCB5KTsKKyAgICAgICAgICAgIFJHQkEzMiogYWRkcmVzcyA9IGJ1ZmZl
ci5nZXRBZGRyKHJlY3QueCgpLCB5KTsKICAgICAgICAgICAgIGZvciAoaW50IHggPSByZWN0Lngo
KTsgeCA8IHJlY3QubWF4WCgpOyArK3gsIHBpeGVsICs9IGNvbG9yQ2hhbm5lbHMpIHsKICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IGhhc0FscGhhID8gcGl4ZWxbM10gOiAyNTU7CiAg
ICAgICAgICAgICAgICAgbm9uVHJpdmlhbEFscGhhIHw9IGFscGhhIDwgMjU1OwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Bu
Zy9QTkdJbWFnZURlY29kZXIuaAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw3ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgaW50IHJl
cGV0aXRpb25Db3VudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGxheUNvdW50LTE7IH0K
ICNlbmRpZgogICAgICAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIG92ZXJyaWRlOwotICAgICAg
ICBib29sIHNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkgb3ZlcnJpZGU7
CisgICAgICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7CiAgICAgICAg
IEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpIG92ZXJyaWRlOwog
ICAgICAgICAvLyBDQVVUSU9OOiBzZXRGYWlsZWQoKSBkZWxldGVzIHxtX3JlYWRlcnwuICBCZSBj
YXJlZnVsIHRvIGF2b2lkCiAgICAgICAgIC8vIGFjY2Vzc2luZyBkZWxldGVkIG1lbW9yeSwgZXNw
ZWNpYWxseSB3aGVuIGNhbGxpbmcgdGhpcyBmcm9tIGluc2lkZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dF
QlBJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTUsNyArMTE1LDcgQEAgYm9vbCBXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUo
Ym9vbCBvbmx5UwogICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgICAgICBtX2hh
c0FscGhhID0gZmFsc2U7CiAjZW5kaWYKLSAgICAgICAgaWYgKCFzZXRTaXplKHdpZHRoLCBoZWln
aHQpKQorICAgICAgICBpZiAoIXNldFNpemUoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSkpCiAgICAg
ICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgfQogCkBAIC0xMjgsMTggKzEyOCwxNyBA
QCBib29sIFdFQlBJbWFnZURlY29kZXI6OmRlY29kZShib29sIG9ubHlTCiAgICAgQVNTRVJUKGJ1
ZmZlci5zdGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKTsKIAogICAgIGlmIChi
dWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgewotICAgICAgICBpZiAo
IWJ1ZmZlci5zZXRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKQorICAgICAg
ICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNpemUoKSkpCiAgICAgICAgICAgICByZXR1cm4gc2V0RmFp
bGVkKCk7CiAgICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFs
KTsKICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKG1faGFzQWxwaGEpOwotICAgICAgICBidWZm
ZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKTsKICAg
ICB9CiAKICAgICBpZiAoIW1fZGVjb2RlcikgewogICAgICAgICBXRUJQX0NTUF9NT0RFIG1vZGUg
PSBvdXRwdXRNb2RlKG1faGFzQWxwaGEpOwogICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBo
YSkKICAgICAgICAgICAgIG1vZGUgPSBvdXRwdXRNb2RlKGZhbHNlKTsKLSAgICAgICAgaW50IHJv
d1N0cmlkZSA9IHNpemUoKS53aWR0aCgpICogc2l6ZW9mKEltYWdlRnJhbWU6OlBpeGVsRGF0YSk7
CisgICAgICAgIGludCByb3dTdHJpZGUgPSBzaXplKCkud2lkdGgoKSAqIHNpemVvZihSR0JBMzIp
OwogICAgICAgICB1aW50OF90KiBvdXRwdXQgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihi
dWZmZXIuZ2V0QWRkcigwLCAwKSk7CiAgICAgICAgIGludCBvdXRwdXRTaXplID0gc2l6ZSgpLmhl
aWdodCgpICogcm93U3RyaWRlOwogICAgICAgICBtX2RlY29kZXIgPSBXZWJQSU5ld1JHQihtb2Rl
LCBvdXRwdXQsIG91dHB1dFNpemUsIHJvd1N0cmlkZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288604</attachid>
            <date>2016-09-12 13:12:21 -0700</date>
            <delta_ts>2016-09-12 15:44:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159679-20160912130948.patch</filename>
            <type>text/plain</type>
            <size>62335</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTgxMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyNyBAQAorMjAxNi0wOS0xMiAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgdGhl
IHBpeGVsIGRhdGEgb2YgSW1hZ2VGcmFtZSB0byBhIHNlcGFyYXRlIGNsYXNzIG5hbWVkIEltYWdl
QmFja2luZ1N0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTk2NzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNb3ZlIHRoZSBwaXhlbCBkYXRhIG1hbmlwdWxhdGlvbiBwYXJ0IGluIEltYWdlRnJhbWUg
aW50byBhIHNlcGFyYXRlIGNsYXNzCisgICAgICAgIGFuZCBhbGxvY2F0ZSBpdCBvbiBkZW1hbmQu
CisKKyAgICAgICAgKiBQbGF0Zm9ybUVmbC5jbWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybUdUSy5j
bWFrZToKKyAgICAgICAgKiBQbGF0Zm9ybVdpbkNhaXJvLmNtYWtlOgorICAgICAgICAqIFdlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgQWRkIEltYWdlQmFja2luZ1N0
b3JlQ2Fpcm8uY3BwIGFuZCByZW1vdmUgSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwIGZyb20gdGhlCisg
ICAgICAgIFdlYktpdCBwcm9qZWN0cy4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cHJlbXVsdGlwbGllZENoYW5uZWwp
OiBjaGFubmVsID0gY2hhbm5lbCAqIGFscGhhIC8gMjU1LgorICAgICAgICAoV2ViQ29yZTo6dW5w
cmVtdWx0aXBsaWVkQ2hhbm5lbCk6IGNoYW5uZWwgPSBjaGFubmVsICogMjU1IC8gYWxwaGEuCisg
ICAgICAgIChXZWJDb3JlOjptYWtlUHJlbXVsdGlwbGllZFJHQkEpOiBVbi1wcmVtdWx0aXBsaWVk
IGNoYW5uZWxzIHRvIHByZW11bHRpcGxpZWQgUkdCQTMyLgorICAgICAgICAoV2ViQ29yZTo6bWFr
ZVVuUHJlbXVsdGlwbGllZFJHQkEpOiBQcmVtdWx0aXBsaWVkIGNoYW5uZWxzIHRvIHVuLXByZW11
bHRpcGxpZWQgUkdCQTMyLgorICAgICAgICAoV2ViQ29yZTo6Y29sb3JGcm9tUHJlbXVsdGlwbGll
ZEFSR0IpOiBVc2UgbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEuCisgICAgICAgIChXZWJDb3JlOjpw
cmVtdWx0aXBsaWVkQVJHQkZyb21Db2xvcik6IFVzZSBtYWtlUHJlbXVsdGlwbGllZFJHQkEuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OmZh
c3RNdWx0aXBseUJ5MjU1KTogeCAqIDI1NSA9IHggKiAyNTYgLSB4ID0geCA8PCA4IC0geC4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFja2luZ1N0b3JlLmg6IEFkZGVkLiBU
aGUgcHVycG9zZSBvZiB0aGlzIGNsYXNzIGlzCisgICAgICAgIHRvIG1ha2UgdGhlIHBpeGVscyBk
YXRhIG9wdGlvbmFsIGluIEltYWdlRnJhbWUuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCYWNraW5nU3RvcmU6OmNyZWF0ZSk6IENyZWF0ZXMgYSBuZXcgSW1hZ2VCYWNraW5nU3Rv
cmUuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJhY2tpbmdTdG9yZTo6c2V0U2l6ZSk6IENoYW5n
ZXMgdGhlIHBpeGVscyBzaXplLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6
OnNldEZyYW1lUmVjdCk6IFRoaXMgd2lsbCBhbHdheXMganVzdCBiZSB0aGUgZW50aXJlIGJ1ZmZl
ciBleGNlcHQgZm9yIEdJRiBhbmQgUE5HIGZyYW1lcy4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QmFja2luZ1N0b3JlOjpzaXplKTogUmV0dXJucyB0aGUgcGl4ZWxzIHNpemUuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJhY2tpbmdTdG9yZTo6ZnJhbWVSZWN0KTogUmV0dXJucyB0aGUgcGl4ZWxz
IGZyYW1lIHJlY3RhbmdsZS4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpj
bGVhcik6IENsZWFycyB0aGUgZW50aXJlIGltYWdlLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VC
YWNraW5nU3RvcmU6OmNsZWFyUmVjdCk6IENsZWFycyBhIHJlY3RhbmdsZSBpbiB0aGUgaW1hZ2Uu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJhY2tpbmdTdG9yZTo6cmVwZWF0Rmlyc3RSb3cpOiBS
ZXBlYXRzIHRoZSBmaXJzdCByb3cgaW4gYSByZWN0YW5nbGUgaW4gdGhlIGltYWdlLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OmF0KTogUmV0dXJucyBhIHBvaW50ZXIgdG8g
YSBwaXhlbCBkYXRhLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OnNldFJH
QkEpOiBTZXRzIHRoZSBjb2xvciBvZiBhIHBpeGVsIGluIHRoZSBpbWFnZS4KKyAgICAgICAgKFdl
YkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpvdmVyUkdCQSk6IEJsZW5kIGEgY29sb3Igd2l0aCBh
IHBpeGVsIGluIHRoZSBpbWFnZS4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3Jl
OjppbkJvdW5kcyk6IENoZWNrcyBpZiBhIHJlY3RhbmdsZSBpcyBpbiB0aGUgYm91bmRzIG9mIHRo
ZSBpbWFnZS4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjppc092ZXJTaXpl
KTogQ2hlY2tzIHdoZXRoZXIgYSBzaXplIGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQgZm9yIGFuIGlt
YWdlLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OkltYWdlQmFja2luZ1N0
b3JlKToKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NnL05hdGl2ZUltYWdlQ0cuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6bmF0aXZlSW1hZ2VIYXNBbHBoYSk6IEltcGxlbWVudCB0aGlz
IGZ1bmN0aW9uLiBTZWUgY29tbWVudHMgaW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1ODY4NC4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om9w
ZXJhdG9yPSk6IGNvcHlCaXRtYXBEYXRhKCkgbm93IGNvcGllcyB0aGUgZnJhbWVSZWN0IG9mIHRo
ZSBJbWFnZUJhY2tpbmdTdG9yZS4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNsZWFy
UGl4ZWxEYXRhKTogVGhlIHBpeGVscyBkYXRhIGFuZCB0aGUgcG9pbnRlciB0byB0aGVzZSBwaXhl
bHMgYXJlIG5vdyBpbmNsdWRlZCBpbiB0aGUgSW1hZ2VCYWNraW5nU3RvcmUuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSk6IENsZWFyaW5nIHRoZSBpbWFn
ZSBwaXhlbHMgYXJlIG5vdyBpbiBJbWFnZUJhY2tpbmdTdG9yZTo6Y2xlYXIoKS4KKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlRnJhbWU6Onplcm9GaWxsRnJhbWVSZWN0KTogQ2xlYXJpbmcgdGhlIGlt
YWdlIHBpeGVscyBhcmUgbm93IGluIEltYWdlQmFja2luZ1N0b3JlOjpjbGVhclJlY3QoKS4KKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmNvcHlCaXRtYXBEYXRhKTogV2UgZWl0aGVyIG5l
ZWQgdG8gY3JlYXRlIGEgbmV3IEltYWdlQmFja2luZ1N0b3JlIG9yIG51bGxpZnkgdGhlIGN1cnJl
bnQgb25lLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0U2l6ZSk6IEltYWdlRnJh
bWU6OnNldFNpemUoKSBpcyBzdXBwb3NlZCB0byBiZSBjYWxsZWQgb25jZSBhbmQgdG8gY3JlYXRl
IHRoZSBJbWFnZUJhY2tpbmdTdG9yZS4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNl
dE9yaWdpbmFsRnJhbWVSZWN0KTogRGVsZWdhdGUgdGhpcyBjYWxsIHRvIEltYWdlQmFja2luZ1N0
b3JlOjpzZXRGcmFtZVJlY3QoKS4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGVjb2Rlcjo6ZnJh
bWVCeXRlc0F0SW5kZXgpOiBJbWFnZUZyYW1lOjpQaXhlbERhdGEgY2FuIGJlIHJlcGxhY2VkIGJ5
IFJHQkEzMi4KKworICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rl
ci5oOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weVJvd05UaW1lcyk6IFRoZSBp
bXBsZW1lbnRhdGlvbiB3YXMgbW92ZWQgdG8gSW1hZ2VCYWNraW5nU3RvcmU6OnJlcGVhdEZpcnN0
Um93KCkuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzaXplKTogR2V0cyB0aGUgc2l6
ZSBvZiBhbiBpbWFnZSBmcm9tIGl0cyBJbWFnZUJhY2tpbmdTdG9yZS4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlRnJhbWU6OmFzTmV3TmF0aXZlSW1hZ2UpOiBHZXRzIGEgTnRhaXZlSW1hZ2VQdHIg
ZnJvbSB0aGUgSW1hZ2VCYWNraW5nU3RvcmUuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
OjpiYWNraW5nU3RvcmUpOiBSZXR1cm5zIGEgcmF3IHBvaW50ZXIgdG8gdGhlIEltYWdlQmFja2lu
Z1N0b3JlLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6aGFzQmFja2luZ1N0b3JlKTog
UmV0dXJucyB3aGV0aGVyIHRoZSBJbWFnZUZyYW1lIGhhcyBhbiBJbWFnZUJhY2tpbmdTdG9yZS4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Om9yaWdpbmFsRnJhbWVSZWN0KTogUmV0dXJu
cyB0aGUgZnJhbWVSZWN0IG9mIHRoZSBpbWFnZSBmcm9tIGl0cyBJbWFnZUJhY2tpbmdTdG9yZS4K
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmdldEFkZHIpOiBEZWxlZ2F0ZXMgdGhlIGNh
bGwgdG8gdGhlIEltYWdlQmFja2luZ1N0b3JlLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFt
ZTo6c2V0UkdCQSk6IERlbGVnYXRlcyB0aGUgY2FsbCB0byB0aGUgSW1hZ2VCYWNraW5nU3RvcmUu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpvdmVyUkdCQSk6IERlbGVnYXRlcyB0aGUg
Y2FsbCB0byB0aGUgSW1hZ2VCYWNraW5nU3RvcmUuCisgICAgICAgIAorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VEZWNvZGVyOjpzZXRTaXplKTogc2V0U2l6ZSgpIG5vdyB0YWtlcyBhbiBJbnRTaXpl
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6c2V0T3JpZ2luYWxGcmFtZVJlY3QpOiBE
ZWxldGVkLiBNb3ZlZCB0byBJbWFnZURlY29kZXIuY3BwLgorICAgICAgICAoV2ViQ29yZTo6SW1h
Z2VGcmFtZTo6aGFzUGl4ZWxEYXRhKTogRGVsZXRlZC4gUmVuYW1lZCB0byBJbWFnZUZyYW1lOjpo
YXNCYWNraW5nU3RvcmUoKS4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OmZpeFBvaW50
VW5zaWduZWRNdWx0aXBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1l
OjpkaXZpZGUyNTUpOiBEZWxldGVkLiBSZXBsYWNlZCBieSBmYXN0RGl2aWRlQnkyNTUoKSBmcm9t
IENvbG9yLmguCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjp3aWR0aCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpoZWlnaHQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VEZWNvZGVyOjppc092ZXJTaXplKTogRGVsZXRlZC4gTW92ZWQgdG8g
SW1hZ2VCYWNraW5nU3RvcmU6OmlzT3ZlclNpemUoKS4KKworICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpC
TVBJbWFnZVJlYWRlcjo6ZGVjb2RlQk1QKToKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVh
ZGVyOjpwcm9jZXNzSW5mb0hlYWRlcik6CisgICAgICAgIEltYWdlRnJhbWU6OnNldFNpemUoKSBh
bmQgSW1hZ2VEZWNvZGVyOjpzZXRTaXplKCkgYm90aCB0YWtlIGFuIEludFNpemUgbm93LgorICAg
ICAgICBJbWFnZUJhY2tpbmdTdG9yZSBzZXRzIGl0cyBmcmFtZVJlY3QgdG8gdGhlIGVudGlyZSBp
bWFnZSBieSBkZWZhdWx0LgorICAgICAgICAKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9jYWlyby9JbWFnZUJhY2tpbmdTdG9yZUNhaXJvLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJhY2tpbmdTdG9yZTo6aW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcDogUmVtb3ZlZC4KKyAgICAg
ICAgSW1hZ2VCYWNraW5nU3RvcmU6OmltYWdlKCkgbm93IHJlcGxhY2VzIEltYWdlRnJhbWU6OmFz
TmV3TmF0aXZlSW1hZ2UoKS4KKyAgICAgICAgCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFn
ZURlY29kZXI6OnNldFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpo
YXZlRGVjb2RlZFJvdyk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmluaXRG
cmFtZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRklt
YWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJ
bWFnZVJlYWRlci5jcHA6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6cGFyc2UpOgorICAgICAg
ICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SUNPSW1hZ2VEZWNvZGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OklDT0ltYWdlRGVjb2Rlcjo6cHJvY2Vzc0RpcmVjdG9yeUVudHJpZXMpOgorICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29kZXIuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlUmVhZGVyOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SlBFR0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhl
bCk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rl
ci5oOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29k
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UE5HSW1hZ2VEZWNvZGVyOjpzZXRTaXplKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6aGVhZGVyQXZhaWxhYmxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OnNldFBpeGVsUkdCKToKKyAgICAgICAgKFdlYkNvcmU6OnNldFBpeGVsUkdC
QSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhlbFByZW11bHRpcGxpZWRSR0JBKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlBOR0ltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICAtIFNlbmQgYW4gSW50U2l6
ZSB0byBJbWFnZUZyYW1lOjpzZXRTaXplKCkgYW5kIEltYWdlRGVjb2Rlcjo6c2V0U2l6ZSgpLgor
ICAgICAgICAtIFJlcGxhY2UgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhIGJ5IFJHQkEzMi4KKyAgICAg
ICAgLSBObyBuZWVkIHRvIGNhbGwgSW1hZ2VGcmFtZTo6c2V0T3JpZ2luYWxGcmFtZVJlY3QoKSBp
ZiB0aGlzIHNldHMgdGhlCisgICAgICAgICAgZnJhbWVSZWN0IHRvIHRoZSBlbnRpcmUgaW1hZ2Ug
cmVjdGFuZ2xlIHNpbmNlIHRoaXMgaXMgZG9uZSBieSBkZWZhdWx0CisgICAgICAgICAgaW4gSW1h
Z2VCYWNraW5nU3RvcmU6OnNldFNpemUoKS4KKwogMjAxNi0wOS0xMiAgU2ltb24gRnJhc2VyICA8
c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIC13ZWJraXQtdHJhbnNpdGlv
bi0qIGFuZCAtd2Via2l0LWFuaW1hdGlvbi0qIHByb3BlcnRpZXMgYmUgcHVyZSBhbGlhc2VzIG9m
IHRoZSB1bnByZWZpeGVkIG9uZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNt
YWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCShyZXZp
c2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQkod29ya2lu
ZyBjb3B5KQpAQCAtMTgzLDEwICsxODMsOSBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy94MTEvUGxhdGZvcm1EaXNwbGF5WDExLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3gxMS9YVW5pcXVlUmVzb3VyY2UuY3BwCiAKKyAgICBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZUJhY2tpbmdTdG9yZUNhaXJvLmNwcAogICAgIHBsYXRm
b3JtL2ltYWdlLWVuY29kZXJzL0pQRUdJbWFnZUVuY29kZXIuY3BwCiAKLSAgICBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKLQogICAgIHBsYXRmb3Jt
L25ldHdvcmsvZWZsL05ldHdvcmtTdGF0ZU5vdGlmaWVyRWZsLmNwcAogCiAgICAgcGxhdGZvcm0v
bmV0d29yay9zb3VwL0F1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlU291cC5jcHAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1BsYXRmb3JtR1RLLmNtYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1BsYXRmb3JtR1RLLmNtYWtlCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUdUSy5jbWFrZQkod29ya2luZyBjb3B5KQpAQCAtMTU1LDcgKzE1NSw3IEBAIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2d0ay9UZW1wb3JhcnlMaW5rU3R1
YnMuY3BwCiAgICAgcGxhdGZvcm0vZ3RrL1VzZXJBZ2VudEd0ay5jcHAKIAotICAgIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAorICAgIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCiAKICAgICBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9ndGsvU0RQUHJvY2Vzc29yU2NyaXB0UmVzb3VyY2VHdGsuY3Bw
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtV2luQ2Fpcm8uY21ha2UKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQkocmV2aXNpb24gMjA1
Njg0KQorKysgU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQkod29ya2luZyBj
b3B5KQpAQCAtNDYsNyArNDYsNyBAQCBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFGb3VuZGF0aW9uLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9TaW1wbGVGb250RGF0YUNhaXJvV2luLmNwcAog
Ci0gICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3Bw
CisgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VCYWNraW5nU3RvcmVDYWly
by5jcHAKIAogICAgIHBsYXRmb3JtL25ldHdvcmsvTmV0d29ya1N0b3JhZ2VTZXNzaW9uU3R1Yi5j
cHAKIApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMjc1LDYgKzIyNzUs
NyBAQAogCQk1NTVCODdFQzFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTU1Qjg3RUExQ0FB
RjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNwcCAqLzsgfTsKIAkJNTU1Qjg3RUQxQ0FB
RjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VE
ZWNvZGVyQ0cuaCAqLzsgfTsKIAkJNTVBMzM2RjcxRDgyMDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUlt
YWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUEz
MzZGNjFEODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLzsgfTsKKwkJNTVBMzM2Rjkx
RDgyMUUzQzAwMjJDNEM3IC8qIEltYWdlQmFja2luZ1N0b3JlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUEzMzZGODFEODIxRTNDMDAyMkM0QzcgLyog
SW1hZ2VCYWNraW5nU3RvcmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk1NzA5RThDRDFENDEzRDQ3MDAzMjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5
cHRvLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3
MDlFOENBMUQ0MTNDRTMwMDMyNDRBQyAvKiBXZWJLaXRTdWJ0bGVDcnlwdG8uY3BwICovOyB9Owog
CQk1NzA5RThDRTFENDEzRDVCMDAzMjQ0QUMgLyogSlNXZWJLaXRTdWJ0bGVDcnlwdG9DdXN0b20u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFGRjhG
NjYxODA3NDYwODAwMTMyNjc0IC8qIEpTV2ViS2l0U3VidGxlQ3J5cHRvQ3VzdG9tLmNwcCAqLzsg
fTsKIAkJNTcwOUU4Q0YxRDQxM0Q5QTAwMzI0NEFDIC8qIFdlYktpdFN1YnRsZUNyeXB0by5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcwOUU4Q0IxRDQx
M0NFMzAwMzI0NEFDIC8qIFdlYktpdFN1YnRsZUNyeXB0by5oICovOyB9OwpAQCAtOTI5MSw2ICs5
MjkyLDcgQEAKIAkJNTU1Qjg3RUExQ0FBRjBBQjAwMzQ5NDI1IC8qIEltYWdlRGVjb2RlckNHLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltYWdlRGVjb2RlckNHLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTU1Qjg3RUIxQ0FBRjBBQjAwMzQ5NDI1
IC8qIEltYWdlRGVjb2RlckNHLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElt
YWdlRGVjb2RlckNHLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU1QTMzNkY2MUQ4
MjA5RjQwMDIyQzRDNyAvKiBOYXRpdmVJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBOYXRpdmVJbWFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1NUEz
MzZGODFEODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSW1hZ2VCYWNraW5nU3RvcmUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTVENDA4RjcxQTdDNjMxODAwQzc4NDUwIC8qIFNWR0ltYWdlQ2xpZW50
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdJbWFnZUNsaWVudHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTcwOUU4Q0ExRDQxM0NFMzAwMzI0NEFDIC8q
IFdlYktpdFN1YnRsZUNyeXB0by5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXZWJLaXRTdWJ0bGVDcnlwdG8uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk1NzA5RThDQjFENDEzQ0UzMDAzMjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5cHRvLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYktpdFN1YnRsZUNyeXB0by5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjA3NjksNiArMjA3NzEsNyBAQAogCQkJCTM3OTkxOTk0
MTIwMERERjQwMEVBMDQxQyAvKiBXT0ZGRmlsZUZvcm1hdC5jcHAgKi8sCiAJCQkJMzc5OTE5OTUx
MjAwRERGNDAwRUEwNDFDIC8qIFdPRkZGaWxlRm9ybWF0LmggKi8sCiAJCQkJNTVBMzM2RjYxRDgy
MDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi8sCisJCQkJNTVBMzM2RjgxRDgyMUUzQzAw
MjJDNEM3IC8qIEltYWdlQmFja2luZ1N0b3JlLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IGdyYXBo
aWNzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI2MzM5LDYgKzI2MzQyLDcgQEAK
IAkJCQk1ODJDQjA1MzFBNzhBMTRCMDBBRkZDQzQgLyogU2ltcGxlTGluZUxheW91dFRleHRGcmFn
bWVudEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlDNUExRUE3RDE1MkJDRjA4MDA0RDAw
QjYgLyogU2ltcGxpZnlNYXJrdXBDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzJBN0Yy
MTFDNkU1NzE5MDA5QzYxNDkgLyogU2ltdWxhdGVkQ2xpY2suaCBpbiBIZWFkZXJzICovLAorCQkJ
CTU1QTMzNkY5MUQ4MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMzE3NDFBQUQxNjYzNjYwOTAwOEE1QjdFIC8qIFNpbXVsYXRlZENsaWNrT3B0
aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQwMEQ3QTUxNEEzRjYxOTAwNzM0MDExIC8qIFNp
bmNSZXNhbXBsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMzI3RDYwMTFBMzNBMkIwMDRGOUQ2
NSAvKiBTaW5rRG9jdW1lbnQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw2ICs0OSwxNiBAQCBjb25zdCBSR0JBMzIgQ29sb3I6OnRyYW5zcGFyZW50Owogc3RhdGljIGNv
bnN0IFJHQkEzMiBsaWdodGVuZWRCbGFjayA9IDB4RkY1NDU0NTQ7CiBzdGF0aWMgY29uc3QgUkdC
QTMyIGRhcmtlbmVkV2hpdGUgPSAweEZGQUJBQkFCOwogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVk
IHByZW11bHRpcGxpZWRDaGFubmVsKHVuc2lnbmVkIGMsIHVuc2lnbmVkIGEpCit7CisgICAgcmV0
dXJuIGZhc3REaXZpZGVCeTI1NShjICogYSArIDI1NCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5z
aWduZWQgdW5wcmVtdWx0aXBsaWVkQ2hhbm5lbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBhKQorewor
ICAgIHJldHVybiAoZmFzdE11bHRpcGx5QnkyNTUoYykgKyBhIC0gMSkgLyBhOworfQorCiBSR0JB
MzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBiKQogewogICAgIHJldHVybiAweEZGMDAwMDAw
IHwgc3RkOjptYXgoMCwgc3RkOjptaW4ociwgMjU1KSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6
Om1pbihnLCAyNTUpKSA8PCA4IHwgc3RkOjptYXgoMCwgc3RkOjptaW4oYiwgMjU1KSk7CkBAIC01
OSw2ICs2OSwxNiBAQCBSR0JBMzIgbWFrZVJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50CiAg
ICAgcmV0dXJuIHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGEsIDI1NSkpIDw8IDI0IHwgc3RkOjptYXgo
MCwgc3RkOjptaW4ociwgMjU1KSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAyNTUp
KSA8PCA4IHwgc3RkOjptYXgoMCwgc3RkOjptaW4oYiwgMjU1KSk7CiB9CiAKK1JHQkEzMiBtYWtl
UHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCit7CisgICAgcmV0
dXJuIG1ha2VSR0JBKHByZW11bHRpcGxpZWRDaGFubmVsKHIsIGEpLCBwcmVtdWx0aXBsaWVkQ2hh
bm5lbChnLCBhKSwgcHJlbXVsdGlwbGllZENoYW5uZWwoYiwgYSksIGEpOworfQorCitSR0JBMzIg
bWFrZVVuUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCit7Cisg
ICAgcmV0dXJuIG1ha2VSR0JBKHVucHJlbXVsdGlwbGllZENoYW5uZWwociwgYSksIHVucHJlbXVs
dGlwbGllZENoYW5uZWwoZywgYSksIHVucHJlbXVsdGlwbGllZENoYW5uZWwoYiwgYSksIGEpOwor
fQorCiBzdGF0aWMgaW50IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGZsb2F0IGYpCiB7CiAgICAgLy8g
V2UgdXNlIGxyb3VuZGYgYW5kIDI1NSBpbnN0ZWFkIG9mIG5leHRhZnRlcmYoMjU2LCAwKSB0byBt
YXRjaCBDRydzIHJvdW5kaW5nCkBAIC00ODIsMTQgKzUwMiw5IEBAIHZvaWQgQ29sb3I6OmdldEhT
Vihkb3VibGUmIGh1ZSwgZG91YmxlJiAKIENvbG9yIGNvbG9yRnJvbVByZW11bHRpcGxpZWRBUkdC
KFJHQkEzMiBwaXhlbENvbG9yKQogewogICAgIGludCBhbHBoYSA9IGFscGhhQ2hhbm5lbChwaXhl
bENvbG9yKTsKLSAgICBpZiAoYWxwaGEgJiYgYWxwaGEgPCAyNTUpIHsKLSAgICAgICAgcmV0dXJu
IENvbG9yOjpjcmVhdGVVbmNoZWNrZWQoCi0gICAgICAgICAgICByZWRDaGFubmVsKHBpeGVsQ29s
b3IpICogMjU1IC8gYWxwaGEsCi0gICAgICAgICAgICBncmVlbkNoYW5uZWwocGl4ZWxDb2xvcikg
KiAyNTUgLyBhbHBoYSwKLSAgICAgICAgICAgIGJsdWVDaGFubmVsKHBpeGVsQ29sb3IpICogMjU1
IC8gYWxwaGEsCi0gICAgICAgICAgICBhbHBoYSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHJldHVy
biBDb2xvcihwaXhlbENvbG9yKTsKKyAgICBpZiAoYWxwaGEgJiYgYWxwaGEgPCAyNTUpCisgICAg
ICAgIHBpeGVsQ29sb3IgPSBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShyZWRDaGFubmVsKHBpeGVs
Q29sb3IpLCBncmVlbkNoYW5uZWwocGl4ZWxDb2xvciksIGJsdWVDaGFubmVsKHBpeGVsQ29sb3Ip
LCBhbHBoYSk7CisgICAgcmV0dXJuIENvbG9yKHBpeGVsQ29sb3IpOwogfQogCiBSR0JBMzIgcHJl
bXVsdGlwbGllZEFSR0JGcm9tQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQpAQCAtNDk3LDE0ICs1
MTIsMTAgQEAgUkdCQTMyIHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKGNvbnN0IAogICAgIHVu
c2lnbmVkIHBpeGVsQ29sb3I7CiAKICAgICB1bnNpZ25lZCBhbHBoYSA9IGNvbG9yLmFscGhhKCk7
Ci0gICAgaWYgKGFscGhhIDwgMjU1KSB7Ci0gICAgICAgIHBpeGVsQ29sb3IgPSBDb2xvcjo6Y3Jl
YXRlVW5jaGVja2VkKAotICAgICAgICAgICAgZmFzdERpdmlkZUJ5MjU1KGNvbG9yLnJlZCgpICog
YWxwaGEgKyAyNTQpLAotICAgICAgICAgICAgZmFzdERpdmlkZUJ5MjU1KGNvbG9yLmdyZWVuKCkg
KiBhbHBoYSArIDI1NCksCi0gICAgICAgICAgICBmYXN0RGl2aWRlQnkyNTUoY29sb3IuYmx1ZSgp
ICogYWxwaGEgKyAyNTQpLAotICAgICAgICAgICAgYWxwaGEpLnJnYigpOwotICAgIH0gZWxzZQot
ICAgICAgICAgcGl4ZWxDb2xvciA9IGNvbG9yLnJnYigpOworICAgIGlmIChhbHBoYSA8IDI1NSkK
KyAgICAgICAgcGl4ZWxDb2xvciA9IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShjb2xvci5yZWQoKSwg
Y29sb3IuZ3JlZW4oKSwgY29sb3IuYmx1ZSgpLCBhbHBoYSk7CisgICAgZWxzZQorICAgICAgICBw
aXhlbENvbG9yID0gY29sb3IucmdiKCk7CiAKICAgICByZXR1cm4gcGl4ZWxDb2xvcjsKIH0KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkocmV2aXNpb24gMjA1
Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUsNiArNTUsOSBAQCB0eXBlZGVmIHVuc2lnbmVkIFJHQkEzMjsgLy8gRGVw
cmVjYXRlZDogCiBXRUJDT1JFX0VYUE9SVCBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGlu
dCBiKTsKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcsIGludCBi
LCBpbnQgYSk7CiAKK1JHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBp
bnQgYiwgaW50IGEpOworUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQg
ZywgaW50IGIsIGludCBhKTsKKwogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIGNvbG9yV2l0aE92ZXJy
aWRlQWxwaGEoUkdCQTMyIGNvbG9yLCBmbG9hdCBvdmVycmlkZUFscGhhKTsKIFdFQkNPUkVfRVhQ
T1JUIFJHQkEzMiBjb2xvcldpdGhPdmVycmlkZUFscGhhKFJHQkEzMiBjb2xvciwgT3B0aW9uYWw8
ZmxvYXQ+IG92ZXJyaWRlQWxwaGEpOwogCkBAIC0yMTgsNiArMjIxLDcgQEAgQ29sb3IgYmxlbmQo
Y29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbAogCiBpbnQgZGlmZmVyZW5jZVNxdWFyZWQoY29u
c3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOwogCit1aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1
aW50MTZfdCB2YWx1ZSk7CiB1aW50MTZfdCBmYXN0RGl2aWRlQnkyNTUodWludDE2X3QpOwogCiAj
aWYgVVNFKENHKQpAQCAtMjkwLDYgKzI5NCwxMSBAQCBpbmxpbmUgdWludDhfdCByb3VuZEFuZENs
YW1wQ29sb3JDaGFubmVsCiAgICAgcmV0dXJuIHN0ZDo6bWF4KDAuZiwgc3RkOjptaW4oMjU1LmYs
IHN0ZDo6cm91bmQodmFsdWUpKSk7CiB9CiAKK2lubGluZSB1aW50MTZfdCBmYXN0TXVsdGlwbHlC
eTI1NSh1aW50MTZfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gKHZhbHVlIDw8IDgpIC0gdmFsdWU7
Cit9CisKIGlubGluZSB1aW50MTZfdCBmYXN0RGl2aWRlQnkyNTUodWludDE2X3QgdmFsdWUpCiB7
CiAgICAgLy8gV2hpbGUgdGhpcyBpcyBhbiBhcHByb3hpbWF0ZSBhbGdvcml0aG0gZm9yIGRpdmlz
aW9uIGJ5IDI1NSwgaXQgZ2l2ZXMgcGVyZmVjdGx5IGFjY3VyYXRlIHJlc3VsdHMgZm9yIDE2LWJp
dCB2YWx1ZXMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJh
Y2tpbmdTdG9yZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ltYWdlQmFja2luZ1N0b3JlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiSW50UmVj
dC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJOYXRpdmVJbWFnZS5oIgorCisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIElt
YWdlQmFja2luZ1N0b3JlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQmFja2luZ1N0b3JlPiBjcmVhdGUoY29u
c3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhID0gdHJ1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCYWNraW5nU3RvcmU+KG5ldyBJbWFn
ZUJhY2tpbmdTdG9yZShzaXplLCBwcmVtdWx0aXBseUFscGhhKSk7CisgICAgfQorCisgICAgc3Rh
dGljIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJhY2tpbmdTdG9yZT4gY3JlYXRlKGNvbnN0IEltYWdl
QmFja2luZ1N0b3JlJiBvdGhlcikKKyAgICB7CisgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9w
dHI8SW1hZ2VCYWNraW5nU3RvcmU+KG5ldyBJbWFnZUJhY2tpbmdTdG9yZShvdGhlcikpOworICAg
IH0KKworICAgIE5hdGl2ZUltYWdlUHRyIGltYWdlKCkgY29uc3Q7CisKKyAgICBib29sIHNldFNp
emUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICB7CisgICAgICAgIGlmIChzaXplLmlzRW1wdHko
KSB8fCAhbV9waXhlbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KHNpemUuYXJlYSgpKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBtX3BpeGVscy5yZXNpemUoc2l6ZS5hcmVhKCkp
OworICAgICAgICBtX3BpeGVsc1B0ciA9IG1fcGl4ZWxzLmRhdGEoKTsKKyAgICAgICAgbV9zaXpl
ID0gc2l6ZTsKKyAgICAgICAgbV9mcmFtZVJlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIG1fc2l6
ZSk7CisgICAgICAgIGNsZWFyKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIGZyYW1lUmVjdCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVCghbV9zaXplLmlzRW1wdHkoKSk7CisgICAgICAgIEFTU0VSVChpbkJvdW5kcyhm
cmFtZVJlY3QpKTsKKyAgICAgICAgbV9mcmFtZVJlY3QgPSBmcmFtZVJlY3Q7CisgICAgfQorCisg
ICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorICAgIGNv
bnN0IEludFJlY3QmIGZyYW1lUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0OyB9CisK
KyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1lbXNldChtX3BpeGVsc1B0ciwgMCwg
bV9zaXplLmFyZWEoKSAqIHNpemVvZihSR0JBMzIpKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFy
UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQorICAgIHsKKyAgICAgICAgaWYgKHJlY3QuaXNFbXB0
eSgpIHx8ICFpbkJvdW5kcyhyZWN0KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBz
aXplX3QgcmVjdFdpZHRoSW5CeXRlcyA9IHJlY3Qud2lkdGgoKSAqIHNpemVvZihSR0JBMzIpOwor
ICAgICAgICBSR0JBMzIqIHN0YXJ0ID0gYXQocmVjdC54KCksIHJlY3QueSgpKTsKKyAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCByZWN0LmhlaWdodCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1l
bXNldChzdGFydCwgMCwgcmVjdFdpZHRoSW5CeXRlcyk7CisgICAgICAgICAgICBzdGFydCArPSBt
X3NpemUud2lkdGgoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgcmVwZWF0Rmlyc3RS
b3coY29uc3QgSW50UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIGlmIChyZWN0LmlzRW1wdHko
KSB8fCAhaW5Cb3VuZHMocmVjdCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc2l6
ZV90IHJlY3RXaWR0aEluQnl0ZXMgPSByZWN0LndpZHRoKCkgKiBzaXplb2YoUkdCQTMyKTsKKyAg
ICAgICAgUkdCQTMyKiBzcmMgPSBhdChyZWN0LngoKSwgcmVjdC55KCkpOworICAgICAgICBSR0JB
MzIqIGRlc3QgPSBzcmMgKyBtX3NpemUud2lkdGgoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDE7
IGkgPCByZWN0LmhlaWdodCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1lbWNweShkZXN0LCBzcmMs
IHJlY3RXaWR0aEluQnl0ZXMpOworICAgICAgICAgICAgZGVzdCArPSBtX3NpemUud2lkdGgoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIFJHQkEzMiogYXQoaW50IHgsIGludCB5KSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcGl4ZWxzUHRyICsgeSAqIG1fc2l6ZS53aWR0aCgpICsg
eDsKKyAgICB9CisKKyAgICB2b2lkIHNldFJHQkEoaW50IHgsIGludCB5LCB1bnNpZ25lZCByLCB1
bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgc2V0UkdC
QShhdCh4LCB5KSwgciwgZywgYiwgYSk7CisgICAgfQorCisgICAgdm9pZCBzZXRSR0JBKFJHQkEz
MiogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkK
KyAgICB7CisgICAgICAgIGlmIChtX3ByZW11bHRpcGx5QWxwaGEgJiYgIWEpCisgICAgICAgICAg
ICAqZGVzdCA9IDA7CisgICAgICAgIGVsc2UgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAmJiBhIDwg
MjU1KQorICAgICAgICAgICAgKmRlc3QgPSBtYWtlUHJlbXVsdGlwbGllZFJHQkEociwgZywgYiwg
YSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICpkZXN0ID0gbWFrZVJHQkEociwgZywgYiwg
YSk7CisgICAgfQorCisgICAgdm9pZCBvdmVyUkdCQShSR0JBMzIqIGRlc3QsIHVuc2lnbmVkIHIs
IHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCisgICAgeworICAgICAgICBpZiAo
IWEpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKGEgPj0gMjU1IHx8ICFhbHBo
YUNoYW5uZWwoKmRlc3QpKSB7CisgICAgICAgICAgICBzZXRSR0JBKGRlc3QsIHIsIGcsIGIsIGEp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFtX3ByZW11
bHRpcGx5QWxwaGEpCisgICAgICAgICAgICAqZGVzdCA9IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShy
ZWRDaGFubmVsKCpkZXN0KSwgZ3JlZW5DaGFubmVsKCpkZXN0KSwgYmx1ZUNoYW5uZWwoKmRlc3Qp
LCBhbHBoYUNoYW5uZWwoKmRlc3QpKTsKKworICAgICAgICB1bnNpZ25lZCBkID0gMjU1IC0gYTsK
KworICAgICAgICByID0gZmFzdERpdmlkZUJ5MjU1KHIgKiBhICsgcmVkQ2hhbm5lbCgqZGVzdCkg
KiBkKTsKKyAgICAgICAgZyA9IGZhc3REaXZpZGVCeTI1NShnICogYSArIGdyZWVuQ2hhbm5lbCgq
ZGVzdCkgKiBkKTsKKyAgICAgICAgYiA9IGZhc3REaXZpZGVCeTI1NShiICogYSArIGJsdWVDaGFu
bmVsKCpkZXN0KSAqIGQpOworICAgICAgICBhICs9IGZhc3REaXZpZGVCeTI1NShkICogYWxwaGFD
aGFubmVsKCpkZXN0KSk7CisKKyAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSkKKyAgICAg
ICAgICAgICpkZXN0ID0gbWFrZVJHQkEociwgZywgYiwgYSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICpkZXN0ID0gbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEociwgZywgYiwgYSk7CisgICAg
fQorCisgICAgYm9vbCBpbkJvdW5kcyhjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXplKS5jb250YWlucyhyZWN0
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc092ZXJTaXplKGNvbnN0IEludFNpemUmIHNp
emUpCisgICAgeworICAgICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIE1heFBpeGVscyA9
ICgoMSA8PCAyOSkgLSAxKTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHBpeGVscyA9IHN0
YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6ZS53aWR0aCgpKSAqIHN0YXRpY19jYXN0
PHVuc2lnbmVkIGxvbmcgbG9uZz4oc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIHJldHVybiBwaXhl
bHMgPiBNYXhQaXhlbHM7CisgICAgfQorCitwcml2YXRlOgorICAgIEltYWdlQmFja2luZ1N0b3Jl
KGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSA9IHRydWUpCisgICAg
ICAgIDogbV9wcmVtdWx0aXBseUFscGhhKHByZW11bHRpcGx5QWxwaGEpCisgICAgeworICAgICAg
ICBBU1NFUlQoIXNpemUuaXNFbXB0eSgpICYmICFpc092ZXJTaXplKHNpemUpKTsKKyAgICAgICAg
c2V0U2l6ZShzaXplKTsKKyAgICB9CisKKyAgICBJbWFnZUJhY2tpbmdTdG9yZShjb25zdCBJbWFn
ZUJhY2tpbmdTdG9yZSYgb3RoZXIpCisgICAgICAgIDogbV9waXhlbHMob3RoZXIubV9waXhlbHMp
CisgICAgICAgICwgbV9zaXplKG90aGVyLm1fc2l6ZSkKKyAgICAgICAgLCBtX3ByZW11bHRpcGx5
QWxwaGEob3RoZXIubV9wcmVtdWx0aXBseUFscGhhKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFt
X3NpemUuaXNFbXB0eSgpICYmICFpc092ZXJTaXplKG1fc2l6ZSkpOworICAgICAgICBtX3BpeGVs
c1B0ciA9IG1fcGl4ZWxzLmRhdGEoKTsKKyAgICB9CisKKyAgICBWZWN0b3I8UkdCQTMyPiBtX3Bp
eGVsczsKKyAgICBSR0JBMzIqIG1fcGl4ZWxzUHRyIHsgbnVsbHB0ciB9OworICAgIEludFNpemUg
bV9zaXplOworICAgIEludFJlY3QgbV9mcmFtZVJlY3Q7IC8vIFRoaXMgd2lsbCBhbHdheXMganVz
dCBiZSB0aGUgZW50aXJlIGJ1ZmZlciBleGNlcHQgZm9yIEdJRiBhbmQgUE5HIGZyYW1lcworICAg
IGJvb2wgbV9wcmVtdWx0aXBseUFscGhhIHsgdHJ1ZSB9OworfTsKKworfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0aXZlSW1hZ2VDRy5j
cHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL05hdGl2ZUltYWdlQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NywxMCArNDcsMTAgQEAg
SW50U2l6ZSBuYXRpdmVJbWFnZVNpemUoY29uc3QgTmF0aXZlSW1hZwogICAgIHJldHVybiBpbWFn
ZSA/IEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGltYWdlLmdldCgpKSwgQ0dJbWFnZUdldEhlaWdo
dChpbWFnZS5nZXQoKSkpIDogSW50U2l6ZSgpOwogfQogCi1ib29sIG5hdGl2ZUltYWdlSGFzQWxw
aGEoY29uc3QgTmF0aXZlSW1hZ2VQdHImKQorYm9vbCBuYXRpdmVJbWFnZUhhc0FscGhhKGNvbnN0
IE5hdGl2ZUltYWdlUHRyJiBpbWFnZSkKIHsKLSAgICAvLyBGSVhNRTogQW5zd2VyIGNvcnJlY3Rs
eSB0aGUgcXVlc3Rpb246IGRvZXMgdGhlIENHSW1hZ2VSZWYgaGF2ZSBhbHBoYSBjaGFubm5lbD8K
LSAgICByZXR1cm4gdHJ1ZTsKKyAgICBDR0ltYWdlQWxwaGFJbmZvIGluZm8gPSBDR0ltYWdlR2V0
QWxwaGFJbmZvKGltYWdlLmdldCgpKTsKKyAgICByZXR1cm4gKGluZm8gPj0ga0NHSW1hZ2VBbHBo
YVByZW11bHRpcGxpZWRMYXN0KSAmJiAoaW5mbyA8PSBrQ0dJbWFnZUFscGhhRmlyc3QpOwogfQog
CiBDb2xvciBuYXRpdmVJbWFnZVNpbmdsZVBpeGVsU29saWRDb2xvcihjb25zdCBOYXRpdmVJbWFn
ZVB0ciYgaW1hZ2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9JbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0Miw3ICsxNDIsNyBAQCBJbWFnZUZyYW1lJiBJbWFnZUZyYW1lOjpv
cGVyYXRvcj0oY29uc3QgCiAgICAgICAgIHJldHVybiAqdGhpczsKIAogICAgIGNvcHlCaXRtYXBE
YXRhKG90aGVyKTsKLSAgICBzZXRPcmlnaW5hbEZyYW1lUmVjdChvdGhlci5vcmlnaW5hbEZyYW1l
UmVjdCgpKTsKKyAgICBzZXRIYXNBbHBoYShvdGhlci5tX2hhc0FscGhhKTsKICAgICBzZXRTdGF0
dXMob3RoZXIuc3RhdHVzKCkpOwogICAgIHNldER1cmF0aW9uKG90aGVyLmR1cmF0aW9uKCkpOwog
ICAgIHNldERpc3Bvc2FsTWV0aG9kKG90aGVyLmRpc3Bvc2FsTWV0aG9kKCkpOwpAQCAtMTUyLDgg
KzE1Miw3IEBAIEltYWdlRnJhbWUmIEltYWdlRnJhbWU6Om9wZXJhdG9yPShjb25zdCAKIAogdm9p
ZCBJbWFnZUZyYW1lOjpjbGVhclBpeGVsRGF0YSgpCiB7Ci0gICAgbV9iYWNraW5nU3RvcmUuY2xl
YXIoKTsKLSAgICBtX2J5dGVzID0gMDsKKyAgICBtX2JhY2tpbmdTdG9yZSA9IG51bGxwdHI7CiAg
ICAgbV9zdGF0dXMgPSBGcmFtZUVtcHR5OwogICAgIC8vIE5PVEU6IERvIG5vdCByZXNldCBvdGhl
ciBtZW1iZXJzIGhlcmU7IGNsZWFyRnJhbWVCdWZmZXJDYWNoZSgpIGNhbGxzIHRoaXMKICAgICAv
LyB0byBmcmVlIHRoZSBiaXRtYXAgZGF0YSwgYnV0IG90aGVyIGZ1bmN0aW9ucyBsaWtlIGluaXRG
cmFtZUJ1ZmZlcigpIGFuZApAQCAtMTYzLDI0ICsxNjIsMTYgQEAgdm9pZCBJbWFnZUZyYW1lOjpj
bGVhclBpeGVsRGF0YSgpCiAKIHZvaWQgSW1hZ2VGcmFtZTo6emVyb0ZpbGxQaXhlbERhdGEoKQog
ewotICAgIG1lbXNldChtX2J5dGVzLCAwLCBtX3NpemUud2lkdGgoKSAqIG1fc2l6ZS5oZWlnaHQo
KSAqIHNpemVvZihQaXhlbERhdGEpKTsKKyAgICBtX2JhY2tpbmdTdG9yZS0+Y2xlYXIoKTsKICAg
ICBtX2hhc0FscGhhID0gdHJ1ZTsKIH0KIAogdm9pZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbEZyYW1l
UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIEFTU0VSVChJbnRSZWN0KEludFBvaW50
KCksIG1fc2l6ZSkuY29udGFpbnMocmVjdCkpOwotCiAgICAgaWYgKHJlY3QuaXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBzaXplX3QgcmVjdFdpZHRoSW5CeXRlcyA9IHJlY3Qud2lk
dGgoKSAqIHNpemVvZihQaXhlbERhdGEpOwotICAgIFBpeGVsRGF0YSogc3RhcnQgPSBtX2J5dGVz
ICsgKHJlY3QueSgpICogd2lkdGgoKSkgKyByZWN0LngoKTsKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IHJlY3QuaGVpZ2h0KCk7ICsraSkgewotICAgICAgICBtZW1zZXQoc3RhcnQsIDAsIHJlY3RX
aWR0aEluQnl0ZXMpOwotICAgICAgICBzdGFydCArPSB3aWR0aCgpOwotICAgIH0KLQorICAgIG1f
YmFja2luZ1N0b3JlLT5jbGVhclJlY3QocmVjdCk7CiAgICAgc2V0SGFzQWxwaGEodHJ1ZSk7CiB9
CiAKQEAgLTE4OSwyNSArMTgwLDE5IEBAIGJvb2wgSW1hZ2VGcmFtZTo6Y29weUJpdG1hcERhdGEo
Y29uc3QgSW0KICAgICBpZiAodGhpcyA9PSAmb3RoZXIpCiAgICAgICAgIHJldHVybiB0cnVlOwog
Ci0gICAgbV9iYWNraW5nU3RvcmUgPSBvdGhlci5tX2JhY2tpbmdTdG9yZTsKLSAgICBtX2J5dGVz
ID0gbV9iYWNraW5nU3RvcmUuZGF0YSgpOwotICAgIG1fc2l6ZSA9IG90aGVyLm1fc2l6ZTsKLSAg
ICBzZXRIYXNBbHBoYShvdGhlci5tX2hhc0FscGhhKTsKKyAgICBpZiAob3RoZXIubV9iYWNraW5n
U3RvcmUpCisgICAgICAgIG1fYmFja2luZ1N0b3JlID0gSW1hZ2VCYWNraW5nU3RvcmU6OmNyZWF0
ZSgqb3RoZXIubV9iYWNraW5nU3RvcmUuZ2V0KCkpOworICAgIGVsc2UKKyAgICAgICAgbV9iYWNr
aW5nU3RvcmUgPSBudWxscHRyOworICAgIAogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIElt
YWdlRnJhbWU6OnNldFNpemUoaW50IG5ld1dpZHRoLCBpbnQgbmV3SGVpZ2h0KQorYm9vbCBJbWFn
ZUZyYW1lOjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgQVNTRVJUKCF3aWR0
aCgpICYmICFoZWlnaHQoKSk7Ci0gICAgc2l6ZV90IGJhY2tpbmdTdG9yZVNpemUgPSBuZXdXaWR0
aCAqIG5ld0hlaWdodDsKLSAgICBpZiAoIW1fYmFja2luZ1N0b3JlLnRyeVJlc2VydmVDYXBhY2l0
eShiYWNraW5nU3RvcmVTaXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fYmFja2lu
Z1N0b3JlLnJlc2l6ZShiYWNraW5nU3RvcmVTaXplKTsKLSAgICBtX2J5dGVzID0gbV9iYWNraW5n
U3RvcmUuZGF0YSgpOwotICAgIG1fc2l6ZSA9IEludFNpemUobmV3V2lkdGgsIG5ld0hlaWdodCk7
Ci0KLSAgICB6ZXJvRmlsbFBpeGVsRGF0YSgpOwotICAgIHJldHVybiB0cnVlOworICAgIEFTU0VS
VCghbV9iYWNraW5nU3RvcmUpOworICAgIG1fYmFja2luZ1N0b3JlID0gSW1hZ2VCYWNraW5nU3Rv
cmU6OmNyZWF0ZShzaXplLCBtX3ByZW11bHRpcGx5QWxwaGEpOworICAgIHJldHVybiBtX2JhY2tp
bmdTdG9yZSAhPSBudWxscHRyOwogfQogCiBib29sIEltYWdlRnJhbWU6Omhhc0FscGhhKCkgY29u
c3QKQEAgLTIyMCw2ICsyMDUsMTIgQEAgdm9pZCBJbWFnZUZyYW1lOjpzZXRIYXNBbHBoYShib29s
IGFscGhhKQogICAgIG1faGFzQWxwaGEgPSBhbHBoYTsKIH0KIAordm9pZCBJbWFnZUZyYW1lOjpz
ZXRPcmlnaW5hbEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiBmcmFtZVJlY3QpCit7CisgICAgaWYg
KG1fYmFja2luZ1N0b3JlKQorICAgICAgICBtX2JhY2tpbmdTdG9yZS0+c2V0RnJhbWVSZWN0KGZy
YW1lUmVjdCk7Cit9CisKIHZvaWQgSW1hZ2VGcmFtZTo6c2V0U3RhdHVzKEZyYW1lU3RhdHVzIHN0
YXR1cykKIHsKICAgICBtX3N0YXR1cyA9IHN0YXR1czsKQEAgLTI4Niw3ICsyNzcsNyBAQCB1bnNp
Z25lZCBJbWFnZURlY29kZXI6OmZyYW1lQnl0ZXNBdEluZGV4CiAgICAgaWYgKG1fZnJhbWVCdWZm
ZXJDYWNoZS5zaXplKCkgPD0gaW5kZXgpCiAgICAgICAgIHJldHVybiAwOwogICAgIC8vIEZJWE1F
OiBVc2UgdGhlIGRpbWVuc2lvbiBvZiB0aGUgcmVxdWVzdGVkIGZyYW1lLgotICAgIHJldHVybiBt
X3NpemUuYXJlYSgpICogc2l6ZW9mKEltYWdlRnJhbWU6OlBpeGVsRGF0YSk7CisgICAgcmV0dXJu
IG1fc2l6ZS5hcmVhKCkgKiBzaXplb2YoUkdCQTMyKTsKIH0KIAogZmxvYXQgSW1hZ2VEZWNvZGVy
OjpmcmFtZUR1cmF0aW9uQXRJbmRleChzaXplX3QgaW5kZXgpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuaAkocmV2
aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
SW1hZ2VEZWNvZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDEwIEBACiAKICNwcmFn
bWEgb25jZQogCi0jaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkltYWdlQmFja2luZ1N0
b3JlLmgiCiAjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisj
aW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCiAjaW5jbHVk
ZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTU3LDcg
KzU5LDYgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICAgICAg
RGlzcG9zZU92ZXJ3cml0ZVByZXZpb3VzICAvLyBDbGVhciBmcmFtZSB0byBwcmV2aW91cyBmcmFt
ZWJ1ZmZlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb250ZW50
cwogICAgICAgICB9OwotICAgICAgICB0eXBlZGVmIHVuc2lnbmVkIFBpeGVsRGF0YTsKIAogICAg
ICAgICBJbWFnZUZyYW1lKCk7CiAKQEAgLTgyLDE0MiArODMsNjYgQEAgdXNpbmcgQ29sb3JQcm9m
aWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICAvLyBlbmRZLgogICAgICAgICB2b2lkIGNvcHlS
b3dOVGltZXMoaW50IHN0YXJ0WCwgaW50IGVuZFgsIGludCBzdGFydFksIGludCBlbmRZKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoc3RhcnRYIDwgd2lkdGgoKSk7Ci0gICAgICAgICAg
ICBBU1NFUlQoZW5kWCA8PSB3aWR0aCgpKTsKLSAgICAgICAgICAgIEFTU0VSVChzdGFydFkgPCBo
ZWlnaHQoKSk7Ci0gICAgICAgICAgICBBU1NFUlQoZW5kWSA8PSBoZWlnaHQoKSk7Ci0gICAgICAg
ICAgICBjb25zdCBpbnQgcm93Qnl0ZXMgPSAoZW5kWCAtIHN0YXJ0WCkgKiBzaXplb2YoUGl4ZWxE
YXRhKTsKLSAgICAgICAgICAgIGNvbnN0IFBpeGVsRGF0YSogY29uc3Qgc3RhcnRBZGRyID0gZ2V0
QWRkcihzdGFydFgsIHN0YXJ0WSk7Ci0gICAgICAgICAgICBmb3IgKGludCBkZXN0WSA9IHN0YXJ0
WSArIDE7IGRlc3RZIDwgZW5kWTsgKytkZXN0WSkKLSAgICAgICAgICAgICAgICBtZW1jcHkoZ2V0
QWRkcihzdGFydFgsIGRlc3RZKSwgc3RhcnRBZGRyLCByb3dCeXRlcyk7CisgICAgICAgICAgICBt
X2JhY2tpbmdTdG9yZS0+cmVwZWF0Rmlyc3RSb3coSW50UmVjdChzdGFydFgsIHN0YXJ0WSwgZW5k
WCAtc3RhcnRYICwgZW5kWSAtIHN0YXJ0WSkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gQWxs
b2NhdGVzIHNwYWNlIGZvciB0aGUgcGl4ZWwgZGF0YS4gIE11c3QgYmUgY2FsbGVkIGJlZm9yZSBh
bnkgcGl4ZWxzCiAgICAgICAgIC8vIGFyZSB3cml0dGVuLiAgTXVzdCBvbmx5IGJlIGNhbGxlZCBv
bmNlLiAgUmV0dXJucyB3aGV0aGVyIGFsbG9jYXRpb24KICAgICAgICAgLy8gc3VjY2VlZGVkLgot
ICAgICAgICBib29sIHNldFNpemUoaW50IG5ld1dpZHRoLCBpbnQgbmV3SGVpZ2h0KTsKKyAgICAg
ICAgYm9vbCBzZXRTaXplKGNvbnN0IEludFNpemUmKTsKKyAgICAgICAgSW50U2l6ZSBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9iYWNraW5nU3RvcmUgPyBtX2JhY2tpbmdTdG9yZS0+c2l6ZSgpIDog
SW50U2l6ZSgpOyB9CiAKICAgICAgICAgLy8gUmV0dXJucyBhIGNhbGxlci1vd25lZCBwb2ludGVy
IHRvIHRoZSB1bmRlcmx5aW5nIG5hdGl2ZSBpbWFnZSBkYXRhLgogICAgICAgICAvLyAoQWN0dWFs
IHVzZTogVGhpcyBwb2ludGVyIHdpbGwgYmUgb3duZWQgYnkgQml0bWFwSW1hZ2UgYW5kIGZyZWVk
IGluCiAgICAgICAgIC8vIEZyYW1lRGF0YTo6Y2xlYXIoKSkuCi0gICAgICAgIE5hdGl2ZUltYWdl
UHRyIGFzTmV3TmF0aXZlSW1hZ2UoKSBjb25zdDsKKyAgICAgICAgTmF0aXZlSW1hZ2VQdHIgYXNO
ZXdOYXRpdmVJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlID8gbV9iYWNraW5n
U3RvcmUtPmltYWdlKCkgOiBudWxscHRyOyB9CiAKKyAgICAgICAgaW5saW5lIEltYWdlQmFja2lu
Z1N0b3JlKiBiYWNraW5nU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX2JhY2tpbmdTdG9yZSA/IG1f
YmFja2luZ1N0b3JlLmdldCgpIDogbnVsbHB0cjsgfQorICAgICAgICBpbmxpbmUgYm9vbCBoYXNC
YWNraW5nU3RvcmUoKSBjb25zdCB7IHJldHVybiBiYWNraW5nU3RvcmUoKTsgfQorICAgICAgICAK
ICAgICAgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0OwotICAgICAgICBjb25zdCBJbnRSZWN0JiBv
cmlnaW5hbEZyYW1lUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luYWxGcmFtZVJlY3Q7IH0K
KyAgICAgICAgSW50UmVjdCBvcmlnaW5hbEZyYW1lUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fYmFj
a2luZ1N0b3JlID8gbV9iYWNraW5nU3RvcmUtPmZyYW1lUmVjdCgpIDogSW50UmVjdCgpOyB9CiAg
ICAgICAgIEZyYW1lU3RhdHVzIHN0YXR1cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdHVzOyB9CiAg
ICAgICAgIHVuc2lnbmVkIGR1cmF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQog
ICAgICAgICBGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kKCkgY29uc3QgeyByZXR1
cm4gbV9kaXNwb3NhbE1ldGhvZDsgfQogICAgICAgICBib29sIHByZW11bHRpcGx5QWxwaGEoKSBj
b25zdCB7IHJldHVybiBtX3ByZW11bHRpcGx5QWxwaGE7IH0KIAogICAgICAgICB2b2lkIHNldEhh
c0FscGhhKGJvb2wgYWxwaGEpOwotICAgICAgICB2b2lkIHNldE9yaWdpbmFsRnJhbWVSZWN0KGNv
bnN0IEludFJlY3QmIHIpIHsgbV9vcmlnaW5hbEZyYW1lUmVjdCA9IHI7IH0KKyAgICAgICAgdm9p
ZCBzZXRPcmlnaW5hbEZyYW1lUmVjdChjb25zdCBJbnRSZWN0Jik7CiAgICAgICAgIHZvaWQgc2V0
U3RhdHVzKEZyYW1lU3RhdHVzIHN0YXR1cyk7CiAgICAgICAgIHZvaWQgc2V0RHVyYXRpb24odW5z
aWduZWQgZHVyYXRpb24pIHsgbV9kdXJhdGlvbiA9IGR1cmF0aW9uOyB9CiAgICAgICAgIHZvaWQg
c2V0RGlzcG9zYWxNZXRob2QoRnJhbWVEaXNwb3NhbE1ldGhvZCBtZXRob2QpIHsgbV9kaXNwb3Nh
bE1ldGhvZCA9IG1ldGhvZDsgfQogICAgICAgICB2b2lkIHNldFByZW11bHRpcGx5QWxwaGEoYm9v
bCBwcmVtdWx0aXBseUFscGhhKSB7IG1fcHJlbXVsdGlwbHlBbHBoYSA9IHByZW11bHRpcGx5QWxw
aGE7IH0KIAotICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKGludCB4LCBpbnQgeSwgdW5zaWdu
ZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKLSAgICAgICAgewotICAg
ICAgICAgICAgc2V0UkdCQShnZXRBZGRyKHgsIHkpLCByLCBnLCBiLCBhKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlubGluZSBQaXhlbERhdGEqIGdldEFkZHIoaW50IHgsIGludCB5KQorICAgICAg
ICBpbmxpbmUgUkdCQTMyKiBnZXRBZGRyKGludCB4LCBpbnQgeSkKICAgICAgICAgewotICAgICAg
ICAgICAgcmV0dXJuIG1fYnl0ZXMgKyAoeSAqIHdpZHRoKCkpICsgeDsKKyAgICAgICAgICAgIEFT
U0VSVChtX2JhY2tpbmdTdG9yZSk7CisgICAgICAgICAgICByZXR1cm4gbV9iYWNraW5nU3RvcmUt
PmF0KHgsIHkpOwogICAgICAgICB9CiAKLSAgICAgICAgaW5saW5lIGJvb2wgaGFzUGl4ZWxEYXRh
KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYnl0ZXM7Ci0gICAgICAg
IH0KLQotICAgICAgICAvLyBVc2UgZml4IHBvaW50IG11bHRpcGxpZXIgaW5zdGVhZCBvZiBpbnRl
Z2VyIGRpdmlzaW9uIG9yIGZsb2F0aW5nIHBvaW50IG1hdGguCi0gICAgICAgIC8vIFRoaXMgbXVs
dGlwbGVyIHByb2R1Y2VzIGV4YWN0bHkgdGhlIHNhbWUgcmVzdWx0IGZvciBhbGwgdmFsdWVzIGlu
IHJhbmdlIDAgLSAyNTUuCi0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmaXhQb2ludFNo
aWZ0ID0gMjQ7Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBmaXhQb2ludE11bHQgPSBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oMS4wIC8gMjU1LjAgKiAoMSA8PCBmaXhQb2ludFNoaWZ0KSkg
KyAxOwotICAgICAgICAvLyBNdWx0aXBsaWVzIHVuc2lnbmVkIHZhbHVlIGJ5IGZpeHBvaW50IHZh
bHVlIGFuZCBjb252ZXJ0cyBiYWNrIHRvIHVuc2lnbmVkLgotICAgICAgICBzdGF0aWMgdW5zaWdu
ZWQgZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KHVuc2lnbmVkIGZpeGVkLCB1bnNpZ25lZCB2KQor
ICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKGludCB4LCBpbnQgeSwgdW5zaWduZWQgciwgdW5z
aWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuICAoZml4ZWQgKiB2KSA+PiBmaXhQb2ludFNoaWZ0OworICAgICAgICAgICAgQVNTRVJU
KG1fYmFja2luZ1N0b3JlKTsKKyAgICAgICAgICAgIG1fYmFja2luZ1N0b3JlLT5zZXRSR0JBKHgs
IHksIHIsIGcsIGIsIGEpOwogICAgICAgICB9CiAKLSAgICAgICAgaW5saW5lIHZvaWQgc2V0UkdC
QShQaXhlbERhdGEqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVu
c2lnbmVkIGEpCisgICAgICAgIGlubGluZSB2b2lkIHNldFJHQkEoUkdCQTMyKiBkZXN0LCB1bnNp
Z25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBpZiAobV9wcmVtdWx0aXBseUFscGhhICYmIGEgPCAyNTUpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoIWEpIHsKLSAgICAgICAgICAgICAgICAgICAgKmRlc3QgPSAwOwotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgdW5zaWduZWQgYWxwaGFNdWx0ID0gYSAqIGZpeFBvaW50TXVsdDsKLSAgICAgICAgICAgICAg
ICByID0gZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KHIsIGFscGhhTXVsdCk7Ci0gICAgICAgICAg
ICAgICAgZyA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShnLCBhbHBoYU11bHQpOwotICAgICAg
ICAgICAgICAgIGIgPSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkoYiwgYWxwaGFNdWx0KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICpkZXN0ID0gKGEgPDwgMjQgfCByIDw8IDE2IHwgZyA8
PCA4IHwgYik7CisgICAgICAgICAgICBBU1NFUlQobV9iYWNraW5nU3RvcmUpOworICAgICAgICAg
ICAgbV9iYWNraW5nU3RvcmUtPnNldFJHQkEoZGVzdCwgciwgZywgYiwgYSk7CiAgICAgICAgIH0K
IAogI2lmIEVOQUJMRShBUE5HKQotICAgICAgICBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGRpdmlk
ZTI1NSh1bnNpZ25lZCBhKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKGEgKyAoYSA+
PiA4KSArIDEpID4+IDg7Ci0gICAgICAgIH0KLQotICAgICAgICBpbmxpbmUgdm9pZCBvdmVyUkdC
QShQaXhlbERhdGEqIGRlc3QsIHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVu
c2lnbmVkIGEpCisgICAgICAgIGlubGluZSB2b2lkIG92ZXJSR0JBKFJHQkEzMiogZGVzdCwgdW5z
aWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKICAgICAgICAgewot
ICAgICAgICAgICAgaWYgKCFhKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAg
ICAgaWYgKGEgPCAyNTUpIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBhRGVzdCA9ICgoKmRl
c3QpID4+IDI0KSAmIDI1NTsKLSAgICAgICAgICAgICAgICBpZiAoYURlc3QpIHsKLSAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgckRlc3QgPSAoKCpkZXN0KSA+PiAxNikgJiAyNTU7Ci0gICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGdEZXN0ID0gKCgqZGVzdCkgPj4gOCkgJiAyNTU7Ci0g
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGJEZXN0ID0gKCpkZXN0KSAmIDI1NTsKLSAgICAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgYUF1eCA9IDI1NSAtIGE7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBy
RGVzdCA9IGRpdmlkZTI1NShyRGVzdCAqIGFEZXN0KTsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGdEZXN0ID0gZGl2aWRlMjU1KGdEZXN0ICogYURlc3QpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgYkRlc3QgPSBkaXZpZGUyNTUoYkRlc3QgKiBhRGVzdCk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgciA9IGRpdmlkZTI1NShyICogYSArIHJEZXN0ICogYUF1
eCk7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSBkaXZpZGUyNTUoZyAqIGEgKyBnRGVzdCAqIGFB
dXgpOwotICAgICAgICAgICAgICAgICAgICBiID0gZGl2aWRlMjU1KGIgKiBhICsgYkRlc3QgKiBh
QXV4KTsKLSAgICAgICAgICAgICAgICAgICAgYSArPSBkaXZpZGUyNTUoYURlc3QgKiBhQXV4KTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHIgPSAociAqIDI1NSArIGEgLSAxKSAvIGE7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBnID0gKGcgKiAyNTUgKyBhIC0gMSkgLyBhOwotICAgICAgICAgICAgICAgICAg
ICAgICAgYiA9IChiICogMjU1ICsgYSAtIDEpIC8gYTsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9wcmVtdWx0aXBseUFscGhhKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHIgPSBkaXZpZGUyNTUociAqIGEpOwotICAgICAgICAgICAgICAgICAgICBn
ID0gZGl2aWRlMjU1KGcgKiBhKTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IGRpdmlkZTI1NShi
ICogYSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgKmRl
c3QgPSAoYSA8PCAyNCB8IHIgPDwgMTYgfCBnIDw8IDggfCBiKTsKKyAgICAgICAgICAgIEFTU0VS
VChtX2JhY2tpbmdTdG9yZSk7CisgICAgICAgICAgICBtX2JhY2tpbmdTdG9yZS0+b3ZlclJHQkEo
ZGVzdCwgciwgZywgYiwgYSk7CiAgICAgICAgIH0KICNlbmRpZgogCiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgaW50IHdpZHRoKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1f
c2l6ZS53aWR0aCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGhlaWdodCgpIGNvbnN0Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3NpemUuaGVpZ2h0KCk7Ci0gICAgICAgIH0K
LQotICAgICAgICBWZWN0b3I8UGl4ZWxEYXRhPiBtX2JhY2tpbmdTdG9yZTsKLSAgICAgICAgUGl4
ZWxEYXRhKiBtX2J5dGVzOyAvLyBUaGUgbWVtb3J5IGlzIGJhY2tlZCBieSBtX2JhY2tpbmdTdG9y
ZS4KLSAgICAgICAgSW50U2l6ZSBtX3NpemU7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CiAgICAgICAgIGJvb2wgbV9oYXNBbHBoYTsK
LSAgICAgICAgSW50UmVjdCBtX29yaWdpbmFsRnJhbWVSZWN0OyAvLyBUaGlzIHdpbGwgYWx3YXlz
IGp1c3QgYmUgdGhlIGVudGlyZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGJ1ZmZlciBleGNlcHQgZm9yIEdJRiBmcmFtZXMgd2hvc2UKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBvcmlnaW5hbCByZWN0IHdhcyBzbWFsbGVyIHRoYW4gdGhl
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3ZlcmFsbCBpbWFnZSBz
aXplLgogICAgICAgICBGcmFtZVN0YXR1cyBtX3N0YXR1czsKICAgICAgICAgdW5zaWduZWQgbV9k
dXJhdGlvbjsKICAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBtX2Rpc3Bvc2FsTWV0aG9kOwpA
QCAtMjg3LDExICsyMTIsMTEgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+Owog
CiAgICAgICAgIC8vIFJldHVybnMgd2hldGhlciB0aGUgc2l6ZSBpcyBsZWdhbCAoaS5lLiBub3Qg
Z29pbmcgdG8gcmVzdWx0IGluCiAgICAgICAgIC8vIG92ZXJmbG93IGVsc2V3aGVyZSkuICBJZiBu
b3QsIG1hcmtzIGRlY29kaW5nIGFzIGZhaWxlZC4KLSAgICAgICAgdmlydHVhbCBib29sIHNldFNp
emUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKKyAgICAgICAgdmlydHVhbCBib29s
IHNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICAgICAgewotICAgICAgICAgICAgaWYg
KGlzT3ZlclNpemUod2lkdGgsIGhlaWdodCkpCisgICAgICAgICAgICBpZiAoSW1hZ2VCYWNraW5n
U3RvcmU6OmlzT3ZlclNpemUoc2l6ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxl
ZCgpOwotICAgICAgICAgICAgbV9zaXplID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAg
ICAgICAgIG1fc2l6ZSA9IHNpemU7CiAgICAgICAgICAgICBtX3NpemVBdmFpbGFibGUgPSB0cnVl
OwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTM4NiwxNSArMzExLDYg
QEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICBJbWFnZU9yaWVu
dGF0aW9uIG1fb3JpZW50YXRpb247CiAKICAgICBwcml2YXRlOgotICAgICAgICAvLyBTb21lIGNv
ZGUgcGF0aHMgY29tcHV0ZSB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UgYXMgIndpZHRoICogaGVpZ2h0
ICogNCIKLSAgICAgICAgLy8gYW5kIHJldHVybiBpdCBhcyBhIChzaWduZWQpIGludC4gIEF2b2lk
IG92ZXJmbG93LgotICAgICAgICBzdGF0aWMgYm9vbCBpc092ZXJTaXplKHVuc2lnbmVkIHdpZHRo
LCB1bnNpZ25lZCBoZWlnaHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcg
bG9uZyB0b3RhbF9zaXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPih3aWR0aCkK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc3RhdGljX2Nhc3Q8
dW5zaWduZWQgbG9uZyBsb25nPihoZWlnaHQpOwotICAgICAgICAgICAgcmV0dXJuIHRvdGFsX3Np
emUgPiAoKDEgPDwgMjkpIC0gMSk7Ci0gICAgICAgIH0KLQogICAgICAgICBJbnRTaXplIG1fc2l6
ZTsKICAgICAgICAgYm9vbCBtX3NpemVBdmFpbGFibGUgeyBmYWxzZSB9OwogI2lmIEVOQUJMRShJ
TUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5j
cHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDcgKzc4
LDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6ZGVjb2RlQk1QKGJvb2wgb25seQogICAgIC8vIElu
aXRpYWxpemUgdGhlIGZyYW1lYnVmZmVyIGlmIG5lZWRlZC4KICAgICBBU1NFUlQobV9idWZmZXIp
OyAgLy8gUGFyZW50IHNob3VsZCBzZXQgdGhpcyBiZWZvcmUgYXNraW5nIHVzIHRvIGRlY29kZSEK
ICAgICBpZiAobV9idWZmZXItPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpIHsK
LSAgICAgICAgaWYgKCFtX2J1ZmZlci0+c2V0U2l6ZShtX3BhcmVudC0+c2l6ZSgpLndpZHRoKCks
IG1fcGFyZW50LT5zaXplKCkuaGVpZ2h0KCkpKQorICAgICAgICBpZiAoIW1fYnVmZmVyLT5zZXRT
aXplKG1fcGFyZW50LT5zaXplKCkpKQogICAgICAgICAgICAgcmV0dXJuIG1fcGFyZW50LT5zZXRG
YWlsZWQoKTsgLy8gVW5hYmxlIHRvIGFsbG9jYXRlLgogICAgICAgICBtX2J1ZmZlci0+c2V0U3Rh
dHVzKEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIC8vIHNldFNpemUoKSBjYWxs
cyBlcmFzZUFSR0IoKSwgd2hpY2ggcmVzZXRzIHRoZSBhbHBoYSBmbGFnLCBzbyB3ZSBmb3JjZQpA
QCAtODYsOSArODYsNiBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpkZWNvZGVCTVAoYm9vbCBvbmx5
CiAgICAgICAgIC8vIHRoZXNlIDBzIGNvdWxkIGFjdHVhbGx5IHNob3cgdGhyb3VnaC4KICAgICAg
ICAgbV9idWZmZXItPnNldEhhc0FscGhhKGZhbHNlKTsKIAotICAgICAgICAvLyBGb3IgQk1Qcywg
dGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgotICAgICAgICBtX2J1ZmZl
ci0+c2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBtX3BhcmVudC0+c2l6
ZSgpKSk7Ci0KICAgICAgICAgaWYgKCFtX2lzVG9wRG93bikKICAgICAgICAgICAgIG1fY29vcmQu
c2V0WShtX3BhcmVudC0+c2l6ZSgpLmhlaWdodCgpIC0gMSk7CiAgICAgfQpAQCAtMTcxLDcgKzE2
OCw3IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NJbmZvSGVhZGVyKCkKICAgICAgICAg
cmV0dXJuIG1fcGFyZW50LT5zZXRGYWlsZWQoKTsKIAogICAgIC8vIFNldCBvdXIgc2l6ZS4KLSAg
ICBpZiAoIW1fcGFyZW50LT5zZXRTaXplKG1faW5mb0hlYWRlci5iaVdpZHRoLCBtX2luZm9IZWFk
ZXIuYmlIZWlnaHQpKQorICAgIGlmICghbV9wYXJlbnQtPnNldFNpemUoSW50U2l6ZShtX2luZm9I
ZWFkZXIuYmlXaWR0aCwgbV9pbmZvSGVhZGVyLmJpSGVpZ2h0KSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIC8vIEZvciBwYWxldHRlZCBpbWFnZXMsIGJpdG1hcHMgY2FuIHNldCBiaUNs
clVzZWQgdG8gMCB0byBtZWFuICJhbGwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFj
a2luZ1N0b3JlQ2Fpcm8uY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbWFnZUJh
Y2tpbmdTdG9yZS5oIgorCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitOYXRpdmVJbWFnZVB0ciBJbWFnZUJhY2tpbmdTdG9yZTo6aW1hZ2UoKSBjb25zdAorewor
ICAgIHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgK
KyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oY29uc3RfY2FzdDxSR0JB
MzIqPihtX3BpeGVsc1B0cikpLAorICAgICAgICBDQUlST19GT1JNQVRfQVJHQjMyLCBzaXplKCku
d2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpLCBzaXplKCkud2lkdGgoKSAqIHNpemVvZihSR0JBMzIp
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFn
ZURlY29kZXJDYWlyby5jcHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAkobm9uZXhp
c3RlbnQpCkBAIC0xLDQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbWFnZURlY29k
ZXIuaCIKLQotI2luY2x1ZGUgPGNhaXJvLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotTmF0
aXZlSW1hZ2VQdHIgSW1hZ2VGcmFtZTo6YXNOZXdOYXRpdmVJbWFnZSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKAotICAg
ICAgICByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihjb25zdF9jYXN0PFBpeGVsRGF0
YSo+KG1fYnl0ZXMpKSwKLSAgICAgICAgQ0FJUk9fRk9STUFUX0FSR0IzMiwgd2lkdGgoKSwgaGVp
Z2h0KCksIHdpZHRoKCkgKiBzaXplb2YoUGl4ZWxEYXRhKSkpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpEZWxl
dGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0xICswLDAgIyMKLW5hdGl2ZQpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNp
b24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lm
L0dJRkltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDEyICs2MCwxMiBAQCBi
b29sIEdJRkltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkKICAgICByZXR1cm4gSW1hZ2VE
ZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsKIH0KIAotYm9vbCBHSUZJbWFnZURlY29kZXI6OnNl
dFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKK2Jvb2wgR0lGSW1hZ2VEZWNv
ZGVyOjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgaWYgKEltYWdlRGVjb2Rl
cjo6aXNTaXplQXZhaWxhYmxlKCkgJiYgc2l6ZSgpID09IEludFNpemUod2lkdGgsIGhlaWdodCkp
CisgICAgaWYgKEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCkgJiYgdGhpcy0+c2l6ZSgp
ID09IHNpemUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgaWYgKCFJbWFnZURlY29kZXI6
OnNldFNpemUod2lkdGgsIGhlaWdodCkpCisgICAgaWYgKCFJbWFnZURlY29kZXI6OnNldFNpemUo
c2l6ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHByZXBhcmVTY2FsZURhdGFJZk5l
Y2Vzc2FyeSgpOwpAQCAtMjEzLDEwICsyMTMsMTAgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6Omhh
dmVEZWNvZGVkUm93KHVucwogCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWUgaWYgbmVjZXNz
YXJ5LgogICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVtmcmFtZUlu
ZGV4XTsKLSAgICBpZiAoKChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0
eSkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkgfHwgIWJ1ZmZlci5oYXNQaXhlbERh
dGEoKSkKKyAgICBpZiAoKChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0
eSkgJiYgIWluaXRGcmFtZUJ1ZmZlcihmcmFtZUluZGV4KSkgfHwgIWJ1ZmZlci5oYXNCYWNraW5n
U3RvcmUoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgSW1hZ2VGcmFtZTo6UGl4ZWxE
YXRhKiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKHhCZWdpbiwgeUJlZ2luKTsKKyAg
ICBSR0JBMzIqIGN1cnJlbnRBZGRyZXNzID0gYnVmZmVyLmdldEFkZHIoeEJlZ2luLCB5QmVnaW4p
OwogICAgIC8vIFdyaXRlIG9uZSByb3cncyB3b3J0aCBvZiBkYXRhIGludG8gdGhlIGZyYW1lLiAg
CiAgICAgZm9yIChpbnQgeCA9IHhCZWdpbjsgeCA8IHhFbmQ7ICsreCkgewogICAgICAgICBjb25z
dCB1bnNpZ25lZCBjaGFyIHNvdXJjZVZhbHVlID0gcm93QnVmZmVyWyhtX3NjYWxlZCA/IG1fc2Nh
bGVkQ29sdW1uc1t4XSA6IHgpIC0gZnJhbWVDb250ZXh0LT54T2Zmc2V0XTsKQEAgLTM2MSw3ICsz
NjEsNyBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHVuCiAKICAgICBp
ZiAoIWZyYW1lSW5kZXgpIHsKICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgZnJhbWUsIHNv
IHdlJ3JlIG5vdCByZWx5aW5nIG9uIGFueSBwcmV2aW91cyBkYXRhLgotICAgICAgICBpZiAoIWJ1
ZmZlci0+c2V0U2l6ZShzY2FsZWRTaXplKCkud2lkdGgoKSwgc2NhbGVkU2l6ZSgpLmhlaWdodCgp
KSkKKyAgICAgICAgaWYgKCFidWZmZXItPnNldFNpemUoc2NhbGVkU2l6ZSgpKSkKICAgICAgICAg
ICAgIHJldHVybiBzZXRGYWlsZWQoKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBUaGUgc3Rh
cnRpbmcgc3RhdGUgZm9yIHRoaXMgZnJhbWUgZGVwZW5kcyBvbiB0aGUgcHJldmlvdXMgZnJhbWUn
cwpAQCAtMzg3LDEyICszODcsMTIgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1
ZmZlcih1bgogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gV2Ugd2FudCB0byBjbGVh
ciB0aGUgcHJldmlvdXMgZnJhbWUgdG8gdHJhbnNwYXJlbnQsIHdpdGhvdXQKICAgICAgICAgICAg
IC8vIGFmZmVjdGluZyBwaXhlbHMgaW4gdGhlIGltYWdlIG91dHNpZGUgb2YgdGhlIGZyYW1lLgot
ICAgICAgICAgICAgY29uc3QgSW50UmVjdCYgcHJldlJlY3QgPSBwcmV2QnVmZmVyLT5vcmlnaW5h
bEZyYW1lUmVjdCgpOworICAgICAgICAgICAgSW50UmVjdCBwcmV2UmVjdCA9IHByZXZCdWZmZXIt
Pm9yaWdpbmFsRnJhbWVSZWN0KCk7CiAgICAgICAgICAgICBjb25zdCBJbnRTaXplJiBidWZmZXJT
aXplID0gc2NhbGVkU2l6ZSgpOwogICAgICAgICAgICAgaWYgKCFmcmFtZUluZGV4IHx8IHByZXZS
ZWN0LmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpIHsKICAgICAg
ICAgICAgICAgICAvLyBDbGVhcmluZyB0aGUgZmlyc3QgZnJhbWUsIG9yIGEgZnJhbWUgdGhlIHNp
emUgb2YgdGhlIHdob2xlCiAgICAgICAgICAgICAgICAgLy8gaW1hZ2UsIHJlc3VsdHMgaW4gYSBj
b21wbGV0ZWx5IGVtcHR5IGltYWdlLgotICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLT5zZXRT
aXplKGJ1ZmZlclNpemUud2lkdGgoKSwgYnVmZmVyU2l6ZS5oZWlnaHQoKSkpCisgICAgICAgICAg
ICAgICAgaWYgKCFidWZmZXItPnNldFNpemUoYnVmZmVyU2l6ZSkpCiAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzZXRGYWlsZWQoKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgLy8gQ29weSB0aGUgd2hvbGUgcHJldmlvdXMgYnVmZmVyLCB0aGVuIGNsZWFyIGp1c3Qg
aXRzIGZyYW1lLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Z2lmL0dJRkltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAkocmV2aXNpb24gMjA1Njg0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdl
RGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9uKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gImdpZiI7IH0KICAgICAgICAgdm9pZCBzZXREYXRhKFNoYXJlZEJ1ZmZlciYgZGF0
YSwgYm9vbCBhbGxEYXRhUmVjZWl2ZWQpIG92ZXJyaWRlOwogICAgICAgICBib29sIGlzU2l6ZUF2
YWlsYWJsZSgpIG92ZXJyaWRlOwotICAgICAgICBib29sIHNldFNpemUodW5zaWduZWQgd2lkdGgs
IHVuc2lnbmVkIGhlaWdodCkgb3ZlcnJpZGU7CisgICAgICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJ
bnRTaXplJikgb3ZlcnJpZGU7CiAgICAgICAgIHNpemVfdCBmcmFtZUNvdW50KCkgb3ZlcnJpZGU7
CiAgICAgICAgIGludCByZXBldGl0aW9uQ291bnQoKSBjb25zdCBvdmVycmlkZTsKICAgICAgICAg
SW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkgb3ZlcnJpZGU7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VS
ZWFkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ0Nyw3ICs0NDcsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpw
YXJzZShzaXplX3QgZGF0YVBvCiAKICAgICAgICAgICAgIC8vIENBTExCQUNLOiBJbmZvcm0gdGhl
IGRlY29kZXJwbHVnaW4gb2Ygb3VyIHNpemUuCiAgICAgICAgICAgICAvLyBOb3RlOiBBIHN1YnNl
cXVlbnQgZnJhbWUgbWlnaHQgaGF2ZSBkaW1lbnNpb25zIGxhcmdlciB0aGFuIHRoZSAic2NyZWVu
IiBkaW1lbnNpb25zLgotICAgICAgICAgICAgaWYgKG1fY2xpZW50ICYmICFtX2NsaWVudC0+c2V0
U2l6ZShtX3NjcmVlbldpZHRoLCBtX3NjcmVlbkhlaWdodCkpCisgICAgICAgICAgICBpZiAobV9j
bGllbnQgJiYgIW1fY2xpZW50LT5zZXRTaXplKFdlYkNvcmU6OkludFNpemUobV9zY3JlZW5XaWR0
aCwgbV9zY3JlZW5IZWlnaHQpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICAgICAgICAgIG1fc2NyZWVuQmdjb2xvciA9IGN1cnJlbnRDb21wb25lbnRbNV07CkBAIC02NjQs
NyArNjY0LDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cGFyc2Uoc2l6ZV90IGRhdGFQbwogICAg
ICAgICAgICAgICAgIHlPZmZzZXQgPSAwOwogCiAgICAgICAgICAgICAgICAgLy8gQ0FMTEJBQ0s6
IEluZm9ybSB0aGUgZGVjb2RlcnBsdWdpbiBvZiBvdXIgc2l6ZS4KLSAgICAgICAgICAgICAgICBp
ZiAobV9jbGllbnQgJiYgIW1fY2xpZW50LT5zZXRTaXplKG1fc2NyZWVuV2lkdGgsIG1fc2NyZWVu
SGVpZ2h0KSkKKyAgICAgICAgICAgICAgICBpZiAobV9jbGllbnQgJiYgIW1fY2xpZW50LT5zZXRT
aXplKFdlYkNvcmU6OkludFNpemUobV9zY3JlZW5XaWR0aCwgbV9zY3JlZW5IZWlnaHQpKSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9pY28vSUNPSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg4LDExICs4OCwxMSBAQCBJbnRTaXplIElDT0ltYWdlRGVjb2Rlcjo6
ZnJhbWVTaXplQXRJbmRlCiAgICAgcmV0dXJuIChpbmRleCAmJiAoaW5kZXggPCBtX2RpckVudHJp
ZXMuc2l6ZSgpKSkgPyBtX2RpckVudHJpZXNbaW5kZXhdLm1fc2l6ZSA6IHNpemUoKTsKIH0KIAot
Ym9vbCBJQ09JbWFnZURlY29kZXI6OnNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhl
aWdodCkKK2Jvb2wgSUNPSW1hZ2VEZWNvZGVyOjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUp
CiB7CiAgICAgLy8gVGhlIHNpemUgY2FsY3VsYXRlZCBpbnNpZGUgdGhlIEJNUEltYWdlUmVhZGVy
IGhhZCBiZXR0ZXIgbWF0Y2ggdGhlIG9uZSBpbgogICAgIC8vIHRoZSBpY29uIGRpcmVjdG9yeS4K
LSAgICByZXR1cm4gbV9mcmFtZVNpemUuaXNFbXB0eSgpID8gSW1hZ2VEZWNvZGVyOjpzZXRTaXpl
KHdpZHRoLCBoZWlnaHQpIDogKChJbnRTaXplKHdpZHRoLCBoZWlnaHQpID09IG1fZnJhbWVTaXpl
KSB8fCBzZXRGYWlsZWQoKSk7CisgICAgcmV0dXJuIG1fZnJhbWVTaXplLmlzRW1wdHkoKSA/IElt
YWdlRGVjb2Rlcjo6c2V0U2l6ZShzaXplKSA6ICgoc2l6ZSA9PSBtX2ZyYW1lU2l6ZSkgfHwgc2V0
RmFpbGVkKCkpOwogfQogCiBzaXplX3QgSUNPSW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KCkKQEAg
LTI3OSw3ICsyNzksNyBAQCBib29sIElDT0ltYWdlRGVjb2Rlcjo6cHJvY2Vzc0RpcmVjdG9yeUVu
CiAgICAgY29uc3QgSWNvbkRpcmVjdG9yeUVudHJ5JiBkaXJFbnRyeSA9IG1fZGlyRW50cmllcy5m
aXJzdCgpOwogICAgIC8vIFRlY2huaWNhbGx5LCB0aGlzIG5leHQgY2FsbCBzaG91bGRuJ3QgYmUg
YWJsZSB0byBmYWlsLCBzaW5jZSB0aGUgd2lkdGgKICAgICAvLyBhbmQgaGVpZ2h0IGhlcmUgYXJl
IGVhY2ggPD0gMjU2LCBhbmQgfG1fZnJhbWVTaXplfCBpcyBlbXB0eS4KLSAgICByZXR1cm4gc2V0
U2l6ZShkaXJFbnRyeS5tX3NpemUud2lkdGgoKSwgZGlyRW50cnkubV9zaXplLmhlaWdodCgpKTsK
KyAgICByZXR1cm4gc2V0U2l6ZShkaXJFbnRyeS5tX3NpemUpOwogfQogCiBJQ09JbWFnZURlY29k
ZXI6Okljb25EaXJlY3RvcnlFbnRyeSBJQ09JbWFnZURlY29kZXI6OnJlYWREaXJlY3RvcnlFbnRy
eSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNP
SW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAyMDU2ODQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VEZWNvZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIG92ZXJyaWRlOwogICAgICAgICBJbnRTaXpl
IHNpemUoKSBvdmVycmlkZTsKICAgICAgICAgSW50U2l6ZSBmcmFtZVNpemVBdEluZGV4KHNpemVf
dCwgU3Vic2FtcGxpbmdMZXZlbCkgb3ZlcnJpZGU7Ci0gICAgICAgIGJvb2wgc2V0U2l6ZSh1bnNp
Z25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KSBvdmVycmlkZTsKKyAgICAgICAgYm9vbCBzZXRT
aXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKICAgICAgICAgc2l6ZV90IGZyYW1lQ291bnQo
KSBvdmVycmlkZTsKICAgICAgICAgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVf
dCkgb3ZlcnJpZGU7CiAgICAgICAgIC8vIENBVVRJT046IHNldEZhaWxlZCgpIGRlbGV0ZXMgYWxs
IHJlYWRlcnMgYW5kIGRlY29kZXJzLiAgQmUgY2FyZWZ1bCB0bwpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQ
RUdJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMjIsNyArMzIyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgbV9zdGF0ZSA9
IEpQRUdfU1RBUlRfREVDT01QUkVTUzsKIAogICAgICAgICAgICAgLy8gV2UgY2FuIGZpbGwgaW4g
dGhlIHNpemUgbm93IHRoYXQgdGhlIGhlYWRlciBpcyBhdmFpbGFibGUuCi0gICAgICAgICAgICBp
ZiAoIW1fZGVjb2Rlci0+c2V0U2l6ZShtX2luZm8uaW1hZ2Vfd2lkdGgsIG1faW5mby5pbWFnZV9o
ZWlnaHQpKQorICAgICAgICAgICAgaWYgKCFtX2RlY29kZXItPnNldFNpemUoSW50U2l6ZShtX2lu
Zm8uaW1hZ2Vfd2lkdGgsIG1faW5mby5pbWFnZV9oZWlnaHQpKSkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAgICAgICAgIG1fZGVjb2Rlci0+c2V0T3JpZW50YXRpb24ocmVh
ZEltYWdlT3JpZW50YXRpb24oaW5mbygpKSk7CkBAIC01MTksOSArNTE5LDkgQEAgYm9vbCBKUEVH
SW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQogICAgIHJldHVybiBJbWFnZURlY29kZXI6
OmlzU2l6ZUF2YWlsYWJsZSgpOwogfQogCi1ib29sIEpQRUdJbWFnZURlY29kZXI6OnNldFNpemUo
dW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKK2Jvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6
c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogewotICAgIGlmICghSW1hZ2VEZWNvZGVyOjpz
ZXRTaXplKHdpZHRoLCBoZWlnaHQpKQorICAgIGlmICghSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHNp
emUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNl
c3NhcnkoKTsKQEAgLTU1MSw3ICs1NTEsNyBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6OnNldEZh
aWxlZCgpCiB9CiAKIHRlbXBsYXRlIDxKX0NPTE9SX1NQQUNFIGNvbG9yU3BhY2U+Ci12b2lkIHNl
dFBpeGVsKEltYWdlRnJhbWUmIGJ1ZmZlciwgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBjdXJyZW50
QWRkcmVzcywgSlNBTVBBUlJBWSBzYW1wbGVzLCBpbnQgY29sdW1uKQordm9pZCBzZXRQaXhlbChJ
bWFnZUZyYW1lJiBidWZmZXIsIFJHQkEzMiogY3VycmVudEFkZHJlc3MsIEpTQU1QQVJSQVkgc2Ft
cGxlcywgaW50IGNvbHVtbikKIHsKICAgICBKU0FNUExFKiBqc2FtcGxlID0gKnNhbXBsZXMgKyBj
b2x1bW4gKiAoY29sb3JTcGFjZSA9PSBKQ1NfUkdCID8gMyA6IDQpOwogCkBAIC01OTQsNyArNTk0
LDcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoSQogICAgICAgICBp
ZiAoZGVzdFkgPCAwKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgSW1hZ2VGcmFt
ZTo6UGl4ZWxEYXRhKiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKDAsIGRlc3RZKTsK
KyAgICAgICAgUkdCQTMyKiBjdXJyZW50QWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKDAsIGRlc3RZ
KTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgKyt4KSB7CiAgICAgICAgICAg
ICBzZXRQaXhlbDxjb2xvclNwYWNlPihidWZmZXIsIGN1cnJlbnRBZGRyZXNzLCBzYW1wbGVzLCBp
c1NjYWxlZCA/IG1fc2NhbGVkQ29sdW1uc1t4XSA6IHgpOwogICAgICAgICAgICAgKytjdXJyZW50
QWRkcmVzczsKQEAgLTYxNywxNSArNjE3LDEyIEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0
cHV0U2NhbmxpbmVzKCkKICAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZWJ1ZmZlciBpZiBuZWVk
ZWQuCiAgICAgSW1hZ2VGcmFtZSYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwogICAg
IGlmIChidWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgewotICAgICAg
ICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNjYWxlZFNpemUoKS53aWR0aCgpLCBzY2FsZWRTaXplKCku
aGVpZ2h0KCkpKQorICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNjYWxlZFNpemUoKSkpCiAg
ICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMo
SW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFsKTsKICAgICAgICAgLy8gVGhlIGJ1ZmZlciBpcyB0cmFu
c3BhcmVudCBvdXRzaWRlIHRoZSBkZWNvZGVkIGFyZWEgd2hpbGUgdGhlIGltYWdlIGlzCiAgICAg
ICAgIC8vIGxvYWRpbmcuIFRoZSBjb21wbGV0ZWQgaW1hZ2Ugd2lsbCBiZSBtYXJrZWQgZnVsbHkg
b3BhcXVlIGluIGpwZWdDb21wbGV0ZSgpLgogICAgICAgICBidWZmZXIuc2V0SGFzQWxwaGEodHJ1
ZSk7Ci0KLSAgICAgICAgLy8gRm9yIEpQRUdzLCB0aGUgZnJhbWUgYWx3YXlzIGZpbGxzIHRoZSBl
bnRpcmUgaW1hZ2UuCi0gICAgICAgIGJ1ZmZlci5zZXRPcmlnaW5hbEZyYW1lUmVjdChJbnRSZWN0
KEludFBvaW50KCksIHNpemUoKSkpOwogICAgIH0KIAogICAgIGpwZWdfZGVjb21wcmVzc19zdHJ1
Y3QqIGluZm8gPSBtX3JlYWRlci0+aW5mbygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNv
ZGVyLmgJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3
ICs1MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gSW1hZ2VEZWNvZGVyCiAg
ICAgICAgIFN0cmluZyBmaWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
ICJqcGciOyB9CiAgICAgICAgIGJvb2wgaXNTaXplQXZhaWxhYmxlKCkgb3ZlcnJpZGU7Ci0gICAg
ICAgIGJvb2wgc2V0U2l6ZSh1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KSBvdmVycmlk
ZTsKKyAgICAgICAgYm9vbCBzZXRTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKICAgICAg
ICAgSW1hZ2VGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkgb3ZlcnJpZGU7
CiAgICAgICAgIC8vIENBVVRJT046IHNldEZhaWxlZCgpIGRlbGV0ZXMgfG1fcmVhZGVyfC4gIEJl
IGNhcmVmdWwgdG8gYXZvaWQKICAgICAgICAgLy8gYWNjZXNzaW5nIGRlbGV0ZWQgbWVtb3J5LCBl
c3BlY2lhbGx5IHdoZW4gY2FsbGluZyB0aGlzIGZyb20gaW5zaWRlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5H
SW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIzNSw5ICsyMzUsOSBAQCBib29sIFBOR0ltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxh
YmxlKCkKICAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsKIH0KIAot
Ym9vbCBQTkdJbWFnZURlY29kZXI6OnNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhl
aWdodCkKK2Jvb2wgUE5HSW1hZ2VEZWNvZGVyOjpzZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUp
CiB7Ci0gICAgaWYgKCFJbWFnZURlY29kZXI6OnNldFNpemUod2lkdGgsIGhlaWdodCkpCisgICAg
aWYgKCFJbWFnZURlY29kZXI6OnNldFNpemUoc2l6ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIHByZXBhcmVTY2FsZURhdGFJZk5lY2Vzc2FyeSgpOwpAQCAtMjk1LDcgKzI5NSw3IEBA
IHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJBdmFpbGFibGUoKQogICAgIC8vIHdpbGwgY2Vh
c2UgdG8gZXhpc3QuICBOb3RlIHRoYXQgd2UnbGwgc3RpbGwgcHJvcGVybHkgc2V0IHRoZSBmYWls
dXJlIGZsYWcKICAgICAvLyBpbiB0aGlzIGNhc2UgYXMgc29vbiBhcyB3ZSBsb25nam1wKCkuCiAg
ICAgbV9kb05vdGhpbmdPbkZhaWx1cmUgPSB0cnVlOwotICAgIGJvb2wgcmVzdWx0ID0gc2V0U2l6
ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBib29sIHJlc3VsdCA9IHNldFNpemUoSW50U2l6ZSh3aWR0
aCwgaGVpZ2h0KSk7CiAgICAgbV9kb05vdGhpbmdPbkZhaWx1cmUgPSBmYWxzZTsKICAgICBpZiAo
IXJlc3VsdCkgewogICAgICAgICBsb25nam1wKEpNUEJVRihwbmcpLCAxKTsKQEAgLTQxMSwxOSAr
NDExLDE5IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpoZWFkZXJBdmFpbGFibGUoKQogICAgIH0K
IH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNldFBpeGVsUkdCKEltYWdlRnJhbWU6OlBpeGVsRGF0
YSogZGVzdCwgcG5nX2J5dGVwIHBpeGVsKQorc3RhdGljIGlubGluZSB2b2lkIHNldFBpeGVsUkdC
KFJHQkEzMiogZGVzdCwgcG5nX2J5dGVwIHBpeGVsKQogewogICAgICpkZXN0ID0gMHhGRjAwMDAw
MFUgfCBwaXhlbFswXSA8PCAxNiB8IHBpeGVsWzFdIDw8IDggfCBwaXhlbFsyXTsKIH0KIAotc3Rh
dGljIGlubGluZSB2b2lkIHNldFBpeGVsUkdCQShJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGRlc3Qs
IHBuZ19ieXRlcCBwaXhlbCwgdW5zaWduZWQgY2hhciYgbm9uVHJpdmlhbEFscGhhTWFzaykKK3N0
YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFJHQkEoUkdCQTMyKiBkZXN0LCBwbmdfYnl0ZXAgcGl4
ZWwsIHVuc2lnbmVkIGNoYXImIG5vblRyaXZpYWxBbHBoYU1hc2spCiB7CiAgICAgdW5zaWduZWQg
Y2hhciBhID0gcGl4ZWxbM107CiAgICAgKmRlc3QgPSBhIDw8IDI0IHwgcGl4ZWxbMF0gPDwgMTYg
fCBwaXhlbFsxXSA8PCA4IHwgcGl4ZWxbMl07CiAgICAgbm9uVHJpdmlhbEFscGhhTWFzayB8PSAo
MjU1IC0gYSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRQaXhlbFByZW11bHRpcGxpZWRS
R0JBKEltYWdlRnJhbWU6OlBpeGVsRGF0YSogZGVzdCwgcG5nX2J5dGVwIHBpeGVsLCB1bnNpZ25l
ZCBjaGFyJiBub25Ucml2aWFsQWxwaGFNYXNrKQorc3RhdGljIGlubGluZSB2b2lkIHNldFBpeGVs
UHJlbXVsdGlwbGllZFJHQkEoUkdCQTMyKiBkZXN0LCBwbmdfYnl0ZXAgcGl4ZWwsIHVuc2lnbmVk
IGNoYXImIG5vblRyaXZpYWxBbHBoYU1hc2spCiB7CiAgICAgdW5zaWduZWQgY2hhciBhID0gcGl4
ZWxbM107CiAgICAgdW5zaWduZWQgY2hhciByID0gZmFzdERpdmlkZUJ5MjU1KHBpeGVsWzBdICog
YSk7CkBAIC00NDcsNyArNDQ3LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJs
ZSh1bnNpZwogICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVttX2N1
cnJlbnRGcmFtZV07CiAgICAgaWYgKGJ1ZmZlci5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFt
ZUVtcHR5KSB7CiAgICAgICAgIHBuZ19zdHJ1Y3RwIHBuZyA9IG1fcmVhZGVyLT5wbmdQdHIoKTsK
LSAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzY2FsZWRTaXplKCkud2lkdGgoKSwgc2NhbGVk
U2l6ZSgpLmhlaWdodCgpKSkgeworICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNjYWxlZFNp
emUoKSkpIHsKICAgICAgICAgICAgIGxvbmdqbXAoSk1QQlVGKHBuZyksIDEpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CkBAIC00NjksMTAgKzQ2OSw3IEBAIHZvaWQgUE5HSW1hZ2VE
ZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWcKICNpZiBFTkFCTEUoQVBORykKICAgICAgICAgaWYg
KG1fY3VycmVudEZyYW1lKQogICAgICAgICAgICAgaW5pdEZyYW1lQnVmZmVyKG1fY3VycmVudEZy
YW1lKTsKLSAgICAgICAgZWxzZQogI2VuZGlmCi0gICAgICAgIC8vIEZvciBQTkdzLCB0aGUgZnJh
bWUgYWx3YXlzIGZpbGxzIHRoZSBlbnRpcmUgaW1hZ2UuCi0gICAgICAgIGJ1ZmZlci5zZXRPcmln
aW5hbEZyYW1lUmVjdChJbnRSZWN0KEludFBvaW50KCksIHNpemUoKSkpOwogICAgIH0KIAogICAg
IC8qIGxpYnBuZyBjb21tZW50cyAoaGVyZSB0byBleHBsYWluIHdoYXQgZm9sbG93cykuCkBAIC01
MzEsNyArNTI4LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZwog
ICAgIH0KIAogICAgIC8vIFdyaXRlIHRoZSBkZWNvZGVkIHJvdyBwaXhlbHMgdG8gdGhlIGZyYW1l
IGJ1ZmZlci4KLSAgICBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGFkZHJlc3MgPSBidWZmZXIuZ2V0
QWRkcigwLCB5KTsKKyAgICBSR0JBMzIqIGFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcigwLCB5KTsK
ICAgICBpbnQgd2lkdGggPSBzY2FsZWRTaXplKCkud2lkdGgoKTsKICAgICB1bnNpZ25lZCBjaGFy
IG5vblRyaXZpYWxBbHBoYU1hc2sgPSAwOwogCkBAIC04MjAsNyArODE3LDcgQEAgdm9pZCBQTkdJ
bWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcihzaQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8v
IFdlIHdhbnQgdG8gY2xlYXIgdGhlIHByZXZpb3VzIGZyYW1lIHRvIHRyYW5zcGFyZW50LCB3aXRo
b3V0CiAgICAgICAgIC8vIGFmZmVjdGluZyBwaXhlbHMgaW4gdGhlIGltYWdlIG91dHNpZGUgb2Yg
dGhlIGZyYW1lLgotICAgICAgICBjb25zdCBJbnRSZWN0JiBwcmV2UmVjdCA9IHByZXZCdWZmZXIt
Pm9yaWdpbmFsRnJhbWVSZWN0KCk7CisgICAgICAgIEludFJlY3QgcHJldlJlY3QgPSBwcmV2QnVm
ZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgpOwogICAgICAgICBpZiAoIWZyYW1lSW5kZXggfHwgcHJl
dlJlY3QuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzY2FsZWRTaXplKCkpKSkgewogICAg
ICAgICAgICAgLy8gQ2xlYXJpbmcgdGhlIGZpcnN0IGZyYW1lLCBvciBhIGZyYW1lIHRoZSBzaXpl
IG9mIHRoZSB3aG9sZQogICAgICAgICAgICAgLy8gaW1hZ2UsIHJlc3VsdHMgaW4gYSBjb21wbGV0
ZWx5IGVtcHR5IGltYWdlLgpAQCAtODQ0LDcgKzg0MSw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVy
OjpmcmFtZUNvbXBsZXRlKCkKICAgICBwbmdfYnl0ZXAgaW50ZXJsYWNlQnVmZmVyID0gbV9yZWFk
ZXItPmludGVybGFjZUJ1ZmZlcigpOwogCiAgICAgaWYgKG1fY3VycmVudEZyYW1lICYmIGludGVy
bGFjZUJ1ZmZlcikgewotICAgICAgICBjb25zdCBJbnRSZWN0JiByZWN0ID0gYnVmZmVyLm9yaWdp
bmFsRnJhbWVSZWN0KCk7CisgICAgICAgIEludFJlY3QgcmVjdCA9IGJ1ZmZlci5vcmlnaW5hbEZy
YW1lUmVjdCgpOwogICAgICAgICBib29sIGhhc0FscGhhID0gbV9yZWFkZXItPmhhc0FscGhhKCk7
CiAgICAgICAgIHVuc2lnbmVkIGNvbG9yQ2hhbm5lbHMgPSBoYXNBbHBoYSA/IDQgOiAzOwogICAg
ICAgICBib29sIG5vblRyaXZpYWxBbHBoYSA9IGZhbHNlOwpAQCAtODU0LDcgKzg1MSw3IEBAIHZv
aWQgUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKCkKICNpZiBFTkFCTEUoSU1BR0VfREVD
T0RFUl9ET1dOX1NBTVBMSU5HKQogICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IHJlY3QubWF4
WSgpIC0gcmVjdC55KCk7ICsreSkgewogICAgICAgICAgICAgcG5nX2J5dGVwIHJvdyA9IGludGVy
bGFjZUJ1ZmZlciArIChtX3NjYWxlZCA/IG1fc2NhbGVkUm93c1t5XSA6IHkpICogY29sb3JDaGFu
bmVscyAqIHNpemUoKS53aWR0aCgpOwotICAgICAgICAgICAgSW1hZ2VGcmFtZTo6UGl4ZWxEYXRh
KiBhZGRyZXNzID0gYnVmZmVyLmdldEFkZHIocmVjdC54KCksIHkgKyByZWN0LnkoKSk7CisgICAg
ICAgICAgICBSR0JBMzIqIGFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcihyZWN0LngoKSwgeSArIHJl
Y3QueSgpKTsKICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgcmVjdC5tYXhYKCkgLSBy
ZWN0LngoKTsgKyt4KSB7CiAgICAgICAgICAgICAgICAgcG5nX2J5dGVwIHBpeGVsID0gcm93ICsg
KG1fc2NhbGVkID8gbV9zY2FsZWRDb2x1bW5zW3hdIDogeCkgKiBjb2xvckNoYW5uZWxzOwogICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gaGFzQWxwaGEgPyBwaXhlbFszXSA6IDI1NTsK
QEAgLTg3MCw3ICs4NjcsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgp
CiAgICAgICAgIHBuZ19ieXRlcCByb3cgPSBpbnRlcmxhY2VCdWZmZXI7CiAgICAgICAgIGZvciAo
aW50IHkgPSByZWN0LnkoKTsgeSA8IHJlY3QubWF4WSgpOyArK3ksIHJvdyArPSBjb2xvckNoYW5u
ZWxzICogc2l6ZSgpLndpZHRoKCkpIHsKICAgICAgICAgICAgIHBuZ19ieXRlcCBwaXhlbCA9IHJv
dzsKLSAgICAgICAgICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogYWRkcmVzcyA9IGJ1ZmZlci5n
ZXRBZGRyKHJlY3QueCgpLCB5KTsKKyAgICAgICAgICAgIFJHQkEzMiogYWRkcmVzcyA9IGJ1ZmZl
ci5nZXRBZGRyKHJlY3QueCgpLCB5KTsKICAgICAgICAgICAgIGZvciAoaW50IHggPSByZWN0Lngo
KTsgeCA8IHJlY3QubWF4WCgpOyArK3gsIHBpeGVsICs9IGNvbG9yQ2hhbm5lbHMpIHsKICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IGhhc0FscGhhID8gcGl4ZWxbM10gOiAyNTU7CiAg
ICAgICAgICAgICAgICAgbm9uVHJpdmlhbEFscGhhIHw9IGFscGhhIDwgMjU1OwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Bu
Zy9QTkdJbWFnZURlY29kZXIuaAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OCw3ICs0OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgaW50IHJl
cGV0aXRpb25Db3VudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGxheUNvdW50LTE7IH0K
ICNlbmRpZgogICAgICAgICBib29sIGlzU2l6ZUF2YWlsYWJsZSgpIG92ZXJyaWRlOwotICAgICAg
ICBib29sIHNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkgb3ZlcnJpZGU7
CisgICAgICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7CiAgICAgICAg
IEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgpIG92ZXJyaWRlOwog
ICAgICAgICAvLyBDQVVUSU9OOiBzZXRGYWlsZWQoKSBkZWxldGVzIHxtX3JlYWRlcnwuICBCZSBj
YXJlZnVsIHRvIGF2b2lkCiAgICAgICAgIC8vIGFjY2Vzc2luZyBkZWxldGVkIG1lbW9yeSwgZXNw
ZWNpYWxseSB3aGVuIGNhbGxpbmcgdGhpcyBmcm9tIGluc2lkZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dF
QlBJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTUsNyArMTE1LDcgQEAgYm9vbCBXRUJQSW1hZ2VEZWNvZGVyOjpkZWNvZGUo
Ym9vbCBvbmx5UwogICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgICAgICBtX2hh
c0FscGhhID0gZmFsc2U7CiAjZW5kaWYKLSAgICAgICAgaWYgKCFzZXRTaXplKHdpZHRoLCBoZWln
aHQpKQorICAgICAgICBpZiAoIXNldFNpemUoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSkpCiAgICAg
ICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgfQogCkBAIC0xMjgsMTggKzEyOCwxNyBA
QCBib29sIFdFQlBJbWFnZURlY29kZXI6OmRlY29kZShib29sIG9ubHlTCiAgICAgQVNTRVJUKGJ1
ZmZlci5zdGF0dXMoKSAhPSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlKTsKIAogICAgIGlmIChi
dWZmZXIuc3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVFbXB0eSkgewotICAgICAgICBpZiAo
IWJ1ZmZlci5zZXRTaXplKHNpemUoKS53aWR0aCgpLCBzaXplKCkuaGVpZ2h0KCkpKQorICAgICAg
ICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNpemUoKSkpCiAgICAgICAgICAgICByZXR1cm4gc2V0RmFp
bGVkKCk7CiAgICAgICAgIGJ1ZmZlci5zZXRTdGF0dXMoSW1hZ2VGcmFtZTo6RnJhbWVQYXJ0aWFs
KTsKICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKG1faGFzQWxwaGEpOwotICAgICAgICBidWZm
ZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKTsKICAg
ICB9CiAKICAgICBpZiAoIW1fZGVjb2RlcikgewogICAgICAgICBXRUJQX0NTUF9NT0RFIG1vZGUg
PSBvdXRwdXRNb2RlKG1faGFzQWxwaGEpOwogICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBo
YSkKICAgICAgICAgICAgIG1vZGUgPSBvdXRwdXRNb2RlKGZhbHNlKTsKLSAgICAgICAgaW50IHJv
d1N0cmlkZSA9IHNpemUoKS53aWR0aCgpICogc2l6ZW9mKEltYWdlRnJhbWU6OlBpeGVsRGF0YSk7
CisgICAgICAgIGludCByb3dTdHJpZGUgPSBzaXplKCkud2lkdGgoKSAqIHNpemVvZihSR0JBMzIp
OwogICAgICAgICB1aW50OF90KiBvdXRwdXQgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihi
dWZmZXIuZ2V0QWRkcigwLCAwKSk7CiAgICAgICAgIGludCBvdXRwdXRTaXplID0gc2l6ZSgpLmhl
aWdodCgpICogcm93U3RyaWRlOwogICAgICAgICBtX2RlY29kZXIgPSBXZWJQSU5ld1JHQihtb2Rl
LCBvdXRwdXQsIG91dHB1dFNpemUsIHJvd1N0cmlkZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288626</attachid>
            <date>2016-09-12 15:44:29 -0700</date>
            <delta_ts>2016-09-12 16:54:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159679-20160912154156.patch</filename>
            <type>text/plain</type>
            <size>68915</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNTgzMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzMyBAQAorMjAxNi0wOS0xMiAgU2FpZCBB
Ym91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgdGhl
IHBpeGVsIGRhdGEgb2YgSW1hZ2VGcmFtZSB0byBhIHNlcGFyYXRlIGNsYXNzIG5hbWVkIEltYWdl
QmFja2luZ1N0b3JlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTk2NzkKKworICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCisKKyAgICAg
ICAgTW92ZSB0aGUgcGl4ZWwgZGF0YSBtYW5pcHVsYXRpb24gcGFydCBpbiBJbWFnZUZyYW1lIGlu
dG8gYSBzZXBhcmF0ZSBjbGFzcworICAgICAgICBhbmQgYWxsb2NhdGUgaXQgb24gZGVtYW5kLgor
CisgICAgICAgICogUGxhdGZvcm1FZmwuY21ha2U6CisgICAgICAgICogUGxhdGZvcm1HVEsuY21h
a2U6CisgICAgICAgICogUGxhdGZvcm1XaW5DYWlyby5jbWFrZToKKyAgICAgICAgKiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgIEFkZCBJbWFnZUJhY2tpbmdTdG9y
ZUNhaXJvLmNwcCBhbmQgcmVtb3ZlIEltYWdlRGVjb2RlckNhaXJvLmNwcCBmcm9tIHRoZQorICAg
ICAgICBXZWJLaXQgcHJvamVjdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2hhbm5lbCk6IGNoYW5uZWwg
PSBjaGFubmVsICogYWxwaGEgLyAyNTUuCisgICAgICAgIChXZWJDb3JlOjp1bnByZW11bHRpcGxp
ZWRDaGFubmVsKTogY2hhbm5lbCA9IGNoYW5uZWwgKiAyNTUgLyBhbHBoYS4KKyAgICAgICAgKFdl
YkNvcmU6Om1ha2VQcmVtdWx0aXBsaWVkUkdCQSk6IFVuLXByZW11bHRpcGxpZWQgY2hhbm5lbHMg
dG8gcHJlbXVsdGlwbGllZCBSR0JBMzIuCisgICAgICAgIChXZWJDb3JlOjptYWtlVW5QcmVtdWx0
aXBsaWVkUkdCQSk6IFByZW11bHRpcGxpZWQgY2hhbm5lbHMgdG8gdW4tcHJlbXVsdGlwbGllZCBS
R0JBMzIuCisgICAgICAgIChXZWJDb3JlOjpjb2xvckZyb21QcmVtdWx0aXBsaWVkQVJHQik6IFVz
ZSBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQS4KKyAgICAgICAgKFdlYkNvcmU6OnByZW11bHRpcGxp
ZWRBUkdCRnJvbUNvbG9yKTogVXNlIG1ha2VQcmVtdWx0aXBsaWVkUkdCQS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6ZmFzdE11bHRpcGx5
QnkyNTUpOiB4ICogMjU1ID0geCAqIDI1NiAtIHggPSB4IDw8IDggLSB4LgorCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCYWNraW5nU3RvcmUuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJhY2tpbmdTdG9yZTo6Y3JlYXRlKTogQ3JlYXRlcyBhIG5ldyBJbWFnZUJh
Y2tpbmdTdG9yZS4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpzZXRTaXpl
KTogQ2hhbmdlcyB0aGUgcGl4ZWxzIHNpemUuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJhY2tp
bmdTdG9yZTo6c2V0RnJhbWVSZWN0KTogVGhpcyB3aWxsIGFsd2F5cyBqdXN0IGJlIHRoZSBlbnRp
cmUgYnVmZmVyIGV4Y2VwdCBmb3IgR0lGIGFuZCBQTkcgZnJhbWVzLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VCYWNraW5nU3RvcmU6OnNpemUpOiBSZXR1cm5zIHRoZSBwaXhlbHMgc2l6ZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpmcmFtZVJlY3QpOiBSZXR1cm5zIHRo
ZSBwaXhlbHMgZnJhbWUgcmVjdGFuZ2xlLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5n
U3RvcmU6OmNsZWFyKTogQ2xlYXJzIHRoZSBlbnRpcmUgaW1hZ2UuCisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJhY2tpbmdTdG9yZTo6Y2xlYXJSZWN0KTogQ2xlYXJzIGEgcmVjdGFuZ2xlIGluIHRo
ZSBpbWFnZS4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3JlOjpyZXBlYXRGaXJz
dFJvdyk6IFJlcGVhdHMgdGhlIGZpcnN0IHJvdyBpbiBhIHJlY3RhbmdsZSBpbiB0aGUgaW1hZ2Uu
CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJhY2tpbmdTdG9yZTo6cGl4ZWxBdCk6IFJldHVybnMg
YSBwb2ludGVyIHRvIGEgcGl4ZWwgZGF0YS4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2lu
Z1N0b3JlOjpzZXRQaXhlbCk6IFNldHMgdGhlIGNvbG9yIG9mIGEgcGl4ZWwgaW4gdGhlIGltYWdl
LgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCYWNraW5nU3RvcmU6OmJsZW5kUGl4ZWwpOiBCbGVu
ZCBhIGNvbG9yIHdpdGggYSBwaXhlbCBpbiB0aGUgaW1hZ2UuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUJhY2tpbmdTdG9yZTo6aW5Cb3VuZHMpOiBDaGVja3MgaWYgYSByZWN0YW5nbGUgaXMgaW4g
dGhlIGJvdW5kcyBvZiB0aGUgaW1hZ2UuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJhY2tpbmdT
dG9yZTo6aXNPdmVyU2l6ZSk6IENoZWNrcyB3aGV0aGVyIGEgc2l6ZSBjb3VsZCBub3QgYmUgYWxs
b2NhdGVkIGZvciBhbiBpbWFnZS4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQmFja2luZ1N0b3Jl
OjpJbWFnZUJhY2tpbmdTdG9yZSk6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9O
YXRpdmVJbWFnZUNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5hdGl2ZUltYWdlSGFzQWxwaGEp
OiBJbXBsZW1lbnQgdGhpcyBmdW5jdGlvbi4gU2VlIGNvbW1lbnRzIGluIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTg2ODQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZTo6b3BlcmF0b3I9KTogY29weUJpdG1hcERhdGEoKSBub3cgY29waWVzIHRoZSBmcmFtZVJl
Y3Qgb2YgdGhlIEltYWdlQmFja2luZ1N0b3JlLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFt
ZTo6Y2xlYXJQaXhlbERhdGEpOiBUaGUgcGl4ZWxzIGRhdGEgYW5kIHRoZSBwb2ludGVyIHRvIHRo
ZXNlIHBpeGVscyBhcmUgbm93IGluY2x1ZGVkIGluIHRoZSBJbWFnZUJhY2tpbmdTdG9yZS4KKyAg
ICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6Onplcm9GaWxsUGl4ZWxEYXRhKTogQ2xlYXJpbmcg
dGhlIGltYWdlIHBpeGVscyBhcmUgbm93IGluIEltYWdlQmFja2luZ1N0b3JlOjpjbGVhcigpLgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6emVyb0ZpbGxGcmFtZVJlY3QpOiBDbGVhcmlu
ZyB0aGUgaW1hZ2UgcGl4ZWxzIGFyZSBub3cgaW4gSW1hZ2VCYWNraW5nU3RvcmU6OmNsZWFyUmVj
dCgpLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Y29weUJpdG1hcERhdGEpOiBXZSBl
aXRoZXIgbmVlZCB0byBjcmVhdGUgYSBuZXcgSW1hZ2VCYWNraW5nU3RvcmUgb3IgbnVsbGlmeSB0
aGUgY3VycmVudCBvbmUuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRTaXplKTog
SW1hZ2VGcmFtZTo6c2V0U2l6ZSgpIGlzIHN1cHBvc2VkIHRvIGJlIGNhbGxlZCBvbmNlIGFuZCB0
byBjcmVhdGUgdGhlIEltYWdlQmFja2luZ1N0b3JlLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VG
cmFtZTo6c2V0T3JpZ2luYWxGcmFtZVJlY3QpOiBEZWxlZ2F0ZSB0aGlzIGNhbGwgdG8gSW1hZ2VC
YWNraW5nU3RvcmU6OnNldEZyYW1lUmVjdCgpLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VEZWNv
ZGVyOjpmcmFtZUJ5dGVzQXRJbmRleCk6IEltYWdlRnJhbWU6OlBpeGVsRGF0YSBjYW4gYmUgcmVw
bGFjZWQgYnkgUkdCQTMyLgorCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1h
Z2VEZWNvZGVyLmg6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpjb3B5Um93TlRpbWVz
KTogVGhlIGltcGxlbWVudGF0aW9uIHdhcyBtb3ZlZCB0byBJbWFnZUJhY2tpbmdTdG9yZTo6cmVw
ZWF0Rmlyc3RSb3coKS4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6OnNpemUpOiBHZXRz
IHRoZSBzaXplIG9mIGFuIGltYWdlIGZyb20gaXRzIEltYWdlQmFja2luZ1N0b3JlLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6YXNOZXdOYXRpdmVJbWFnZSk6IEdldHMgYSBOdGFpdmVJ
bWFnZVB0ciBmcm9tIHRoZSBJbWFnZUJhY2tpbmdTdG9yZS4KKyAgICAgICAgKFdlYkNvcmU6Oklt
YWdlRnJhbWU6OmJhY2tpbmdTdG9yZSk6IFJldHVybnMgYSByYXcgcG9pbnRlciB0byB0aGUgSW1h
Z2VCYWNraW5nU3RvcmUuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpoYXNCYWNraW5n
U3RvcmUpOiBSZXR1cm5zIHdoZXRoZXIgdGhlIEltYWdlRnJhbWUgaGFzIGFuIEltYWdlQmFja2lu
Z1N0b3JlLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6b3JpZ2luYWxGcmFtZVJlY3Qp
OiBSZXR1cm5zIHRoZSBmcmFtZVJlY3Qgb2YgdGhlIGltYWdlIGZyb20gaXRzIEltYWdlQmFja2lu
Z1N0b3JlLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6cGl4ZWxBdCk6IERlbGVnYXRl
cyB0aGUgY2FsbCB0byB0aGUgSW1hZ2VCYWNraW5nU3RvcmUuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjpzZXRQaXhlbCk6IERlbGVnYXRlcyB0aGUgY2FsbCB0byB0aGUgSW1hZ2VCYWNr
aW5nU3RvcmUuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpibGVuZFBpeGVsKTogRGVs
ZWdhdGVzIHRoZSBjYWxsIHRvIHRoZSBJbWFnZUJhY2tpbmdTdG9yZS4KKyAgICAgICAgCisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURlY29kZXI6OnNldFNpemUpOiBzZXRTaXplKCkgbm93IHRha2Vz
IGFuIEludFNpemUuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRPcmlnaW5hbEZy
YW1lUmVjdCk6IERlbGV0ZWQuIE1vdmVkIHRvIEltYWdlRGVjb2Rlci5jcHAuCisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpzZXRSR0JBKTogRGVsZXRlZC4gUmVuYW1lZCB0byBJbWFnZUZy
YW1lOjpzZXRQaXhlbCgpLgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6Z2V0QWRkcik6
IERlbGV0ZWQuIFJlbmFtZWQgdG8gSW1hZ2VGcmFtZTo6cGl4ZWxBdCgpLgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VGcmFtZTo6aGFzUGl4ZWxEYXRhKTogRGVsZXRlZC4gUmVuYW1lZCB0byBJbWFn
ZUZyYW1lOjpoYXNCYWNraW5nU3RvcmUoKS4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRnJhbWU6
OmZpeFBvaW50VW5zaWduZWRNdWx0aXBseSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJ
bWFnZUZyYW1lOjpkaXZpZGUyNTUpOiBEZWxldGVkLiBSZXBsYWNlZCBieSBmYXN0RGl2aWRlQnky
NTUoKSBmcm9tIENvbG9yLmguCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUZyYW1lOjpvdmVyUkdC
QSk6IERlbGV0ZWQuIFJlbmFtZWQgdG8gSW1hZ2VGcmFtZTo6YmxlbmRQaXhlbCgpLgorICAgICAg
ICAoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6d2lkdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW1hZ2VGcmFtZTo6aGVpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
RGVjb2Rlcjo6aXNPdmVyU2l6ZSk6IERlbGV0ZWQuIE1vdmVkIHRvIEltYWdlQmFja2luZ1N0b3Jl
Ojppc092ZXJTaXplKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAv
Qk1QSW1hZ2VSZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6OmRl
Y29kZUJNUCk6CisgICAgICAgIChXZWJDb3JlOjpCTVBJbWFnZVJlYWRlcjo6cHJvY2Vzc0luZm9I
ZWFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NOb25STEVE
YXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFk
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpzZXRJKToKKyAgICAgICAg
KFdlYkNvcmU6OkJNUEltYWdlUmVhZGVyOjpzZXRQaXhlbCk6CisgICAgICAgIChXZWJDb3JlOjpC
TVBJbWFnZVJlYWRlcjo6ZmlsbFJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6Qk1QSW1hZ2VSZWFk
ZXI6OnNldFJHQkEpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2NhaXJvL0ltYWdlQmFja2luZ1N0b3JlQ2Fpcm8uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkltYWdlQmFja2luZ1N0b3JlOjppbWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpzZXRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3cpOgorICAgICAgICAoV2ViQ29yZTo6R0lG
SW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwOgorICAgICAgICAoR0lGSW1hZ2VSZWFk
ZXI6OnBhcnNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1h
Z2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklDT0ltYWdlRGVjb2Rlcjo6c2V0U2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpJQ09JbWFnZURlY29kZXI6OnByb2Nlc3NEaXJlY3RvcnlF
bnRyaWVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9pY28vSUNPSW1hZ2VE
ZWNvZGVyLmg6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1h
Z2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZVJlYWRlcjo6ZGVjb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURlY29kZXI6OnNldFNpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6c2V0UGl4ZWwpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlRGVjb2Rl
cjo6b3V0cHV0U2NhbmxpbmVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9q
cGVnL0pQRUdJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVj
b2Rlcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmhlYWRl
ckF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpzZXRQaXhlbFJHQik6CisgICAgICAgIChX
ZWJDb3JlOjpzZXRQaXhlbFJHQkEpOgorICAgICAgICAoV2ViQ29yZTo6c2V0UGl4ZWxQcmVtdWx0
aXBsaWVkUkdCQSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OnJvd0F2YWls
YWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy93ZWJwL1dFQlBJbWFnZURlY29kZXIu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V0VCUEltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAg
ICAgLSBTZW5kIGFuIEludFNpemUgdG8gSW1hZ2VGcmFtZTo6c2V0U2l6ZSgpIGFuZCBJbWFnZURl
Y29kZXI6OnNldFNpemUoKS4KKyAgICAgICAgLSBSZXBsYWNlIEltYWdlRnJhbWU6OlBpeGVsRGF0
YSBieSBSR0JBMzIuCisgICAgICAgIC0gTm8gbmVlZCB0byBjYWxsIEltYWdlRnJhbWU6OnNldE9y
aWdpbmFsRnJhbWVSZWN0KCkgaWYgdGhpcyBzZXRzIHRoZQorICAgICAgICAgIGZyYW1lUmVjdCB0
byB0aGUgZW50aXJlIGltYWdlIHJlY3RhbmdsZSBzaW5jZSB0aGlzIGlzIGRvbmUgYnkgZGVmYXVs
dAorICAgICAgICAgIGluIEltYWdlQmFja2luZ1N0b3JlOjpzZXRTaXplKCkuCisgICAgICAgIC0g
SW1hZ2VCYWNraW5nU3RvcmU6OmltYWdlKCkgbm93IHJlcGxhY2VzIEltYWdlRnJhbWU6OmFzTmV3
TmF0aXZlSW1hZ2UoKS4KKyAgICAgICAgLSBJbWFnZUZyYW1lOjpzZXRQaXhlbCgpIG5vdyByZXBs
YWNlcyBJbWFnZUZyYW1lOjpzZXRSR0JBKCkuCisgICAgICAgIC0gSW1hZ2VGcmFtZTo6YmxlbmRQ
aXhlbCgpIG5vdyByZXBsYWNlcyBJbWFnZUZyYW1lOjpvdmVyUkdCQSgpLgorICAgICAgICAtIElt
YWdlRnJhbWU6OnBpeGVsQXQoKSBub3cgcmVwbGFjZXMgSW1hZ2VGcmFtZTo6Z2V0QWRkcigpLgor
CiAyMDE2LTA5LTEyICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZW1vdmUgT3B0aW9uYWxDb2xvcgpJbmRleDogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21h
a2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvUGxhdGZvcm1FZmwuY21ha2UJKHJldmlz
aW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCSh3b3JraW5n
IGNvcHkpCkBAIC0xODMsMTAgKzE4Myw5IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3gxMS9QbGF0Zm9ybURpc3BsYXlYMTEuY3BwCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MveDExL1hVbmlxdWVSZXNvdXJjZS5jcHAKIAorICAgIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlQmFja2luZ1N0b3JlQ2Fpcm8uY3BwCiAgICAgcGxhdGZv
cm0vaW1hZ2UtZW5jb2RlcnMvSlBFR0ltYWdlRW5jb2Rlci5jcHAKIAotICAgIHBsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2NhaXJvL0ltYWdlRGVjb2RlckNhaXJvLmNwcAotCiAgICAgcGxhdGZvcm0v
bmV0d29yay9lZmwvTmV0d29ya1N0YXRlTm90aWZpZXJFZmwuY3BwCiAKICAgICBwbGF0Zm9ybS9u
ZXR3b3JrL3NvdXAvQXV0aGVudGljYXRpb25DaGFsbGVuZ2VTb3VwLmNwcApJbmRleDogU291cmNl
L1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
UGxhdGZvcm1HVEsuY21ha2UJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtR1RLLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNyArMTU1LDcgQEAgbGlzdChB
UFBFTkQgV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0vZ3RrL1RlbXBvcmFyeUxpbmtTdHVi
cy5jcHAKICAgICBwbGF0Zm9ybS9ndGsvVXNlckFnZW50R3RrLmNwcAogCi0gICAgcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCisgICAgcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VCYWNraW5nU3RvcmVDYWlyby5jcHAKIAogICAgIHBs
YXRmb3JtL21lZGlhc3RyZWFtL2d0ay9TRFBQcm9jZXNzb3JTY3JpcHRSZXNvdXJjZUd0ay5jcHAK
IApJbmRleDogU291cmNlL1dlYkNvcmUvUGxhdGZvcm1XaW5DYWlyby5jbWFrZQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCShyZXZpc2lvbiAyMDU2
ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybVdpbkNhaXJvLmNtYWtlCSh3b3JraW5nIGNv
cHkpCkBAIC00Niw3ICs0Niw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUwogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVNZWRpYUZvdW5kYXRpb24uY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1NpbXBsZUZvbnREYXRhQ2Fpcm9XaW4uY3BwCiAK
LSAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZURlY29kZXJDYWlyby5jcHAK
KyAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZUJhY2tpbmdTdG9yZUNhaXJv
LmNwcAogCiAgICAgcGxhdGZvcm0vbmV0d29yay9OZXR3b3JrU3RvcmFnZVNlc3Npb25TdHViLmNw
cAogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTIyNzUsNiArMjI3NSw3
IEBACiAJCTU1NUI4N0VDMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURlY29kZXJDRy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NTVCODdFQTFDQUFG
MEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3BwICovOyB9OwogCQk1NTVCODdFRDFDQUFG
MEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1NUI4N0VCMUNBQUYwQUIwMDM0OTQyNSAvKiBJbWFnZURl
Y29kZXJDRy5oICovOyB9OwogCQk1NUEzMzZGNzFEODIwOUY0MDAyMkM0QzcgLyogTmF0aXZlSW1h
Z2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1QTMz
NkY2MUQ4MjA5RjQwMDIyQzRDNyAvKiBOYXRpdmVJbWFnZS5oICovOyB9OworCQk1NUEzMzZGOTFE
ODIxRTNDMDAyMkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1QTMzNkY4MUQ4MjFFM0MwMDIyQzRDNyAvKiBJ
bWFnZUJhY2tpbmdTdG9yZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTU3MDlFOENEMUQ0MTNENDcwMDMyNDRBQyAvKiBXZWJLaXRTdWJ0bGVDcnlw
dG8uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTcw
OUU4Q0ExRDQxM0NFMzAwMzI0NEFDIC8qIFdlYktpdFN1YnRsZUNyeXB0by5jcHAgKi87IH07CiAJ
CTU3MDlFOENFMUQ0MTNENUIwMDMyNDRBQyAvKiBKU1dlYktpdFN1YnRsZUNyeXB0b0N1c3RvbS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUZGOEY2
NjE4MDc0NjA4MDAxMzI2NzQgLyogSlNXZWJLaXRTdWJ0bGVDcnlwdG9DdXN0b20uY3BwICovOyB9
OwogCQk1NzA5RThDRjFENDEzRDlBMDAzMjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5cHRvLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NzA5RThDQjFENDEz
Q0UzMDAzMjQ0QUMgLyogV2ViS2l0U3VidGxlQ3J5cHRvLmggKi87IH07CkBAIC05MjkxLDYgKzky
OTIsNyBAQAogCQk1NTVCODdFQTFDQUFGMEFCMDAzNDk0MjUgLyogSW1hZ2VEZWNvZGVyQ0cuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW1hZ2VEZWNvZGVyQ0cuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NTVCODdFQjFDQUFGMEFCMDAzNDk0MjUg
LyogSW1hZ2VEZWNvZGVyQ0cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1h
Z2VEZWNvZGVyQ0cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTVBMzM2RjYxRDgy
MDlGNDAwMjJDNEM3IC8qIE5hdGl2ZUltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IE5hdGl2ZUltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU1QTMz
NkY4MUQ4MjFFM0MwMDIyQzRDNyAvKiBJbWFnZUJhY2tpbmdTdG9yZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbWFnZUJhY2tpbmdTdG9yZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk1NUQ0MDhGNzFBN0M2MzE4MDBDNzg0NTAgLyogU1ZHSW1hZ2VDbGllbnRz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ltYWdlQ2xpZW50cy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1NzA5RThDQTFENDEzQ0UzMDAzMjQ0QUMgLyog
V2ViS2l0U3VidGxlQ3J5cHRvLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdlYktpdFN1YnRsZUNyeXB0by5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTU3MDlFOENCMUQ0MTNDRTMwMDMyNDRBQyAvKiBXZWJLaXRTdWJ0bGVDcnlwdG8uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViS2l0U3VidGxlQ3J5cHRvLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDc2OSw2ICsyMDc3MSw3IEBACiAJCQkJMzc5OTE5OTQx
MjAwRERGNDAwRUEwNDFDIC8qIFdPRkZGaWxlRm9ybWF0LmNwcCAqLywKIAkJCQkzNzk5MTk5NTEy
MDBEREY0MDBFQTA0MUMgLyogV09GRkZpbGVGb3JtYXQuaCAqLywKIAkJCQk1NUEzMzZGNjFEODIw
OUY0MDAyMkM0QzcgLyogTmF0aXZlSW1hZ2UuaCAqLywKKwkJCQk1NUEzMzZGODFEODIxRTNDMDAy
MkM0QzcgLyogSW1hZ2VCYWNraW5nU3RvcmUuaCAqLywKIAkJCSk7CiAJCQlwYXRoID0gZ3JhcGhp
Y3M7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjYzMzksNiArMjYzNDIsNyBAQAog
CQkJCTU4MkNCMDUzMUE3OEExNEIwMEFGRkNDNCAvKiBTaW1wbGVMaW5lTGF5b3V0VGV4dEZyYWdt
ZW50SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUM1QTFFQTdEMTUyQkNGMDgwMDREMDBC
NiAvKiBTaW1wbGlmeU1hcmt1cENvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3MkE3RjIx
MUM2RTU3MTkwMDlDNjE0OSAvKiBTaW11bGF0ZWRDbGljay5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NTVBMzM2RjkxRDgyMUUzQzAwMjJDNEM3IC8qIEltYWdlQmFja2luZ1N0b3JlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkzMTc0MUFBRDE2NjM2NjA5MDA4QTVCN0UgLyogU2ltdWxhdGVkQ2xpY2tPcHRp
b25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDAwRDdBNTE0QTNGNjE5MDA3MzQwMTEgLyogU2lu
Y1Jlc2FtcGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEzMjdENjAxMUEzM0EyQjAwNEY5RDY1
IC8qIFNpbmtEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDYgKzQ5LDE2IEBAIGNvbnN0IFJHQkEzMiBDb2xvcjo6dHJhbnNwYXJlbnQ7CiBzdGF0aWMgY29u
c3QgUkdCQTMyIGxpZ2h0ZW5lZEJsYWNrID0gMHhGRjU0NTQ1NDsKIHN0YXRpYyBjb25zdCBSR0JB
MzIgZGFya2VuZWRXaGl0ZSA9IDB4RkZBQkFCQUI7CiAKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQg
cHJlbXVsdGlwbGllZENoYW5uZWwodW5zaWduZWQgYywgdW5zaWduZWQgYSkKK3sKKyAgICByZXR1
cm4gZmFzdERpdmlkZUJ5MjU1KGMgKiBhICsgMjU0KTsKK30KKworc3RhdGljIGlubGluZSB1bnNp
Z25lZCB1bnByZW11bHRpcGxpZWRDaGFubmVsKHVuc2lnbmVkIGMsIHVuc2lnbmVkIGEpCit7Cisg
ICAgcmV0dXJuIChmYXN0TXVsdGlwbHlCeTI1NShjKSArIGEgLSAxKSAvIGE7Cit9CisKIFJHQkEz
MiBtYWtlUkdCKGludCByLCBpbnQgZywgaW50IGIpCiB7CiAgICAgcmV0dXJuIDB4RkYwMDAwMDAg
fCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihyLCAyNTUpKSA8PCAxNiB8IHN0ZDo6bWF4KDAsIHN0ZDo6
bWluKGcsIDI1NSkpIDw8IDggfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihiLCAyNTUpKTsKQEAgLTU5
LDYgKzY5LDE2IEBAIFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQKICAg
ICByZXR1cm4gc3RkOjptYXgoMCwgc3RkOjptaW4oYSwgMjU1KSkgPDwgMjQgfCBzdGQ6Om1heCgw
LCBzdGQ6Om1pbihyLCAyNTUpKSA8PCAxNiB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGcsIDI1NSkp
IDw8IDggfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihiLCAyNTUpKTsKIH0KIAorUkdCQTMyIG1ha2VQ
cmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKK3sKKyAgICByZXR1
cm4gbWFrZVJHQkEocHJlbXVsdGlwbGllZENoYW5uZWwociwgYSksIHByZW11bHRpcGxpZWRDaGFu
bmVsKGcsIGEpLCBwcmVtdWx0aXBsaWVkQ2hhbm5lbChiLCBhKSwgYSk7Cit9CisKK1JHQkEzMiBt
YWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKK3sKKyAg
ICByZXR1cm4gbWFrZVJHQkEodW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChyLCBhKSwgdW5wcmVtdWx0
aXBsaWVkQ2hhbm5lbChnLCBhKSwgdW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChiLCBhKSwgYSk7Cit9
CisKIHN0YXRpYyBpbnQgY29sb3JGbG9hdFRvUkdCQUJ5dGUoZmxvYXQgZikKIHsKICAgICAvLyBX
ZSB1c2UgbHJvdW5kZiBhbmQgMjU1IGluc3RlYWQgb2YgbmV4dGFmdGVyZigyNTYsIDApIHRvIG1h
dGNoIENHJ3Mgcm91bmRpbmcKQEAgLTQ4MiwxNCArNTAyLDkgQEAgdm9pZCBDb2xvcjo6Z2V0SFNW
KGRvdWJsZSYgaHVlLCBkb3VibGUmIAogQ29sb3IgY29sb3JGcm9tUHJlbXVsdGlwbGllZEFSR0Io
UkdCQTMyIHBpeGVsQ29sb3IpCiB7CiAgICAgaW50IGFscGhhID0gYWxwaGFDaGFubmVsKHBpeGVs
Q29sb3IpOwotICAgIGlmIChhbHBoYSAmJiBhbHBoYSA8IDI1NSkgewotICAgICAgICByZXR1cm4g
Q29sb3I6OmNyZWF0ZVVuY2hlY2tlZCgKLSAgICAgICAgICAgIHJlZENoYW5uZWwocGl4ZWxDb2xv
cikgKiAyNTUgLyBhbHBoYSwKLSAgICAgICAgICAgIGdyZWVuQ2hhbm5lbChwaXhlbENvbG9yKSAq
IDI1NSAvIGFscGhhLAotICAgICAgICAgICAgYmx1ZUNoYW5uZWwocGl4ZWxDb2xvcikgKiAyNTUg
LyBhbHBoYSwKLSAgICAgICAgICAgIGFscGhhKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcmV0dXJu
IENvbG9yKHBpeGVsQ29sb3IpOworICAgIGlmIChhbHBoYSAmJiBhbHBoYSA8IDI1NSkKKyAgICAg
ICAgcGl4ZWxDb2xvciA9IG1ha2VVblByZW11bHRpcGxpZWRSR0JBKHJlZENoYW5uZWwocGl4ZWxD
b2xvciksIGdyZWVuQ2hhbm5lbChwaXhlbENvbG9yKSwgYmx1ZUNoYW5uZWwocGl4ZWxDb2xvciks
IGFscGhhKTsKKyAgICByZXR1cm4gQ29sb3IocGl4ZWxDb2xvcik7CiB9CiAKIFJHQkEzMiBwcmVt
dWx0aXBsaWVkQVJHQkZyb21Db2xvcihjb25zdCBDb2xvciYgY29sb3IpCkBAIC00OTcsMTQgKzUx
MiwxMCBAQCBSR0JBMzIgcHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3IoY29uc3QgCiAgICAgdW5z
aWduZWQgcGl4ZWxDb2xvcjsKIAogICAgIHVuc2lnbmVkIGFscGhhID0gY29sb3IuYWxwaGEoKTsK
LSAgICBpZiAoYWxwaGEgPCAyNTUpIHsKLSAgICAgICAgcGl4ZWxDb2xvciA9IENvbG9yOjpjcmVh
dGVVbmNoZWNrZWQoCi0gICAgICAgICAgICBmYXN0RGl2aWRlQnkyNTUoY29sb3IucmVkKCkgKiBh
bHBoYSArIDI1NCksCi0gICAgICAgICAgICBmYXN0RGl2aWRlQnkyNTUoY29sb3IuZ3JlZW4oKSAq
IGFscGhhICsgMjU0KSwKLSAgICAgICAgICAgIGZhc3REaXZpZGVCeTI1NShjb2xvci5ibHVlKCkg
KiBhbHBoYSArIDI1NCksCi0gICAgICAgICAgICBhbHBoYSkucmdiKCk7Ci0gICAgfSBlbHNlCi0g
ICAgICAgICBwaXhlbENvbG9yID0gY29sb3IucmdiKCk7CisgICAgaWYgKGFscGhhIDwgMjU1KQor
ICAgICAgICBwaXhlbENvbG9yID0gbWFrZVByZW11bHRpcGxpZWRSR0JBKGNvbG9yLnJlZCgpLCBj
b2xvci5ncmVlbigpLCBjb2xvci5ibHVlKCksIGFscGhhKTsKKyAgICBlbHNlCisgICAgICAgIHBp
eGVsQ29sb3IgPSBjb2xvci5yZ2IoKTsKIAogICAgIHJldHVybiBwaXhlbENvbG9yOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyMDU2
ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NSw2ICs1NSw5IEBAIHR5cGVkZWYgdW5zaWduZWQgUkdCQTMyOyAvLyBEZXBy
ZWNhdGVkOiAKIFdFQkNPUkVfRVhQT1JUIFJHQkEzMiBtYWtlUkdCKGludCByLCBpbnQgZywgaW50
IGIpOwogV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywgaW50IGIs
IGludCBhKTsKIAorUkdCQTMyIG1ha2VQcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGlu
dCBiLCBpbnQgYSk7CitSR0JBMzIgbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBn
LCBpbnQgYiwgaW50IGEpOworCiBXRUJDT1JFX0VYUE9SVCBSR0JBMzIgY29sb3JXaXRoT3ZlcnJp
ZGVBbHBoYShSR0JBMzIgY29sb3IsIGZsb2F0IG92ZXJyaWRlQWxwaGEpOwogV0VCQ09SRV9FWFBP
UlQgUkdCQTMyIGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEoUkdCQTMyIGNvbG9yLCBPcHRpb25hbDxm
bG9hdD4gb3ZlcnJpZGVBbHBoYSk7CiAKQEAgLTIxOCw2ICsyMjEsNyBAQCBDb2xvciBibGVuZChj
b25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sCiAKIGludCBkaWZmZXJlbmNlU3F1YXJlZChjb25z
dCBDb2xvciYsIGNvbnN0IENvbG9yJik7CiAKK3VpbnQxNl90IGZhc3RNdWx0aXBseUJ5MjU1KHVp
bnQxNl90IHZhbHVlKTsKIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1aW50MTZfdCk7CiAKICNp
ZiBVU0UoQ0cpCkBAIC0yOTAsNiArMjk0LDExIEBAIGlubGluZSB1aW50OF90IHJvdW5kQW5kQ2xh
bXBDb2xvckNoYW5uZWwKICAgICByZXR1cm4gc3RkOjptYXgoMC5mLCBzdGQ6Om1pbigyNTUuZiwg
c3RkOjpyb3VuZCh2YWx1ZSkpKTsKIH0KIAoraW5saW5lIHVpbnQxNl90IGZhc3RNdWx0aXBseUJ5
MjU1KHVpbnQxNl90IHZhbHVlKQoreworICAgIHJldHVybiAodmFsdWUgPDwgOCkgLSB2YWx1ZTsK
K30KKwogaW5saW5lIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1aW50MTZfdCB2YWx1ZSkKIHsK
ICAgICAvLyBXaGlsZSB0aGlzIGlzIGFuIGFwcHJveGltYXRlIGFsZ29yaXRobSBmb3IgZGl2aXNp
b24gYnkgMjU1LCBpdCBnaXZlcyBwZXJmZWN0bHkgYWNjdXJhdGUgcmVzdWx0cyBmb3IgMTYtYml0
IHZhbHVlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQmFj
a2luZ1N0b3JlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvSW1hZ2VCYWNraW5nU3RvcmUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJhY2tpbmdTdG9yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJJbnRSZWN0
LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIk5hdGl2ZUltYWdlLmgiCisKKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSW1h
Z2VCYWNraW5nU3RvcmUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCYWNraW5nU3RvcmU+IGNyZWF0ZShjb25z
dCBJbnRTaXplJiBzaXplLCBib29sIHByZW11bHRpcGx5QWxwaGEgPSB0cnVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJhY2tpbmdTdG9yZT4obmV3IEltYWdl
QmFja2luZ1N0b3JlKHNpemUsIHByZW11bHRpcGx5QWxwaGEpKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPEltYWdlQmFja2luZ1N0b3JlPiBjcmVhdGUoY29uc3QgSW1hZ2VC
YWNraW5nU3RvcmUmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJhY2tpbmdTdG9yZT4obmV3IEltYWdlQmFja2luZ1N0b3JlKG90aGVyKSk7CisgICAg
fQorCisgICAgTmF0aXZlSW1hZ2VQdHIgaW1hZ2UoKSBjb25zdDsKKworICAgIGJvb2wgc2V0U2l6
ZShjb25zdCBJbnRTaXplJiBzaXplKQorICAgIHsKKyAgICAgICAgaWYgKHNpemUuaXNFbXB0eSgp
IHx8ICFtX3BpeGVscy50cnlSZXNlcnZlQ2FwYWNpdHkoc2l6ZS5hcmVhKCkpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIG1fcGl4ZWxzLnJlc2l6ZShzaXplLmFyZWEoKSk7
CisgICAgICAgIG1fcGl4ZWxzUHRyID0gbV9waXhlbHMuZGF0YSgpOworICAgICAgICBtX3NpemUg
PSBzaXplOworICAgICAgICBtX2ZyYW1lUmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgbV9zaXpl
KTsKKyAgICAgICAgY2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
dm9pZCBzZXRGcmFtZVJlY3QoY29uc3QgSW50UmVjdCYgZnJhbWVSZWN0KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFtX3NpemUuaXNFbXB0eSgpKTsKKyAgICAgICAgQVNTRVJUKGluQm91bmRzKGZy
YW1lUmVjdCkpOworICAgICAgICBtX2ZyYW1lUmVjdCA9IGZyYW1lUmVjdDsKKyAgICB9CisKKyAg
ICBjb25zdCBJbnRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CisgICAgY29u
c3QgSW50UmVjdCYgZnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3Q7IH0KKwor
ICAgIHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbWVtc2V0KG1fcGl4ZWxzUHRyLCAwLCBt
X3NpemUuYXJlYSgpICogc2l6ZW9mKFJHQkEzMikpOworICAgIH0KKworICAgIHZvaWQgY2xlYXJS
ZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCisgICAgeworICAgICAgICBpZiAocmVjdC5pc0VtcHR5
KCkgfHwgIWluQm91bmRzKHJlY3QpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHNp
emVfdCByb3dCeXRlcyA9IHJlY3Qud2lkdGgoKSAqIHNpemVvZihSR0JBMzIpOworICAgICAgICBS
R0JBMzIqIHN0YXJ0ID0gcGl4ZWxBdChyZWN0LngoKSwgcmVjdC55KCkpOworICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHJlY3QuaGVpZ2h0KCk7ICsraSkgeworICAgICAgICAgICAgbWVtc2V0
KHN0YXJ0LCAwLCByb3dCeXRlcyk7CisgICAgICAgICAgICBzdGFydCArPSBtX3NpemUud2lkdGgo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgcmVwZWF0Rmlyc3RSb3coY29uc3QgSW50
UmVjdCYgcmVjdCkKKyAgICB7CisgICAgICAgIGlmIChyZWN0LmlzRW1wdHkoKSB8fCAhaW5Cb3Vu
ZHMocmVjdCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgc2l6ZV90IHJvd0J5dGVz
ID0gcmVjdC53aWR0aCgpICogc2l6ZW9mKFJHQkEzMik7CisgICAgICAgIFJHQkEzMiogc3JjID0g
cGl4ZWxBdChyZWN0LngoKSwgcmVjdC55KCkpOworICAgICAgICBSR0JBMzIqIGRlc3QgPSBzcmMg
KyBtX3NpemUud2lkdGgoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCByZWN0LmhlaWdo
dCgpOyArK2kpIHsKKyAgICAgICAgICAgIG1lbWNweShkZXN0LCBzcmMsIHJvd0J5dGVzKTsKKyAg
ICAgICAgICAgIGRlc3QgKz0gbV9zaXplLndpZHRoKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBSR0JBMzIqIHBpeGVsQXQoaW50IHgsIGludCB5KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fcGl4ZWxzUHRyICsgeSAqIG1fc2l6ZS53aWR0aCgpICsgeDsKKyAgICB9CisKKyAgICB2
b2lkIHNldFBpeGVsKGludCB4LCBpbnQgeSwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWdu
ZWQgYiwgdW5zaWduZWQgYSkKKyAgICB7CisgICAgICAgIHNldFBpeGVsKHBpeGVsQXQoeCwgeSks
IHIsIGcsIGIsIGEpOworICAgIH0KKworICAgIHZvaWQgc2V0UGl4ZWwoUkdCQTMyKiBkZXN0LCB1
bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAg
ICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAmJiAhYSkKKyAgICAgICAgICAgICpkZXN0ID0g
MDsKKyAgICAgICAgZWxzZSBpZiAobV9wcmVtdWx0aXBseUFscGhhICYmIGEgPCAyNTUpCisgICAg
ICAgICAgICAqZGVzdCA9IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShyLCBnLCBiLCBhKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgKmRlc3QgPSBtYWtlUkdCQShyLCBnLCBiLCBhKTsKKyAgICB9
CisKKyAgICB2b2lkIGJsZW5kUGl4ZWwoUkdCQTMyKiBkZXN0LCB1bnNpZ25lZCByLCB1bnNpZ25l
ZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQorICAgIHsKKyAgICAgICAgaWYgKCFhKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChhID49IDI1NSB8fCAhYWxwaGFDaGFubmVs
KCpkZXN0KSkgeworICAgICAgICAgICAgc2V0UGl4ZWwoZGVzdCwgciwgZywgYiwgYSk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlB
bHBoYSkKKyAgICAgICAgICAgICpkZXN0ID0gbWFrZVByZW11bHRpcGxpZWRSR0JBKHJlZENoYW5u
ZWwoKmRlc3QpLCBncmVlbkNoYW5uZWwoKmRlc3QpLCBibHVlQ2hhbm5lbCgqZGVzdCksIGFscGhh
Q2hhbm5lbCgqZGVzdCkpOworCisgICAgICAgIHVuc2lnbmVkIGQgPSAyNTUgLSBhOworCisgICAg
ICAgIHIgPSBmYXN0RGl2aWRlQnkyNTUociAqIGEgKyByZWRDaGFubmVsKCpkZXN0KSAqIGQpOwor
ICAgICAgICBnID0gZmFzdERpdmlkZUJ5MjU1KGcgKiBhICsgZ3JlZW5DaGFubmVsKCpkZXN0KSAq
IGQpOworICAgICAgICBiID0gZmFzdERpdmlkZUJ5MjU1KGIgKiBhICsgYmx1ZUNoYW5uZWwoKmRl
c3QpICogZCk7CisgICAgICAgIGEgKz0gZmFzdERpdmlkZUJ5MjU1KGQgKiBhbHBoYUNoYW5uZWwo
KmRlc3QpKTsKKworICAgICAgICBpZiAobV9wcmVtdWx0aXBseUFscGhhKQorICAgICAgICAgICAg
KmRlc3QgPSBtYWtlUkdCQShyLCBnLCBiLCBhKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
KmRlc3QgPSBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShyLCBnLCBiLCBhKTsKKyAgICB9CisKKyAg
ICBib29sIGluQm91bmRzKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBtX3NpemUpLmNvbnRhaW5zKHJlY3QpOworICAg
IH0KKworICAgIHN0YXRpYyBib29sIGlzT3ZlclNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAg
ICB7CisgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgTWF4UGl4ZWxzID0gKCgxIDw8
IDI5KSAtIDEpOworICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgcGl4ZWxzID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgbG9uZyBsb25nPihzaXplLndpZHRoKCkpICogc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgbG9uZyBsb25nPihzaXplLmhlaWdodCgpKTsKKyAgICAgICAgcmV0dXJuIHBpeGVscyA+IE1h
eFBpeGVsczsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSW1hZ2VCYWNraW5nU3RvcmUoY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhID0gdHJ1ZSkKKyAgICAgICAgOiBt
X3ByZW11bHRpcGx5QWxwaGEocHJlbXVsdGlwbHlBbHBoYSkKKyAgICB7CisgICAgICAgIEFTU0VS
VCghc2l6ZS5pc0VtcHR5KCkgJiYgIWlzT3ZlclNpemUoc2l6ZSkpOworICAgICAgICBzZXRTaXpl
KHNpemUpOworICAgIH0KKworICAgIEltYWdlQmFja2luZ1N0b3JlKGNvbnN0IEltYWdlQmFja2lu
Z1N0b3JlJiBvdGhlcikKKyAgICAgICAgOiBtX3BpeGVscyhvdGhlci5tX3BpeGVscykKKyAgICAg
ICAgLCBtX3NpemUob3RoZXIubV9zaXplKQorICAgICAgICAsIG1fcHJlbXVsdGlwbHlBbHBoYShv
dGhlci5tX3ByZW11bHRpcGx5QWxwaGEpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fc2l6ZS5p
c0VtcHR5KCkgJiYgIWlzT3ZlclNpemUobV9zaXplKSk7CisgICAgICAgIG1fcGl4ZWxzUHRyID0g
bV9waXhlbHMuZGF0YSgpOworICAgIH0KKworICAgIFZlY3RvcjxSR0JBMzI+IG1fcGl4ZWxzOwor
ICAgIFJHQkEzMiogbV9waXhlbHNQdHIgeyBudWxscHRyIH07CisgICAgSW50U2l6ZSBtX3NpemU7
CisgICAgSW50UmVjdCBtX2ZyYW1lUmVjdDsgLy8gVGhpcyB3aWxsIGFsd2F5cyBqdXN0IGJlIHRo
ZSBlbnRpcmUgYnVmZmVyIGV4Y2VwdCBmb3IgR0lGIGFuZCBQTkcgZnJhbWVzCisgICAgYm9vbCBt
X3ByZW11bHRpcGx5QWxwaGEgeyB0cnVlIH07Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9OYXRpdmVJbWFnZUNHLmNwcAkocmV2
aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvTmF0
aXZlSW1hZ2VDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEwICs0NywxMCBAQCBJbnRTaXpl
IG5hdGl2ZUltYWdlU2l6ZShjb25zdCBOYXRpdmVJbWFnCiAgICAgcmV0dXJuIGltYWdlID8gSW50
U2l6ZShDR0ltYWdlR2V0V2lkdGgoaW1hZ2UuZ2V0KCkpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdl
LmdldCgpKSkgOiBJbnRTaXplKCk7CiB9CiAKLWJvb2wgbmF0aXZlSW1hZ2VIYXNBbHBoYShjb25z
dCBOYXRpdmVJbWFnZVB0ciYpCitib29sIG5hdGl2ZUltYWdlSGFzQWxwaGEoY29uc3QgTmF0aXZl
SW1hZ2VQdHImIGltYWdlKQogewotICAgIC8vIEZJWE1FOiBBbnN3ZXIgY29ycmVjdGx5IHRoZSBx
dWVzdGlvbjogZG9lcyB0aGUgQ0dJbWFnZVJlZiBoYXZlIGFscGhhIGNoYW5ubmVsPwotICAgIHJl
dHVybiB0cnVlOworICAgIENHSW1hZ2VBbHBoYUluZm8gaW5mbyA9IENHSW1hZ2VHZXRBbHBoYUlu
Zm8oaW1hZ2UuZ2V0KCkpOworICAgIHJldHVybiAoaW5mbyA+PSBrQ0dJbWFnZUFscGhhUHJlbXVs
dGlwbGllZExhc3QpICYmIChpbmZvIDw9IGtDR0ltYWdlQWxwaGFGaXJzdCk7CiB9CiAKIENvbG9y
IG5hdGl2ZUltYWdlU2luZ2xlUGl4ZWxTb2xpZENvbG9yKGNvbnN0IE5hdGl2ZUltYWdlUHRyJiBp
bWFnZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdl
RGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQyLDcgKzE0Miw3IEBAIEltYWdlRnJhbWUmIEltYWdlRnJhbWU6Om9wZXJhdG9y
PShjb25zdCAKICAgICAgICAgcmV0dXJuICp0aGlzOwogCiAgICAgY29weUJpdG1hcERhdGEob3Ro
ZXIpOwotICAgIHNldE9yaWdpbmFsRnJhbWVSZWN0KG90aGVyLm9yaWdpbmFsRnJhbWVSZWN0KCkp
OworICAgIHNldEhhc0FscGhhKG90aGVyLm1faGFzQWxwaGEpOwogICAgIHNldFN0YXR1cyhvdGhl
ci5zdGF0dXMoKSk7CiAgICAgc2V0RHVyYXRpb24ob3RoZXIuZHVyYXRpb24oKSk7CiAgICAgc2V0
RGlzcG9zYWxNZXRob2Qob3RoZXIuZGlzcG9zYWxNZXRob2QoKSk7CkBAIC0xNTIsOCArMTUyLDcg
QEAgSW1hZ2VGcmFtZSYgSW1hZ2VGcmFtZTo6b3BlcmF0b3I9KGNvbnN0IAogCiB2b2lkIEltYWdl
RnJhbWU6OmNsZWFyUGl4ZWxEYXRhKCkKIHsKLSAgICBtX2JhY2tpbmdTdG9yZS5jbGVhcigpOwot
ICAgIG1fYnl0ZXMgPSAwOworICAgIG1fYmFja2luZ1N0b3JlID0gbnVsbHB0cjsKICAgICBtX3N0
YXR1cyA9IEZyYW1lRW1wdHk7CiAgICAgLy8gTk9URTogRG8gbm90IHJlc2V0IG90aGVyIG1lbWJl
cnMgaGVyZTsgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKCkgY2FsbHMgdGhpcwogICAgIC8vIHRvIGZy
ZWUgdGhlIGJpdG1hcCBkYXRhLCBidXQgb3RoZXIgZnVuY3Rpb25zIGxpa2UgaW5pdEZyYW1lQnVm
ZmVyKCkgYW5kCkBAIC0xNjMsMjQgKzE2MiwxNiBAQCB2b2lkIEltYWdlRnJhbWU6OmNsZWFyUGl4
ZWxEYXRhKCkKIAogdm9pZCBJbWFnZUZyYW1lOjp6ZXJvRmlsbFBpeGVsRGF0YSgpCiB7Ci0gICAg
bWVtc2V0KG1fYnl0ZXMsIDAsIG1fc2l6ZS53aWR0aCgpICogbV9zaXplLmhlaWdodCgpICogc2l6
ZW9mKFBpeGVsRGF0YSkpOworICAgIG1fYmFja2luZ1N0b3JlLT5jbGVhcigpOwogICAgIG1faGFz
QWxwaGEgPSB0cnVlOwogfQogCiB2b2lkIEltYWdlRnJhbWU6Onplcm9GaWxsRnJhbWVSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgQVNTRVJUKEludFJlY3QoSW50UG9pbnQoKSwgbV9z
aXplKS5jb250YWlucyhyZWN0KSk7Ci0KICAgICBpZiAocmVjdC5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHNpemVfdCByZWN0V2lkdGhJbkJ5dGVzID0gcmVjdC53aWR0aCgpICog
c2l6ZW9mKFBpeGVsRGF0YSk7Ci0gICAgUGl4ZWxEYXRhKiBzdGFydCA9IG1fYnl0ZXMgKyAocmVj
dC55KCkgKiB3aWR0aCgpKSArIHJlY3QueCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVj
dC5oZWlnaHQoKTsgKytpKSB7Ci0gICAgICAgIG1lbXNldChzdGFydCwgMCwgcmVjdFdpZHRoSW5C
eXRlcyk7Ci0gICAgICAgIHN0YXJ0ICs9IHdpZHRoKCk7Ci0gICAgfQotCisgICAgbV9iYWNraW5n
U3RvcmUtPmNsZWFyUmVjdChyZWN0KTsKICAgICBzZXRIYXNBbHBoYSh0cnVlKTsKIH0KIApAQCAt
MTg5LDI1ICsxODAsMTkgQEAgYm9vbCBJbWFnZUZyYW1lOjpjb3B5Qml0bWFwRGF0YShjb25zdCBJ
bQogICAgIGlmICh0aGlzID09ICZvdGhlcikKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBt
X2JhY2tpbmdTdG9yZSA9IG90aGVyLm1fYmFja2luZ1N0b3JlOwotICAgIG1fYnl0ZXMgPSBtX2Jh
Y2tpbmdTdG9yZS5kYXRhKCk7Ci0gICAgbV9zaXplID0gb3RoZXIubV9zaXplOwotICAgIHNldEhh
c0FscGhhKG90aGVyLm1faGFzQWxwaGEpOworICAgIGlmIChvdGhlci5tX2JhY2tpbmdTdG9yZSkK
KyAgICAgICAgbV9iYWNraW5nU3RvcmUgPSBJbWFnZUJhY2tpbmdTdG9yZTo6Y3JlYXRlKCpvdGhl
ci5tX2JhY2tpbmdTdG9yZS5nZXQoKSk7CisgICAgZWxzZQorICAgICAgICBtX2JhY2tpbmdTdG9y
ZSA9IG51bGxwdHI7CisgICAgCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSW1hZ2VGcmFt
ZTo6c2V0U2l6ZShpbnQgbmV3V2lkdGgsIGludCBuZXdIZWlnaHQpCitib29sIEltYWdlRnJhbWU6
OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBBU1NFUlQoIXdpZHRoKCkgJiYg
IWhlaWdodCgpKTsKLSAgICBzaXplX3QgYmFja2luZ1N0b3JlU2l6ZSA9IG5ld1dpZHRoICogbmV3
SGVpZ2h0OwotICAgIGlmICghbV9iYWNraW5nU3RvcmUudHJ5UmVzZXJ2ZUNhcGFjaXR5KGJhY2tp
bmdTdG9yZVNpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9iYWNraW5nU3RvcmUu
cmVzaXplKGJhY2tpbmdTdG9yZVNpemUpOwotICAgIG1fYnl0ZXMgPSBtX2JhY2tpbmdTdG9yZS5k
YXRhKCk7Ci0gICAgbV9zaXplID0gSW50U2l6ZShuZXdXaWR0aCwgbmV3SGVpZ2h0KTsKLQotICAg
IHplcm9GaWxsUGl4ZWxEYXRhKCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgQVNTRVJUKCFtX2Jh
Y2tpbmdTdG9yZSk7CisgICAgbV9iYWNraW5nU3RvcmUgPSBJbWFnZUJhY2tpbmdTdG9yZTo6Y3Jl
YXRlKHNpemUsIG1fcHJlbXVsdGlwbHlBbHBoYSk7CisgICAgcmV0dXJuIG1fYmFja2luZ1N0b3Jl
ICE9IG51bGxwdHI7CiB9CiAKIGJvb2wgSW1hZ2VGcmFtZTo6aGFzQWxwaGEoKSBjb25zdApAQCAt
MjIwLDYgKzIwNSwxMiBAQCB2b2lkIEltYWdlRnJhbWU6OnNldEhhc0FscGhhKGJvb2wgYWxwaGEp
CiAgICAgbV9oYXNBbHBoYSA9IGFscGhhOwogfQogCit2b2lkIEltYWdlRnJhbWU6OnNldE9yaWdp
bmFsRnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIGZyYW1lUmVjdCkKK3sKKyAgICBpZiAobV9iYWNr
aW5nU3RvcmUpCisgICAgICAgIG1fYmFja2luZ1N0b3JlLT5zZXRGcmFtZVJlY3QoZnJhbWVSZWN0
KTsKK30KKwogdm9pZCBJbWFnZUZyYW1lOjpzZXRTdGF0dXMoRnJhbWVTdGF0dXMgc3RhdHVzKQog
ewogICAgIG1fc3RhdHVzID0gc3RhdHVzOwpAQCAtMjg2LDcgKzI3Nyw3IEBAIHVuc2lnbmVkIElt
YWdlRGVjb2Rlcjo6ZnJhbWVCeXRlc0F0SW5kZXgKICAgICBpZiAobV9mcmFtZUJ1ZmZlckNhY2hl
LnNpemUoKSA8PSBpbmRleCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgLy8gRklYTUU6IFVzZSB0
aGUgZGltZW5zaW9uIG9mIHRoZSByZXF1ZXN0ZWQgZnJhbWUuCi0gICAgcmV0dXJuIG1fc2l6ZS5h
cmVhKCkgKiBzaXplb2YoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKTsKKyAgICByZXR1cm4gbV9zaXpl
LmFyZWEoKSAqIHNpemVvZihSR0JBMzIpOwogfQogCiBmbG9hdCBJbWFnZURlY29kZXI6OmZyYW1l
RHVyYXRpb25BdEluZGV4KHNpemVfdCBpbmRleCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5oCShyZXZpc2lvbiAy
MDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURl
Y29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsMTAgQEAKIAogI3ByYWdtYSBvbmNl
CiAKLSNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSAiSW1hZ2VCYWNraW5nU3RvcmUuaCIK
ICNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRl
ICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TY3JlZW4uaCIKICNpbmNsdWRlICJTaGFy
ZWRCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtNTcsNyArNTksNiBA
QCB1c2luZyBDb2xvclByb2ZpbGUgPSBWZWN0b3I8Y2hhcj47CiAgICAgICAgICAgICBEaXNwb3Nl
T3ZlcndyaXRlUHJldmlvdXMgIC8vIENsZWFyIGZyYW1lIHRvIHByZXZpb3VzIGZyYW1lYnVmZmVy
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRlbnRzCiAgICAg
ICAgIH07Ci0gICAgICAgIHR5cGVkZWYgdW5zaWduZWQgUGl4ZWxEYXRhOwogCiAgICAgICAgIElt
YWdlRnJhbWUoKTsKIApAQCAtODIsMTQyICs4Myw2NiBAQCB1c2luZyBDb2xvclByb2ZpbGUgPSBW
ZWN0b3I8Y2hhcj47CiAgICAgICAgIC8vIGVuZFkuCiAgICAgICAgIHZvaWQgY29weVJvd05UaW1l
cyhpbnQgc3RhcnRYLCBpbnQgZW5kWCwgaW50IHN0YXJ0WSwgaW50IGVuZFkpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIEFTU0VSVChzdGFydFggPCB3aWR0aCgpKTsKLSAgICAgICAgICAgIEFTU0VS
VChlbmRYIDw9IHdpZHRoKCkpOwotICAgICAgICAgICAgQVNTRVJUKHN0YXJ0WSA8IGhlaWdodCgp
KTsKLSAgICAgICAgICAgIEFTU0VSVChlbmRZIDw9IGhlaWdodCgpKTsKLSAgICAgICAgICAgIGNv
bnN0IGludCByb3dCeXRlcyA9IChlbmRYIC0gc3RhcnRYKSAqIHNpemVvZihQaXhlbERhdGEpOwot
ICAgICAgICAgICAgY29uc3QgUGl4ZWxEYXRhKiBjb25zdCBzdGFydEFkZHIgPSBnZXRBZGRyKHN0
YXJ0WCwgc3RhcnRZKTsKLSAgICAgICAgICAgIGZvciAoaW50IGRlc3RZID0gc3RhcnRZICsgMTsg
ZGVzdFkgPCBlbmRZOyArK2Rlc3RZKQotICAgICAgICAgICAgICAgIG1lbWNweShnZXRBZGRyKHN0
YXJ0WCwgZGVzdFkpLCBzdGFydEFkZHIsIHJvd0J5dGVzKTsKKyAgICAgICAgICAgIG1fYmFja2lu
Z1N0b3JlLT5yZXBlYXRGaXJzdFJvdyhJbnRSZWN0KHN0YXJ0WCwgc3RhcnRZLCBlbmRYIC1zdGFy
dFggLCBlbmRZIC0gc3RhcnRZKSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBBbGxvY2F0ZXMg
c3BhY2UgZm9yIHRoZSBwaXhlbCBkYXRhLiAgTXVzdCBiZSBjYWxsZWQgYmVmb3JlIGFueSBwaXhl
bHMKICAgICAgICAgLy8gYXJlIHdyaXR0ZW4uICBNdXN0IG9ubHkgYmUgY2FsbGVkIG9uY2UuICBS
ZXR1cm5zIHdoZXRoZXIgYWxsb2NhdGlvbgogICAgICAgICAvLyBzdWNjZWVkZWQuCi0gICAgICAg
IGJvb2wgc2V0U2l6ZShpbnQgbmV3V2lkdGgsIGludCBuZXdIZWlnaHQpOworICAgICAgICBib29s
IHNldFNpemUoY29uc3QgSW50U2l6ZSYpOworICAgICAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7
IHJldHVybiBtX2JhY2tpbmdTdG9yZSA/IG1fYmFja2luZ1N0b3JlLT5zaXplKCkgOiBJbnRTaXpl
KCk7IH0KIAogICAgICAgICAvLyBSZXR1cm5zIGEgY2FsbGVyLW93bmVkIHBvaW50ZXIgdG8gdGhl
IHVuZGVybHlpbmcgbmF0aXZlIGltYWdlIGRhdGEuCiAgICAgICAgIC8vIChBY3R1YWwgdXNlOiBU
aGlzIHBvaW50ZXIgd2lsbCBiZSBvd25lZCBieSBCaXRtYXBJbWFnZSBhbmQgZnJlZWQgaW4KICAg
ICAgICAgLy8gRnJhbWVEYXRhOjpjbGVhcigpKS4KLSAgICAgICAgTmF0aXZlSW1hZ2VQdHIgYXNO
ZXdOYXRpdmVJbWFnZSgpIGNvbnN0OworICAgICAgICBOYXRpdmVJbWFnZVB0ciBhc05ld05hdGl2
ZUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nU3RvcmUgPyBtX2JhY2tpbmdTdG9yZS0+
aW1hZ2UoKSA6IG51bGxwdHI7IH0KIAorICAgICAgICBpbmxpbmUgSW1hZ2VCYWNraW5nU3RvcmUq
IGJhY2tpbmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2luZ1N0b3JlID8gbV9iYWNraW5n
U3RvcmUuZ2V0KCkgOiBudWxscHRyOyB9CisgICAgICAgIGlubGluZSBib29sIGhhc0JhY2tpbmdT
dG9yZSgpIGNvbnN0IHsgcmV0dXJuIGJhY2tpbmdTdG9yZSgpOyB9CisgICAgICAgIAogICAgICAg
ICBib29sIGhhc0FscGhhKCkgY29uc3Q7Ci0gICAgICAgIGNvbnN0IEludFJlY3QmIG9yaWdpbmFs
RnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5hbEZyYW1lUmVjdDsgfQorICAgICAg
ICBJbnRSZWN0IG9yaWdpbmFsRnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9iYWNraW5nU3Rv
cmUgPyBtX2JhY2tpbmdTdG9yZS0+ZnJhbWVSZWN0KCkgOiBJbnRSZWN0KCk7IH0KICAgICAgICAg
RnJhbWVTdGF0dXMgc3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0dXM7IH0KICAgICAgICAg
dW5zaWduZWQgZHVyYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2R1cmF0aW9uOyB9CiAgICAgICAg
IEZyYW1lRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX2Rp
c3Bvc2FsTWV0aG9kOyB9CiAgICAgICAgIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSgpIGNvbnN0IHsg
cmV0dXJuIG1fcHJlbXVsdGlwbHlBbHBoYTsgfQogCiAgICAgICAgIHZvaWQgc2V0SGFzQWxwaGEo
Ym9vbCBhbHBoYSk7Ci0gICAgICAgIHZvaWQgc2V0T3JpZ2luYWxGcmFtZVJlY3QoY29uc3QgSW50
UmVjdCYgcikgeyBtX29yaWdpbmFsRnJhbWVSZWN0ID0gcjsgfQorICAgICAgICB2b2lkIHNldE9y
aWdpbmFsRnJhbWVSZWN0KGNvbnN0IEludFJlY3QmKTsKICAgICAgICAgdm9pZCBzZXRTdGF0dXMo
RnJhbWVTdGF0dXMgc3RhdHVzKTsKICAgICAgICAgdm9pZCBzZXREdXJhdGlvbih1bnNpZ25lZCBk
dXJhdGlvbikgeyBtX2R1cmF0aW9uID0gZHVyYXRpb247IH0KICAgICAgICAgdm9pZCBzZXREaXNw
b3NhbE1ldGhvZChGcmFtZURpc3Bvc2FsTWV0aG9kIG1ldGhvZCkgeyBtX2Rpc3Bvc2FsTWV0aG9k
ID0gbWV0aG9kOyB9CiAgICAgICAgIHZvaWQgc2V0UHJlbXVsdGlwbHlBbHBoYShib29sIHByZW11
bHRpcGx5QWxwaGEpIHsgbV9wcmVtdWx0aXBseUFscGhhID0gcHJlbXVsdGlwbHlBbHBoYTsgfQog
Ci0gICAgICAgIGlubGluZSB2b2lkIHNldFJHQkEoaW50IHgsIGludCB5LCB1bnNpZ25lZCByLCB1
bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBzZXRSR0JBKGdldEFkZHIoeCwgeSksIHIsIGcsIGIsIGEpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaW5saW5lIFBpeGVsRGF0YSogZ2V0QWRkcihpbnQgeCwgaW50IHkpCisgICAgICAgIGlubGlu
ZSBSR0JBMzIqIHBpeGVsQXQoaW50IHgsIGludCB5KQogICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gbV9ieXRlcyArICh5ICogd2lkdGgoKSkgKyB4OworICAgICAgICAgICAgQVNTRVJUKG1f
YmFja2luZ1N0b3JlKTsKKyAgICAgICAgICAgIHJldHVybiBtX2JhY2tpbmdTdG9yZS0+cGl4ZWxB
dCh4LCB5KTsKICAgICAgICAgfQogCi0gICAgICAgIGlubGluZSBib29sIGhhc1BpeGVsRGF0YSgp
IGNvbnN0CisgICAgICAgIGlubGluZSB2b2lkIHNldFBpeGVsKGludCB4LCBpbnQgeSwgdW5zaWdu
ZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKICAgICAgICAgewotICAg
ICAgICAgICAgcmV0dXJuIG1fYnl0ZXM7CisgICAgICAgICAgICBBU1NFUlQobV9iYWNraW5nU3Rv
cmUpOworICAgICAgICAgICAgbV9iYWNraW5nU3RvcmUtPnNldFBpeGVsKHgsIHksIHIsIGcsIGIs
IGEpOwogICAgICAgICB9CiAKLSAgICAgICAgLy8gVXNlIGZpeCBwb2ludCBtdWx0aXBsaWVyIGlu
c3RlYWQgb2YgaW50ZWdlciBkaXZpc2lvbiBvciBmbG9hdGluZyBwb2ludCBtYXRoLgotICAgICAg
ICAvLyBUaGlzIG11bHRpcGxlciBwcm9kdWNlcyBleGFjdGx5IHRoZSBzYW1lIHJlc3VsdCBmb3Ig
YWxsIHZhbHVlcyBpbiByYW5nZSAwIC0gMjU1LgotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgZml4UG9pbnRTaGlmdCA9IDI0OwotICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgZml4
UG9pbnRNdWx0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KDEuMCAvIDI1NS4wICogKDEgPDwgZml4
UG9pbnRTaGlmdCkpICsgMTsKLSAgICAgICAgLy8gTXVsdGlwbGllcyB1bnNpZ25lZCB2YWx1ZSBi
eSBmaXhwb2ludCB2YWx1ZSBhbmQgY29udmVydHMgYmFjayB0byB1bnNpZ25lZC4KLSAgICAgICAg
c3RhdGljIHVuc2lnbmVkIGZpeFBvaW50VW5zaWduZWRNdWx0aXBseSh1bnNpZ25lZCBmaXhlZCwg
dW5zaWduZWQgdikKKyAgICAgICAgaW5saW5lIHZvaWQgc2V0UGl4ZWwoUkdCQTMyKiBkZXN0LCB1
bnNpZ25lZCByLCB1bnNpZ25lZCBnLCB1bnNpZ25lZCBiLCB1bnNpZ25lZCBhKQogICAgICAgICB7
Ci0gICAgICAgICAgICByZXR1cm4gIChmaXhlZCAqIHYpID4+IGZpeFBvaW50U2hpZnQ7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpbmxpbmUgdm9pZCBzZXRSR0JBKFBpeGVsRGF0YSogZGVzdCwgdW5z
aWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwgdW5zaWduZWQgYSkKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSAmJiBhIDwgMjU1KSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCFhKSB7Ci0gICAgICAgICAgICAgICAgICAgICpkZXN0ID0gMDsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGFscGhhTXVsdCA9IGEgKiBmaXhQb2ludE11bHQ7Ci0gICAgICAgICAgICAg
ICAgciA9IGZpeFBvaW50VW5zaWduZWRNdWx0aXBseShyLCBhbHBoYU11bHQpOwotICAgICAgICAg
ICAgICAgIGcgPSBmaXhQb2ludFVuc2lnbmVkTXVsdGlwbHkoZywgYWxwaGFNdWx0KTsKLSAgICAg
ICAgICAgICAgICBiID0gZml4UG9pbnRVbnNpZ25lZE11bHRpcGx5KGIsIGFscGhhTXVsdCk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAqZGVzdCA9IChhIDw8IDI0IHwgciA8PCAxNiB8IGcg
PDwgOCB8IGIpOworICAgICAgICAgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlKTsKKyAgICAgICAg
ICAgIG1fYmFja2luZ1N0b3JlLT5zZXRQaXhlbChkZXN0LCByLCBnLCBiLCBhKTsKICAgICAgICAg
fQogCiAjaWYgRU5BQkxFKEFQTkcpCi0gICAgICAgIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgZGl2
aWRlMjU1KHVuc2lnbmVkIGEpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiAoYSArIChh
ID4+IDgpICsgMSkgPj4gODsKLSAgICAgICAgfQotCi0gICAgICAgIGlubGluZSB2b2lkIG92ZXJS
R0JBKFBpeGVsRGF0YSogZGVzdCwgdW5zaWduZWQgciwgdW5zaWduZWQgZywgdW5zaWduZWQgYiwg
dW5zaWduZWQgYSkKKyAgICAgICAgaW5saW5lIHZvaWQgYmxlbmRQaXhlbChSR0JBMzIqIGRlc3Qs
IHVuc2lnbmVkIHIsIHVuc2lnbmVkIGcsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIGEpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGlmICghYSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgICAgIGlmIChhIDwgMjU1KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgYURlc3QgPSAo
KCpkZXN0KSA+PiAyNCkgJiAyNTU7Ci0gICAgICAgICAgICAgICAgaWYgKGFEZXN0KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJEZXN0ID0gKCgqZGVzdCkgPj4gMTYpICYgMjU1Owot
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBnRGVzdCA9ICgoKmRlc3QpID4+IDgpICYgMjU1
OwotICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBiRGVzdCA9ICgqZGVzdCkgJiAyNTU7Ci0g
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFBdXggPSAyNTUgLSBhOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoIW1fcHJlbXVsdGlwbHlBbHBoYSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgckRlc3QgPSBkaXZpZGUyNTUockRlc3QgKiBhRGVzdCk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBnRGVzdCA9IGRpdmlkZTI1NShnRGVzdCAqIGFEZXN0KTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGJEZXN0ID0gZGl2aWRlMjU1KGJEZXN0ICogYURlc3QpOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHIgPSBkaXZpZGUyNTUociAqIGEgKyByRGVzdCAq
IGFBdXgpOwotICAgICAgICAgICAgICAgICAgICBnID0gZGl2aWRlMjU1KGcgKiBhICsgZ0Rlc3Qg
KiBhQXV4KTsKLSAgICAgICAgICAgICAgICAgICAgYiA9IGRpdmlkZTI1NShiICogYSArIGJEZXN0
ICogYUF1eCk7Ci0gICAgICAgICAgICAgICAgICAgIGEgKz0gZGl2aWRlMjU1KGFEZXN0ICogYUF1
eCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghbV9wcmVtdWx0aXBseUFscGhhKSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICByID0gKHIgKiAyNTUgKyBhIC0gMSkgLyBhOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZyA9IChnICogMjU1ICsgYSAtIDEpIC8gYTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGIgPSAoYiAqIDI1NSArIGEgLSAxKSAvIGE7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fcHJlbXVsdGlwbHlBbHBoYSkgewotICAg
ICAgICAgICAgICAgICAgICByID0gZGl2aWRlMjU1KHIgKiBhKTsKLSAgICAgICAgICAgICAgICAg
ICAgZyA9IGRpdmlkZTI1NShnICogYSk7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSBkaXZpZGUy
NTUoYiAqIGEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICpkZXN0ID0gKGEgPDwgMjQgfCByIDw8IDE2IHwgZyA8PCA4IHwgYik7CisgICAgICAgICAgICBB
U1NFUlQobV9iYWNraW5nU3RvcmUpOworICAgICAgICAgICAgbV9iYWNraW5nU3RvcmUtPmJsZW5k
UGl4ZWwoZGVzdCwgciwgZywgYiwgYSk7CiAgICAgICAgIH0KICNlbmRpZgogCiAgICAgcHJpdmF0
ZToKLSAgICAgICAgaW50IHdpZHRoKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0
dXJuIG1fc2l6ZS53aWR0aCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50IGhlaWdodCgpIGNv
bnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3NpemUuaGVpZ2h0KCk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBWZWN0b3I8UGl4ZWxEYXRhPiBtX2JhY2tpbmdTdG9yZTsKLSAgICAg
ICAgUGl4ZWxEYXRhKiBtX2J5dGVzOyAvLyBUaGUgbWVtb3J5IGlzIGJhY2tlZCBieSBtX2JhY2tp
bmdTdG9yZS4KLSAgICAgICAgSW50U2l6ZSBtX3NpemU7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxJbWFnZUJhY2tpbmdTdG9yZT4gbV9iYWNraW5nU3RvcmU7CiAgICAgICAgIGJvb2wgbV9oYXNB
bHBoYTsKLSAgICAgICAgSW50UmVjdCBtX29yaWdpbmFsRnJhbWVSZWN0OyAvLyBUaGlzIHdpbGwg
YWx3YXlzIGp1c3QgYmUgdGhlIGVudGlyZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGJ1ZmZlciBleGNlcHQgZm9yIEdJRiBmcmFtZXMgd2hvc2UKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvcmlnaW5hbCByZWN0IHdhcyBzbWFsbGVyIHRo
YW4gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3ZlcmFsbCBp
bWFnZSBzaXplLgogICAgICAgICBGcmFtZVN0YXR1cyBtX3N0YXR1czsKICAgICAgICAgdW5zaWdu
ZWQgbV9kdXJhdGlvbjsKICAgICAgICAgRnJhbWVEaXNwb3NhbE1ldGhvZCBtX2Rpc3Bvc2FsTWV0
aG9kOwpAQCAtMjg3LDExICsyMTIsMTEgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNo
YXI+OwogCiAgICAgICAgIC8vIFJldHVybnMgd2hldGhlciB0aGUgc2l6ZSBpcyBsZWdhbCAoaS5l
LiBub3QgZ29pbmcgdG8gcmVzdWx0IGluCiAgICAgICAgIC8vIG92ZXJmbG93IGVsc2V3aGVyZSku
ICBJZiBub3QsIG1hcmtzIGRlY29kaW5nIGFzIGZhaWxlZC4KLSAgICAgICAgdmlydHVhbCBib29s
IHNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkKKyAgICAgICAgdmlydHVh
bCBib29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKICAgICAgICAgewotICAgICAgICAg
ICAgaWYgKGlzT3ZlclNpemUod2lkdGgsIGhlaWdodCkpCisgICAgICAgICAgICBpZiAoSW1hZ2VC
YWNraW5nU3RvcmU6OmlzT3ZlclNpemUoc2l6ZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHNl
dEZhaWxlZCgpOwotICAgICAgICAgICAgbV9zaXplID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsK
KyAgICAgICAgICAgIG1fc2l6ZSA9IHNpemU7CiAgICAgICAgICAgICBtX3NpemVBdmFpbGFibGUg
PSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTM4NiwxNSAr
MzExLDYgQEAgdXNpbmcgQ29sb3JQcm9maWxlID0gVmVjdG9yPGNoYXI+OwogICAgICAgICBJbWFn
ZU9yaWVudGF0aW9uIG1fb3JpZW50YXRpb247CiAKICAgICBwcml2YXRlOgotICAgICAgICAvLyBT
b21lIGNvZGUgcGF0aHMgY29tcHV0ZSB0aGUgc2l6ZSBvZiB0aGUgaW1hZ2UgYXMgIndpZHRoICog
aGVpZ2h0ICogNCIKLSAgICAgICAgLy8gYW5kIHJldHVybiBpdCBhcyBhIChzaWduZWQpIGludC4g
IEF2b2lkIG92ZXJmbG93LgotICAgICAgICBzdGF0aWMgYm9vbCBpc092ZXJTaXplKHVuc2lnbmVk
IHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVuc2lnbmVk
IGxvbmcgbG9uZyB0b3RhbF9zaXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPih3
aWR0aCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihoZWlnaHQpOwotICAgICAgICAgICAgcmV0dXJuIHRv
dGFsX3NpemUgPiAoKDEgPDwgMjkpIC0gMSk7Ci0gICAgICAgIH0KLQogICAgICAgICBJbnRTaXpl
IG1fc2l6ZTsKICAgICAgICAgYm9vbCBtX3NpemVBdmFpbGFibGUgeyBmYWxzZSB9OwogI2lmIEVO
QUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJl
YWRlci5jcHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4
LDcgKzc4LDcgQEAgYm9vbCBCTVBJbWFnZVJlYWRlcjo6ZGVjb2RlQk1QKGJvb2wgb25seQogICAg
IC8vIEluaXRpYWxpemUgdGhlIGZyYW1lYnVmZmVyIGlmIG5lZWRlZC4KICAgICBBU1NFUlQobV9i
dWZmZXIpOyAgLy8gUGFyZW50IHNob3VsZCBzZXQgdGhpcyBiZWZvcmUgYXNraW5nIHVzIHRvIGRl
Y29kZSEKICAgICBpZiAobV9idWZmZXItPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1w
dHkpIHsKLSAgICAgICAgaWYgKCFtX2J1ZmZlci0+c2V0U2l6ZShtX3BhcmVudC0+c2l6ZSgpLndp
ZHRoKCksIG1fcGFyZW50LT5zaXplKCkuaGVpZ2h0KCkpKQorICAgICAgICBpZiAoIW1fYnVmZmVy
LT5zZXRTaXplKG1fcGFyZW50LT5zaXplKCkpKQogICAgICAgICAgICAgcmV0dXJuIG1fcGFyZW50
LT5zZXRGYWlsZWQoKTsgLy8gVW5hYmxlIHRvIGFsbG9jYXRlLgogICAgICAgICBtX2J1ZmZlci0+
c2V0U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIC8vIHNldFNpemUo
KSBjYWxscyBlcmFzZUFSR0IoKSwgd2hpY2ggcmVzZXRzIHRoZSBhbHBoYSBmbGFnLCBzbyB3ZSBm
b3JjZQpAQCAtODYsOSArODYsNiBAQCBib29sIEJNUEltYWdlUmVhZGVyOjpkZWNvZGVCTVAoYm9v
bCBvbmx5CiAgICAgICAgIC8vIHRoZXNlIDBzIGNvdWxkIGFjdHVhbGx5IHNob3cgdGhyb3VnaC4K
ICAgICAgICAgbV9idWZmZXItPnNldEhhc0FscGhhKGZhbHNlKTsKIAotICAgICAgICAvLyBGb3Ig
Qk1QcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJlIGltYWdlLgotICAgICAgICBt
X2J1ZmZlci0+c2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBtX3BhcmVu
dC0+c2l6ZSgpKSk7Ci0KICAgICAgICAgaWYgKCFtX2lzVG9wRG93bikKICAgICAgICAgICAgIG1f
Y29vcmQuc2V0WShtX3BhcmVudC0+c2l6ZSgpLmhlaWdodCgpIC0gMSk7CiAgICAgfQpAQCAtMTcx
LDcgKzE2OCw3IEBAIGJvb2wgQk1QSW1hZ2VSZWFkZXI6OnByb2Nlc3NJbmZvSGVhZGVyKCkKICAg
ICAgICAgcmV0dXJuIG1fcGFyZW50LT5zZXRGYWlsZWQoKTsKIAogICAgIC8vIFNldCBvdXIgc2l6
ZS4KLSAgICBpZiAoIW1fcGFyZW50LT5zZXRTaXplKG1faW5mb0hlYWRlci5iaVdpZHRoLCBtX2lu
Zm9IZWFkZXIuYmlIZWlnaHQpKQorICAgIGlmICghbV9wYXJlbnQtPnNldFNpemUoSW50U2l6ZSht
X2luZm9IZWFkZXIuYmlXaWR0aCwgbV9pbmZvSGVhZGVyLmJpSGVpZ2h0KSkpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAogICAgIC8vIEZvciBwYWxldHRlZCBpbWFnZXMsIGJpdG1hcHMgY2FuIHNl
dCBiaUNsclVzZWQgdG8gMCB0byBtZWFuICJhbGwKQEAgLTY3NCw3ICs2NzEsNyBAQCBCTVBJbWFn
ZVJlYWRlcjo6UHJvY2Vzc2luZ1Jlc3VsdCBCTVBJbWFnCiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB0cmFuc3BhcmVudCwgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBtb3N0IElDT3Mgb24gdGhl
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZWIgd2lsbCBub3QgYmUgZG9pbmcgYSBsb3Qg
b2YgaW52ZXJ0aW5nLgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbG9ySW5kZXgpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRSR0JBKDAsIDAsIDAsIDApOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNldFBpeGVsKDAsIDAsIDAsIDApOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fYnVmZmVyLT5zZXRIYXNBbHBoYSh0cnVlKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29vcmQu
bW92ZSgxLCAwKTsKQEAgLTcxMyw3ICs3MTAsNyBAQCBCTVBJbWFnZVJlYWRlcjo6UHJvY2Vzc2lu
Z1Jlc3VsdCBCTVBJbWFnCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2J1ZmZlci0+c2V0SGFz
QWxwaGEodHJ1ZSk7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgc2V0UkdC
QShnZXRDb21wb25lbnQocGl4ZWwsIDApLCBnZXRDb21wb25lbnQocGl4ZWwsIDEpLAorICAgICAg
ICAgICAgICAgIHNldFBpeGVsKGdldENvbXBvbmVudChwaXhlbCwgMCksIGdldENvbXBvbmVudChw
aXhlbCwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb21wb25lbnQocGl4ZWwsIDIp
LCBhbHBoYSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJlYWRlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2JtcC9CTVBJbWFnZVJl
YWRlci5oCShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9ibXAvQk1QSW1hZ2VSZWFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjM5LDE2
ICsyMzksMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyByaWdodCBieSBvbmUu
CiAgICAgICAgIGlubGluZSB2b2lkIHNldEkoc2l6ZV90IGNvbG9ySW5kZXgpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHNldFJHQkEobV9jb2xvclRhYmxlW2NvbG9ySW5kZXhdLnJnYlJlZCwgbV9j
b2xvclRhYmxlW2NvbG9ySW5kZXhdLnJnYkdyZWVuLCBtX2NvbG9yVGFibGVbY29sb3JJbmRleF0u
cmdiQmx1ZSwgMHhmZik7CisgICAgICAgICAgICBzZXRQaXhlbChtX2NvbG9yVGFibGVbY29sb3JJ
bmRleF0ucmdiUmVkLCBtX2NvbG9yVGFibGVbY29sb3JJbmRleF0ucmdiR3JlZW4sIG1fY29sb3JU
YWJsZVtjb2xvckluZGV4XS5yZ2JCbHVlLCAweGZmKTsKICAgICAgICAgfQogCiAgICAgICAgIC8v
IExpa2Ugc2V0SSgpLCBidXQgd2l0aCB0aGUgaW5kaXZpZHVhbCBjb21wb25lbnQgdmFsdWVzIHNw
ZWNpZmllZC4KLSAgICAgICAgaW5saW5lIHZvaWQgc2V0UkdCQSh1bnNpZ25lZCByZWQsCisgICAg
ICAgIGlubGluZSB2b2lkIHNldFBpeGVsKHVuc2lnbmVkIHJlZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBncmVlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBibHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGFscGhh
KQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2J1ZmZlci0+c2V0UkdCQShtX2Nvb3JkLngoKSwg
bV9jb29yZC55KCksIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICAgICAgICAgIG1fYnVm
ZmVyLT5zZXRQaXhlbChtX2Nvb3JkLngoKSwgbV9jb29yZC55KCksIHJlZCwgZ3JlZW4sIGJsdWUs
IGFscGhhKTsKICAgICAgICAgICAgIG1fY29vcmQubW92ZSgxLCAwKTsKICAgICAgICAgfQogCkBA
IC0yNjMsNyArMjYzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSkKICAgICAgICAgewogICAgICAgICAgICAgd2hpbGUg
KG1fY29vcmQueCgpIDwgZW5kQ29vcmQpCi0gICAgICAgICAgICAgICAgc2V0UkdCQShyZWQsIGdy
ZWVuLCBibHVlLCBhbHBoYSk7CisgICAgICAgICAgICAgICAgc2V0UGl4ZWwocmVkLCBncmVlbiwg
Ymx1ZSwgYWxwaGEpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gUmVzZXRzIHRoZSByZWxldmFu
dCBsb2NhbCB2YXJpYWJsZXMgdG8gc3RhcnQgZHJhd2luZyBhdCB0aGUgbGVmdCBlZGdlCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZUJhY2tp
bmdTdG9yZUNhaXJvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9jYWlyby9JbWFnZUJhY2tpbmdTdG9yZUNhaXJvLmNwcAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9JbWFn
ZUJhY2tpbmdTdG9yZUNhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSW1hZ2VCYWNraW5nU3RvcmUuaCIKKworI2luY2x1ZGUgPGNh
aXJvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworTmF0aXZlSW1hZ2VQdHIgSW1hZ2VCYWNr
aW5nU3RvcmU6OmltYWdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEoCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQgY2hhcio+KGNvbnN0X2Nhc3Q8UkdCQTMyKj4obV9waXhlbHNQdHIpKSwKKyAgICAgICAg
Q0FJUk9fRk9STUFUX0FSR0IzMiwgc2l6ZSgpLndpZHRoKCksIHNpemUoKS5oZWlnaHQoKSwgc2l6
ZSgpLndpZHRoKCkgKiBzaXplb2YoUkdCQTMyKSkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9J
bWFnZURlY29kZXJDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNvZGVyQ2Fpcm8uY3BwCShyZXZpc2lvbiAy
MDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9jYWlyby9J
bWFnZURlY29kZXJDYWlyby5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiSW1hZ2VEZWNvZGVyLmgiCi0KLSNpbmNsdWRlIDxjYWlyby5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLU5hdGl2ZUltYWdlUHRyIEltYWdlRnJhbWU6OmFzTmV3
TmF0aXZlSW1hZ2UoKSBjb25zdAotewotICAgIHJldHVybiBhZG9wdFJlZihjYWlyb19pbWFnZV9z
dXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSgKLSAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25l
ZCBjaGFyKj4oY29uc3RfY2FzdDxQaXhlbERhdGEqPihtX2J5dGVzKSksCi0gICAgICAgIENBSVJP
X0ZPUk1BVF9BUkdCMzIsIHdpZHRoKCksIGhlaWdodCgpLCB3aWR0aCgpICogc2l6ZW9mKFBpeGVs
RGF0YSkpKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBv
bjogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvY2Fpcm8vSW1hZ2VEZWNv
ZGVyQ2Fpcm8uY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX18KRGVsZXRlZDogc3ZuOmVvbC1zdHlsZQojIyAtMSArMCww
ICMjCi1uYXRpdmUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBwcm9wZXJ0eQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lm
L0dJRkltYWdlRGVjb2Rlci5jcHAJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MCwxMiArNjAsMTIgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmlzU2l6ZUF2
YWlsYWJsZSgpCiAgICAgcmV0dXJuIEltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxlKCk7CiB9
CiAKLWJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25l
ZCBoZWlnaHQpCitib29sIEdJRkltYWdlRGVjb2Rlcjo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBz
aXplKQogewotICAgIGlmIChJbWFnZURlY29kZXI6OmlzU2l6ZUF2YWlsYWJsZSgpICYmIHNpemUo
KSA9PSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpKQorICAgIGlmIChJbWFnZURlY29kZXI6OmlzU2l6
ZUF2YWlsYWJsZSgpICYmIHRoaXMtPnNpemUoKSA9PSBzaXplKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAotICAgIGlmICghSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHdpZHRoLCBoZWlnaHQpKQorICAg
IGlmICghSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHNpemUpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKQEAgLTIxMywxNiArMjEzLDE2
IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnMKIAogICAgIC8vIElu
aXRpYWxpemUgdGhlIGZyYW1lIGlmIG5lY2Vzc2FyeS4KICAgICBJbWFnZUZyYW1lJiBidWZmZXIg
PSBtX2ZyYW1lQnVmZmVyQ2FjaGVbZnJhbWVJbmRleF07Ci0gICAgaWYgKCgoYnVmZmVyLnN0YXR1
cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJ
bmRleCkpIHx8ICFidWZmZXIuaGFzUGl4ZWxEYXRhKCkpCisgICAgaWYgKCgoYnVmZmVyLnN0YXR1
cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpICYmICFpbml0RnJhbWVCdWZmZXIoZnJhbWVJ
bmRleCkpIHx8ICFidWZmZXIuaGFzQmFja2luZ1N0b3JlKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIEltYWdlRnJhbWU6OlBpeGVsRGF0YSogY3VycmVudEFkZHJlc3MgPSBidWZmZXIu
Z2V0QWRkcih4QmVnaW4sIHlCZWdpbik7CisgICAgUkdCQTMyKiBjdXJyZW50QWRkcmVzcyA9IGJ1
ZmZlci5waXhlbEF0KHhCZWdpbiwgeUJlZ2luKTsKICAgICAvLyBXcml0ZSBvbmUgcm93J3Mgd29y
dGggb2YgZGF0YSBpbnRvIHRoZSBmcmFtZS4gIAogICAgIGZvciAoaW50IHggPSB4QmVnaW47IHgg
PCB4RW5kOyArK3gpIHsKICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBzb3VyY2VWYWx1ZSA9
IHJvd0J1ZmZlclsobV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4KSAtIGZyYW1lQ29u
dGV4dC0+eE9mZnNldF07CiAgICAgICAgIGlmICgoIWZyYW1lQ29udGV4dC0+aXNUcmFuc3BhcmVu
dCB8fCAoc291cmNlVmFsdWUgIT0gZnJhbWVDb250ZXh0LT50cGl4ZWwpKSAmJiAoc291cmNlVmFs
dWUgPCBjb2xvck1hcFNpemUpKSB7CiAgICAgICAgICAgICBjb25zdCBzaXplX3QgY29sb3JJbmRl
eCA9IHN0YXRpY19jYXN0PHNpemVfdD4oc291cmNlVmFsdWUpICogMzsKLSAgICAgICAgICAgIGJ1
ZmZlci5zZXRSR0JBKGN1cnJlbnRBZGRyZXNzLCBjb2xvck1hcFtjb2xvckluZGV4XSwgY29sb3JN
YXBbY29sb3JJbmRleCArIDFdLCBjb2xvck1hcFtjb2xvckluZGV4ICsgMl0sIDI1NSk7CisgICAg
ICAgICAgICBidWZmZXIuc2V0UGl4ZWwoY3VycmVudEFkZHJlc3MsIGNvbG9yTWFwW2NvbG9ySW5k
ZXhdLCBjb2xvck1hcFtjb2xvckluZGV4ICsgMV0sIGNvbG9yTWFwW2NvbG9ySW5kZXggKyAyXSwg
MjU1KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1fY3VycmVudEJ1ZmZlclNhd0Fs
cGhhID0gdHJ1ZTsKICAgICAgICAgICAgIC8vIFdlIG1heSBvciBtYXkgbm90IG5lZWQgdG8gd3Jp
dGUgdHJhbnNwYXJlbnQgcGl4ZWxzIHRvIHRoZSBidWZmZXIuCkBAIC0yMzMsNyArMjMzLDcgQEAg
Ym9vbCBHSUZJbWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KHVucwogICAgICAgICAgICAgLy8g
YmV5b25kIHRoZSBmaXJzdCwgb3IgdGhlIGluaXRpYWwgcGFzc2VzIHdpbGwgInNob3cgdGhyb3Vn
aCIgdGhlCiAgICAgICAgICAgICAvLyBsYXRlciBvbmVzLgogICAgICAgICAgICAgaWYgKHdyaXRl
VHJhbnNwYXJlbnRQaXhlbHMpCi0gICAgICAgICAgICAgICAgYnVmZmVyLnNldFJHQkEoY3VycmVu
dEFkZHJlc3MsIDAsIDAsIDAsIDApOworICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRQaXhlbChj
dXJyZW50QWRkcmVzcywgMCwgMCwgMCwgMCk7CiAgICAgICAgIH0KICAgICAgICAgKytjdXJyZW50
QWRkcmVzczsKICAgICB9CkBAIC0zNjEsNyArMzYxLDcgQEAgYm9vbCBHSUZJbWFnZURlY29kZXI6
OmluaXRGcmFtZUJ1ZmZlcih1bgogCiAgICAgaWYgKCFmcmFtZUluZGV4KSB7CiAgICAgICAgIC8v
IFRoaXMgaXMgdGhlIGZpcnN0IGZyYW1lLCBzbyB3ZSdyZSBub3QgcmVseWluZyBvbiBhbnkgcHJl
dmlvdXMgZGF0YS4KLSAgICAgICAgaWYgKCFidWZmZXItPnNldFNpemUoc2NhbGVkU2l6ZSgpLndp
ZHRoKCksIHNjYWxlZFNpemUoKS5oZWlnaHQoKSkpCisgICAgICAgIGlmICghYnVmZmVyLT5zZXRT
aXplKHNjYWxlZFNpemUoKSkpCiAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgLy8gVGhlIHN0YXJ0aW5nIHN0YXRlIGZvciB0aGlzIGZyYW1lIGRl
cGVuZHMgb24gdGhlIHByZXZpb3VzIGZyYW1lJ3MKQEAgLTM4NywxMiArMzg3LDEyIEBAIGJvb2wg
R0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW4KICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIC8vIFdlIHdhbnQgdG8gY2xlYXIgdGhlIHByZXZpb3VzIGZyYW1lIHRvIHRyYW5z
cGFyZW50LCB3aXRob3V0CiAgICAgICAgICAgICAvLyBhZmZlY3RpbmcgcGl4ZWxzIGluIHRoZSBp
bWFnZSBvdXRzaWRlIG9mIHRoZSBmcmFtZS4KLSAgICAgICAgICAgIGNvbnN0IEludFJlY3QmIHBy
ZXZSZWN0ID0gcHJldkJ1ZmZlci0+b3JpZ2luYWxGcmFtZVJlY3QoKTsKKyAgICAgICAgICAgIElu
dFJlY3QgcHJldlJlY3QgPSBwcmV2QnVmZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgpOwogICAgICAg
ICAgICAgY29uc3QgSW50U2l6ZSYgYnVmZmVyU2l6ZSA9IHNjYWxlZFNpemUoKTsKICAgICAgICAg
ICAgIGlmICghZnJhbWVJbmRleCB8fCBwcmV2UmVjdC5jb250YWlucyhJbnRSZWN0KEludFBvaW50
KCksIHNjYWxlZFNpemUoKSkpKSB7CiAgICAgICAgICAgICAgICAgLy8gQ2xlYXJpbmcgdGhlIGZp
cnN0IGZyYW1lLCBvciBhIGZyYW1lIHRoZSBzaXplIG9mIHRoZSB3aG9sZQogICAgICAgICAgICAg
ICAgIC8vIGltYWdlLCByZXN1bHRzIGluIGEgY29tcGxldGVseSBlbXB0eSBpbWFnZS4KLSAgICAg
ICAgICAgICAgICBpZiAoIWJ1ZmZlci0+c2V0U2l6ZShidWZmZXJTaXplLndpZHRoKCksIGJ1ZmZl
clNpemUuaGVpZ2h0KCkpKQorICAgICAgICAgICAgICAgIGlmICghYnVmZmVyLT5zZXRTaXplKGJ1
ZmZlclNpemUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIENvcHkgdGhlIHdob2xlIHByZXZp
b3VzIGJ1ZmZlciwgdGhlbiBjbGVhciBqdXN0IGl0cyBmcmFtZS4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1h
Z2VEZWNvZGVyLmgJKHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDQsNyArNDQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFN0cmluZyBmaWxlbmFt
ZUV4dGVuc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJnaWYiOyB9CiAgICAgICAgIHZv
aWQgc2V0RGF0YShTaGFyZWRCdWZmZXImIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKSBvdmVy
cmlkZTsKICAgICAgICAgYm9vbCBpc1NpemVBdmFpbGFibGUoKSBvdmVycmlkZTsKLSAgICAgICAg
Ym9vbCBzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpIG92ZXJyaWRlOwor
ICAgICAgICBib29sIHNldFNpemUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwogICAgICAgICBz
aXplX3QgZnJhbWVDb3VudCgpIG92ZXJyaWRlOwogICAgICAgICBpbnQgcmVwZXRpdGlvbkNvdW50
KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgICAgIEltYWdlRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRl
eChzaXplX3QgaW5kZXgpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3Bw
CShyZXZpc2lvbiAyMDU2ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDcsNyArNDQ3
LDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cGFyc2Uoc2l6ZV90IGRhdGFQbwogCiAgICAgICAg
ICAgICAvLyBDQUxMQkFDSzogSW5mb3JtIHRoZSBkZWNvZGVycGx1Z2luIG9mIG91ciBzaXplLgog
ICAgICAgICAgICAgLy8gTm90ZTogQSBzdWJzZXF1ZW50IGZyYW1lIG1pZ2h0IGhhdmUgZGltZW5z
aW9ucyBsYXJnZXIgdGhhbiB0aGUgInNjcmVlbiIgZGltZW5zaW9ucy4KLSAgICAgICAgICAgIGlm
IChtX2NsaWVudCAmJiAhbV9jbGllbnQtPnNldFNpemUobV9zY3JlZW5XaWR0aCwgbV9zY3JlZW5I
ZWlnaHQpKQorICAgICAgICAgICAgaWYgKG1fY2xpZW50ICYmICFtX2NsaWVudC0+c2V0U2l6ZShX
ZWJDb3JlOjpJbnRTaXplKG1fc2NyZWVuV2lkdGgsIG1fc2NyZWVuSGVpZ2h0KSkpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBtX3NjcmVlbkJnY29sb3IgPSBj
dXJyZW50Q29tcG9uZW50WzVdOwpAQCAtNjY0LDcgKzY2NCw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFk
ZXI6OnBhcnNlKHNpemVfdCBkYXRhUG8KICAgICAgICAgICAgICAgICB5T2Zmc2V0ID0gMDsKIAog
ICAgICAgICAgICAgICAgIC8vIENBTExCQUNLOiBJbmZvcm0gdGhlIGRlY29kZXJwbHVnaW4gb2Yg
b3VyIHNpemUuCi0gICAgICAgICAgICAgICAgaWYgKG1fY2xpZW50ICYmICFtX2NsaWVudC0+c2V0
U2l6ZShtX3NjcmVlbldpZHRoLCBtX3NjcmVlbkhlaWdodCkpCisgICAgICAgICAgICAgICAgaWYg
KG1fY2xpZW50ICYmICFtX2NsaWVudC0+c2V0U2l6ZShXZWJDb3JlOjpJbnRTaXplKG1fc2NyZWVu
V2lkdGgsIG1fc2NyZWVuSGVpZ2h0KSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5jcHAJKHJl
dmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2ljby9JQ09JbWFnZURlY29kZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCwxMSArODgsMTEg
QEAgSW50U2l6ZSBJQ09JbWFnZURlY29kZXI6OmZyYW1lU2l6ZUF0SW5kZQogICAgIHJldHVybiAo
aW5kZXggJiYgKGluZGV4IDwgbV9kaXJFbnRyaWVzLnNpemUoKSkpID8gbV9kaXJFbnRyaWVzW2lu
ZGV4XS5tX3NpemUgOiBzaXplKCk7CiB9CiAKLWJvb2wgSUNPSW1hZ2VEZWNvZGVyOjpzZXRTaXpl
KHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpCitib29sIElDT0ltYWdlRGVjb2Rlcjo6
c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIC8vIFRoZSBzaXplIGNhbGN1bGF0
ZWQgaW5zaWRlIHRoZSBCTVBJbWFnZVJlYWRlciBoYWQgYmV0dGVyIG1hdGNoIHRoZSBvbmUgaW4K
ICAgICAvLyB0aGUgaWNvbiBkaXJlY3RvcnkuCi0gICAgcmV0dXJuIG1fZnJhbWVTaXplLmlzRW1w
dHkoKSA/IEltYWdlRGVjb2Rlcjo6c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSA6ICgoSW50U2l6ZSh3
aWR0aCwgaGVpZ2h0KSA9PSBtX2ZyYW1lU2l6ZSkgfHwgc2V0RmFpbGVkKCkpOworICAgIHJldHVy
biBtX2ZyYW1lU2l6ZS5pc0VtcHR5KCkgPyBJbWFnZURlY29kZXI6OnNldFNpemUoc2l6ZSkgOiAo
KHNpemUgPT0gbV9mcmFtZVNpemUpIHx8IHNldEZhaWxlZCgpKTsKIH0KIAogc2l6ZV90IElDT0lt
YWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCgpCkBAIC0yNzksNyArMjc5LDcgQEAgYm9vbCBJQ09JbWFn
ZURlY29kZXI6OnByb2Nlc3NEaXJlY3RvcnlFbgogICAgIGNvbnN0IEljb25EaXJlY3RvcnlFbnRy
eSYgZGlyRW50cnkgPSBtX2RpckVudHJpZXMuZmlyc3QoKTsKICAgICAvLyBUZWNobmljYWxseSwg
dGhpcyBuZXh0IGNhbGwgc2hvdWxkbid0IGJlIGFibGUgdG8gZmFpbCwgc2luY2UgdGhlIHdpZHRo
CiAgICAgLy8gYW5kIGhlaWdodCBoZXJlIGFyZSBlYWNoIDw9IDI1NiwgYW5kIHxtX2ZyYW1lU2l6
ZXwgaXMgZW1wdHkuCi0gICAgcmV0dXJuIHNldFNpemUoZGlyRW50cnkubV9zaXplLndpZHRoKCks
IGRpckVudHJ5Lm1fc2l6ZS5oZWlnaHQoKSk7CisgICAgcmV0dXJuIHNldFNpemUoZGlyRW50cnku
bV9zaXplKTsKIH0KIAogSUNPSW1hZ2VEZWNvZGVyOjpJY29uRGlyZWN0b3J5RW50cnkgSUNPSW1h
Z2VEZWNvZGVyOjpyZWFkRGlyZWN0b3J5RW50cnkoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2ljby9JQ09JbWFnZURlY29k
ZXIuaAkocmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvaWNvL0lDT0ltYWdlRGVjb2Rlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0
OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBpc1NpemVBdmFpbGFibGUo
KSBvdmVycmlkZTsKICAgICAgICAgSW50U2l6ZSBzaXplKCkgb3ZlcnJpZGU7CiAgICAgICAgIElu
dFNpemUgZnJhbWVTaXplQXRJbmRleChzaXplX3QsIFN1YnNhbXBsaW5nTGV2ZWwpIG92ZXJyaWRl
OwotICAgICAgICBib29sIHNldFNpemUodW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkg
b3ZlcnJpZGU7CisgICAgICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7
CiAgICAgICAgIHNpemVfdCBmcmFtZUNvdW50KCkgb3ZlcnJpZGU7CiAgICAgICAgIEltYWdlRnJh
bWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QpIG92ZXJyaWRlOwogICAgICAgICAvLyBDQVVU
SU9OOiBzZXRGYWlsZWQoKSBkZWxldGVzIGFsbCByZWFkZXJzIGFuZCBkZWNvZGVycy4gIEJlIGNh
cmVmdWwgdG8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pw
ZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAkocmV2aXNpb24g
MjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9K
UEVHSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIyLDcgKzMyMiw3IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIG1fc3RhdGUgPSBKUEVHX1NUQVJUX0RFQ09NUFJFU1M7CiAKICAg
ICAgICAgICAgIC8vIFdlIGNhbiBmaWxsIGluIHRoZSBzaXplIG5vdyB0aGF0IHRoZSBoZWFkZXIg
aXMgYXZhaWxhYmxlLgotICAgICAgICAgICAgaWYgKCFtX2RlY29kZXItPnNldFNpemUobV9pbmZv
LmltYWdlX3dpZHRoLCBtX2luZm8uaW1hZ2VfaGVpZ2h0KSkKKyAgICAgICAgICAgIGlmICghbV9k
ZWNvZGVyLT5zZXRTaXplKEludFNpemUobV9pbmZvLmltYWdlX3dpZHRoLCBtX2luZm8uaW1hZ2Vf
aGVpZ2h0KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgICAgICBt
X2RlY29kZXItPnNldE9yaWVudGF0aW9uKHJlYWRJbWFnZU9yaWVudGF0aW9uKGluZm8oKSkpOwpA
QCAtNTE5LDkgKzUxOSw5IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6aXNTaXplQXZhaWxhYmxl
KCkKICAgICByZXR1cm4gSW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKTsKIH0KIAotYm9v
bCBKUEVHSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWln
aHQpCitib29sIEpQRUdJbWFnZURlY29kZXI6OnNldFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkK
IHsKLSAgICBpZiAoIUltYWdlRGVjb2Rlcjo6c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICBp
ZiAoIUltYWdlRGVjb2Rlcjo6c2V0U2l6ZShzaXplKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgcHJlcGFyZVNjYWxlRGF0YUlmTmVjZXNzYXJ5KCk7CkBAIC01NTEsMTMgKzU1MSwxMyBA
QCBib29sIEpQRUdJbWFnZURlY29kZXI6OnNldEZhaWxlZCgpCiB9CiAKIHRlbXBsYXRlIDxKX0NP
TE9SX1NQQUNFIGNvbG9yU3BhY2U+Ci12b2lkIHNldFBpeGVsKEltYWdlRnJhbWUmIGJ1ZmZlciwg
SW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBjdXJyZW50QWRkcmVzcywgSlNBTVBBUlJBWSBzYW1wbGVz
LCBpbnQgY29sdW1uKQordm9pZCBzZXRQaXhlbChJbWFnZUZyYW1lJiBidWZmZXIsIFJHQkEzMiog
Y3VycmVudEFkZHJlc3MsIEpTQU1QQVJSQVkgc2FtcGxlcywgaW50IGNvbHVtbikKIHsKICAgICBK
U0FNUExFKiBqc2FtcGxlID0gKnNhbXBsZXMgKyBjb2x1bW4gKiAoY29sb3JTcGFjZSA9PSBKQ1Nf
UkdCID8gMyA6IDQpOwogCiAgICAgc3dpdGNoIChjb2xvclNwYWNlKSB7CiAgICAgY2FzZSBKQ1Nf
UkdCOgotICAgICAgICBidWZmZXIuc2V0UkdCQShjdXJyZW50QWRkcmVzcywganNhbXBsZVswXSwg
anNhbXBsZVsxXSwganNhbXBsZVsyXSwgMHhGRik7CisgICAgICAgIGJ1ZmZlci5zZXRQaXhlbChj
dXJyZW50QWRkcmVzcywganNhbXBsZVswXSwganNhbXBsZVsxXSwganNhbXBsZVsyXSwgMHhGRik7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSkNTX0NNWUs6CiAgICAgICAgIC8vIFNvdXJjZSBp
cyAnSW52ZXJ0ZWQgQ01ZSycsIG91dHB1dCBpcyBSR0IuCkBAIC01NzAsNyArNTcwLDcgQEAgdm9p
ZCBzZXRQaXhlbChJbWFnZUZyYW1lJiBidWZmZXIsIEltYWdlRgogICAgICAgICAvLyBGcm9tIENN
WSAoMC4uMSkgdG8gUkdCICgwLi4xKToKICAgICAgICAgLy8gUiA9IDEgLSBDID0+IDEgLSAoMSAt
IGlDKmlLKSA9PiBpQyppSyAgW0cgYW5kIEIgc2ltaWxhcl0KICAgICAgICAgdW5zaWduZWQgayA9
IGpzYW1wbGVbM107Ci0gICAgICAgIGJ1ZmZlci5zZXRSR0JBKGN1cnJlbnRBZGRyZXNzLCBqc2Ft
cGxlWzBdICogayAvIDI1NSwganNhbXBsZVsxXSAqIGsgLyAyNTUsIGpzYW1wbGVbMl0gKiBrIC8g
MjU1LCAweEZGKTsKKyAgICAgICAgYnVmZmVyLnNldFBpeGVsKGN1cnJlbnRBZGRyZXNzLCBqc2Ft
cGxlWzBdICogayAvIDI1NSwganNhbXBsZVsxXSAqIGsgLyAyNTUsIGpzYW1wbGVbMl0gKiBrIC8g
MjU1LCAweEZGKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogfQpAQCAtNTk0LDcgKzU5NCw3IEBA
IGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKEkKICAgICAgICAgaWYgKGRl
c3RZIDwgMCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIEltYWdlRnJhbWU6OlBp
eGVsRGF0YSogY3VycmVudEFkZHJlc3MgPSBidWZmZXIuZ2V0QWRkcigwLCBkZXN0WSk7CisgICAg
ICAgIFJHQkEzMiogY3VycmVudEFkZHJlc3MgPSBidWZmZXIucGl4ZWxBdCgwLCBkZXN0WSk7CiAg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7ICsreCkgewogICAgICAgICAgICAgc2V0
UGl4ZWw8Y29sb3JTcGFjZT4oYnVmZmVyLCBjdXJyZW50QWRkcmVzcywgc2FtcGxlcywgaXNTY2Fs
ZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4KTsKICAgICAgICAgICAgICsrY3VycmVudEFkZHJl
c3M7CkBAIC02MTcsMTUgKzYxNywxMiBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNj
YW5saW5lcygpCiAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZnJhbWVidWZmZXIgaWYgbmVlZGVkLgog
ICAgIEltYWdlRnJhbWUmIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVswXTsKICAgICBpZiAo
YnVmZmVyLnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpIHsKLSAgICAgICAgaWYg
KCFidWZmZXIuc2V0U2l6ZShzY2FsZWRTaXplKCkud2lkdGgoKSwgc2NhbGVkU2l6ZSgpLmhlaWdo
dCgpKSkKKyAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzY2FsZWRTaXplKCkpKQogICAgICAg
ICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgICAgICBidWZmZXIuc2V0U3RhdHVzKEltYWdl
RnJhbWU6OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIC8vIFRoZSBidWZmZXIgaXMgdHJhbnNwYXJl
bnQgb3V0c2lkZSB0aGUgZGVjb2RlZCBhcmVhIHdoaWxlIHRoZSBpbWFnZSBpcwogICAgICAgICAv
LyBsb2FkaW5nLiBUaGUgY29tcGxldGVkIGltYWdlIHdpbGwgYmUgbWFya2VkIGZ1bGx5IG9wYXF1
ZSBpbiBqcGVnQ29tcGxldGUoKS4KICAgICAgICAgYnVmZmVyLnNldEhhc0FscGhhKHRydWUpOwot
Ci0gICAgICAgIC8vIEZvciBKUEVHcywgdGhlIGZyYW1lIGFsd2F5cyBmaWxscyB0aGUgZW50aXJl
IGltYWdlLgotICAgICAgICBidWZmZXIuc2V0T3JpZ2luYWxGcmFtZVJlY3QoSW50UmVjdChJbnRQ
b2ludCgpLCBzaXplKCkpKTsKICAgICB9CiAKICAgICBqcGVnX2RlY29tcHJlc3Nfc3RydWN0KiBp
bmZvID0gbV9yZWFkZXItPmluZm8oKTsKQEAgLTYzMyw3ICs2MzAsNyBAQCBib29sIEpQRUdJbWFn
ZURlY29kZXI6Om91dHB1dFNjYW5saW5lcygpCiAjaWYgZGVmaW5lZChUVVJCT19KUEVHX1JHQl9T
V0laWkxFKQogICAgIGlmICghbV9zY2FsZWQgJiYgdHVyYm9Td2l6emxlZChpbmZvLT5vdXRfY29s
b3Jfc3BhY2UpKSB7CiAgICAgICAgIHdoaWxlIChpbmZvLT5vdXRwdXRfc2NhbmxpbmUgPCBpbmZv
LT5vdXRwdXRfaGVpZ2h0KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiByb3cgPSByZWlu
dGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihidWZmZXIuZ2V0QWRkcigwLCBpbmZvLT5vdXRw
dXRfc2NhbmxpbmUpKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIHJvdyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGJ1ZmZlci5waXhlbEF0KDAsIGluZm8tPm91dHB1dF9z
Y2FubGluZSkpOwogICAgICAgICAgICAgaWYgKGpwZWdfcmVhZF9zY2FubGluZXMoaW5mbywgJnJv
dywgMSkgIT0gMSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFn
ZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAkocmV2aXNpb24gMjA1Njg0KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICAvLyBJbWFnZURlY29kZXIKICAgICAgICAgU3RyaW5nIGZpbGVuYW1lRXh0ZW5zaW9u
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gImpwZyI7IH0KICAgICAgICAgYm9vbCBpc1NpemVB
dmFpbGFibGUoKSBvdmVycmlkZTsKLSAgICAgICAgYm9vbCBzZXRTaXplKHVuc2lnbmVkIHdpZHRo
LCB1bnNpZ25lZCBoZWlnaHQpIG92ZXJyaWRlOworICAgICAgICBib29sIHNldFNpemUoY29uc3Qg
SW50U2l6ZSYpIG92ZXJyaWRlOwogICAgICAgICBJbWFnZUZyYW1lKiBmcmFtZUJ1ZmZlckF0SW5k
ZXgoc2l6ZV90IGluZGV4KSBvdmVycmlkZTsKICAgICAgICAgLy8gQ0FVVElPTjogc2V0RmFpbGVk
KCkgZGVsZXRlcyB8bV9yZWFkZXJ8LiAgQmUgY2FyZWZ1bCB0byBhdm9pZAogICAgICAgICAvLyBh
Y2Nlc3NpbmcgZGVsZXRlZCBtZW1vcnksIGVzcGVjaWFsbHkgd2hlbiBjYWxsaW5nIHRoaXMgZnJv
bSBpbnNpZGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Bu
Zy9QTkdJbWFnZURlY29kZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwCShyZXZpc2lvbiAyMDU2
ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1h
Z2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM1LDkgKzIzNSw5IEBAIGJvb2wgUE5H
SW1hZ2VEZWNvZGVyOjppc1NpemVBdmFpbGFibGUoKQogICAgIHJldHVybiBJbWFnZURlY29kZXI6
OmlzU2l6ZUF2YWlsYWJsZSgpOwogfQogCi1ib29sIFBOR0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZSh1
bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQorYm9vbCBQTkdJbWFnZURlY29kZXI6OnNl
dFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKLSAgICBpZiAoIUltYWdlRGVjb2Rlcjo6c2V0
U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICBpZiAoIUltYWdlRGVjb2Rlcjo6c2V0U2l6ZShzaXpl
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcHJlcGFyZVNjYWxlRGF0YUlmTmVjZXNz
YXJ5KCk7CkBAIC0yOTUsNyArMjk1LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmhlYWRlckF2
YWlsYWJsZSgpCiAgICAgLy8gd2lsbCBjZWFzZSB0byBleGlzdC4gIE5vdGUgdGhhdCB3ZSdsbCBz
dGlsbCBwcm9wZXJseSBzZXQgdGhlIGZhaWx1cmUgZmxhZwogICAgIC8vIGluIHRoaXMgY2FzZSBh
cyBzb29uIGFzIHdlIGxvbmdqbXAoKS4KICAgICBtX2RvTm90aGluZ09uRmFpbHVyZSA9IHRydWU7
Ci0gICAgYm9vbCByZXN1bHQgPSBzZXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgIGJvb2wgcmVz
dWx0ID0gc2V0U2l6ZShJbnRTaXplKHdpZHRoLCBoZWlnaHQpKTsKICAgICBtX2RvTm90aGluZ09u
RmFpbHVyZSA9IGZhbHNlOwogICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgIGxvbmdqbXAoSk1Q
QlVGKHBuZyksIDEpOwpAQCAtNDExLDE5ICs0MTEsMTkgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6
OmhlYWRlckF2YWlsYWJsZSgpCiAgICAgfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4
ZWxSR0IoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBkZXN0LCBwbmdfYnl0ZXAgcGl4ZWwpCitzdGF0
aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxSR0IoUkdCQTMyKiBkZXN0LCBwbmdfYnl0ZXAgcGl4ZWwp
CiB7CiAgICAgKmRlc3QgPSAweEZGMDAwMDAwVSB8IHBpeGVsWzBdIDw8IDE2IHwgcGl4ZWxbMV0g
PDwgOCB8IHBpeGVsWzJdOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxSR0JBKElt
YWdlRnJhbWU6OlBpeGVsRGF0YSogZGVzdCwgcG5nX2J5dGVwIHBpeGVsLCB1bnNpZ25lZCBjaGFy
JiBub25Ucml2aWFsQWxwaGFNYXNrKQorc3RhdGljIGlubGluZSB2b2lkIHNldFBpeGVsUkdCQShS
R0JBMzIqIGRlc3QsIHBuZ19ieXRlcCBwaXhlbCwgdW5zaWduZWQgY2hhciYgbm9uVHJpdmlhbEFs
cGhhTWFzaykKIHsKICAgICB1bnNpZ25lZCBjaGFyIGEgPSBwaXhlbFszXTsKICAgICAqZGVzdCA9
IGEgPDwgMjQgfCBwaXhlbFswXSA8PCAxNiB8IHBpeGVsWzFdIDw8IDggfCBwaXhlbFsyXTsKICAg
ICBub25Ucml2aWFsQWxwaGFNYXNrIHw9ICgyNTUgLSBhKTsKIH0KIAotc3RhdGljIGlubGluZSB2
b2lkIHNldFBpeGVsUHJlbXVsdGlwbGllZFJHQkEoSW1hZ2VGcmFtZTo6UGl4ZWxEYXRhKiBkZXN0
LCBwbmdfYnl0ZXAgcGl4ZWwsIHVuc2lnbmVkIGNoYXImIG5vblRyaXZpYWxBbHBoYU1hc2spCitz
dGF0aWMgaW5saW5lIHZvaWQgc2V0UGl4ZWxQcmVtdWx0aXBsaWVkUkdCQShSR0JBMzIqIGRlc3Qs
IHBuZ19ieXRlcCBwaXhlbCwgdW5zaWduZWQgY2hhciYgbm9uVHJpdmlhbEFscGhhTWFzaykKIHsK
ICAgICB1bnNpZ25lZCBjaGFyIGEgPSBwaXhlbFszXTsKICAgICB1bnNpZ25lZCBjaGFyIHIgPSBm
YXN0RGl2aWRlQnkyNTUocGl4ZWxbMF0gKiBhKTsKQEAgLTQ0Nyw3ICs0NDcsNyBAQCB2b2lkIFBO
R0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnCiAgICAgSW1hZ2VGcmFtZSYgYnVmZmVy
ID0gbV9mcmFtZUJ1ZmZlckNhY2hlW21fY3VycmVudEZyYW1lXTsKICAgICBpZiAoYnVmZmVyLnN0
YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1lRW1wdHkpIHsKICAgICAgICAgcG5nX3N0cnVjdHAg
cG5nID0gbV9yZWFkZXItPnBuZ1B0cigpOwotICAgICAgICBpZiAoIWJ1ZmZlci5zZXRTaXplKHNj
YWxlZFNpemUoKS53aWR0aCgpLCBzY2FsZWRTaXplKCkuaGVpZ2h0KCkpKSB7CisgICAgICAgIGlm
ICghYnVmZmVyLnNldFNpemUoc2NhbGVkU2l6ZSgpKSkgewogICAgICAgICAgICAgbG9uZ2ptcChK
TVBCVUYocG5nKSwgMSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTQ2OSwx
MCArNDY5LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZwogI2lm
IEVOQUJMRShBUE5HKQogICAgICAgICBpZiAobV9jdXJyZW50RnJhbWUpCiAgICAgICAgICAgICBp
bml0RnJhbWVCdWZmZXIobV9jdXJyZW50RnJhbWUpOwotICAgICAgICBlbHNlCiAjZW5kaWYKLSAg
ICAgICAgLy8gRm9yIFBOR3MsIHRoZSBmcmFtZSBhbHdheXMgZmlsbHMgdGhlIGVudGlyZSBpbWFn
ZS4KLSAgICAgICAgYnVmZmVyLnNldE9yaWdpbmFsRnJhbWVSZWN0KEludFJlY3QoSW50UG9pbnQo
KSwgc2l6ZSgpKSk7CiAgICAgfQogCiAgICAgLyogbGlicG5nIGNvbW1lbnRzIChoZXJlIHRvIGV4
cGxhaW4gd2hhdCBmb2xsb3dzKS4KQEAgLTUzMSw3ICs1MjgsNyBAQCB2b2lkIFBOR0ltYWdlRGVj
b2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnCiAgICAgfQogCiAgICAgLy8gV3JpdGUgdGhlIGRlY29k
ZWQgcm93IHBpeGVscyB0byB0aGUgZnJhbWUgYnVmZmVyLgotICAgIEltYWdlRnJhbWU6OlBpeGVs
RGF0YSogYWRkcmVzcyA9IGJ1ZmZlci5nZXRBZGRyKDAsIHkpOworICAgIFJHQkEzMiogYWRkcmVz
cyA9IGJ1ZmZlci5waXhlbEF0KDAsIHkpOwogICAgIGludCB3aWR0aCA9IHNjYWxlZFNpemUoKS53
aWR0aCgpOwogICAgIHVuc2lnbmVkIGNoYXIgbm9uVHJpdmlhbEFscGhhTWFzayA9IDA7CiAKQEAg
LTU0MCw3ICs1MzcsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVuc2ln
CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7ICsreCkgewogICAgICAgICAgICAg
cG5nX2J5dGVwIHBpeGVsID0gcm93ICsgbV9zY2FsZWRDb2x1bW5zW3hdICogY29sb3JDaGFubmVs
czsKICAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gaGFzQWxwaGEgPyBwaXhlbFszXSA6IDI1
NTsKLSAgICAgICAgICAgIGJ1ZmZlci5zZXRSR0JBKGFkZHJlc3MrKywgcGl4ZWxbMF0sIHBpeGVs
WzFdLCBwaXhlbFsyXSwgYWxwaGEpOworICAgICAgICAgICAgYnVmZmVyLnNldFBpeGVsKGFkZHJl
c3MrKywgcGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwgYWxwaGEpOwogICAgICAgICAgICAg
bm9uVHJpdmlhbEFscGhhTWFzayB8PSAoMjU1IC0gYWxwaGEpOwogICAgICAgICB9CiAgICAgfSBl
bHNlCkBAIC04MjAsNyArODE3LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1
ZmZlcihzaQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIFdlIHdhbnQgdG8gY2xlYXIgdGhlIHBy
ZXZpb3VzIGZyYW1lIHRvIHRyYW5zcGFyZW50LCB3aXRob3V0CiAgICAgICAgIC8vIGFmZmVjdGlu
ZyBwaXhlbHMgaW4gdGhlIGltYWdlIG91dHNpZGUgb2YgdGhlIGZyYW1lLgotICAgICAgICBjb25z
dCBJbnRSZWN0JiBwcmV2UmVjdCA9IHByZXZCdWZmZXItPm9yaWdpbmFsRnJhbWVSZWN0KCk7Cisg
ICAgICAgIEludFJlY3QgcHJldlJlY3QgPSBwcmV2QnVmZmVyLT5vcmlnaW5hbEZyYW1lUmVjdCgp
OwogICAgICAgICBpZiAoIWZyYW1lSW5kZXggfHwgcHJldlJlY3QuY29udGFpbnMoSW50UmVjdChJ
bnRQb2ludCgpLCBzY2FsZWRTaXplKCkpKSkgewogICAgICAgICAgICAgLy8gQ2xlYXJpbmcgdGhl
IGZpcnN0IGZyYW1lLCBvciBhIGZyYW1lIHRoZSBzaXplIG9mIHRoZSB3aG9sZQogICAgICAgICAg
ICAgLy8gaW1hZ2UsIHJlc3VsdHMgaW4gYSBjb21wbGV0ZWx5IGVtcHR5IGltYWdlLgpAQCAtODQ0
LDcgKzg0MSw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKCkKICAgICBw
bmdfYnl0ZXAgaW50ZXJsYWNlQnVmZmVyID0gbV9yZWFkZXItPmludGVybGFjZUJ1ZmZlcigpOwog
CiAgICAgaWYgKG1fY3VycmVudEZyYW1lICYmIGludGVybGFjZUJ1ZmZlcikgewotICAgICAgICBj
b25zdCBJbnRSZWN0JiByZWN0ID0gYnVmZmVyLm9yaWdpbmFsRnJhbWVSZWN0KCk7CisgICAgICAg
IEludFJlY3QgcmVjdCA9IGJ1ZmZlci5vcmlnaW5hbEZyYW1lUmVjdCgpOwogICAgICAgICBib29s
IGhhc0FscGhhID0gbV9yZWFkZXItPmhhc0FscGhhKCk7CiAgICAgICAgIHVuc2lnbmVkIGNvbG9y
Q2hhbm5lbHMgPSBoYXNBbHBoYSA/IDQgOiAzOwogICAgICAgICBib29sIG5vblRyaXZpYWxBbHBo
YSA9IGZhbHNlOwpAQCAtODU0LDE1ICs4NTEsMTUgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmZy
YW1lQ29tcGxldGUoKQogI2lmIEVOQUJMRShJTUFHRV9ERUNPREVSX0RPV05fU0FNUExJTkcpCiAg
ICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgcmVjdC5tYXhZKCkgLSByZWN0LnkoKTsgKyt5KSB7
CiAgICAgICAgICAgICBwbmdfYnl0ZXAgcm93ID0gaW50ZXJsYWNlQnVmZmVyICsgKG1fc2NhbGVk
ID8gbV9zY2FsZWRSb3dzW3ldIDogeSkgKiBjb2xvckNoYW5uZWxzICogc2l6ZSgpLndpZHRoKCk7
Ci0gICAgICAgICAgICBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGFkZHJlc3MgPSBidWZmZXIuZ2V0
QWRkcihyZWN0LngoKSwgeSArIHJlY3QueSgpKTsKKyAgICAgICAgICAgIFJHQkEzMiogYWRkcmVz
cyA9IGJ1ZmZlci5waXhlbEF0KHJlY3QueCgpLCB5ICsgcmVjdC55KCkpOwogICAgICAgICAgICAg
Zm9yIChpbnQgeCA9IDA7IHggPCByZWN0Lm1heFgoKSAtIHJlY3QueCgpOyArK3gpIHsKICAgICAg
ICAgICAgICAgICBwbmdfYnl0ZXAgcGl4ZWwgPSByb3cgKyAobV9zY2FsZWQgPyBtX3NjYWxlZENv
bHVtbnNbeF0gOiB4KSAqIGNvbG9yQ2hhbm5lbHM7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQg
YWxwaGEgPSBoYXNBbHBoYSA/IHBpeGVsWzNdIDogMjU1OwogICAgICAgICAgICAgICAgIG5vblRy
aXZpYWxBbHBoYSB8PSBhbHBoYSA8IDI1NTsKICAgICAgICAgICAgICAgICBpZiAoIW1fYmxlbmQp
Ci0gICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRSR0JBKGFkZHJlc3MrKywgcGl4ZWxbMF0s
IHBpeGVsWzFdLCBwaXhlbFsyXSwgYWxwaGEpOworICAgICAgICAgICAgICAgICAgICBidWZmZXIu
c2V0UGl4ZWwoYWRkcmVzcysrLCBwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBhbHBoYSk7
CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBidWZmZXIub3ZlclJH
QkEoYWRkcmVzcysrLCBwaXhlbFswXSwgcGl4ZWxbMV0sIHBpeGVsWzJdLCBhbHBoYSk7CisgICAg
ICAgICAgICAgICAgICAgIGJ1ZmZlci5ibGVuZFBpeGVsKGFkZHJlc3MrKywgcGl4ZWxbMF0sIHBp
eGVsWzFdLCBwaXhlbFsyXSwgYWxwaGEpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAjZWxz
ZQpAQCAtODcwLDE0ICs4NjcsMTQgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxl
dGUoKQogICAgICAgICBwbmdfYnl0ZXAgcm93ID0gaW50ZXJsYWNlQnVmZmVyOwogICAgICAgICBm
b3IgKGludCB5ID0gcmVjdC55KCk7IHkgPCByZWN0Lm1heFkoKTsgKyt5LCByb3cgKz0gY29sb3JD
aGFubmVscyAqIHNpemUoKS53aWR0aCgpKSB7CiAgICAgICAgICAgICBwbmdfYnl0ZXAgcGl4ZWwg
PSByb3c7Ci0gICAgICAgICAgICBJbWFnZUZyYW1lOjpQaXhlbERhdGEqIGFkZHJlc3MgPSBidWZm
ZXIuZ2V0QWRkcihyZWN0LngoKSwgeSk7CisgICAgICAgICAgICBSR0JBMzIqIGFkZHJlc3MgPSBi
dWZmZXIucGl4ZWxBdChyZWN0LngoKSwgeSk7CiAgICAgICAgICAgICBmb3IgKGludCB4ID0gcmVj
dC54KCk7IHggPCByZWN0Lm1heFgoKTsgKyt4LCBwaXhlbCArPSBjb2xvckNoYW5uZWxzKSB7CiAg
ICAgICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEgPSBoYXNBbHBoYSA/IHBpeGVsWzNdIDogMjU1
OwogICAgICAgICAgICAgICAgIG5vblRyaXZpYWxBbHBoYSB8PSBhbHBoYSA8IDI1NTsKICAgICAg
ICAgICAgICAgICBpZiAoIW1fYmxlbmQpCi0gICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRS
R0JBKGFkZHJlc3MrKywgcGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwgYWxwaGEpOworICAg
ICAgICAgICAgICAgICAgICBidWZmZXIuc2V0UGl4ZWwoYWRkcmVzcysrLCBwaXhlbFswXSwgcGl4
ZWxbMV0sIHBpeGVsWzJdLCBhbHBoYSk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICBidWZmZXIub3ZlclJHQkEoYWRkcmVzcysrLCBwaXhlbFswXSwgcGl4ZWxbMV0s
IHBpeGVsWzJdLCBhbHBoYSk7CisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5ibGVuZFBpeGVs
KGFkZHJlc3MrKywgcGl4ZWxbMF0sIHBpeGVsWzFdLCBwaXhlbFsyXSwgYWxwaGEpOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgJ
KHJldmlzaW9uIDIwNTY4NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNyArNDgsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGludCByZXBldGl0aW9uQ291bnQoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBtX3BsYXlDb3VudC0xOyB9CiAjZW5kaWYKICAgICAgICAgYm9v
bCBpc1NpemVBdmFpbGFibGUoKSBvdmVycmlkZTsKLSAgICAgICAgYm9vbCBzZXRTaXplKHVuc2ln
bmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpIG92ZXJyaWRlOworICAgICAgICBib29sIHNldFNp
emUoY29uc3QgSW50U2l6ZSYpIG92ZXJyaWRlOwogICAgICAgICBJbWFnZUZyYW1lKiBmcmFtZUJ1
ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KSBvdmVycmlkZTsKICAgICAgICAgLy8gQ0FVVElPTjog
c2V0RmFpbGVkKCkgZGVsZXRlcyB8bV9yZWFkZXJ8LiAgQmUgY2FyZWZ1bCB0byBhdm9pZAogICAg
ICAgICAvLyBhY2Nlc3NpbmcgZGVsZXRlZCBtZW1vcnksIGVzcGVjaWFsbHkgd2hlbiBjYWxsaW5n
IHRoaXMgZnJvbSBpbnNpZGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3dlYnAvV0VCUEltYWdlRGVjb2Rlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAko
cmV2aXNpb24gMjA1Njg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvd2VicC9XRUJQSW1hZ2VEZWNvZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDcgKzEx
NSw3IEBAIGJvb2wgV0VCUEltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgb25seVMKICAgICAgICAg
ICAgIHJldHVybiBzZXRGYWlsZWQoKTsKICAgICAgICAgbV9oYXNBbHBoYSA9IGZhbHNlOwogI2Vu
ZGlmCi0gICAgICAgIGlmICghc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgaWYgKCFz
ZXRTaXplKEludFNpemUod2lkdGgsIGhlaWdodCkpKQogICAgICAgICAgICAgcmV0dXJuIHNldEZh
aWxlZCgpOwogICAgIH0KIApAQCAtMTI4LDE5ICsxMjgsMTggQEAgYm9vbCBXRUJQSW1hZ2VEZWNv
ZGVyOjpkZWNvZGUoYm9vbCBvbmx5UwogICAgIEFTU0VSVChidWZmZXIuc3RhdHVzKCkgIT0gSW1h
Z2VGcmFtZTo6RnJhbWVDb21wbGV0ZSk7CiAKICAgICBpZiAoYnVmZmVyLnN0YXR1cygpID09IElt
YWdlRnJhbWU6OkZyYW1lRW1wdHkpIHsKLSAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6ZShzaXpl
KCkud2lkdGgoKSwgc2l6ZSgpLmhlaWdodCgpKSkKKyAgICAgICAgaWYgKCFidWZmZXIuc2V0U2l6
ZShzaXplKCkpKQogICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgICAgICBidWZm
ZXIuc2V0U3RhdHVzKEltYWdlRnJhbWU6OkZyYW1lUGFydGlhbCk7CiAgICAgICAgIGJ1ZmZlci5z
ZXRIYXNBbHBoYShtX2hhc0FscGhhKTsKLSAgICAgICAgYnVmZmVyLnNldE9yaWdpbmFsRnJhbWVS
ZWN0KEludFJlY3QoSW50UG9pbnQoKSwgc2l6ZSgpKSk7CiAgICAgfQogCiAgICAgaWYgKCFtX2Rl
Y29kZXIpIHsKICAgICAgICAgV0VCUF9DU1BfTU9ERSBtb2RlID0gb3V0cHV0TW9kZShtX2hhc0Fs
cGhhKTsKICAgICAgICAgaWYgKCFtX3ByZW11bHRpcGx5QWxwaGEpCiAgICAgICAgICAgICBtb2Rl
ID0gb3V0cHV0TW9kZShmYWxzZSk7Ci0gICAgICAgIGludCByb3dTdHJpZGUgPSBzaXplKCkud2lk
dGgoKSAqIHNpemVvZihJbWFnZUZyYW1lOjpQaXhlbERhdGEpOwotICAgICAgICB1aW50OF90KiBv
dXRwdXQgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihidWZmZXIuZ2V0QWRkcigwLCAwKSk7
CisgICAgICAgIGludCByb3dTdHJpZGUgPSBzaXplKCkud2lkdGgoKSAqIHNpemVvZihSR0JBMzIp
OworICAgICAgICB1aW50OF90KiBvdXRwdXQgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihi
dWZmZXIucGl4ZWxBdCgwLCAwKSk7CiAgICAgICAgIGludCBvdXRwdXRTaXplID0gc2l6ZSgpLmhl
aWdodCgpICogcm93U3RyaWRlOwogICAgICAgICBtX2RlY29kZXIgPSBXZWJQSU5ld1JHQihtb2Rl
LCBvdXRwdXQsIG91dHB1dFNpemUsIHJvd1N0cmlkZSk7CiAgICAgICAgIGlmICghbV9kZWNvZGVy
KQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>