<?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>213071</bug_id>
          
          <creation_ts>2020-06-11 01:44:58 -0700</creation_ts>
          <short_desc>Replace JSC::FreeList linked list with a Bitmap.</short_desc>
          <delta_ts>2020-08-09 02:07:00 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>REOPENED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>213255</dependson>
    
    <dependson>215312</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1661538</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-11 01:44:58 -0700</bug_when>
    <thetext>This is an investigation to see if using a Bitmap is faster.  We expect it to be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1661546</commentid>
    <comment_count>1</comment_count>
      <attachid>401630</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-11 02:20:26 -0700</bug_when>
    <thetext>Created attachment 401630
work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1661724</commentid>
    <comment_count>2</comment_count>
      <attachid>401678</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-11 13:41:52 -0700</bug_when>
    <thetext>Created attachment 401678
test patch 1: does NOT use adjusted bitmap start.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1661725</commentid>
    <comment_count>3</comment_count>
      <attachid>401679</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-11 13:42:45 -0700</bug_when>
    <thetext>Created attachment 401679
test patch 2: does use adjusted bitmap start.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1662330</commentid>
    <comment_count>4</comment_count>
      <attachid>401826</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-12 23:05:24 -0700</bug_when>
    <thetext>Created attachment 401826
test patch 3: post-tuned</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663695</commentid>
    <comment_count>5</comment_count>
      <attachid>402163</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-17 15:58:42 -0700</bug_when>
    <thetext>Created attachment 402163
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663696</commentid>
    <comment_count>6</comment_count>
      <attachid>402164</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-17 16:12:07 -0700</bug_when>
    <thetext>Created attachment 402164
proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663751</commentid>
    <comment_count>7</comment_count>
      <attachid>402164</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2020-06-17 18:44:34 -0700</bug_when>
    <thetext>Comment on attachment 402164
proposed patch.

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

&gt; Source/JavaScriptCore/heap/MarkedBlockInlines.h:341
&gt; +        freeAtoms ^= cellLocations;

You could probably make this faster if it was one loop that did the whole thing. If I’m understanding right we will have a loop here for the ^= and loops above for other parts of the freeAtoms computation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663753</commentid>
    <comment_count>8</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-17 18:53:43 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #7)
&gt; Comment on attachment 402164 [details]
&gt; proposed patch.
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=402164&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/MarkedBlockInlines.h:341
&gt; &gt; +        freeAtoms ^= cellLocations;
&gt; 
&gt; You could probably make this faster if it was one loop that did the whole
&gt; thing. If I’m understanding right we will have a loop here for the ^= and
&gt; loops above for other parts of the freeAtoms computation.

Thanks.  I&apos;ll look into doing this in a follow up patch as it might get a messy.  I&apos;ll land the current patch first which has already been tested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663754</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-17 18:58:08 -0700</bug_when>
    <thetext>Landed in r263195: &lt;http://trac.webkit.org/r263195&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663755</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-06-17 18:59:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/64472738&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663757</commentid>
    <comment_count>11</comment_count>
      <attachid>402164</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2020-06-17 19:15:52 -0700</bug_when>
    <thetext>Comment on attachment 402164
proposed patch.

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

This patch looks perfectly reasonable to me, but I am not familiar enough with this code to feel comfortable r+-ing it alone.

&gt; Source/JavaScriptCore/ChangeLog:98
&gt; +           there is n the location of m_cellSize.  It is now moved up next to m_remaining,

typo: &quot;n&quot; ?

&gt; Source/JavaScriptCore/heap/FreeList.h:108
&gt; +        // if there atoms still available for allocation. See comment blob below

typo: &quot;there atoms&quot; =&gt; &quot;there are atoms&quot;

&gt; Source/JavaScriptCore/heap/FreeList.h:119
&gt; +    static ptrdiff_t offsetOfBitmapRows() { return OBJECT_OFFSETOF(FreeList, m_bitmap) - sizeof(AtomsBitmap::Word); }

Maybe rename to offsetOfBitmapRowsMinusOne, or offsetOneBeforeBitmapRows, or something like this? Just in case anyone tries to use it without looking at where it is defined.

&gt; Source/JavaScriptCore/heap/FreeListInlines.h:100
&gt; +            while (rowBitmap) {

It probably does not matter, but I can think of a way to make this loop a tad more efficient:
```
unsigned atomIndexInRow = 0;
while (rowBitmap) {
  atomIndexInRow += ctz(rowBitmap);
  auto* cell = bitwise_cast&lt;HeapCell*&gt;(&amp;currentMarkedBlockRowAddress[atomIndexInRow]);
  rowBitmap &gt;&gt;= (++atomIndexInRow);
  func(cell);
}
```

&gt; Source/JavaScriptCore/jit/AssemblyHelpers.cpp:561
&gt; +#if CPU(ARM64)

I am a bit wary that this code will never be tested since BITMAP_FREELIST is currently only set on x86_64. I don&apos;t have a better solution though.
It is also a bit weird to have both &quot;#if CPU(ARM64)&quot; and &quot;if (isARM64())&quot;, but just &quot;if (isx86_64())&quot;. What is the criterion for picking one of these ways of checking the CPU?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663762</commentid>
    <comment_count>12</comment_count>
      <attachid>402164</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-17 20:09:00 -0700</bug_when>
    <thetext>Comment on attachment 402164
proposed patch.

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

Thanks.

&gt;&gt; Source/JavaScriptCore/ChangeLog:98
&gt;&gt; +           there is n the location of m_cellSize.  It is now moved up next to m_remaining,
&gt; 
&gt; typo: &quot;n&quot; ?

I think I meant to say &quot;in&quot;.

&gt;&gt; Source/JavaScriptCore/heap/FreeList.h:108
&gt;&gt; +        // if there atoms still available for allocation. See comment blob below
&gt; 
&gt; typo: &quot;there atoms&quot; =&gt; &quot;there are atoms&quot;

Will fix.

&gt;&gt; Source/JavaScriptCore/heap/FreeList.h:119
&gt;&gt; +    static ptrdiff_t offsetOfBitmapRows() { return OBJECT_OFFSETOF(FreeList, m_bitmap) - sizeof(AtomsBitmap::Word); }
&gt; 
&gt; Maybe rename to offsetOfBitmapRowsMinusOne, or offsetOneBeforeBitmapRows, or something like this? Just in case anyone tries to use it without looking at where it is defined.

offsetOfBitmapRowsMinusOne sounds good.  I&apos;ll try to apply this in my follow up patch to address Fil&apos;s idea for an optimization.

&gt;&gt; Source/JavaScriptCore/heap/FreeListInlines.h:100
&gt;&gt; +            while (rowBitmap) {
&gt; 
&gt; It probably does not matter, but I can think of a way to make this loop a tad more efficient:
&gt; ```
&gt; unsigned atomIndexInRow = 0;
&gt; while (rowBitmap) {
&gt;   atomIndexInRow += ctz(rowBitmap);
&gt;   auto* cell = bitwise_cast&lt;HeapCell*&gt;(&amp;currentMarkedBlockRowAddress[atomIndexInRow]);
&gt;   rowBitmap &gt;&gt;= (++atomIndexInRow);
&gt;   func(cell);
&gt; }
&gt; ```

I don&apos;t see how this can work.  Let&apos;s go over an example: say we have bits at index 2, 3, and 5.

rowBitmap is ...0000101100b.
1st iteration: atomIndexInRow is 0, and becomes 2.  We compute the cell to be &amp;currentMarkedBlockRowAddress[2].  All is well.
    atomIndexInRow becomes 3.
    rowBitmap becomes ...0000101b.
2nd iteration: atomIndexInRow is 3, and stays 3.  We compute the cell to be &amp;currentMarkedBlockRowAddress[3].  All is well.
    atomIndexInRow becomes 4.
    rowBitmap becomes ...000b.
3rd iteration should have computed cell at &amp;currentMarkedBlockRowAddress[5], but actually thinks there is no cells left because rowBitmap has become 0.

The bug lies in the right shift on rowBitmap.  I think it needs to be shifted by the result of the ctz + 1, not atomIndexInRow + 1.

And yeah, I&apos;m not sure this is worth it.  The code will definitely be trickier and harder to understand, and therefore error prone.

&gt;&gt; Source/JavaScriptCore/jit/AssemblyHelpers.cpp:561
&gt;&gt; +#if CPU(ARM64)
&gt; 
&gt; I am a bit wary that this code will never be tested since BITMAP_FREELIST is currently only set on x86_64. I don&apos;t have a better solution though.
&gt; It is also a bit weird to have both &quot;#if CPU(ARM64)&quot; and &quot;if (isARM64())&quot;, but just &quot;if (isx86_64())&quot;. What is the criterion for picking one of these ways of checking the CPU?

It&apos;s unfortunate but the #if CPU(ARM64) is needed because getCachedMemoryTempRegisterIDAndInvalidate() is only available for ARM64.  We&apos;ll be testing this code when we try to turn this on for ARM64 later after we try to do more to improve perf.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663800</commentid>
    <comment_count>13</comment_count>
      <attachid>402164</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-06-17 22:30:14 -0700</bug_when>
    <thetext>Comment on attachment 402164
proposed patch.

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

LGTM too

&gt; Source/JavaScriptCore/ChangeLog:87
&gt; +           The middle path checks m_currentRowIndex to see if we have more rows to allocate
&gt; +           from.  For each m_currentRowIndex, we check its corresponding AtomsBitmap::Word
&gt; +           in m_bitmap.  If the word is non-zero, we copy it to m_currentRowBitmap and
&gt; +           jump to the fast path to do the allocation.  The middle path will update
&gt; +           m_currentRowIndex to point to the current row we&apos;re allocating from.

I think it&apos;d be faster if m_currentRowIndex were instead a bitmap itself telling you the next row to allocate out of was. Might matter for blocks with larger cell sizes.

&gt; Source/JavaScriptCore/heap/FreeList.cpp:137
&gt; +        return m_currentRowBitmap &amp; (one &lt;&lt; atomIndexInRow);

using the constant 1 is more readable imo

&gt; Source/JavaScriptCore/heap/FreeListInlines.h:51
&gt; +            rowBitmap &amp;= ~(one &lt;&lt; atomIndexInRow);

nit: I think it&apos;s easier to read with the constant 1 than the name &quot;one&quot;

&gt; Source/JavaScriptCore/heap/MarkedBlockInlines.h:322
&gt; +    auto handleDeadCell = [&amp;] (size_t i) {
&gt; +        HeapCell* cell = reinterpret_cast_ptr&lt;HeapCell*&gt;(atomAt(i));
&gt; +
&gt; +        if (destructionMode != BlockHasNoDestructors)
&gt; +            destroy(cell);
&gt; +
&gt; +        if (sweepMode == SweepToFreeList) {
&gt; +            if (scribbleMode == Scribble)
&gt; +                scribble(cell, cellSize);
&gt; +            ++count;
&gt; +        }
&gt; +    };

It&apos;d be a lot easier to read if this just were inline where you used it.

Anyways, you check destructionMode twice</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663802</commentid>
    <comment_count>14</comment_count>
      <attachid>402164</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-06-17 22:31:34 -0700</bug_when>
    <thetext>Comment on attachment 402164
proposed patch.

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

&gt; Source/JavaScriptCore/ChangeLog:12
&gt; +            2 loads - m_currentRowBitmap, m_currentMarkedBlockRowAddress

on arm64 we can should turn this into a single loadpair</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1663812</commentid>
    <comment_count>15</comment_count>
      <attachid>402164</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2020-06-17 23:50:33 -0700</bug_when>
    <thetext>Comment on attachment 402164
proposed patch.

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:12
&gt;&gt; +            2 loads - m_currentRowBitmap, m_currentMarkedBlockRowAddress
&gt; 
&gt; on arm64 we can should turn this into a single loadpair

I can experiment with this to see if it&apos;s worth it.  It impacts the layout of the fields.  I think our cache line should be large enough that it doesn&apos;t matter, but I&apos;ll need to test it to be sure.

&gt;&gt; Source/JavaScriptCore/ChangeLog:87
&gt;&gt; +           m_currentRowIndex to point to the current row we&apos;re allocating from.
&gt; 
&gt; I think it&apos;d be faster if m_currentRowIndex were instead a bitmap itself telling you the next row to allocate out of was. Might matter for blocks with larger cell sizes.

This is an intriguing idea.  I&apos;ll give it a try.

&gt;&gt; Source/JavaScriptCore/heap/FreeList.cpp:137
&gt;&gt; +        return m_currentRowBitmap &amp; (one &lt;&lt; atomIndexInRow);
&gt; 
&gt; using the constant 1 is more readable imo

It is necessary to use &quot;one&quot; here because the alternative would be to use static_cast&lt;AtomsBitmap::Word&gt;(1).  It is incorrect to just use literal 1 because literal 1 is of type int, and this shift will never produce a 64-bit value if we use that (which has been a source of bugs).  We don&apos;t use 1ull either because technically, AtomsBitmap::Word can be 32-bits eventually if 32-bit ports adopts BITMAP_FREELIST.  Using &quot;one&quot; is the portable and always correct solution here.

&gt;&gt; Source/JavaScriptCore/heap/MarkedBlockInlines.h:322
&gt;&gt; +    };
&gt; 
&gt; It&apos;d be a lot easier to read if this just were inline where you used it.
&gt; 
&gt; Anyways, you check destructionMode twice

This is a carry over from the linked list implementation that calls handleDeadCell in 2 places.  For the bitmap implementation, we only need to call it in one place.  I&apos;ll move it to the call site.

As for the redundant destructionMode check, you found a bug!  handleDeadCell should be called unconditionally.  The bug here is that:
1. we won&apos;t scribble dead cells if the cell does not have a destructor.
2. we won&apos;t count the dead cell.  This results in FreeList::originalSize() always returning 0, which leads to a 0 being wrongly reported to Heap::didAllocate().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678957</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-08-09 02:07:00 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 215312</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401630</attachid>
            <date>2020-06-11 02:20:26 -0700</date>
            <delta_ts>2020-06-11 02:29:33 -0700</delta_ts>
            <desc>work in progress.</desc>
            <filename>bug-213071.patch</filename>
            <type>text/plain</type>
            <size>34097</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJ
KHJldmlzaW9uIDI2Mjg4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwNTEsNyArMTUwNTEsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzKys7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3RlcldpdGhD
bG9iYmVyKGFsbG9jYXRvcik7Ci0gICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lz
dGVycysrOworICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgKz0gMjsK
ICAgICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludHMgPSB7IFZhbHVlUmVwOjpTb21l
RWFybHlSZWdpc3RlciB9OwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kU3VjY2Vzc29y
KHVzdWFsbHkoY29udGludWF0aW9uKSk7CkBAIC0xNTA2NCw3ICsxNTA2NCw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgR1BSUmVnIGFsbG9jYXRvckdQUjsK
ICAgICAgICAgICAgICAgICBpZiAoYWN0dWFsQWxsb2NhdG9yLmlzQ29uc3RhbnQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgYWxsb2NhdG9yR1BSID0gcGFyYW1zLmdwU2NyYXRjaCgxKTsKKyAgICAg
ICAgICAgICAgICAgICAgYWxsb2NhdG9yR1BSID0gcGFyYW1zLmdwU2NyYXRjaCgyKTsKICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRvckdQUiA9IHBhcmFt
c1sxXS5ncHIoKTsKICAgICAgICAgICAgICAgICAKQEAgLTE1MDc2LDcgKzE1MDc2LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAvLyBhbGwgb2YgdGhlIGNvbXBpbGVyIHRpZXJzLgogICAg
ICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcigKICAgICAg
ICAgICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpLCBhY3R1YWxBbGxvY2F0b3IsIGFsbG9jYXRv
ckdQUiwgcGFyYW1zLmdwU2NyYXRjaCgwKSwKLSAgICAgICAgICAgICAgICAgICAganVtcFRvU2xv
d1BhdGgpOworICAgICAgICAgICAgICAgICAgICBqdW1wVG9TbG93UGF0aCwgcGFyYW1zLmdwU2Ny
YXRjaCgxKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIGp1bXBUb1N1Y2Nlc3M7CiAgICAgICAgICAgICAgICAgaWYgKCFwYXJhbXMuZmFsbHNU
aHJvdWdoVG9TdWNjZXNzb3IoMCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9G
cmVlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJl
ZUxpc3QuY3BwCShyZXZpc2lvbiAyNjI4ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9GcmVlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSwxMyArMzksNDcgQEAgRnJlZUxp
c3Q6On5GcmVlTGlzdCgpCiAKIHZvaWQgRnJlZUxpc3Q6OmNsZWFyKCkKIHsKKyNpZiBFTkFCTEUo
QklUTUFQX0ZSRUVMSVNUKQorICAgIG1fY3VycmVudFJvd0JpdG1hcCA9IDA7CisgICAgbV9jdXJy
ZW50Um93SW5kZXggPSAwOworI2Vsc2UKICAgICBtX3NjcmFtYmxlZEhlYWQgPSAwOwogICAgIG1f
c2VjcmV0ID0gMDsKKyNlbmRpZgogICAgIG1fcGF5bG9hZEVuZCA9IG51bGxwdHI7CiAgICAgbV9y
ZW1haW5pbmcgPSAwOwogICAgIG1fb3JpZ2luYWxTaXplID0gMDsKIH0KIAorI2lmIEVOQUJMRShC
SVRNQVBfRlJFRUxJU1QpCisKK3ZvaWQgRnJlZUxpc3Q6OmluaXRpYWxpemVBdG9tc0JpdG1hcChN
YXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaywgQXRvbXNCaXRtYXAmIGZyZWVBdG9tcykKK3sKKyNp
ZiBBU1NFUlRfRU5BQkxFRAorICAgIG1fbWFya2VkQmxvY2sgPSBibG9jazsKKyNlbmRpZgorICAg
IEFTU0VSVF9VTlVTRUQoZnJlZUF0b21zLCAmZnJlZUF0b21zID09ICZtX2JpdG1hcCk7CisKKyAg
ICBtX2N1cnJlbnRSb3dCaXRtYXAgPSAwOworICAgIHNpemVfdCB3b3JkSW5kZXggPSBBdG9tc0Jp
dG1hcDo6bnVtYmVyT2ZXb3JkczsKKyAgICB3aGlsZSAod29yZEluZGV4LS0pIHsKKyAgICAgICAg
YXV0byB3b3JkID0gbV9iaXRtYXAud29yZEF0KHdvcmRJbmRleCk7CisgICAgICAgIGlmICh3b3Jk
KSB7CisgICAgICAgICAgICBtX2N1cnJlbnRSb3dCaXRtYXAgPSB3b3JkOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKG1fY3VycmVudFJvd0JpdG1hcCB8
fCBtX2JpdG1hcC5pc0VtcHR5KCkpOworICAgIC8vIFNpbmNlIG1fY3VycmVudFJvd0luZGV4IGlz
IGluIGJhc2UgMSwgdGhpcyBwb2ludHMgdG8gdGhlIG5leHQgd29yZCwgbm90IHRoZSBjdXJyZW50
LgorICAgIG1fY3VycmVudFJvd0luZGV4ID0gbV9jdXJyZW50Um93Qml0bWFwID8gd29yZEluZGV4
IDogMDsKKworICAgIHNpemVfdCByb3dTdGFydCA9IG1fY3VycmVudFJvd0luZGV4ICogYXRvbXNQ
ZXJSb3c7CisgICAgbV9jdXJyZW50Um93QWRkcmVzcyA9IGJpdHdpc2VfY2FzdDxBdG9tKj4oYmxv
Y2stPmF0b21BdChyb3dTdGFydCkpOworfQorCisjZWxzZQorLy8gTGlua2VkIExpc3QgaW1wbGVt
ZW50YXRpb24uCisKIHZvaWQgRnJlZUxpc3Q6OmluaXRpYWxpemVMaXN0KEZyZWVDZWxsKiBoZWFk
LCB1aW50cHRyX3Qgc2VjcmV0LCB1bnNpZ25lZCBieXRlcykKIHsKICAgICAvLyBJdCdzICpzbGln
aHRseSogbW9yZSBvcHRpbWFsIHRvIHVzZSBhIHNjcmFtYmxlZCBoZWFkLiBJdCBzYXZlcyBhIHJl
Z2lzdGVyIG9uIHRoZSBmYXN0IHBhdGguCkBAIC01NiwxNiArOTAsMjMgQEAgdm9pZCBGcmVlTGlz
dDo6aW5pdGlhbGl6ZUxpc3QoRnJlZUNlbGwqIAogICAgIG1fb3JpZ2luYWxTaXplID0gYnl0ZXM7
CiB9CiAKKyNlbmRpZiAvLyBFTkFCTEUoQklUTUFQX0ZSRUVMSVNUKQorCiB2b2lkIEZyZWVMaXN0
Ojppbml0aWFsaXplQnVtcChjaGFyKiBwYXlsb2FkRW5kLCB1bnNpZ25lZCByZW1haW5pbmcpCiB7
CisjaWYgRU5BQkxFKEJJVE1BUF9GUkVFTElTVCkKKyAgICBtX2N1cnJlbnRSb3dCaXRtYXAgPSAw
OworICAgIG1fY3VycmVudFJvd0luZGV4ID0gMDsKKyNlbHNlCiAgICAgbV9zY3JhbWJsZWRIZWFk
ID0gMDsKICAgICBtX3NlY3JldCA9IDA7CisjZW5kaWYKICAgICBtX3BheWxvYWRFbmQgPSBwYXls
b2FkRW5kOwogICAgIG1fcmVtYWluaW5nID0gcmVtYWluaW5nOwogICAgIG1fb3JpZ2luYWxTaXpl
ID0gcmVtYWluaW5nOwogfQogCi1ib29sIEZyZWVMaXN0Ojpjb250YWlucyhIZWFwQ2VsbCogdGFy
Z2V0KSBjb25zdAorYm9vbCBGcmVlTGlzdDo6Y29udGFpbnMxKEhlYXBDZWxsKiB0YXJnZXQsIE1h
cmtlZEJsb2NrOjpIYW5kbGUqIGN1cnJlbnRCbG9jaykgY29uc3QKIHsKICAgICBpZiAobV9yZW1h
aW5pbmcpIHsKICAgICAgICAgY29uc3Qgdm9pZCogc3RhcnQgPSAobV9wYXlsb2FkRW5kIC0gbV9y
ZW1haW5pbmcpOwpAQCAtNzMsMTkgKzExNCw1MiBAQCBib29sIEZyZWVMaXN0Ojpjb250YWlucyhI
ZWFwQ2VsbCogdGFyZ2V0CiAgICAgICAgIHJldHVybiAoc3RhcnQgPD0gdGFyZ2V0KSAmJiAodGFy
Z2V0IDwgZW5kKTsKICAgICB9CiAKKyNpZiBFTkFCTEUoQklUTUFQX0ZSRUVMSVNUKQorICAgIEFT
U0VSVChtX21hcmtlZEJsb2NrID09IGN1cnJlbnRCbG9jayk7CisgICAgaWYgKCFtX2N1cnJlbnRS
b3dJbmRleCAmJiAhbV9jdXJyZW50Um93Qml0bWFwKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKCFjdXJyZW50QmxvY2stPmNvbnRhaW5zKHRhcmdldCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB1bnNpZ25lZCBhdG9tTnVtYmVyID0gY3VycmVudEJsb2NrLT5ibG9jaygpLmF0
b21OdW1iZXIodGFyZ2V0KTsKKyAgICBBU1NFUlQoY3VycmVudEJsb2NrLT5hdG9tQXQoYXRvbU51
bWJlcikgPT0gYml0d2lzZV9jYXN0PHZvaWQqPih0YXJnZXQpKTsKKworICAgIHVuc2lnbmVkIHJv
d0luZGV4ID0gYXRvbU51bWJlciAvIGF0b21zUGVyUm93OworICAgIC8vIFdlIGFsbG9jYXRlIGZy
b20gaGlnaCB0byBsb3cuIEhlbmNlLCBhbnkgcm93cyBhYm92ZSB0aGUgY3VycmVudCByb3cgbXVz
dAorICAgIC8vIGhhdmUgYWxsIGJlZW4gZnVsbHkgYWxsb2NhdGVkIGZyb20uCisKKyAgICAvLyBt
bGFtIEZJWE1FOiBwdXQgdGhpcyBjb21tZW50IHNvbWV3aGVyZSBpbiB0aGUgaGVhZGVyIGZpbGUu
CisgICAgLy8gTm90ZTogdGhlIG1fY3VycmVudFJvd0JpdG1hcCBpcyBzb3VyY2Ugb2YgdHJ1dGgg
cmVnYXJkaW5nIHdoaWNoIGF0b20gaW4KKyAgICAvLyB0aGUgcm93IGlzIGZyZWUgb3Igbm90LiBX
aGVuIHRoZSBjdXJyZW50IHJvdyBoYXMgYmVlbiBmaWxsZWQgdXAsIHdlIGRvbid0CisgICAgLy8g
Ym90aGVyIGNsZWFyaW5nIHRoZSByb3cgaW4gdGhlIGJpdG1hcC4gSGVuY2UsIHdlIGNhbid0IHJl
bHkgb24gdGhlIGJpdG1hcAorICAgIC8vIGFsb25lIGZvciB0aGUgc291cmNlIG9mIHRydXRoLgor
ICAgIGlmIChyb3dJbmRleCA+IG1fY3VycmVudFJvd0luZGV4KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgaWYgKHJvd0luZGV4ID09IG1fY3VycmVudFJvd0luZGV4KSB7CisgICAgICAgIGNv
bnN0ZXhwciBBdG9tc0JpdG1hcDo6V29yZCBvbmUgPSAxOworICAgICAgICB1bnNpZ25lZCBhdG9t
SW5kZXhJbldvcmQgPSBhdG9tTnVtYmVyICUgYXRvbXNQZXJSb3c7CisgICAgICAgIHJldHVybiBt
X2N1cnJlbnRSb3dCaXRtYXAgJiAob25lIDw8IGF0b21JbmRleEluV29yZCk7CisgICAgfQorICAg
IHJldHVybiBtX2JpdG1hcC5nZXQoYXRvbU51bWJlcik7CisKKyNlbHNlCisgICAgQVNTRVJUX1VO
VVNFRChjdXJyZW50QmxvY2spOwogICAgIEZyZWVDZWxsKiBjYW5kaWRhdGUgPSBoZWFkKCk7CiAg
ICAgd2hpbGUgKGNhbmRpZGF0ZSkgewogICAgICAgICBpZiAoYml0d2lzZV9jYXN0PEhlYXBDZWxs
Kj4oY2FuZGlkYXRlKSA9PSB0YXJnZXQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgY2FuZGlkYXRlID0gY2FuZGlkYXRlLT5uZXh0KG1fc2VjcmV0KTsKICAgICB9Ci0KICAgICBy
ZXR1cm4gZmFsc2U7CisjZW5kaWYKIH0KIAogdm9pZCBGcmVlTGlzdDo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAogeworI2lmIEVOQUJMRShCSVRNQVBfRlJFRUxJU1QpCisgICAgb3V0LnBy
aW50KCJ7Y3VycmVudFJvd0JpdG1wID0gIiwgbV9jdXJyZW50Um93Qml0bWFwLCAiLCBjdXJyZW50
Um93SW5kZXggPSAiLCBtX2N1cnJlbnRSb3dJbmRleCwgIiwgcGF5bG9hZEVuZCA9ICIsIFJhd1Bv
aW50ZXIobV9wYXlsb2FkRW5kKSwgIiwgcmVtYWluaW5nID0gIiwgbV9yZW1haW5pbmcsICIsIG9y
aWdpbmFsU2l6ZSA9ICIsIG1fb3JpZ2luYWxTaXplLCAifSIpOworI2Vsc2UKICAgICBvdXQucHJp
bnQoIntoZWFkID0gIiwgUmF3UG9pbnRlcihoZWFkKCkpLCAiLCBzZWNyZXQgPSAiLCBtX3NlY3Jl
dCwgIiwgcGF5bG9hZEVuZCA9ICIsIFJhd1BvaW50ZXIobV9wYXlsb2FkRW5kKSwgIiwgcmVtYWlu
aW5nID0gIiwgbV9yZW1haW5pbmcsICIsIG9yaWdpbmFsU2l6ZSA9ICIsIG1fb3JpZ2luYWxTaXpl
LCAifSIpOworI2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9GcmVlTGlzdC5oCShyZXZpc2lvbiAyNjI4ODgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUsMTMgKzI1
LDIyIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKICNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKyNp
bmNsdWRlIDx3dGYvU3RkSW50RXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBI
ZWFwQ2VsbDsKIAorI2lmIENQVShBUk02NCkgfHwgQ1BVKFg4Nl82NCkKKyNkZWZpbmUgRU5BQkxF
X0JJVE1BUF9GUkVFTElTVCAxCisjZWxzZQorI2RlZmluZSBFTkFCTEVfQklUTUFQX0ZSRUVMSVNU
IDAKKyNlbmRpZgorCisjaWYgIUVOQUJMRShCSVRNQVBfRlJFRUxJU1QpCiBzdHJ1Y3QgRnJlZUNl
bGwgewogICAgIHN0YXRpYyB1aW50cHRyX3Qgc2NyYW1ibGUoRnJlZUNlbGwqIGNlbGwsIHVpbnRw
dHJfdCBzZWNyZXQpCiAgICAgewpAQCAtNTgsNiArNjcsNyBAQCBzdHJ1Y3QgRnJlZUNlbGwgewog
ICAgIHVpbnQ2NF90IHByZXNlcnZlZEJpdHNGb3JDcmFzaEFuYWx5c2lzOwogICAgIHVpbnRwdHJf
dCBzY3JhbWJsZWROZXh0OwogfTsKKyNlbmRpZgogCiBjbGFzcyBGcmVlTGlzdCB7CiBwdWJsaWM6
CkBAIC02NiwyNCArNzYsNDIgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgY2xlYXIoKTsKICAg
ICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVMaXN0KEZyZWVDZWxsKiBo
ZWFkLCB1aW50cHRyX3Qgc2VjcmV0LCB1bnNpZ25lZCBieXRlcyk7CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBpbml0aWFsaXplQnVtcChjaGFyKiBwYXlsb2FkRW5kLCB1bnNpZ25lZCByZW1h
aW5pbmcpOwogICAgIAotICAgIGJvb2wgYWxsb2NhdGlvbldpbGxGYWlsKCkgY29uc3QgeyByZXR1
cm4gIWhlYWQoKSAmJiAhbV9yZW1haW5pbmc7IH0KICAgICBib29sIGFsbG9jYXRpb25XaWxsU3Vj
Y2VlZCgpIGNvbnN0IHsgcmV0dXJuICFhbGxvY2F0aW9uV2lsbEZhaWwoKTsgfQogICAgIAogICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgSGVhcENlbGwqIGFsbG9jYXRlKGNvbnN0IEZ1
bmMmIHNsb3dQYXRoKTsKICAgICAKLSAgICBib29sIGNvbnRhaW5zKEhlYXBDZWxsKikgY29uc3Q7
CisgICAgYm9vbCBjb250YWluczEoSGVhcENlbGwqLCBNYXJrZWRCbG9jazo6SGFuZGxlKiBjdXJy
ZW50QmxvY2spIGNvbnN0OwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAg
dm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmMmKSBjb25zdDsKKyAgICB2b2lkIGZvckVhY2gxKGNvbnN0
IEZ1bmMmKSBjb25zdDsKICAgICAKICAgICB1bnNpZ25lZCBvcmlnaW5hbFNpemUoKSBjb25zdCB7
IHJldHVybiBtX29yaWdpbmFsU2l6ZTsgfQogCisjaWYgRU5BQkxFKEJJVE1BUF9GUkVFTElTVCkK
KyAgICB1c2luZyBBdG9tID0gTWFya2VkQmxvY2s6OkF0b207CisgICAgdXNpbmcgQXRvbXNCaXRt
YXAgPSBNYXJrZWRCbG9jazo6QXRvbXNCaXRtYXA7CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2
b2lkIGluaXRpYWxpemVBdG9tc0JpdG1hcChNYXJrZWRCbG9jazo6SGFuZGxlKiwgQXRvbXNCaXRt
YXAmIGZyZWVBdG9tcyk7CisKKyAgICBib29sIGFsbG9jYXRpb25XaWxsRmFpbCgpIGNvbnN0IHsg
cmV0dXJuICFtX2N1cnJlbnRSb3dCaXRtYXAgJiYgIW1fY3VycmVudFJvd0luZGV4ICYmICFtX3Jl
bWFpbmluZzsgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkN1cnJlbnRSb3dCaXRt
YXAoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3QsIG1fY3VycmVudFJvd0JpdG1h
cCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQml0bWFwUm93cygpIHsgcmV0dXJu
IE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgbV9iaXRtYXApIC0gc2l6ZW9mKEF0b21zQml0bWFw
OjpXb3JkKTsgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkN1cnJlbnRSb3dJbmRl
eCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgbV9jdXJyZW50Um93SW5kZXgp
OyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkN1cnJlbnRSb3dBZGRyZXNzKCkgeyBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBtX2N1cnJlbnRSb3dBZGRyZXNzKTsgfQor
I2Vsc2UKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVMaXN0KEZyZWVDZWxs
KiBoZWFkLCB1aW50cHRyX3Qgc2VjcmV0LCB1bnNpZ25lZCBieXRlcyk7CisKKyAgICBib29sIGFs
bG9jYXRpb25XaWxsRmFpbCgpIGNvbnN0IHsgcmV0dXJuICFoZWFkKCkgJiYgIW1fcmVtYWluaW5n
OyB9CisKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2NyYW1ibGVkSGVhZCgpIHsgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgbV9zY3JhbWJsZWRIZWFkKTsgfQogICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTZWNyZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0Yo
RnJlZUxpc3QsIG1fc2VjcmV0KTsgfQorI2VuZGlmCisKICAgICBzdGF0aWMgcHRyZGlmZl90IG9m
ZnNldE9mUGF5bG9hZEVuZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgbV9w
YXlsb2FkRW5kKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZSZW1haW5pbmcoKSB7
IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3QsIG1fcmVtYWluaW5nKTsgfQogICAgIHN0
YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZPcmlnaW5hbFNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoRnJlZUxpc3QsIG1fb3JpZ2luYWxTaXplKTsgfQpAQCAtOTMsMTUgKzEyMSw0NiBAQCBw
dWJsaWM6CiAKICAgICB1bnNpZ25lZCBjZWxsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2VsbFNp
emU7IH0KICAgICAKKyNpZiBFTkFCTEUoQklUTUFQX0ZSRUVMSVNUKQorICAgIHN0YXRpYyBjb25z
dGV4cHIgc2l6ZV90IGF0b21zUGVyUm93ID0gQXRvbXNCaXRtYXA6OmJpdHNJbldvcmQ7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBzaXplX3QgYXRvbXNSb3dCeXRlcyA9IGF0b21zUGVyUm93ICogc2l6
ZW9mKEF0b20pOworCisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBhdG9tU2l6ZVNoaWZ0
ID0gV1RGOjpsb2cyKHNpemVvZihBdG9tKSk7CisgICAgc3RhdGljX2Fzc2VydCgoc3RhdGljX2Nh
c3Q8c2l6ZV90PigxKSA8PCBhdG9tU2l6ZVNoaWZ0KSA9PSBzaXplb2YoQXRvbSkpOworI2VuZGlm
CisKIHByaXZhdGU6CisjaWYgRU5BQkxFKEJJVE1BUF9GUkVFTElTVCkKKyAgICBBdG9tc0JpdG1h
cCYgYXRvbXNCaXRtYXAoKSB7IHJldHVybiBtX2JpdG1hcDsgfQorICAgIEF0b21zQml0bWFwOjpX
b3JkKiBiaXRtYXBSb3dzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8QXRvbXNCaXRtYXA6OldvcmQqPigmbV9iaXRtYXApIC0gMTsKKyAgICB9CisKKyNlbHNlCiAg
ICAgRnJlZUNlbGwqIGhlYWQoKSBjb25zdCB7IHJldHVybiBGcmVlQ2VsbDo6ZGVzY3JhbWJsZSht
X3NjcmFtYmxlZEhlYWQsIG1fc2VjcmV0KTsgfQotICAgIAotICAgIHVpbnRwdHJfdCBtX3NjcmFt
YmxlZEhlYWQgeyAwIH07Ci0gICAgdWludHB0cl90IG1fc2VjcmV0IHsgMCB9OworI2VuZGlmCisK
ICAgICBjaGFyKiBtX3BheWxvYWRFbmQgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV9jZWxs
U2l6ZSB7IDAgfTsKICAgICB1bnNpZ25lZCBtX3JlbWFpbmluZyB7IDAgfTsKICAgICB1bnNpZ25l
ZCBtX29yaWdpbmFsU2l6ZSB7IDAgfTsKLSAgICB1bnNpZ25lZCBtX2NlbGxTaXplIHsgMCB9Owor
CisjaWYgRU5BQkxFKEJJVE1BUF9GUkVFTElTVCkKKyAgICB1bnNpZ25lZCBtX2N1cnJlbnRSb3dJ
bmRleCB7IDAgfTsKKyAgICBBdG9tc0JpdG1hcDo6V29yZCBtX2N1cnJlbnRSb3dCaXRtYXAgeyAw
IH07CisgICAgQXRvbSogbV9jdXJyZW50Um93QWRkcmVzcyB7IG51bGxwdHIgfTsKKyAgICBBdG9t
c0JpdG1hcCBtX2JpdG1hcDsKKyNlbHNlCisgICAgdWludHB0cl90IG1fc2NyYW1ibGVkSGVhZCB7
IDAgfTsKKyAgICB1aW50cHRyX3QgbV9zZWNyZXQgeyAwIH07CisjZW5kaWYKKworI2lmIEFTU0VS
VF9FTkFCTEVECisgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogbV9tYXJrZWRCbG9jayB7IG51bGxw
dHIgfTsKKyNlbmRpZgorCisgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJsb2NrOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlz
dElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVl
TGlzdElubGluZXMuaAkocmV2aXNpb24gMjYyODg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvRnJlZUxpc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAxNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNyArMjYsNyBAQAogI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJGcmVlTGlzdC5oIgotI2luY2x1ZGUgIk1hcmtlZEJsb2Nr
LmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAg
LTQwLDIyICs0MCw3NSBAQCBBTFdBWVNfSU5MSU5FIEhlYXBDZWxsKiBGcmVlTGlzdDo6YWxsb2Nh
CiAgICAgICAgIG1fcmVtYWluaW5nID0gcmVtYWluaW5nOwogICAgICAgICByZXR1cm4gYml0d2lz
ZV9jYXN0PEhlYXBDZWxsKj4obV9wYXlsb2FkRW5kIC0gcmVtYWluaW5nIC0gY2VsbFNpemUpOwog
ICAgIH0KLSAgICAKKworI2lmIEVOQUJMRShCSVRNQVBfRlJFRUxJU1QpCisgICAgQXRvbXNCaXRt
YXA6OldvcmQgcm93Qml0bWFwID0gbV9jdXJyZW50Um93Qml0bWFwOworICAgIGRvIHsKKyAgICAg
ICAgaWYgKHJvd0JpdG1hcCkgeworICAgICAgICAgICAgY29uc3RleHByIEF0b21zQml0bWFwOjpX
b3JkIG9uZSA9IDE7CisgICAgICAgICAgICB1bnNpZ25lZCBhdG9tSW5kZXhJblJvdyA9IGN0eihy
b3dCaXRtYXApOworICAgICAgICAgICAgYXV0byogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2Vs
bCo+KCZtX2N1cnJlbnRSb3dBZGRyZXNzW2F0b21JbmRleEluUm93XSk7CisgICAgICAgICAgICBy
b3dCaXRtYXAgJj0gfihvbmUgPDwgYXRvbUluZGV4SW5Sb3cpOworICAgICAgICAgICAgbV9jdXJy
ZW50Um93Qml0bWFwID0gcm93Qml0bWFwOworICAgICAgICAgICAgcmV0dXJuIGNlbGw7CisgICAg
ICAgIH0KKworICAgICAgICB1bnNpZ25lZCByb3dJbmRleCA9IG1fY3VycmVudFJvd0luZGV4Owor
ICAgICAgICB3aGlsZSAocm93SW5kZXgpIHsKKyAgICAgICAgICAgIHJvd0JpdG1hcCA9IGJpdG1h
cFJvd3MoKVtyb3dJbmRleC0tXTsKKyAgICAgICAgICAgIG1fY3VycmVudFJvd0FkZHJlc3MgLT0g
YXRvbXNQZXJSb3c7CisgICAgICAgICAgICBpZiAocm93Qml0bWFwKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgICAgIG1fY3VycmVudFJvd0luZGV4ID0gcm93SW5kZXg7
CisgICAgfSB3aGlsZSAocm93Qml0bWFwKTsKKworICAgIG1fY3VycmVudFJvd0JpdG1hcCA9IHJv
d0JpdG1hcDsKKyAgICBBU1NFUlQoIW1fY3VycmVudFJvd0JpdG1hcCk7CisgICAgQVNTRVJUKCFt
X2N1cnJlbnRSb3dJbmRleCk7CisgICAgcmV0dXJuIHNsb3dQYXRoKCk7CisKKyNlbHNlIC8vICFF
TkFCTEUoQklUTUFQX0ZSRUVMSVNUKQogICAgIEZyZWVDZWxsKiByZXN1bHQgPSBoZWFkKCk7CiAg
ICAgaWYgKFVOTElLRUxZKCFyZXN1bHQpKQogICAgICAgICByZXR1cm4gc2xvd1BhdGgoKTsKICAg
ICAKICAgICBtX3NjcmFtYmxlZEhlYWQgPSByZXN1bHQtPnNjcmFtYmxlZE5leHQ7CiAgICAgcmV0
dXJuIGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHJlc3VsdCk7CisjZW5kaWYgLy8gIUVOQUJMRShC
SVRNQVBfRlJFRUxJU1QpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci12b2lkIEZyZWVM
aXN0Ojpmb3JFYWNoKGNvbnN0IEZ1bmMmIGZ1bmMpIGNvbnN0Cit2b2lkIEZyZWVMaXN0Ojpmb3JF
YWNoMShjb25zdCBGdW5jJiBmdW5jKSBjb25zdAogewogICAgIGlmIChtX3JlbWFpbmluZykgewog
ICAgICAgICBmb3IgKHVuc2lnbmVkIHJlbWFpbmluZyA9IG1fcmVtYWluaW5nOyByZW1haW5pbmc7
IHJlbWFpbmluZyAtPSBtX2NlbGxTaXplKQogICAgICAgICAgICAgZnVuYyhiaXR3aXNlX2Nhc3Q8
SGVhcENlbGwqPihtX3BheWxvYWRFbmQgLSByZW1haW5pbmcpKTsKICAgICB9IGVsc2UgeworI2lm
IEVOQUJMRShCSVRNQVBfRlJFRUxJU1QpCisgICAgICAgIGlmICghbV9jdXJyZW50Um93Qml0bWFw
ICYmICFtX2N1cnJlbnRSb3dJbmRleCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBB
dG9tc0JpdG1hcDo6V29yZCByb3dCaXRtYXAgPSBtX2N1cnJlbnRSb3dCaXRtYXA7CisgICAgICAg
IHVuc2lnbmVkIHJvd0luZGV4ID0gbV9jdXJyZW50Um93SW5kZXg7CisgICAgICAgIEF0b20qIGN1
cnJlbnRSb3dTdGFydEF0b20gPSBtX2N1cnJlbnRSb3dBZGRyZXNzOworICAgICAgICBkbyB7Cisg
ICAgICAgICAgICB3aGlsZSAocm93Qml0bWFwKSB7CisgICAgICAgICAgICAgICAgY29uc3RleHBy
IEF0b21zQml0bWFwOjpXb3JkIG9uZSA9IDE7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgYml0
SW5kZXhJblJvd01hcCA9IGN0eihyb3dCaXRtYXApOworICAgICAgICAgICAgICAgIGF1dG8qIGNl
bGwgPSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPigmY3VycmVudFJvd1N0YXJ0QXRvbVtiaXRJbmRl
eEluUm93TWFwXSk7CisgICAgICAgICAgICAgICAgcm93Qml0bWFwICY9IH4ob25lIDw8IGJpdElu
ZGV4SW5Sb3dNYXApOworICAgICAgICAgICAgICAgIGZ1bmMoY2VsbCk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHdoaWxlIChyb3dCaXRtYXApIHsKKyAgICAgICAgICAgICAgICByb3dC
aXRtYXAgPSBiaXRtYXBSb3dzKClbcm93SW5kZXgtLV07CisgICAgICAgICAgICAgICAgY3VycmVu
dFJvd1N0YXJ0QXRvbSAtPSBhdG9tc1BlclJvdzsKKyAgICAgICAgICAgICAgICBpZiAocm93Qml0
bWFwKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSB3aGlsZSAocm93Qml0bWFwKTsKKyNlbHNlCiAgICAgICAgIGZvciAoRnJlZUNlbGwqIGNlbGwg
PSBoZWFkKCk7IGNlbGw7KSB7CiAgICAgICAgICAgICAvLyBXZSBjYW4gdXNlIHRoaXMgdG8gb3Zl
cndyaXRlIGZyZWUgb2JqZWN0cyBiZWZvcmUgZGVzdHJveWluZyB0aGUgZnJlZSBsaXN0LiBTbywg
d2UgbmVlZAogICAgICAgICAgICAgLy8gdG8gZ2V0IG5leHQgYmVmb3JlIHByb2NlZWRpbmcgZnVy
dGhlci4KQEAgLTYzLDggKzExNiw4IEBAIHZvaWQgRnJlZUxpc3Q6OmZvckVhY2goY29uc3QgRnVu
YyYgZnVuYykKICAgICAgICAgICAgIGZ1bmMoYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4oY2VsbCkp
OwogICAgICAgICAgICAgY2VsbCA9IG5leHQ7CiAgICAgICAgIH0KKyNlbmRpZgogICAgIH0KIH0K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0xvY2FsQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDI2Mjg4OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTgtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3
Miw3ICsyNzIsNyBAQCBib29sIExvY2FsQWxsb2NhdG9yOjppc0ZyZWVMaXN0ZWRDZWxsKGNvCiAg
ICAgLy8gaWYgd2Uga25vdyB0aGF0IHRoZSBibG9jayBvd25pbmcgdGhlIG9iamVjdCBpcyBmcmVl
LWxpc3RlZCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGFueQogICAgIC8vIG9iamVjdHMgdG8g
YmUgaW4gdGhlIGRlYWQtYnV0LW5vdC1kZXN0cnVjdGVkIHN0YXRlLgogICAgIC8vIEZJWE1FOiBH
ZXQgcmlkIG9mIHRoaXMgYWJvbWluYXRpb24uIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xODE2NTUKLSAgICByZXR1cm4gbV9mcmVlTGlzdC5jb250YWlucyhiaXR3aXNl
X2Nhc3Q8SGVhcENlbGwqPih0YXJnZXQpKTsKKyAgICByZXR1cm4gbV9mcmVlTGlzdC5jb250YWlu
czEoYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4odGFyZ2V0KSwgbV9jdXJyZW50QmxvY2spOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01h
cmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDI2Mjg4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ1LDcgKzE0NSw3IEBA
IHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcKICAgICAgICAgICAgIHJl
dHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwogICAgICAgICB9KTsKIAotICAgIGZyZWVM
aXN0LmZvckVhY2goCisgICAgZnJlZUxpc3QuZm9yRWFjaDEoCiAgICAgICAgIFsmXSAoSGVhcENl
bGwqIGNlbGwpIHsKICAgICAgICAgICAgIGlmIChNYXJrZWRCbG9ja0ludGVybmFsOjp2ZXJib3Nl
KQogICAgICAgICAgICAgICAgIGRhdGFMb2coIkZyZWUgY2VsbDogIiwgUmF3UG9pbnRlcihjZWxs
KSwgIlxuIik7CkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpz
dG9wQWxsb2NhdGluZwogICAgICAgICAgICAgICAgIGNlbGwtPnphcChIZWFwQ2VsbDo6U3RvcEFs
bG9jYXRpbmcpOwogICAgICAgICAgICAgYmxvY2soKS5jbGVhck5ld2x5QWxsb2NhdGVkKGNlbGwp
OwogICAgICAgICB9KTsKLSAgICAKKwogICAgIG1faXNGcmVlTGlzdGVkID0gZmFsc2U7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24g
MjYyODg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIw
MDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDEg
UGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIw
MjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpA
QCAtODQsNiArODQsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljX2Fzc2VydCghKE1hcmtlZEJsb2Nr
OjphdG9tU2l6ZSAmIChNYXJrZWRCbG9jazo6YXRvbVNpemUgLSAxKSksICJNYXJrZWRCbG9jazo6
YXRvbVNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4iKTsKICAgICBzdGF0aWNfYXNzZXJ0KCEo
TWFya2VkQmxvY2s6OmJsb2NrU2l6ZSAmIChNYXJrZWRCbG9jazo6YmxvY2tTaXplIC0gMSkpLCAi
TWFya2VkQmxvY2s6OmJsb2NrU2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiIpOwogICAgIAor
ICAgIHVzaW5nIEF0b21zQml0bWFwID0gQml0bWFwPGF0b21zUGVyQmxvY2s+OworCiAgICAgc3Ry
dWN0IFZvaWRGdW5jdG9yIHsKICAgICAgICAgdHlwZWRlZiB2b2lkIFJldHVyblR5cGU7CiAgICAg
ICAgIHZvaWQgcmV0dXJuVmFsdWUoKSB7IH0KQEAgLTIwMyw2ICsyMDUsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIAogICAgICAgICB2b2lkKiBzdGFydCgpIGNvbnN0IHsgcmV0dXJuICZtX2Jsb2NrLT5h
dG9tcygpWzBdOyB9CiAgICAgICAgIHZvaWQqIGVuZCgpIGNvbnN0IHsgcmV0dXJuICZtX2Jsb2Nr
LT5hdG9tcygpW21fZW5kQXRvbV07IH0KKyAgICAgICAgdm9pZCogYXRvbUF0KHNpemVfdCBpKSBj
b25zdCB7IHJldHVybiAmbV9ibG9jay0+YXRvbXMoKVtpXTsgfQogICAgICAgICBib29sIGNvbnRh
aW5zKHZvaWQqIHApIGNvbnN0IHsgcmV0dXJuIHN0YXJ0KCkgPD0gcCAmJiBwIDwgZW5kKCk7IH0K
IAogICAgICAgICB2b2lkIGR1bXBTdGF0ZShQcmludFN0cmVhbSYpOwpAQCAtMjk0LDggKzI5Nyw4
IEBAIHB1YmxpYzoKICAgICAgICAgSGVhcFZlcnNpb24gbV9tYXJraW5nVmVyc2lvbjsKICAgICAg
ICAgSGVhcFZlcnNpb24gbV9uZXdseUFsbG9jYXRlZFZlcnNpb247CiAKLSAgICAgICAgQml0bWFw
PGF0b21zUGVyQmxvY2s+IG1fbWFya3M7Ci0gICAgICAgIEJpdG1hcDxhdG9tc1BlckJsb2NrPiBt
X25ld2x5QWxsb2NhdGVkOworICAgICAgICBBdG9tc0JpdG1hcCBtX21hcmtzOworICAgICAgICBB
dG9tc0JpdG1hcCBtX25ld2x5QWxsb2NhdGVkOwogICAgIH07CiAgICAgCiBwcml2YXRlOiAgICAK
QEAgLTMzNiw3ICszMzksNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc05ld2x5QWxsb2NhdGVkKGNv
bnN0IHZvaWQqKTsKICAgICB2b2lkIHNldE5ld2x5QWxsb2NhdGVkKGNvbnN0IHZvaWQqKTsKICAg
ICB2b2lkIGNsZWFyTmV3bHlBbGxvY2F0ZWQoY29uc3Qgdm9pZCopOwotICAgIGNvbnN0IEJpdG1h
cDxhdG9tc1BlckJsb2NrPiYgbmV3bHlBbGxvY2F0ZWQoKSBjb25zdDsKKyAgICBjb25zdCBBdG9t
c0JpdG1hcCYgbmV3bHlBbGxvY2F0ZWQoKSBjb25zdDsKICAgICAKICAgICBIZWFwVmVyc2lvbiBu
ZXdseUFsbG9jYXRlZFZlcnNpb24oKSBjb25zdCB7IHJldHVybiBmb290ZXIoKS5tX25ld2x5QWxs
b2NhdGVkVmVyc2lvbjsgfQogICAgIApAQCAtMzc0LDcgKzM3Nyw3IEBAIHB1YmxpYzoKICAgICBi
b29sIGlzTWFya2VkUmF3KGNvbnN0IHZvaWQqIHApOwogICAgIEhlYXBWZXJzaW9uIG1hcmtpbmdW
ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gZm9vdGVyKCkubV9tYXJraW5nVmVyc2lvbjsgfQogICAg
IAotICAgIGNvbnN0IEJpdG1hcDxhdG9tc1BlckJsb2NrPiYgbWFya3MoKSBjb25zdDsKKyAgICBj
b25zdCBBdG9tc0JpdG1hcCYgbWFya3MoKSBjb25zdDsKICAgICAKICAgICBDb3VudGluZ0xvY2sm
IGxvY2soKSB7IHJldHVybiBmb290ZXIoKS5tX2xvY2s7IH0KICAgICAKQEAgLTM5OSw2ICs0MDIs
OCBAQCBwcml2YXRlOgogICAgIAogICAgIGlubGluZSBib29sIG1hcmtzQ29udmV5TGl2ZW5lc3NE
dXJpbmdNYXJraW5nKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKICAgICBpbmxpbmUgYm9v
bCBtYXJrc0NvbnZleUxpdmVuZXNzRHVyaW5nTWFya2luZyhIZWFwVmVyc2lvbiBteU1hcmtpbmdW
ZXJzaW9uLCBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbik7CisKKyAgICBmcmllbmQgY2xhc3Mg
RnJlZUxpc3Q7CiB9OwogCiBpbmxpbmUgTWFya2VkQmxvY2s6OkZvb3RlciYgTWFya2VkQmxvY2s6
OmZvb3RlcigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRC
bG9ja0lubGluZXMuaAkocmV2aXNpb24gMjYyODg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwMyw5ICszMDMs
NjkgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZQogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCisjaWYgRU5BQkxFKEJJVE1BUF9GUkVFTElTVCkKKyAgICBBdG9tc0Jp
dG1hcCBsb2NhbEZyZWVBdG9tczsKKyAgICBBdG9tc0JpdG1hcCYgZnJlZUF0b21zID0gZnJlZUxp
c3QgPyBmcmVlTGlzdC0+YXRvbXNCaXRtYXAoKSA6IGxvY2FsRnJlZUF0b21zOworCisgICAgYXV0
byBoYW5kbGVEZWFkQ2VsbCA9IFsmXSAoc2l6ZV90IGkpIHsKKyAgICAgICAgSGVhcENlbGwqIGNl
bGwgPSByZWludGVycHJldF9jYXN0X3B0cjxIZWFwQ2VsbCo+KGF0b21BdChpKSk7CisKKyAgICAg
ICAgaWYgKGRlc3RydWN0aW9uTW9kZSAhPSBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMpCisgICAgICAg
ICAgICBkZXN0cm95KGNlbGwpOworCisgICAgICAgIGlmIChzd2VlcE1vZGUgPT0gU3dlZXBUb0Zy
ZWVMaXN0KSB7CisgICAgICAgICAgICBpZiAoc2NyaWJibGVNb2RlID09IFNjcmliYmxlKQorICAg
ICAgICAgICAgICAgIHNjcmliYmxlKGNlbGwsIGNlbGxTaXplKTsKKyAgICAgICAgfQorICAgIH07
CisKKyAgICBib29sIGlzRW1wdHkgPSB0cnVlOworCisgICAgQXRvbXNCaXRtYXAgY2VsbExvY2F0
aW9uczsKKyAgICBjZWxsTG9jYXRpb25zLnNldEVhY2hOdGhCaXQobV9hdG9tc1BlckNlbGwsIDAs
IG1fZW5kQXRvbSk7CisKKyAgICBpZiAoZW1wdHlNb2RlID09IE5vdEVtcHR5KSB7CisgICAgICAg
IGlmIChtYXJrc01vZGUgPT0gTWFya3NOb3RTdGFsZSkgeworICAgICAgICAgICAgZnJlZUF0b21z
ID0gZm9vdGVyLm1fbWFya3M7CisgICAgICAgICAgICBpZiAobmV3bHlBbGxvY2F0ZWRNb2RlID09
IEhhc05ld2x5QWxsb2NhdGVkKQorICAgICAgICAgICAgICAgIGZyZWVBdG9tcyB8PSBmb290ZXIu
bV9uZXdseUFsbG9jYXRlZDsKKyAgICAgICAgfSBlbHNlIGlmIChuZXdseUFsbG9jYXRlZE1vZGUg
PT0gSGFzTmV3bHlBbGxvY2F0ZWQpIHsKKyAgICAgICAgICAgIGZyZWVBdG9tcyA9IGZvb3Rlci5t
X25ld2x5QWxsb2NhdGVkOworICAgICAgICB9CisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIGEg
c2V0IGJpdCBpbiBmcmVlQXRvbXMgcmVwcmVzZW50cyBsaXZlIGNlbGxzLgorICAgICAgICBpc0Vt
cHR5ID0gZnJlZUF0b21zLmlzRW1wdHkoKTsKKworICAgICAgICAvLyBJbnZlcnQgdGhlIGJpdHMg
YXQgZWFjaCBjZWxsIGxvY2F0aW9uIHNvIHRoYXQgdGhlIG9uZXMgZm9yIGxpdmUgY2VsbHMKKyAg
ICAgICAgLy8gYXJlIGNsZWFyZWQsIGFuZCB0aGUgb25lcyBmb3IgZGVhZCBjZWxscyBhcmUgc2V0
LgorICAgICAgICBmcmVlQXRvbXMgXj0gY2VsbExvY2F0aW9uczsKKyAgICB9IGVsc2UKKyAgICAg
ICAgZnJlZUF0b21zID0gY2VsbExvY2F0aW9uczsgLy8gYWxsIGNlbGxzIGFyZSBmcmVlLgorICAg
IAorICAgIC8vIFdlIG9ubHkgd2FudCB0byBkaXNjYXJkIHRoZSBuZXdseUFsbG9jYXRlZCBiaXRz
IGlmIHdlJ3JlIGNyZWF0aW5nIGEgRnJlZUxpc3QsCisgICAgLy8gb3RoZXJ3aXNlIHdlIHdvdWxk
IGxvc2UgaW5mb3JtYXRpb24gb24gd2hhdCdzIGN1cnJlbnRseSBhbGl2ZS4KKyAgICBpZiAoc3dl
ZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCAmJiBuZXdseUFsbG9jYXRlZE1vZGUgPT0gSGFzTmV3
bHlBbGxvY2F0ZWQpCisgICAgICAgIGZvb3Rlci5tX25ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IE1h
cmtlZFNwYWNlOjpudWxsVmVyc2lvbjsKKworICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkK
KyAgICAgICAgZm9vdGVyLm1fbG9jay51bmxvY2soKTsKKworICAgIGlmIChkZXN0cnVjdGlvbk1v
ZGUgIT0gQmxvY2tIYXNOb0Rlc3RydWN0b3JzKQorICAgICAgICBmcmVlQXRvbXMuZm9yRWFjaFNl
dEJpdChoYW5kbGVEZWFkQ2VsbCk7CisKKyAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVl
TGlzdCkgeworICAgICAgICBmcmVlTGlzdC0+aW5pdGlhbGl6ZUF0b21zQml0bWFwKHRoaXMsIGZy
ZWVBdG9tcyk7CisgICAgICAgIHNldElzRnJlZUxpc3RlZCgpOworICAgIH0gZWxzZSBpZiAoaXNF
bXB0eSkKKyAgICAgICAgbV9kaXJlY3RvcnktPnNldElzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5
LCB0aGlzLCB0cnVlKTsKKyAgICBpZiAoZmFsc2UpCisgICAgICAgIGRhdGFMb2coIlNsb3dseSBz
d2VwdCBibG9jayAiLCBSYXdQb2ludGVyKCZibG9jayksICIgd2l0aCBjZWxsIHNpemUgIiwgY2Vs
bFNpemUsICIgYW5kIGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzLCAiOiAiLCBwb2ludGVyRHVt
cChmcmVlTGlzdCksICJcbiIpOworCisjZWxzZSAvLyBub3QgRU5BQkxFKEJJVE1BUF9GUkVFTElT
VCkKKwogICAgIC8vIFRoaXMgcHJvZHVjZXMgYSBmcmVlIGxpc3QgdGhhdCBpcyBvcmRlcmVkIGlu
IHJldmVyc2UgdGhyb3VnaCB0aGUgYmxvY2suCiAgICAgLy8gVGhpcyBpcyBmaW5lLCBzaW5jZSB0
aGUgYWxsb2NhdGlvbiBjb2RlIG1ha2VzIG5vIGFzc3VtcHRpb25zIGFib3V0IHRoZQogICAgIC8v
IG9yZGVyIG9mIHRoZSBmcmVlIGxpc3QuCisgICAgVmVjdG9yPHZvaWQqPiBmb3VuZEZyZWVDZWxs
OwogICAgIEZyZWVDZWxsKiBoZWFkID0gbnVsbHB0cjsKICAgICBzaXplX3QgY291bnQgPSAwOwog
ICAgIHVpbnRwdHJfdCBzZWNyZXQ7CkBAIC0zMTQsNyArMzc0LDcgQEAgdm9pZCBNYXJrZWRCbG9j
azo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZQogICAgIFZlY3RvcjxzaXplX3Q+IGRlYWRDZWxsczsK
ICAgICBhdXRvIGhhbmRsZURlYWRDZWxsID0gWyZdIChzaXplX3QgaSkgewogICAgICAgICBIZWFw
Q2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEhlYXBDZWxsKj4oJmJsb2NrLmF0b21z
KClbaV0pOwotCisgICAgICAgIGZvdW5kRnJlZUNlbGwuYXBwZW5kKGNlbGwpOwogICAgICAgICBp
ZiAoZGVzdHJ1Y3Rpb25Nb2RlICE9IEJsb2NrSGFzTm9EZXN0cnVjdG9ycykKICAgICAgICAgICAg
IGRlc3Ryb3koY2VsbCk7CiAKQEAgLTM0NSw3ICs0MDUsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OnNwZWNpYWxpemVkU3dlCiAgICAgLy8gb3RoZXJ3aXNlIHdlIHdvdWxkIGxvc2UgaW5m
b3JtYXRpb24gb24gd2hhdCdzIGN1cnJlbnRseSBhbGl2ZS4KICAgICBpZiAoc3dlZXBNb2RlID09
IFN3ZWVwVG9GcmVlTGlzdCAmJiBuZXdseUFsbG9jYXRlZE1vZGUgPT0gSGFzTmV3bHlBbGxvY2F0
ZWQpCiAgICAgICAgIGZvb3Rlci5tX25ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IE1hcmtlZFNwYWNl
OjpudWxsVmVyc2lvbjsKLSAgICAKKwogICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkKICAg
ICAgICAgZm9vdGVyLm1fbG9jay51bmxvY2soKTsKICAgICAKQEAgLTM2MSw2ICs0MjEsNyBAQCB2
b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlCiAgICAgICAgIG1fZGlyZWN0
b3J5LT5zZXRJc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcywgdHJ1ZSk7CiAgICAgaWYg
KGZhbHNlKQogICAgICAgICBkYXRhTG9nKCJTbG93bHkgc3dlcHQgYmxvY2sgIiwgUmF3UG9pbnRl
cigmYmxvY2spLCAiIHdpdGggY2VsbCBzaXplICIsIGNlbGxTaXplLCAiIGFuZCBhdHRyaWJ1dGVz
ICIsIG1fYXR0cmlidXRlcywgIjogIiwgcG9pbnRlckR1bXAoZnJlZUxpc3QpLCAiXG4iKTsKKyNl
bmRpZiAvLyBFTkFCTEUoQklUTUFQX0ZSRUVMSVNUKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBE
ZXN0cm95RnVuYz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxw
ZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5
SGVscGVycy5jcHAJKHJldmlzaW9uIDI2Mjg4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAzLDcgKzUwMyw3IEBA
IHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0UmFuZG9tVGh1bmsoVk0KIH0KICNlbmRpZgogCi12
b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlV2l0aE5vbk51bGxBbGxvY2F0b3IoR1BS
UmVnIHJlc3VsdEdQUiwgY29uc3QgSklUQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxv
Y2F0b3JHUFIsIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgpCit2b2lkIEFz
c2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlV2l0aE5vbk51bGxBbGxvY2F0b3IoR1BSUmVnIHJl
c3VsdEdQUiwgY29uc3QgSklUQWxsb2NhdG9yJiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JH
UFIsIEdQUlJlZyBzY3JhdGNoR1BSLCBKdW1wTGlzdCYgc2xvd1BhdGgsIEdQUlJlZyBzY3JhdGNo
R1BSMikKIHsKICAgICBpZiAoT3B0aW9uczo6Zm9yY2VHQ1Nsb3dQYXRocygpKSB7CiAgICAgICAg
IHNsb3dQYXRoLmFwcGVuZChqdW1wKCkpOwpAQCAtNTE2LDcgKzUxNiw3IEBAIHZvaWQgQXNzZW1i
bHlIZWxwZXJzOjplbWl0QWxsb2NhdGVXaXRoTm8KICAgICAvLyAtIFdlICpjYW4qIHVzZSBSZWdp
c3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzIG9uIEFSTS4KIAogICAgIEp1bXAgcG9wUGF0
aDsKLSAgICBKdW1wIGRvbmU7CisgICAgSnVtcExpc3QgZG9uZTsKICAgICAKICAgICBpZiAoYWxs
b2NhdG9yLmlzQ29uc3RhbnQoKSkKICAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRv
ci5hbGxvY2F0b3IoKS5sb2NhbEFsbG9jYXRvcigpKSwgYWxsb2NhdG9yR1BSKTsKQEAgLTUzNCwx
MCArNTM0LDc0IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0QWxsb2NhdGVXaXRoTm8KICAg
ICBBZGRyZXNzIHBheWxvYWRFbmRBZGRyID0gQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxs
b2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZQYXlsb2FkRW5k
KCkpOwogICAgIGFkZFB0cihwYXlsb2FkRW5kQWRkciwgcmVzdWx0R1BSKTsKIAotICAgIGRvbmUg
PSBqdW1wKCk7CisgICAgZG9uZS5hcHBlbmQoanVtcCgpKTsKICAgICAgICAgCiAgICAgcG9wUGF0
aC5saW5rKHRoaXMpOwotICAgICAgICAKKworI2lmIEVOQUJMRShCSVRNQVBfRlJFRUxJU1QpCisg
ICAgaWYgKHNjcmF0Y2hHUFIyID09IEludmFsaWRHUFJSZWcpCisgICAgICAgIHNjcmF0Y2hHUFIy
ID0gc2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoc2NyYXRjaEdQUjIgIT0g
cmVzdWx0R1BSKTsKKyAgICBSRUxFQVNFX0FTU0VSVChzY3JhdGNoR1BSMiAhPSBzY3JhdGNoR1BS
KTsKKyAgICBSRUxFQVNFX0FTU0VSVChzY3JhdGNoR1BSICE9IHJlc3VsdEdQUik7CisKKyAgICAv
LyBUaGUgY29kZSBiZWxvdyByZWxpZXMgb24gdGhpcy4KKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVv
ZihGcmVlTGlzdDo6QXRvbXNCaXRtYXA6OldvcmQpID09IHNpemVvZih1aW50NjRfdCkpOworCisg
ICAgLy8gQ2hlY2sgZm9yIGFuIGF2YWlsYWJsZSBiaXQgaW4gbV9jdXJyZW50Um93Qml0bWFwLgor
ICAgIGF1dG8gcm93Qml0bWFwR1BSID0gc2NyYXRjaEdQUjsKKyAgICBsb2FkNjQoQWRkcmVzcyhh
bGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlz
dDo6b2Zmc2V0T2ZDdXJyZW50Um93Qml0bWFwKCkpLCByb3dCaXRtYXBHUFIpOworICAgIEp1bXAg
YWxsb2NhdGVGcm9tQ3VycmVudFJvdyA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByb3dCaXRtYXBH
UFIpOworCisgICAgLy8gQml0bWFwIGZhc3QgcGF0aCBmYWlsZWQ6IGNoZWNrIGlmIHRoZXJlJ3Mg
YW5vdGhlciBhdG9tcyByb3cgdG8gYWxsb2NhdGUgZnJvbS4KKyAgICBhdXRvIHJvd0luZGV4R1BS
ID0gcmVzdWx0R1BSOworICAgIGxvYWQzMihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxv
Y2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZkN1cnJlbnRSb3dJ
bmRleCgpKSwgcm93SW5kZXhHUFIpOworICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hUZXN0UHRy
KFplcm8sIHJvd0luZGV4R1BSKSk7CisKKyAgICAvLyBUaGVyZSBpcyBhbm90aGVyIHdvcmQgbGVm
dCB0byBjaGVjay4KKyAgICBKdW1wIGZvdW5kTm9uRW1wdHlSb3c7CisgICAgTGFiZWwgY2hlY2tO
ZXh0Um93ID0gbGFiZWwoKTsKKyAgICB7CisgICAgICAgIC8vIExvYWQgdGhlIG5leHQgd29yZCBh
bmQgcG9pbnQgbV9jdXJyZW50Um93QWRkcmVzcyB0byB0aGUgbmV4dCByb3cuCisgICAgICAgIGxv
YWQ2NChCYXNlSW5kZXgoYWxsb2NhdG9yR1BSLCByb3dJbmRleEdQUiwgVGltZXNFaWdodCwgTG9j
YWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZkJpdG1h
cFJvd3MoKSksIHJvd0JpdG1hcEdQUik7CisKKyAgICAgICAgYXV0byByb3dBZGRyZXNzR1BSID0g
c2NyYXRjaEdQUjI7CisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2Fs
QWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZDdXJyZW50
Um93QWRkcmVzcygpKSwgcm93QWRkcmVzc0dQUik7CisgICAgICAgIHN1YlB0cihUcnVzdGVkSW1t
MzIoRnJlZUxpc3Q6OmF0b21zUm93Qnl0ZXMpLCByb3dBZGRyZXNzR1BSKTsKKyAgICAgICAgc3Rv
cmVQdHIocm93QWRkcmVzc0dQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9y
OjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZDdXJyZW50Um93QWRkcmVz
cygpKSk7CisgICAgICAgIHN1YjY0KFRydXN0ZWRJbW0zMigxKSwgcm93SW5kZXhHUFIpOworCisg
ICAgICAgIGZvdW5kTm9uRW1wdHlSb3cgPSBicmFuY2hUZXN0NjQoTm9uWmVybywgcm93Qml0bWFw
R1BSKTsKKyAgICAgICAgYnJhbmNoVGVzdFB0cihOb25aZXJvLCByb3dJbmRleEdQUikubGlua1Rv
KGNoZWNrTmV4dFJvdywgdGhpcyk7CisgICAgfQorCisgICAgLy8gTm8gbW9yZSB3b3Jkcy4KKyAg
ICBzdG9yZTMyKHJvd0luZGV4R1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0
b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZkN1cnJlbnRSb3dJbmRl
eCgpKSk7CisgICAgc3RvcmU2NChyb3dCaXRtYXBHUFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBM
b2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mQ3Vy
cmVudFJvd0JpdG1hcCgpKSk7CisgICAgc2xvd1BhdGguYXBwZW5kKGp1bXAoKSk7CisKKyAgICBm
b3VuZE5vbkVtcHR5Um93LmxpbmsodGhpcyk7CisgICAgc3RvcmUzMihyb3dJbmRleEdQUiwgQWRk
cmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBG
cmVlTGlzdDo6b2Zmc2V0T2ZDdXJyZW50Um93SW5kZXgoKSkpOworCisgICAgLy8gQml0bWFwIGZh
c3QgcGF0aCBzdWNjZWVkZWQ6IHdlIGhhdmUgYSBiaXQgdG8gdXNlLgorICAgIGFsbG9jYXRlRnJv
bUN1cnJlbnRSb3cubGluayh0aGlzKTsKKyAgICB7CisgICAgICAgIC8vIFJlbW92ZSB0aGlzIGJp
dCBmcm9tIG1fY3VycmVudFJvd0JpdG1hcC4KKyAgICAgICAgYXV0byBhdG9tSW5kZXhJblJvd0dQ
UiA9IHJlc3VsdEdQUjsKKyAgICAgICAgY291bnRUcmFpbGluZ1plcm9zNjRXaXRob3V0TnVsbENo
ZWNrKHJvd0JpdG1hcEdQUiwgYXRvbUluZGV4SW5Sb3dHUFIpOworICAgICAgICBjbGVhckJpdDY0
KGF0b21JbmRleEluUm93R1BSLCByb3dCaXRtYXBHUFIsIHNjcmF0Y2hHUFIyKTsKKworICAgICAg
ICBhdXRvIHJvd0FkZHJlc3NHUFIgPSBzY3JhdGNoR1BSMjsKKyAgICAgICAgbG9hZFB0cihBZGRy
ZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZy
ZWVMaXN0OjpvZmZzZXRPZkN1cnJlbnRSb3dBZGRyZXNzKCkpLCByb3dBZGRyZXNzR1BSKTsKKyAg
ICAgICAgc3RvcmU2NChyb3dCaXRtYXBHUFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFs
bG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mQ3VycmVudFJv
d0JpdG1hcCgpKSk7CisKKyAgICAgICAgLy8gQ29tcHV0ZSBhdG9tIGFkZHJlc3Mgb2YgdGhpcyBi
aXQuCisgICAgICAgIEFTU0VSVChyZXN1bHRHUFIgPT0gYXRvbUluZGV4SW5Sb3dHUFIpOworICAg
ICAgICBsc2hpZnQ2NChUcnVzdGVkSW1tMzIoRnJlZUxpc3Q6OmF0b21TaXplU2hpZnQpLCByZXN1
bHRHUFIpOworICAgICAgICBhZGRQdHIocm93QWRkcmVzc0dQUiwgcmVzdWx0R1BSKTsKKyAgICB9
CisKKyNlbHNlCiAgICAgbG9hZFB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0
b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlNjcmFtYmxlZEhlYWQo
KSksIHJlc3VsdEdQUik7CiAgICAgeG9yUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFs
bG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2VjcmV0KCkp
LCByZXN1bHRHUFIpOwogICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJl
c3VsdEdQUikpOwpAQCAtNTQ2LDcgKzYxMCw4IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0
QWxsb2NhdGVXaXRoTm8KICAgICAvLyBpdCdzIHN0aWxsIG9uIHRoZSBHQydzIGZyZWUgbGlzdC4K
ICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBGcmVlQ2VsbDo6b2Zmc2V0T2ZTY3JhbWJs
ZWROZXh0KCkpLCBzY3JhdGNoR1BSKTsKICAgICBzdG9yZVB0cihzY3JhdGNoR1BSLCBBZGRyZXNz
KGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVM
aXN0OjpvZmZzZXRPZlNjcmFtYmxlZEhlYWQoKSkpOwotICAgICAgICAKKyNlbmRpZgorCiAgICAg
ZG9uZS5saW5rKHRoaXMpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fz
c2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
QXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI2Mjg4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4ODcsOCArMTg4
Nyw4IEBAIHB1YmxpYzoKICAgICAvLyB0aGF0IGFsbG9jYXRvciBpcyBub24tbnVsbDsgYWxsb2Nh
dG9yIGNhbiBiZSBudWxsIGFzIGEgc2lnbmFsIHRoYXQgd2UgZG9uJ3Qga25vdyB3aGF0IHRoZQog
ICAgIC8vIHZhbHVlIG9mIGFsbG9jYXRvckdQUiBpcy4gQWRkaXRpb25hbGx5LCBpZiB0aGUgYWxs
b2NhdG9yIGlzIG5vdCBudWxsLCB0aGVuIHRoZXJlIGlzIG5vIG5lZWQKICAgICAvLyB0byBwb3B1
bGF0ZSBhbGxvY2F0b3JHUFIgLSB0aGlzIGNvZGUgd2lsbCBpZ25vcmUgdGhlIGNvbnRlbnRzIG9m
IGFsbG9jYXRvckdQUi4KLSAgICB2b2lkIGVtaXRBbGxvY2F0ZVdpdGhOb25OdWxsQWxsb2NhdG9y
KEdQUlJlZyByZXN1bHRHUFIsIGNvbnN0IEpJVEFsbG9jYXRvciYgYWxsb2NhdG9yLCBHUFJSZWcg
YWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKTsKLSAg
ICAKKyAgICB2b2lkIGVtaXRBbGxvY2F0ZVdpdGhOb25OdWxsQWxsb2NhdG9yKEdQUlJlZyByZXN1
bHRHUFIsIGNvbnN0IEpJVEFsbG9jYXRvciYgYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BS
LCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoLCBHUFJSZWcgc2NyYXRjaEdQ
UjIgPSBJbnZhbGlkR1BSUmVnKTsKKwogICAgIHZvaWQgZW1pdEFsbG9jYXRlKEdQUlJlZyByZXN1
bHRHUFIsIGNvbnN0IEpJVEFsbG9jYXRvciYgYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BS
LCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKTsKICAgICAKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPgpJbmRleDogU291cmNlL1dURi93dGYvQml0bWFw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0bWFwLmgJKHJldmlzaW9uIDI2Mjg4
OCkKKysrIFNvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsOSAr
MTMwLDE1IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKIAorICAgIC8v
IExvdyBsZXZlbCBpbnRlcmZhY2UuCisgICAgdXNpbmcgV29yZCA9IFdvcmRUeXBlOworICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0c0luV29yZCA9IHNpemVvZihXb3JkVHlwZSkgKiA4
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbnVtYmVyT2ZXb3JkcyA9IChiaXRtYXBT
aXplICsgYml0c0luV29yZCAtIDEpIC8gYml0c0luV29yZDsKKyAgICBXb3JkVHlwZSB3b3JkQXQo
c2l6ZV90IHdvcmRJbmRleCkgY29uc3QgeyByZXR1cm4gYml0c1t3b3JkSW5kZXhdOyB9CisKIHBy
aXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB3b3JkU2l6ZSA9IHNpemVvZihX
b3JkVHlwZSkgKiA4OwotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgd29yZHMgPSAoYml0
bWFwU2l6ZSArIHdvcmRTaXplIC0gMSkgLyB3b3JkU2l6ZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IHVuc2lnbmVkIHdvcmRTaXplID0gYml0c0luV29yZDsKKyAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIHdvcmRzID0gbnVtYmVyT2ZXb3JkczsKIAogICAgIC8vIHRoZSBsaXRlcmFsICcxJyBp
cyBvZiB0eXBlIHNpZ25lZCBpbnQuICBXZSB3YW50IHRvIHVzZSBhbiB1bnNpZ25lZAogICAgIC8v
IHZlcnNpb24gb2YgdGhlIGNvcnJlY3Qgc2l6ZSB3aGVuIGRvaW5nIHRoZSBjYWxjdWxhdGlvbnMg
YmVjYXVzZSBpZgpAQCAtMzgwLDEyICszODYsMjMgQEAgaW5saW5lIHZvaWQgQml0bWFwPGJpdG1h
cFNpemUsIFdvcmRUeXBlPgogICAgICAgICBpZiAoIXdvcmQpCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgc2l6ZV90IGJhc2UgPSBpICogd29yZFNpemU7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGogPSAwOyBqIDwgd29yZFNpemU7ICsraikgeworICAgICAgICBmb3IgKHNpemVfdCBqID0g
MDsgd29yZCAmJiBqIDwgd29yZFNpemU7ICsraikgewogICAgICAgICAgICAgaWYgKHdvcmQgJiAx
KQogICAgICAgICAgICAgICAgIGZ1bmMoYmFzZSArIGopOwogICAgICAgICAgICAgd29yZCA+Pj0g
MTsKICAgICAgICAgfQogICAgIH0KKyAgICAvLyBtbGFtIE5PVEU6IG1pY3JvYmVuY2htYXJrcyBz
aG93cyB0aGlzIHRvIGJlIHNsb3dlciBpZiBiaXRzIGFyZSBjb250aWd1b3VzLgorLy8gICAgc2l6
ZV90IGJhc2UgPSAwOworLy8gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3b3JkczsgKytpKSB7
CisvLyAgICAgICAgV29yZFR5cGUgd29yZCA9IGJpdHNbaV07CisvLyAgICAgICAgd2hpbGUgKHdv
cmQpIHsKKy8vICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSBjdHood29yZCk7CisvLyAgICAg
ICAgICAgIHdvcmQgJj0gfigxIDw8IGluZGV4KTsKKy8vICAgICAgICAgICAgZnVuYyhiYXNlICsg
aW5kZXgpOworLy8gICAgICAgIH0KKy8vICAgICAgICBiYXNlICs9IHdvcmRTaXplOworLy8gICAg
fQogfQogCiB0ZW1wbGF0ZTxzaXplX3QgYml0bWFwU2l6ZSwgdHlwZW5hbWUgV29yZFR5cGU+Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvTWF0aEV4dHJhcy5oCShyZXZpc2lvbiAyNjI4ODgpCisrKyBTb3VyY2UvV1RGL3d0Zi9N
YXRoRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5Myw3ICs1OTMsNyBAQCB2b2lkIHNodWZm
bGVWZWN0b3IoVmVjdG9yVHlwZSYgdmVjdG9yLCBjCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIGNv
bnN0ZXhwciB1bnNpZ25lZCBjbHpDb25zdGV4cHIoVCB2YWx1ZSkKIHsKLSAgICBjb25zdGV4cHIg
dW5zaWduZWQgYml0U2l6ZSA9IHNpemVvZihUKSAqIENIQVJfQklUOworICAgIGNvbnN0ZXhwciB1
bnNpZ25lZCBiaXRTaXplID0gY291bnRPZkJpdHM8VD47CiAKICAgICB1c2luZyBVVCA9IHR5cGVu
YW1lIHN0ZDo6bWFrZV91bnNpZ25lZDxUPjo6dHlwZTsKICAgICBVVCB1VmFsdWUgPSB2YWx1ZTsK
QEAgLTYwOCwxNSArNjA4LDE1IEBAIGNvbnN0ZXhwciB1bnNpZ25lZCBjbHpDb25zdGV4cHIoVCB2
YWx1ZSkKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSB1bnNpZ25lZCBjbHooVCB2
YWx1ZSkKK2lubGluZSBjb25zdGV4cHIgdW5zaWduZWQgY2x6KFQgdmFsdWUpCiB7Ci0gICAgY29u
c3RleHByIHVuc2lnbmVkIGJpdFNpemUgPSBzaXplb2YoVCkgKiBDSEFSX0JJVDsKKyAgICBjb25z
dGV4cHIgc2l6ZV90IGJpdFNpemUgPSBjb3VudE9mQml0czxUPjsKIAogICAgIHVzaW5nIFVUID0g
dHlwZW5hbWUgc3RkOjptYWtlX3Vuc2lnbmVkPFQ+Ojp0eXBlOwogICAgIFVUIHVWYWx1ZSA9IHZh
bHVlOwogCiAjaWYgQ09NUElMRVIoR0NDX0NPTVBBVElCTEUpCi0gICAgY29uc3RleHByIHVuc2ln
bmVkIGJpdFNpemU2NCA9IHNpemVvZih1aW50NjRfdCkgKiBDSEFSX0JJVDsKKyAgICBjb25zdGV4
cHIgc2l6ZV90IGJpdFNpemU2NCA9IGNvdW50T2ZCaXRzPHVpbnQ2NF90PjsKICAgICBpZiAodVZh
bHVlKQogICAgICAgICByZXR1cm4gX19idWlsdGluX2NsemxsKHVWYWx1ZSkgLSAoYml0U2l6ZTY0
IC0gYml0U2l6ZSk7CiAgICAgcmV0dXJuIGJpdFNpemU7CkBAIC02MzgsNyArNjM4LDcgQEAgaW5s
aW5lIHVuc2lnbmVkIGNseihUIHZhbHVlKQogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBjb25zdGV4
cHIgdW5zaWduZWQgY3R6Q29uc3RleHByKFQgdmFsdWUpCiB7Ci0gICAgY29uc3RleHByIHVuc2ln
bmVkIGJpdFNpemUgPSBzaXplb2YoVCkgKiBDSEFSX0JJVDsKKyAgICBjb25zdGV4cHIgdW5zaWdu
ZWQgYml0U2l6ZSA9IGNvdW50T2ZCaXRzPFQ+OwogCiAgICAgdXNpbmcgVVQgPSB0eXBlbmFtZSBz
dGQ6Om1ha2VfdW5zaWduZWQ8VD46OnR5cGU7CiAgICAgVVQgdVZhbHVlID0gdmFsdWU7CkBAIC02
NTUsOSArNjU1LDkgQEAgY29uc3RleHByIHVuc2lnbmVkIGN0ekNvbnN0ZXhwcihUIHZhbHVlKQog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIHVuc2lnbmVkIGN0eihUIHZhbHVlKQor
aW5saW5lIGNvbnN0ZXhwciB1bnNpZ25lZCBjdHooVCB2YWx1ZSkKIHsKLSAgICBjb25zdGV4cHIg
dW5zaWduZWQgYml0U2l6ZSA9IHNpemVvZihUKSAqIENIQVJfQklUOworICAgIGNvbnN0ZXhwciB1
bnNpZ25lZCBiaXRTaXplID0gY291bnRPZkJpdHM8VD47CiAKICAgICB1c2luZyBVVCA9IHR5cGVu
YW1lIHN0ZDo6bWFrZV91bnNpZ25lZDxUPjo6dHlwZTsKICAgICBVVCB1VmFsdWUgPSB2YWx1ZTsK
QEAgLTY5NSw3ICs2OTUsNyBAQCBjb25zdGV4cHIgdW5zaWduZWQgZ2V0TFNCU2V0Q29uc3RleHBy
KFQgCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogaW5saW5lIHVuc2lnbmVkIGdldE1TQlNldChUIHQp
CiB7Ci0gICAgY29uc3RleHByIHVuc2lnbmVkIGJpdFNpemUgPSBzaXplb2YoVCkgKiBDSEFSX0JJ
VDsKKyAgICBjb25zdGV4cHIgdW5zaWduZWQgYml0U2l6ZSA9IGNvdW50T2ZCaXRzPFQ+OwogICAg
IEFTU0VSVCh0KTsKICAgICByZXR1cm4gYml0U2l6ZSAtIDEgLSBjbHoodCk7CiB9CkBAIC03MDMs
MTEgKzcwMywxNyBAQCBpbmxpbmUgdW5zaWduZWQgZ2V0TVNCU2V0KFQgdCkKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CiBjb25zdGV4cHIgdW5zaWduZWQgZ2V0TVNCU2V0Q29uc3RleHByKFQgdCkKIHsK
LSAgICBjb25zdGV4cHIgdW5zaWduZWQgYml0U2l6ZSA9IHNpemVvZihUKSAqIENIQVJfQklUOwor
ICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRTaXplID0gY291bnRPZkJpdHM8VD47CiAgICAgQVNT
RVJUX1VOREVSX0NPTlNURVhQUl9DT05URVhUKHQpOwogICAgIHJldHVybiBiaXRTaXplIC0gMSAt
IGNsekNvbnN0ZXhwcih0KTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NvbnN0ZXhwciB1
bnNpZ25lZCBsb2cyKFQgdmFsdWUpCit7CisgICAgcmV0dXJuIGNvdW50T2ZCaXRzPFQ+IC0gMSAt
IGNseih2YWx1ZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2luZyBXVEY6OnNodWZm
bGVWZWN0b3I7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAkocmV2aXNpb24gMjYyODg4KQorKysg
U291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxNyw3ICsz
MTcsNyBAQCBib29sIGNoZWNrQW5kU2V0KFQmIGxlZnQsIFUgcmlnaHQpCiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+Ci1pbmxpbmUgdW5zaWduZWQgY3R6KFQgdmFsdWUpOyAvLyBDbGllbnRzIHdp
bGwgYWxzbyBuZWVkIHRvICNpbmNsdWRlIE1hdGhFeHRyYXMuaAoraW5saW5lIGNvbnN0ZXhwciB1
bnNpZ25lZCBjdHooVCB2YWx1ZSk7IC8vIENsaWVudHMgd2lsbCBhbHNvIG5lZWQgdG8gI2luY2x1
ZGUgTWF0aEV4dHJhcy5oCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBib29sIGZpbmRCaXRJbldv
cmQoVCB3b3JkLCBzaXplX3QmIHN0YXJ0T3JSZXN1bHRJbmRleCwgc2l6ZV90IGVuZEluZGV4LCBi
b29sIHZhbHVlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401678</attachid>
            <date>2020-06-11 13:41:52 -0700</date>
            <delta_ts>2020-06-12 13:56:56 -0700</delta_ts>
            <desc>test patch 1: does NOT use adjusted bitmap start.</desc>
            <filename>bug-213071a.patch</filename>
            <type>text/plain</type>
            <size>34461</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJ
KHJldmlzaW9uIDI2Mjg4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwNTEsNyArMTUwNTEsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzKys7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3RlcldpdGhD
bG9iYmVyKGFsbG9jYXRvcik7Ci0gICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lz
dGVycysrOworICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgKz0gMjsK
ICAgICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludHMgPSB7IFZhbHVlUmVwOjpTb21l
RWFybHlSZWdpc3RlciB9OwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kU3VjY2Vzc29y
KHVzdWFsbHkoY29udGludWF0aW9uKSk7CkBAIC0xNTA2NCw3ICsxNTA2NCw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgR1BSUmVnIGFsbG9jYXRvckdQUjsK
ICAgICAgICAgICAgICAgICBpZiAoYWN0dWFsQWxsb2NhdG9yLmlzQ29uc3RhbnQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgYWxsb2NhdG9yR1BSID0gcGFyYW1zLmdwU2NyYXRjaCgxKTsKKyAgICAg
ICAgICAgICAgICAgICAgYWxsb2NhdG9yR1BSID0gcGFyYW1zLmdwU2NyYXRjaCgyKTsKICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRvckdQUiA9IHBhcmFt
c1sxXS5ncHIoKTsKICAgICAgICAgICAgICAgICAKQEAgLTE1MDc2LDcgKzE1MDc2LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAvLyBhbGwgb2YgdGhlIGNvbXBpbGVyIHRpZXJzLgogICAg
ICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcigKICAgICAg
ICAgICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpLCBhY3R1YWxBbGxvY2F0b3IsIGFsbG9jYXRv
ckdQUiwgcGFyYW1zLmdwU2NyYXRjaCgwKSwKLSAgICAgICAgICAgICAgICAgICAganVtcFRvU2xv
d1BhdGgpOworICAgICAgICAgICAgICAgICAgICBqdW1wVG9TbG93UGF0aCwgcGFyYW1zLmdwU2Ny
YXRjaCgxKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIGp1bXBUb1N1Y2Nlc3M7CiAgICAgICAgICAgICAgICAgaWYgKCFwYXJhbXMuZmFsbHNU
aHJvdWdoVG9TdWNjZXNzb3IoMCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9G
cmVlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJl
ZUxpc3QuY3BwCShyZXZpc2lvbiAyNjI4ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9GcmVlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSwxMyArMzksNDcgQEAgRnJlZUxp
c3Q6On5GcmVlTGlzdCgpCiAKIHZvaWQgRnJlZUxpc3Q6OmNsZWFyKCkKIHsKKyNpZiBFTkFCTEUo
QklUTUFQX0ZSRUVMSVNUKQorICAgIG1fY3VycmVudFJvd0JpdG1hcCA9IDA7CisgICAgbV9jdXJy
ZW50Um93SW5kZXggPSAwOworI2Vsc2UKICAgICBtX3NjcmFtYmxlZEhlYWQgPSAwOwogICAgIG1f
c2VjcmV0ID0gMDsKKyNlbmRpZgogICAgIG1fcGF5bG9hZEVuZCA9IG51bGxwdHI7CiAgICAgbV9y
ZW1haW5pbmcgPSAwOwogICAgIG1fb3JpZ2luYWxTaXplID0gMDsKIH0KIAorI2lmIEVOQUJMRShC
SVRNQVBfRlJFRUxJU1QpCisKK3ZvaWQgRnJlZUxpc3Q6OmluaXRpYWxpemVBdG9tc0JpdG1hcChN
YXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaywgQXRvbXNCaXRtYXAmIGZyZWVBdG9tcykKK3sKKyNp
ZiBBU1NFUlRfRU5BQkxFRAorICAgIG1fbWFya2VkQmxvY2sgPSBibG9jazsKKyNlbmRpZgorICAg
IEFTU0VSVF9VTlVTRUQoZnJlZUF0b21zLCAmZnJlZUF0b21zID09ICZtX2JpdG1hcCk7CisgICAg
Ly8gbV9iaXRtYXAgaGFzIGFscmVhZHkgYmVlbiBmaWxsZWQgaW4gYnkgTWFya2VkQmxvY2s6Okhh
bmRsZTo6c3BlY2lhbGl6ZWRTd2VlcCgpLgorCisgICAgbV9jdXJyZW50Um93Qml0bWFwID0gMDsK
KyAgICBzaXplX3Qgcm93SW5kZXggPSBBdG9tc0JpdG1hcDo6bnVtYmVyT2ZXb3JkczsKKyAgICB3
aGlsZSAocm93SW5kZXgtLSkgeworICAgICAgICBhdXRvIHJvd0JpdG1hcCA9IG1fYml0bWFwLndv
cmRBdChyb3dJbmRleCk7CisgICAgICAgIGlmIChyb3dCaXRtYXApIHsKKyAgICAgICAgICAgIG1f
Y3VycmVudFJvd0JpdG1hcCA9IHJvd0JpdG1hcDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorICAgIEFTU0VSVChtX2N1cnJlbnRSb3dCaXRtYXAgfHwgbV9iaXRtYXAuaXNF
bXB0eSgpKTsKKyAgICBtX2N1cnJlbnRSb3dJbmRleCA9IG1fY3VycmVudFJvd0JpdG1hcCA/IHJv
d0luZGV4IDogMDsKKworICAgIHNpemVfdCBmaXJzdEF0b21JblJvdyA9IG1fY3VycmVudFJvd0lu
ZGV4ICogYXRvbXNQZXJSb3c7CisgICAgbV9jdXJyZW50TWFya2VkQmxvY2tSb3dBZGRyZXNzID0g
Yml0d2lzZV9jYXN0PEF0b20qPihibG9jay0+YXRvbUF0KGZpcnN0QXRvbUluUm93KSk7Cit9CisK
KyNlbHNlCisvLyBMaW5rZWQgTGlzdCBpbXBsZW1lbnRhdGlvbi4KKwogdm9pZCBGcmVlTGlzdDo6
aW5pdGlhbGl6ZUxpc3QoRnJlZUNlbGwqIGhlYWQsIHVpbnRwdHJfdCBzZWNyZXQsIHVuc2lnbmVk
IGJ5dGVzKQogewogICAgIC8vIEl0J3MgKnNsaWdodGx5KiBtb3JlIG9wdGltYWwgdG8gdXNlIGEg
c2NyYW1ibGVkIGhlYWQuIEl0IHNhdmVzIGEgcmVnaXN0ZXIgb24gdGhlIGZhc3QgcGF0aC4KQEAg
LTU2LDE2ICs5MCwyMyBAQCB2b2lkIEZyZWVMaXN0Ojppbml0aWFsaXplTGlzdChGcmVlQ2VsbCog
CiAgICAgbV9vcmlnaW5hbFNpemUgPSBieXRlczsKIH0KIAorI2VuZGlmIC8vIEVOQUJMRShCSVRN
QVBfRlJFRUxJU1QpCisKIHZvaWQgRnJlZUxpc3Q6OmluaXRpYWxpemVCdW1wKGNoYXIqIHBheWxv
YWRFbmQsIHVuc2lnbmVkIHJlbWFpbmluZykKIHsKKyNpZiBFTkFCTEUoQklUTUFQX0ZSRUVMSVNU
KQorICAgIG1fY3VycmVudFJvd0JpdG1hcCA9IDA7CisgICAgbV9jdXJyZW50Um93SW5kZXggPSAw
OworI2Vsc2UKICAgICBtX3NjcmFtYmxlZEhlYWQgPSAwOwogICAgIG1fc2VjcmV0ID0gMDsKKyNl
bmRpZgogICAgIG1fcGF5bG9hZEVuZCA9IHBheWxvYWRFbmQ7CiAgICAgbV9yZW1haW5pbmcgPSBy
ZW1haW5pbmc7CiAgICAgbV9vcmlnaW5hbFNpemUgPSByZW1haW5pbmc7CiB9CiAKLWJvb2wgRnJl
ZUxpc3Q6OmNvbnRhaW5zKEhlYXBDZWxsKiB0YXJnZXQpIGNvbnN0Citib29sIEZyZWVMaXN0Ojpj
b250YWlucyhIZWFwQ2VsbCogdGFyZ2V0LCBNYXJrZWRCbG9jazo6SGFuZGxlKiBjdXJyZW50Qmxv
Y2spIGNvbnN0CiB7CiAgICAgaWYgKG1fcmVtYWluaW5nKSB7CiAgICAgICAgIGNvbnN0IHZvaWQq
IHN0YXJ0ID0gKG1fcGF5bG9hZEVuZCAtIG1fcmVtYWluaW5nKTsKQEAgLTczLDE5ICsxMTQsNDgg
QEAgYm9vbCBGcmVlTGlzdDo6Y29udGFpbnMoSGVhcENlbGwqIHRhcmdldAogICAgICAgICByZXR1
cm4gKHN0YXJ0IDw9IHRhcmdldCkgJiYgKHRhcmdldCA8IGVuZCk7CiAgICAgfQogCisjaWYgRU5B
QkxFKEJJVE1BUF9GUkVFTElTVCkKKyAgICBpZiAoYml0bWFwSXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyBjdXJyZW50QmxvY2sgbWF5IGJlIG51bGwgaWYgdGhlIGFs
bG9jYXRvciBoYXMgYmVlbiByZXNldCAoYW5kIHRoZXJlZm9yZSwKKyAgICAvLyB0aGUgRnJlZUxp
c3QgY2xlYXJlZC4gSGVuY2UsIHdlIHNob3VsZCBvbmx5IGNoZWNrIHRoaXMgYXNzZXJ0aW9uIGFm
dGVyCisgICAgLy8gd2UgY2hlY2sgaWYgdGhlIEZyZWVMaXN0IGJpdG1hcCBpcyBlbXB0eSBhYm92
ZS4KKyAgICBBU1NFUlQobV9tYXJrZWRCbG9jayA9PSBjdXJyZW50QmxvY2spOworICAgIGlmICgh
Y3VycmVudEJsb2NrLT5jb250YWlucyh0YXJnZXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICB1bnNpZ25lZCBhdG9tTnVtYmVyID0gY3VycmVudEJsb2NrLT5ibG9jaygpLmF0b21OdW1i
ZXIodGFyZ2V0KTsKKyAgICB1bnNpZ25lZCByb3dJbmRleCA9IGF0b21OdW1iZXIgLyBhdG9tc1Bl
clJvdzsKKyAgICBpZiAocm93SW5kZXggPiBtX2N1cnJlbnRSb3dJbmRleCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChyb3dJbmRleCA9PSBtX2N1cnJlbnRSb3dJbmRleCkgeworICAg
ICAgICBjb25zdGV4cHIgQXRvbXNCaXRtYXA6OldvcmQgb25lID0gMTsKKyAgICAgICAgdW5zaWdu
ZWQgZmlyc3RBdG9tSW5Sb3cgPSByb3dJbmRleCAqIGF0b21zUGVyUm93OworICAgICAgICB1bnNp
Z25lZCBhdG9tSW5kZXhJblJvdyA9IGF0b21OdW1iZXIgLSBmaXJzdEF0b21JblJvdzsKKyAgICAg
ICAgcmV0dXJuIG1fY3VycmVudFJvd0JpdG1hcCAmIChvbmUgPDwgYXRvbUluZGV4SW5Sb3cpOwor
ICAgIH0KKyAgICByZXR1cm4gbV9iaXRtYXAuZ2V0KGF0b21OdW1iZXIpOworCisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShjdXJyZW50QmxvY2spOwogICAgIEZyZWVDZWxsKiBjYW5kaWRhdGUgPSBo
ZWFkKCk7CiAgICAgd2hpbGUgKGNhbmRpZGF0ZSkgewogICAgICAgICBpZiAoYml0d2lzZV9jYXN0
PEhlYXBDZWxsKj4oY2FuZGlkYXRlKSA9PSB0YXJnZXQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgY2FuZGlkYXRlID0gY2FuZGlkYXRlLT5uZXh0KG1fc2VjcmV0KTsKICAgICB9
Ci0KICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKIH0KIAogdm9pZCBGcmVlTGlzdDo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAogeworI2lmIEVOQUJMRShCSVRNQVBfRlJFRUxJU1QpCisg
ICAgb3V0LnByaW50KCJ7Y3VycmVudFJvd0JpdG1hcCA9ICIsIG1fY3VycmVudFJvd0JpdG1hcCwg
IiwgY3VycmVudFJvd0luZGV4ID0gIiwgbV9jdXJyZW50Um93SW5kZXgsICIsIHBheWxvYWRFbmQg
PSAiLCBSYXdQb2ludGVyKG1fcGF5bG9hZEVuZCksICIsIHJlbWFpbmluZyA9ICIsIG1fcmVtYWlu
aW5nLCAiLCBvcmlnaW5hbFNpemUgPSAiLCBtX29yaWdpbmFsU2l6ZSwgIn0iKTsKKyNlbHNlCiAg
ICAgb3V0LnByaW50KCJ7aGVhZCA9ICIsIFJhd1BvaW50ZXIoaGVhZCgpKSwgIiwgc2VjcmV0ID0g
IiwgbV9zZWNyZXQsICIsIHBheWxvYWRFbmQgPSAiLCBSYXdQb2ludGVyKG1fcGF5bG9hZEVuZCks
ICIsIHJlbWFpbmluZyA9ICIsIG1fcmVtYWluaW5nLCAiLCBvcmlnaW5hbFNpemUgPSAiLCBtX29y
aWdpbmFsU2l6ZSwgIn0iKTsKKyNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAkocmV2aXNpb24gMjYyODg4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI1LDEzICsyNSwyMyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIk1hcmtlZEJsb2Nr
LmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3Ry
ZWFtLmg+CisjaW5jbHVkZSA8d3RmL1N0ZEludEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsK
IAogY2xhc3MgSGVhcENlbGw7CiAKKyNpZiBDUFUoQVJNNjQpIHx8IENQVShYODZfNjQpCisjZGVm
aW5lIEVOQUJMRV9CSVRNQVBfRlJFRUxJU1QgMQorI2Vsc2UKKyNkZWZpbmUgRU5BQkxFX0JJVE1B
UF9GUkVFTElTVCAwCisjZW5kaWYKKyNkZWZpbmUgVVNFX0FESlVTVEVEX0JJVE1BUF9TVEFSVCAw
CisKKyNpZiAhRU5BQkxFKEJJVE1BUF9GUkVFTElTVCkKIHN0cnVjdCBGcmVlQ2VsbCB7CiAgICAg
c3RhdGljIHVpbnRwdHJfdCBzY3JhbWJsZShGcmVlQ2VsbCogY2VsbCwgdWludHB0cl90IHNlY3Jl
dCkKICAgICB7CkBAIC01OCw2ICs2OCw3IEBAIHN0cnVjdCBGcmVlQ2VsbCB7CiAgICAgdWludDY0
X3QgcHJlc2VydmVkQml0c0ZvckNyYXNoQW5hbHlzaXM7CiAgICAgdWludHB0cl90IHNjcmFtYmxl
ZE5leHQ7CiB9OworI2VuZGlmCiAKIGNsYXNzIEZyZWVMaXN0IHsKIHB1YmxpYzoKQEAgLTY2LDI0
ICs3Nyw1NCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBjbGVhcigpOwogICAgIAotICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZUxpc3QoRnJlZUNlbGwqIGhlYWQsIHVpbnRw
dHJfdCBzZWNyZXQsIHVuc2lnbmVkIGJ5dGVzKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGluaXRpYWxpemVCdW1wKGNoYXIqIHBheWxvYWRFbmQsIHVuc2lnbmVkIHJlbWFpbmluZyk7CiAg
ICAgCi0gICAgYm9vbCBhbGxvY2F0aW9uV2lsbEZhaWwoKSBjb25zdCB7IHJldHVybiAhaGVhZCgp
ICYmICFtX3JlbWFpbmluZzsgfQogICAgIGJvb2wgYWxsb2NhdGlvbldpbGxTdWNjZWVkKCkgY29u
c3QgeyByZXR1cm4gIWFsbG9jYXRpb25XaWxsRmFpbCgpOyB9CiAgICAgCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KICAgICBIZWFwQ2VsbCogYWxsb2NhdGUoY29uc3QgRnVuYyYgc2xvd1Bh
dGgpOwogICAgIAotICAgIGJvb2wgY29udGFpbnMoSGVhcENlbGwqKSBjb25zdDsKKyAgICBib29s
IGNvbnRhaW5zKEhlYXBDZWxsKiwgTWFya2VkQmxvY2s6OkhhbmRsZSogY3VycmVudEJsb2NrKSBj
b25zdDsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFj
aChjb25zdCBGdW5jJikgY29uc3Q7CiAgICAgCiAgICAgdW5zaWduZWQgb3JpZ2luYWxTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9vcmlnaW5hbFNpemU7IH0KIAorI2lmIEVOQUJMRShCSVRNQVBfRlJF
RUxJU1QpCisgICAgdXNpbmcgQXRvbSA9IE1hcmtlZEJsb2NrOjpBdG9tOworICAgIHVzaW5nIEF0
b21zQml0bWFwID0gTWFya2VkQmxvY2s6OkF0b21zQml0bWFwOworCisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBpbml0aWFsaXplQXRvbXNCaXRtYXAoTWFya2VkQmxvY2s6OkhhbmRsZSosIEF0
b21zQml0bWFwJiBmcmVlQXRvbXMpOworCisgICAgYm9vbCBiaXRtYXBJc0VtcHR5KCkgY29uc3QK
KyAgICB7CisgICAgICAgIC8vIFJlbWVtYmVyLCB3ZSBkb24ndCBhY3R1YWxseSBjbGVhciB0aGUg
Yml0cyBpbiBtX2JpdG1hcCBhcyB3ZSBhbGxvY2F0ZQorICAgICAgICAvLyB0aGUgYXRvbXMuIElu
c3RlYWQsIG1fY3VycmVudFJvd0JpdG1hcCBhbmQgbV9jdXJyZW50Um93SW5kZXggdGVsbHMgdXMK
KyAgICAgICAgLy8gaWYgdGhlcmUgYXRvbXMgc3RpbGwgYXZhaWxhYmxlIGZvciBhbGxvY2F0aW9u
LiBTZWUgY29tbWVudCBibG9iIGJlbG93CisgICAgICAgIC8vIGF0IHRoZSBkZWNsYXJhdGlvbiBv
ZiBtX2N1cnJlbnRSb3dJbmRleCBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAgICByZXR1cm4gIW1f
Y3VycmVudFJvd0JpdG1hcCAmJiAhbV9jdXJyZW50Um93SW5kZXg7CisgICAgfQorICAgIGJvb2wg
YWxsb2NhdGlvbldpbGxGYWlsKCkgY29uc3QgeyByZXR1cm4gYml0bWFwSXNFbXB0eSgpICYmICFt
X3JlbWFpbmluZzsgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkN1cnJlbnRSb3dC
aXRtYXAoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3QsIG1fY3VycmVudFJvd0Jp
dG1hcCk7IH0KKyNpZiBVU0VfQURKVVNURURfQklUTUFQX1NUQVJUCisgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZkJpdG1hcFJvd3MoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxp
c3QsIG1fYml0bWFwKSAtIHNpemVvZihBdG9tc0JpdG1hcDo6V29yZCk7IH0KKyNlbHNlCisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkJpdG1hcFJvd3MoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoRnJlZUxpc3QsIG1fYml0bWFwKTsgfQorI2VuZGlmCisKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mQ3VycmVudFJvd0luZGV4KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZy
ZWVMaXN0LCBtX2N1cnJlbnRSb3dJbmRleCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mQ3VycmVudE1hcmtlZEJsb2NrUm93QWRkcmVzcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihGcmVlTGlzdCwgbV9jdXJyZW50TWFya2VkQmxvY2tSb3dBZGRyZXNzKTsgfQorI2Vsc2UKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVMaXN0KEZyZWVDZWxsKiBoZWFkLCB1
aW50cHRyX3Qgc2VjcmV0LCB1bnNpZ25lZCBieXRlcyk7CisKKyAgICBib29sIGFsbG9jYXRpb25X
aWxsRmFpbCgpIGNvbnN0IHsgcmV0dXJuICFoZWFkKCkgJiYgIW1fcmVtYWluaW5nOyB9CisKICAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2NyYW1ibGVkSGVhZCgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihGcmVlTGlzdCwgbV9zY3JhbWJsZWRIZWFkKTsgfQogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZTZWNyZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3Qs
IG1fc2VjcmV0KTsgfQorI2VuZGlmCisKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mUGF5
bG9hZEVuZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgbV9wYXlsb2FkRW5k
KTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZSZW1haW5pbmcoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3QsIG1fcmVtYWluaW5nKTsgfQogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZPcmlnaW5hbFNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnJl
ZUxpc3QsIG1fb3JpZ2luYWxTaXplKTsgfQpAQCAtOTMsMTUgKzEzNCw3NiBAQCBwdWJsaWM6CiAK
ICAgICB1bnNpZ25lZCBjZWxsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2VsbFNpemU7IH0KICAg
ICAKKyNpZiBFTkFCTEUoQklUTUFQX0ZSRUVMSVNUKQorICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IGF0b21zUGVyUm93ID0gQXRvbXNCaXRtYXA6OmJpdHNJbldvcmQ7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBzaXplX3QgYXRvbXNSb3dCeXRlcyA9IGF0b21zUGVyUm93ICogc2l6ZW9mKEF0b20p
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYXRvbVNpemVTaGlmdCA9IFdURjo6bG9n
MkNvbnN0ZXhwcihzaXplb2YoQXRvbSkpOworICAgIHN0YXRpY19hc3NlcnQoKHN0YXRpY19jYXN0
PHNpemVfdD4oMSkgPDwgYXRvbVNpemVTaGlmdCkgPT0gc2l6ZW9mKEF0b20pKTsKKyNlbmRpZgor
CiBwcml2YXRlOgorI2lmIEVOQUJMRShCSVRNQVBfRlJFRUxJU1QpCisgICAgQXRvbXNCaXRtYXAm
IGF0b21zQml0bWFwKCkgeyByZXR1cm4gbV9iaXRtYXA7IH0KKyAgICBBdG9tc0JpdG1hcDo6V29y
ZCogYml0bWFwUm93cygpIGNvbnN0CisgICAgeworI2lmIFVTRV9BREpVU1RFRF9CSVRNQVBfU1RB
UlQKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxBdG9tc0JpdG1hcDo6V29yZCo+KCZtX2Jp
dG1hcCkgLSAxOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxBdG9tc0JpdG1h
cDo6V29yZCo+KCZtX2JpdG1hcCk7CisjZW5kaWYKKyAgICB9CisKKyNlbHNlCiAgICAgRnJlZUNl
bGwqIGhlYWQoKSBjb25zdCB7IHJldHVybiBGcmVlQ2VsbDo6ZGVzY3JhbWJsZShtX3NjcmFtYmxl
ZEhlYWQsIG1fc2VjcmV0KTsgfQotICAgIAotICAgIHVpbnRwdHJfdCBtX3NjcmFtYmxlZEhlYWQg
eyAwIH07Ci0gICAgdWludHB0cl90IG1fc2VjcmV0IHsgMCB9OworI2VuZGlmCisKICAgICBjaGFy
KiBtX3BheWxvYWRFbmQgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV9jZWxsU2l6ZSB7IDAg
fTsKICAgICB1bnNpZ25lZCBtX3JlbWFpbmluZyB7IDAgfTsKICAgICB1bnNpZ25lZCBtX29yaWdp
bmFsU2l6ZSB7IDAgfTsKLSAgICB1bnNpZ25lZCBtX2NlbGxTaXplIHsgMCB9OworCisjaWYgRU5B
QkxFKEJJVE1BUF9GUkVFTElTVCkKKyAgICAvLyBUaGlzIGFsbG9jYXRpb24gYWxnb3JpdGhtIHRo
aW5rcyBvZiB0aGUgTWFya2VkQmxvY2sgYXMgY29uc2lzdGluZyBvZiByb3dzCisgICAgLy8gb2Yg
YXRvbXMsIHdoZXJlIHRoZSBudW1iZXIgb2YgYXRvbXMgaW4gYSByb3cgZXF1YWxzIHRoZSBudW1i
ZXIgb2YgYml0cyBpbgorICAgIC8vIGEgQXRvbXNCaXRtYXA6OldvcmQuIE9uIDY0LWJpdCBDUFVz
LCB0aGlzIHdvdWxkIGJlIDY0LgorICAgIC8vCisgICAgLy8gV2Ugd2lsbCBzdGFydCBhbGxvY2F0
ZSBmcm9tIHRoZSBsYXN0IChoaWdoZXN0IG51bWJlcmVkKSByb3cgZG93biB0byB0aGUKKyAgICAv
LyBmaXJzdCAocm93IDApLiBBcyB3ZSBhbGxvY2F0ZSwgd2Ugd2lsbCBvbmx5IHVwZGF0ZSBtX2N1
cnJlbnRSb3dJbmRleCBhbmQKKyAgICAvLyBtX2N1cnJlbnRSb3dCaXRtYXAuIG1fYml0bWFwIHdp
bGwgbm90IGJlIHVwZGF0ZWQuIFRoaXMgaXMgdG8gcmVkdWNlIHRoZQorICAgIC8vIG51bWJlciBv
ZiBpbnN0cnVjdGlvbnMgdG8gZXhlY3V0ZWQgZHVyaW5nIGFuIGFsbG9jYXRpb24uCisgICAgLy8K
KyAgICAvLyBXaGVuIG1fY3VycmVudFJvd0luZGV4IHBvaW50cyB0byBOLCB0aGUgQXRvbXNCaXRt
YXA6OldvcmQgZm9yIHJvdyBOIGluCisgICAgLy8gbV9iaXRtYXAgd2lsbCBoYXZlIGJlZW4gY29w
aWVkIGludG8gbV9jdXJyZW50Um93Qml0bWFwLiBUaGlzIGlzIHRoZSByb3cKKyAgICAvLyB0aGF0
IHdlIHdpbGwgYmUgYWxsb2NhdGluZyBmcm9tIHVudGlsIHRoZSByb3cgaXMgZXhoYXVzdGVkLgor
ICAgIC8vCisgICAgLy8gVGhpcyBpcyBob3cgd2Uga25vdyB3aGV0aGVyIGFuIGF0b20gaXMgYXZh
aWxhYmxlIGZvciBhbGxvY2F0aW9uIG9yIG5vdDoKKyAgICAvLyAxLiBBdG9tcyBpbiBhbnkgcm93
cyBhYm92ZSBtX2N1cnJlbnRSb3dJbmRleCBhcmUgZ3VhcmFudGVlZCB0byBiZQorICAgIC8vICAg
IGFsbG9jYXRlZCBhbHJlYWR5IChiZWNhdXNlIHdlIGFsbG9jYXRlIGRvd253YXJkcykuCisgICAg
Ly8gMi4gRm9yIHJvdyBtX2N1cnJlbnRSb3dJbmRleCwgbV9jdXJyZW50Um93Qml0bWFwIGlzIHRo
ZSBzb3VyY2Ugb2YgdHJ1dGgKKyAgICAvLyAgICBvbiB3aGljaCBhdG9tcyBpbiB0aGUgcm93IGFy
ZSBhdmFpbGFibGUgZm9yIGFsbG9jYXRpb24uCisgICAgLy8gMy4gRm9yIHJvd3MgYmVsb3cgbV9j
dXJyZW50Um93SW5kZXgsIG1fYml0bWFwIGlzIHRoZSBzb3VyY2Ugb2YgdHJ1dGggb24KKyAgICAv
LyAgICB3aGljaCBhdG9tcyBhcmUgYXZhaWxhYmxlIGZvciBhbGxvY2F0aW9uLgorICAgIC8vCisg
ICAgLy8gV2hlbiBtX2N1cnJlbnRSb3dJbmRleCByZWFjaGVzIDAsIHRoZSBpbmZvIGluIG1fYml0
bWFwIGlzIGNvbXBsZXRlbHkKKyAgICAvLyBvYnNvbGV0ZWQsIGFuZCBtX2N1cnJlbnRSb3dCaXRt
YXAgaG9sZHMgdGhlIGF2YWlsYWJpbGl0eSBpbmZvIGZvciByb3cgMC4KKyAgICAvLyBXaGVuIGJv
dGggbV9jdXJyZW50Um93SW5kZXggYW5kIG1fY3VycmVudFJvd0JpdG1hcCBhcmUgMCwgdGhlbiB3
ZSBoYXZlCisgICAgLy8gY29tcGxldGVseSBleGhhdXN0ZWQgdGhlIGJsb2NrIGFuZCBubyBtb3Jl
IGF0b21zIGFyZSBhdmFpbGFibGUgZm9yCisgICAgLy8gYWxsb2NhdGlvbi4KKworICAgIHVuc2ln
bmVkIG1fY3VycmVudFJvd0luZGV4IHsgMCB9OworICAgIEF0b21zQml0bWFwOjpXb3JkIG1fY3Vy
cmVudFJvd0JpdG1hcCB7IDAgfTsKKyAgICBBdG9tKiBtX2N1cnJlbnRNYXJrZWRCbG9ja1Jvd0Fk
ZHJlc3MgeyBudWxscHRyIH07CisgICAgQXRvbXNCaXRtYXAgbV9iaXRtYXA7CisjZWxzZQorICAg
IHVpbnRwdHJfdCBtX3NjcmFtYmxlZEhlYWQgeyAwIH07CisgICAgdWludHB0cl90IG1fc2VjcmV0
IHsgMCB9OworI2VuZGlmCisKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIE1hcmtlZEJsb2NrOjpI
YW5kbGUqIG1fbWFya2VkQmxvY2sgeyBudWxscHRyIH07CisjZW5kaWYKKworICAgIGZyaWVuZCBj
bGFzcyBNYXJrZWRCbG9jazsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3RJbmxpbmVzLmgJKHJldmlzaW9uIDI2Mjg4
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0SW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI2LDcgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRnJlZUxp
c3QuaCIKLSNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MCwxMyArNDAsNDggQEAgQUxXQVlTX0lOTElO
RSBIZWFwQ2VsbCogRnJlZUxpc3Q6OmFsbG9jYQogICAgICAgICBtX3JlbWFpbmluZyA9IHJlbWFp
bmluZzsKICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KG1fcGF5bG9hZEVu
ZCAtIHJlbWFpbmluZyAtIGNlbGxTaXplKTsKICAgICB9Ci0gICAgCisKKyNpZiBFTkFCTEUoQklU
TUFQX0ZSRUVMSVNUKQorICAgIEF0b21zQml0bWFwOjpXb3JkIHJvd0JpdG1hcCA9IG1fY3VycmVu
dFJvd0JpdG1hcDsKKyAgICBkbyB7CisgICAgICAgIGlmIChyb3dCaXRtYXApIHsKKyAgICAgICAg
ICAgIGNvbnN0ZXhwciBBdG9tc0JpdG1hcDo6V29yZCBvbmUgPSAxOworICAgICAgICAgICAgdW5z
aWduZWQgYXRvbUluZGV4SW5Sb3cgPSBjdHoocm93Qml0bWFwKTsKKyAgICAgICAgICAgIGF1dG8q
IGNlbGwgPSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPigmbV9jdXJyZW50TWFya2VkQmxvY2tSb3dB
ZGRyZXNzW2F0b21JbmRleEluUm93XSk7CisgICAgICAgICAgICByb3dCaXRtYXAgJj0gfihvbmUg
PDwgYXRvbUluZGV4SW5Sb3cpOworICAgICAgICAgICAgbV9jdXJyZW50Um93Qml0bWFwID0gcm93
Qml0bWFwOworICAgICAgICAgICAgcmV0dXJuIGNlbGw7CisgICAgICAgIH0KKworICAgICAgICB1
bnNpZ25lZCByb3dJbmRleCA9IG1fY3VycmVudFJvd0luZGV4OworICAgICAgICBhdXRvKiByb3dB
ZGRyZXNzID0gbV9jdXJyZW50TWFya2VkQmxvY2tSb3dBZGRyZXNzOworI2lmIFVTRV9BREpVU1RF
RF9CSVRNQVBfU1RBUlQKKyAgICAgICAgd2hpbGUgKHJvd0luZGV4KSB7CisgICAgICAgICAgICBy
b3dCaXRtYXAgPSBiaXRtYXBSb3dzKClbcm93SW5kZXgtLV07CisjZWxzZQorICAgICAgICB3aGls
ZSAocm93SW5kZXgpIHsKKyAgICAgICAgICAgIHJvd0JpdG1hcCA9IGJpdG1hcFJvd3MoKVstLXJv
d0luZGV4XTsKKyNlbmRpZgorICAgICAgICAgICAgcm93QWRkcmVzcyAtPSBhdG9tc1BlclJvdzsK
KyAgICAgICAgICAgIGlmIChyb3dCaXRtYXApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgbV9jdXJyZW50TWFya2VkQmxvY2tSb3dBZGRyZXNzID0gcm93QWRkcmVz
czsKKyAgICAgICAgbV9jdXJyZW50Um93SW5kZXggPSByb3dJbmRleDsKKyAgICB9IHdoaWxlIChy
b3dCaXRtYXApOworCisgICAgbV9jdXJyZW50Um93Qml0bWFwID0gcm93Qml0bWFwOworICAgIEFT
U0VSVChiaXRtYXBJc0VtcHR5KCkpOworICAgIHJldHVybiBzbG93UGF0aCgpOworCisjZWxzZSAv
LyAhRU5BQkxFKEJJVE1BUF9GUkVFTElTVCkKICAgICBGcmVlQ2VsbCogcmVzdWx0ID0gaGVhZCgp
OwogICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKICAgICAgICAgcmV0dXJuIHNsb3dQYXRoKCk7
CiAgICAgCiAgICAgbV9zY3JhbWJsZWRIZWFkID0gcmVzdWx0LT5zY3JhbWJsZWROZXh0OwogICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihyZXN1bHQpOworI2VuZGlmIC8vICFFTkFC
TEUoQklUTUFQX0ZSRUVMSVNUKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgpAQCAtNTYs
NiArOTEsMzUgQEAgdm9pZCBGcmVlTGlzdDo6Zm9yRWFjaChjb25zdCBGdW5jJiBmdW5jKQogICAg
ICAgICBmb3IgKHVuc2lnbmVkIHJlbWFpbmluZyA9IG1fcmVtYWluaW5nOyByZW1haW5pbmc7IHJl
bWFpbmluZyAtPSBtX2NlbGxTaXplKQogICAgICAgICAgICAgZnVuYyhiaXR3aXNlX2Nhc3Q8SGVh
cENlbGwqPihtX3BheWxvYWRFbmQgLSByZW1haW5pbmcpKTsKICAgICB9IGVsc2UgeworI2lmIEVO
QUJMRShCSVRNQVBfRlJFRUxJU1QpCisgICAgICAgIGlmIChiaXRtYXBJc0VtcHR5KCkpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgQXRvbXNCaXRtYXA6OldvcmQgcm93Qml0bWFwID0g
bV9jdXJyZW50Um93Qml0bWFwOworICAgICAgICB1bnNpZ25lZCByb3dJbmRleCA9IG1fY3VycmVu
dFJvd0luZGV4OworICAgICAgICBBdG9tKiBjdXJyZW50TWFya2VkQmxvY2tSb3dBZGRyZXNzID0g
bV9jdXJyZW50TWFya2VkQmxvY2tSb3dBZGRyZXNzOworICAgICAgICBkbyB7CisgICAgICAgICAg
ICB3aGlsZSAocm93Qml0bWFwKSB7CisgICAgICAgICAgICAgICAgY29uc3RleHByIEF0b21zQml0
bWFwOjpXb3JkIG9uZSA9IDE7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgYXRvbUluZGV4SW5S
b3cgPSBjdHoocm93Qml0bWFwKTsKKyAgICAgICAgICAgICAgICBhdXRvKiBjZWxsID0gYml0d2lz
ZV9jYXN0PEhlYXBDZWxsKj4oJmN1cnJlbnRNYXJrZWRCbG9ja1Jvd0FkZHJlc3NbYXRvbUluZGV4
SW5Sb3ddKTsKKyAgICAgICAgICAgICAgICByb3dCaXRtYXAgJj0gfihvbmUgPDwgYXRvbUluZGV4
SW5Sb3cpOworICAgICAgICAgICAgICAgIGZ1bmMoY2VsbCk7CisgICAgICAgICAgICB9CisKKyNp
ZiBVU0VfQURKVVNURURfQklUTUFQX1NUQVJUCisgICAgICAgICAgICB3aGlsZSAocm93SW5kZXgp
IHsKKyAgICAgICAgICAgICAgICByb3dCaXRtYXAgPSBiaXRtYXBSb3dzKClbcm93SW5kZXgtLV07
CisjZWxzZQorICAgICAgICAgICAgd2hpbGUgKHJvd0luZGV4KSB7CisgICAgICAgICAgICAgICAg
cm93Qml0bWFwID0gYml0bWFwUm93cygpWy0tcm93SW5kZXhdOworI2VuZGlmCisgICAgICAgICAg
ICAgICAgY3VycmVudE1hcmtlZEJsb2NrUm93QWRkcmVzcyAtPSBhdG9tc1BlclJvdzsKKyAgICAg
ICAgICAgICAgICBpZiAocm93Qml0bWFwKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAocm93Qml0bWFwKTsKKyNlbHNlCiAgICAgICAg
IGZvciAoRnJlZUNlbGwqIGNlbGwgPSBoZWFkKCk7IGNlbGw7KSB7CiAgICAgICAgICAgICAvLyBX
ZSBjYW4gdXNlIHRoaXMgdG8gb3ZlcndyaXRlIGZyZWUgb2JqZWN0cyBiZWZvcmUgZGVzdHJveWlu
ZyB0aGUgZnJlZSBsaXN0LiBTbywgd2UgbmVlZAogICAgICAgICAgICAgLy8gdG8gZ2V0IG5leHQg
YmVmb3JlIHByb2NlZWRpbmcgZnVydGhlci4KQEAgLTYzLDggKzEyNyw4IEBAIHZvaWQgRnJlZUxp
c3Q6OmZvckVhY2goY29uc3QgRnVuYyYgZnVuYykKICAgICAgICAgICAgIGZ1bmMoYml0d2lzZV9j
YXN0PEhlYXBDZWxsKj4oY2VsbCkpOwogICAgICAgICAgICAgY2VsbCA9IG5leHQ7CiAgICAgICAg
IH0KKyNlbmRpZgogICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDI2
Mjg4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI3Miw3ICsyNzIsNyBAQCBib29sIExvY2FsQWxsb2NhdG9yOjpp
c0ZyZWVMaXN0ZWRDZWxsKGNvCiAgICAgLy8gaWYgd2Uga25vdyB0aGF0IHRoZSBibG9jayBvd25p
bmcgdGhlIG9iamVjdCBpcyBmcmVlLWxpc3RlZCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGFu
eQogICAgIC8vIG9iamVjdHMgdG8gYmUgaW4gdGhlIGRlYWQtYnV0LW5vdC1kZXN0cnVjdGVkIHN0
YXRlLgogICAgIC8vIEZJWE1FOiBHZXQgcmlkIG9mIHRoaXMgYWJvbWluYXRpb24uIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODE2NTUKLSAgICByZXR1cm4gbV9mcmVl
TGlzdC5jb250YWlucyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPih0YXJnZXQpKTsKKyAgICByZXR1
cm4gbV9mcmVlTGlzdC5jb250YWlucyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPih0YXJnZXQpLCBt
X2N1cnJlbnRCbG9jayk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyNjI4ODgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4g
KHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1r
QHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC04NCw2ICs4NCw4IEBA
IHB1YmxpYzoKICAgICBzdGF0aWNfYXNzZXJ0KCEoTWFya2VkQmxvY2s6OmF0b21TaXplICYgKE1h
cmtlZEJsb2NrOjphdG9tU2l6ZSAtIDEpKSwgIk1hcmtlZEJsb2NrOjphdG9tU2l6ZSBtdXN0IGJl
IGEgcG93ZXIgb2YgdHdvLiIpOwogICAgIHN0YXRpY19hc3NlcnQoIShNYXJrZWRCbG9jazo6Ymxv
Y2tTaXplICYgKE1hcmtlZEJsb2NrOjpibG9ja1NpemUgLSAxKSksICJNYXJrZWRCbG9jazo6Ymxv
Y2tTaXplIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7CiAgICAgCisgICAgdXNpbmcgQXRvbXNC
aXRtYXAgPSBCaXRtYXA8YXRvbXNQZXJCbG9jaz47CisKICAgICBzdHJ1Y3QgVm9pZEZ1bmN0b3Ig
ewogICAgICAgICB0eXBlZGVmIHZvaWQgUmV0dXJuVHlwZTsKICAgICAgICAgdm9pZCByZXR1cm5W
YWx1ZSgpIHsgfQpAQCAtMjAzLDYgKzIwNSw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAg
IHZvaWQqIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gJm1fYmxvY2stPmF0b21zKClbMF07IH0KICAg
ICAgICAgdm9pZCogZW5kKCkgY29uc3QgeyByZXR1cm4gJm1fYmxvY2stPmF0b21zKClbbV9lbmRB
dG9tXTsgfQorICAgICAgICB2b2lkKiBhdG9tQXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuICZt
X2Jsb2NrLT5hdG9tcygpW2ldOyB9CiAgICAgICAgIGJvb2wgY29udGFpbnModm9pZCogcCkgY29u
c3QgeyByZXR1cm4gc3RhcnQoKSA8PSBwICYmIHAgPCBlbmQoKTsgfQogCiAgICAgICAgIHZvaWQg
ZHVtcFN0YXRlKFByaW50U3RyZWFtJik7CkBAIC0yOTQsOCArMjk3LDggQEAgcHVibGljOgogICAg
ICAgICBIZWFwVmVyc2lvbiBtX21hcmtpbmdWZXJzaW9uOwogICAgICAgICBIZWFwVmVyc2lvbiBt
X25ld2x5QWxsb2NhdGVkVmVyc2lvbjsKIAotICAgICAgICBCaXRtYXA8YXRvbXNQZXJCbG9jaz4g
bV9tYXJrczsKLSAgICAgICAgQml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbmV3bHlBbGxvY2F0ZWQ7
CisgICAgICAgIEF0b21zQml0bWFwIG1fbWFya3M7CisgICAgICAgIEF0b21zQml0bWFwIG1fbmV3
bHlBbGxvY2F0ZWQ7CiAgICAgfTsKICAgICAKIHByaXZhdGU6ICAgIApAQCAtMzM2LDcgKzMzOSw3
IEBAIHB1YmxpYzoKICAgICBib29sIGlzTmV3bHlBbGxvY2F0ZWQoY29uc3Qgdm9pZCopOwogICAg
IHZvaWQgc2V0TmV3bHlBbGxvY2F0ZWQoY29uc3Qgdm9pZCopOwogICAgIHZvaWQgY2xlYXJOZXds
eUFsbG9jYXRlZChjb25zdCB2b2lkKik7Ci0gICAgY29uc3QgQml0bWFwPGF0b21zUGVyQmxvY2s+
JiBuZXdseUFsbG9jYXRlZCgpIGNvbnN0OworICAgIGNvbnN0IEF0b21zQml0bWFwJiBuZXdseUFs
bG9jYXRlZCgpIGNvbnN0OwogICAgIAogICAgIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVy
c2lvbigpIGNvbnN0IHsgcmV0dXJuIGZvb3RlcigpLm1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uOyB9
CiAgICAgCkBAIC0zNzQsNyArMzc3LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNNYXJrZWRSYXco
Y29uc3Qgdm9pZCogcCk7CiAgICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24oKSBjb25zdCB7
IHJldHVybiBmb290ZXIoKS5tX21hcmtpbmdWZXJzaW9uOyB9CiAgICAgCi0gICAgY29uc3QgQml0
bWFwPGF0b21zUGVyQmxvY2s+JiBtYXJrcygpIGNvbnN0OworICAgIGNvbnN0IEF0b21zQml0bWFw
JiBtYXJrcygpIGNvbnN0OwogICAgIAogICAgIENvdW50aW5nTG9jayYgbG9jaygpIHsgcmV0dXJu
IGZvb3RlcigpLm1fbG9jazsgfQogICAgIApAQCAtMzk5LDYgKzQwMiw4IEBAIHByaXZhdGU6CiAg
ICAgCiAgICAgaW5saW5lIGJvb2wgbWFya3NDb252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcoSGVh
cFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwogICAgIGlubGluZSBib29sIG1hcmtzQ29udmV5TGl2
ZW5lc3NEdXJpbmdNYXJraW5nKEhlYXBWZXJzaW9uIG15TWFya2luZ1ZlcnNpb24sIEhlYXBWZXJz
aW9uIG1hcmtpbmdWZXJzaW9uKTsKKworICAgIGZyaWVuZCBjbGFzcyBGcmVlTGlzdDsKIH07CiAK
IGlubGluZSBNYXJrZWRCbG9jazo6Rm9vdGVyJiBNYXJrZWRCbG9jazo6Zm9vdGVyKCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCShy
ZXZpc2lvbiAyNjI4ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9j
a0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAzLDYgKzMwMyw2NCBAQCB2b2lkIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
KyNpZiBFTkFCTEUoQklUTUFQX0ZSRUVMSVNUKQorICAgIEF0b21zQml0bWFwIGxvY2FsRnJlZUF0
b21zOworICAgIEF0b21zQml0bWFwJiBmcmVlQXRvbXMgPSBmcmVlTGlzdCA/IGZyZWVMaXN0LT5h
dG9tc0JpdG1hcCgpIDogbG9jYWxGcmVlQXRvbXM7CisKKyAgICBhdXRvIGhhbmRsZURlYWRDZWxs
ID0gWyZdIChzaXplX3QgaSkgeworICAgICAgICBIZWFwQ2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0
X2Nhc3RfcHRyPEhlYXBDZWxsKj4oYXRvbUF0KGkpKTsKKworICAgICAgICBpZiAoZGVzdHJ1Y3Rp
b25Nb2RlICE9IEJsb2NrSGFzTm9EZXN0cnVjdG9ycykKKyAgICAgICAgICAgIGRlc3Ryb3koY2Vs
bCk7CisKKyAgICAgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpIHsKKyAgICAg
ICAgICAgIGlmIChzY3JpYmJsZU1vZGUgPT0gU2NyaWJibGUpCisgICAgICAgICAgICAgICAgc2Ny
aWJibGUoY2VsbCwgY2VsbFNpemUpOworICAgICAgICB9CisgICAgfTsKKworICAgIGJvb2wgaXNF
bXB0eSA9IHRydWU7CisKKyAgICBBdG9tc0JpdG1hcCBjZWxsTG9jYXRpb25zOworICAgIGNlbGxM
b2NhdGlvbnMuc2V0RWFjaE50aEJpdChtX2F0b21zUGVyQ2VsbCwgMCwgbV9lbmRBdG9tKTsKKwor
ICAgIGlmIChlbXB0eU1vZGUgPT0gTm90RW1wdHkpIHsKKyAgICAgICAgaWYgKG1hcmtzTW9kZSA9
PSBNYXJrc05vdFN0YWxlKSB7CisgICAgICAgICAgICBmcmVlQXRvbXMgPSBmb290ZXIubV9tYXJr
czsKKyAgICAgICAgICAgIGlmIChuZXdseUFsbG9jYXRlZE1vZGUgPT0gSGFzTmV3bHlBbGxvY2F0
ZWQpCisgICAgICAgICAgICAgICAgZnJlZUF0b21zIHw9IGZvb3Rlci5tX25ld2x5QWxsb2NhdGVk
OworICAgICAgICB9IGVsc2UgaWYgKG5ld2x5QWxsb2NhdGVkTW9kZSA9PSBIYXNOZXdseUFsbG9j
YXRlZCkKKyAgICAgICAgICAgIGZyZWVBdG9tcyA9IGZvb3Rlci5tX25ld2x5QWxsb2NhdGVkOwor
ICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCBhIHNldCBiaXQgaW4gZnJlZUF0b21zIHJlcHJlc2Vu
dHMgbGl2ZSBjZWxscy4KKyAgICAgICAgaXNFbXB0eSA9IGZyZWVBdG9tcy5pc0VtcHR5KCk7CisK
KyAgICAgICAgLy8gSW52ZXJ0IHRoZSBiaXRzIGF0IGVhY2ggY2VsbCBsb2NhdGlvbiBzbyB0aGF0
IHRoZSBvbmVzIGZvciBsaXZlIGNlbGxzCisgICAgICAgIC8vIGFyZSBjbGVhcmVkLCBhbmQgdGhl
IG9uZXMgZm9yIGRlYWQgY2VsbHMgYXJlIHNldC4KKyAgICAgICAgZnJlZUF0b21zIF49IGNlbGxM
b2NhdGlvbnM7CisgICAgfSBlbHNlCisgICAgICAgIGZyZWVBdG9tcyA9IGNlbGxMb2NhdGlvbnM7
IC8vIGFsbCBjZWxscyBhcmUgZnJlZS4KKyAgICAKKyAgICAvLyBXZSBvbmx5IHdhbnQgdG8gZGlz
Y2FyZCB0aGUgbmV3bHlBbGxvY2F0ZWQgYml0cyBpZiB3ZSdyZSBjcmVhdGluZyBhIEZyZWVMaXN0
LAorICAgIC8vIG90aGVyd2lzZSB3ZSB3b3VsZCBsb3NlIGluZm9ybWF0aW9uIG9uIHdoYXQncyBj
dXJyZW50bHkgYWxpdmUuCisgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QgJiYg
bmV3bHlBbGxvY2F0ZWRNb2RlID09IEhhc05ld2x5QWxsb2NhdGVkKQorICAgICAgICBmb290ZXIu
bV9uZXdseUFsbG9jYXRlZFZlcnNpb24gPSBNYXJrZWRTcGFjZTo6bnVsbFZlcnNpb247CisKKyAg
ICBpZiAoc3BhY2UoKS0+aXNNYXJraW5nKCkpCisgICAgICAgIGZvb3Rlci5tX2xvY2sudW5sb2Nr
KCk7CisKKyAgICBpZiAoZGVzdHJ1Y3Rpb25Nb2RlICE9IEJsb2NrSGFzTm9EZXN0cnVjdG9ycykK
KyAgICAgICAgZnJlZUF0b21zLmZvckVhY2hTZXRCaXQoaGFuZGxlRGVhZENlbGwpOworCisgICAg
aWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpIHsKKyAgICAgICAgZnJlZUxpc3QtPmlu
aXRpYWxpemVBdG9tc0JpdG1hcCh0aGlzLCBmcmVlQXRvbXMpOworICAgICAgICBzZXRJc0ZyZWVM
aXN0ZWQoKTsKKyAgICB9IGVsc2UgaWYgKGlzRW1wdHkpCisgICAgICAgIG1fZGlyZWN0b3J5LT5z
ZXRJc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcywgdHJ1ZSk7CisgICAgaWYgKGZhbHNl
KQorICAgICAgICBkYXRhTG9nKCJTbG93bHkgc3dlcHQgYmxvY2sgIiwgUmF3UG9pbnRlcigmYmxv
Y2spLCAiIHdpdGggY2VsbCBzaXplICIsIGNlbGxTaXplLCAiIGFuZCBhdHRyaWJ1dGVzICIsIG1f
YXR0cmlidXRlcywgIjogIiwgcG9pbnRlckR1bXAoZnJlZUxpc3QpLCAiXG4iKTsKKworI2Vsc2Ug
Ly8gbm90IEVOQUJMRShCSVRNQVBfRlJFRUxJU1QpCisKICAgICAvLyBUaGlzIHByb2R1Y2VzIGEg
ZnJlZSBsaXN0IHRoYXQgaXMgb3JkZXJlZCBpbiByZXZlcnNlIHRocm91Z2ggdGhlIGJsb2NrLgog
ICAgIC8vIFRoaXMgaXMgZmluZSwgc2luY2UgdGhlIGFsbG9jYXRpb24gY29kZSBtYWtlcyBubyBh
c3N1bXB0aW9ucyBhYm91dCB0aGUKICAgICAvLyBvcmRlciBvZiB0aGUgZnJlZSBsaXN0LgpAQCAt
MzYxLDYgKzQxOSw3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2UK
ICAgICAgICAgbV9kaXJlY3RvcnktPnNldElzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlz
LCB0cnVlKTsKICAgICBpZiAoZmFsc2UpCiAgICAgICAgIGRhdGFMb2coIlNsb3dseSBzd2VwdCBi
bG9jayAiLCBSYXdQb2ludGVyKCZibG9jayksICIgd2l0aCBjZWxsIHNpemUgIiwgY2VsbFNpemUs
ICIgYW5kIGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzLCAiOiAiLCBwb2ludGVyRHVtcChmcmVl
TGlzdCksICJcbiIpOworI2VuZGlmIC8vIEVOQUJMRShCSVRNQVBfRlJFRUxJU1QpCiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIERlc3Ryb3lGdW5jPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjYyODg4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MDMsNyArNTAzLDcgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRSYW5kb21UaHVuayhW
TQogfQogI2VuZGlmCiAKLXZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0QWxsb2NhdGVXaXRoTm9u
TnVsbEFsbG9jYXRvcihHUFJSZWcgcmVzdWx0R1BSLCBjb25zdCBKSVRBbGxvY2F0b3ImIGFsbG9j
YXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBz
bG93UGF0aCkKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFs
bG9jYXRvcihHUFJSZWcgcmVzdWx0R1BSLCBjb25zdCBKSVRBbGxvY2F0b3ImIGFsbG9jYXRvciwg
R1BSUmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0
aCwgR1BSUmVnIHNjcmF0Y2hHUFIyKQogewogICAgIGlmIChPcHRpb25zOjpmb3JjZUdDU2xvd1Bh
dGhzKCkpIHsKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGp1bXAoKSk7CkBAIC01MTYsNyArNTE2
LDcgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZVdpdGhObwogICAgIC8vIC0g
V2UgKmNhbiogdXNlIFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMgb24gQVJNLgog
CiAgICAgSnVtcCBwb3BQYXRoOwotICAgIEp1bXAgZG9uZTsKKyAgICBKdW1wTGlzdCBkb25lOwog
ICAgIAogICAgIGlmIChhbGxvY2F0b3IuaXNDb25zdGFudCgpKQogICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoYWxsb2NhdG9yLmFsbG9jYXRvcigpLmxvY2FsQWxsb2NhdG9yKCkpLCBhbGxvY2F0
b3JHUFIpOwpAQCAtNTM0LDEwICs1MzQsODEgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRB
bGxvY2F0ZVdpdGhObwogICAgIEFkZHJlc3MgcGF5bG9hZEVuZEFkZHIgPSBBZGRyZXNzKGFsbG9j
YXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0Ojpv
ZmZzZXRPZlBheWxvYWRFbmQoKSk7CiAgICAgYWRkUHRyKHBheWxvYWRFbmRBZGRyLCByZXN1bHRH
UFIpOwogCi0gICAgZG9uZSA9IGp1bXAoKTsKKyAgICBkb25lLmFwcGVuZChqdW1wKCkpOwogICAg
ICAgICAKICAgICBwb3BQYXRoLmxpbmsodGhpcyk7Ci0gICAgICAgIAorCisjaWYgRU5BQkxFKEJJ
VE1BUF9GUkVFTElTVCkKKyAgICBpZiAoc2NyYXRjaEdQUjIgPT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgc2NyYXRjaEdQUjIgPSBzY3JhdGNoUmVnaXN0ZXIoKTsKKyAgICBSRUxFQVNFX0FTU0VS
VChzY3JhdGNoR1BSMiAhPSByZXN1bHRHUFIpOworICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2hH
UFIyICE9IHNjcmF0Y2hHUFIpOworICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2hHUFIgIT0gcmVz
dWx0R1BSKTsKKworICAgIC8vIFRoZSBjb2RlIGJlbG93IGZvciByb3dCaXRtYXBHUFIgcmVsaWVz
IG9uIHRoaXMuCisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoRnJlZUxpc3Q6OkF0b21zQml0bWFw
OjpXb3JkKSA9PSBzaXplb2YodWludDY0X3QpKTsKKworICAgIC8vIENoZWNrIGZvciBhbiBhdmFp
bGFibGUgYml0IGluIG1fY3VycmVudFJvd0JpdG1hcC4KKyAgICBhdXRvIHJvd0JpdG1hcEdQUiA9
IHNjcmF0Y2hHUFI7CisgICAgbG9hZDY0KEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9j
YXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mQ3VycmVudFJvd0Jp
dG1hcCgpKSwgcm93Qml0bWFwR1BSKTsKKyAgICBKdW1wIGFsbG9jYXRlRnJvbUN1cnJlbnRSb3cg
PSBicmFuY2hUZXN0NjQoTm9uWmVybywgcm93Qml0bWFwR1BSKTsKKworICAgIC8vIEJpdG1hcCBm
YXN0IHBhdGggZmFpbGVkOiBjaGVjayBpZiB0aGVyZSdzIGFub3RoZXIgcm93IHRvIGFsbG9jYXRl
IGZyb20uCisgICAgYXV0byByb3dJbmRleEdQUiA9IHJlc3VsdEdQUjsKKyAgICBsb2FkMzIoQWRk
cmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBG
cmVlTGlzdDo6b2Zmc2V0T2ZDdXJyZW50Um93SW5kZXgoKSksIHJvd0luZGV4R1BSKTsKKyAgICBz
bG93UGF0aC5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByb3dJbmRleEdQUikpOworCisgICAg
YXV0byByb3dBZGRyZXNzR1BSID0gc2NyYXRjaEdQUjI7CisgICAgbG9hZFB0cihBZGRyZXNzKGFs
bG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0
OjpvZmZzZXRPZkN1cnJlbnRNYXJrZWRCbG9ja1Jvd0FkZHJlc3MoKSksIHJvd0FkZHJlc3NHUFIp
OworCisgICAgLy8gVGhlcmUgaXMgYW5vdGhlciByb3cgbGVmdCB0byBjaGVjay4KKyAgICBKdW1w
IGZvdW5kTm9uRW1wdHlSb3c7CisgICAgTGFiZWwgY2hlY2tOZXh0Um93ID0gbGFiZWwoKTsKKyAg
ICB7CisgICAgICAgIC8vIExvYWQgdGhlIG5leHQgcm93IGJpdG1hcCBhbmQgcG9pbnQgbV9jdXJy
ZW50TWFya2VkQmxvY2tSb3dBZGRyZXNzIHRvIHRoZSBuZXh0IHJvdy4KKyNpZiAhVVNFX0FESlVT
VEVEX0JJVE1BUF9TVEFSVAorICAgICAgICBzdWI2NChUcnVzdGVkSW1tMzIoMSksIHJvd0luZGV4
R1BSKTsKKyNlbmRpZgorICAgICAgICBsb2FkNjQoQmFzZUluZGV4KGFsbG9jYXRvckdQUiwgcm93
SW5kZXhHUFIsIFRpbWVzRWlnaHQsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkg
KyBGcmVlTGlzdDo6b2Zmc2V0T2ZCaXRtYXBSb3dzKCkpLCByb3dCaXRtYXBHUFIpOworCisjaWYg
VVNFX0FESlVTVEVEX0JJVE1BUF9TVEFSVAorICAgICAgICBzdWI2NChUcnVzdGVkSW1tMzIoMSks
IHJvd0luZGV4R1BSKTsKKyNlbmRpZgorICAgICAgICBzdWJQdHIoVHJ1c3RlZEltbTMyKEZyZWVM
aXN0OjphdG9tc1Jvd0J5dGVzKSwgcm93QWRkcmVzc0dQUik7CisKKyAgICAgICAgZm91bmROb25F
bXB0eVJvdyA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByb3dCaXRtYXBHUFIpOworICAgICAgICBi
cmFuY2hUZXN0UHRyKE5vblplcm8sIHJvd0luZGV4R1BSKS5saW5rVG8oY2hlY2tOZXh0Um93LCB0
aGlzKTsKKyAgICB9CisKKyAgICAvLyBObyBtb3JlIHJvd3MuCisgICAgLy8gQm90aCByb3dJbmRl
eEdQUiBhbmQgcm93Qml0bWFwR1BSIHNob3VsZCBiZSBudWxsIGhlcmUuCisgICAgc3RvcmUzMihy
b3dJbmRleEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRP
ZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZDdXJyZW50Um93SW5kZXgoKSkpOworICAg
IHN0b3JlNjQocm93Qml0bWFwR1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0
b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZkN1cnJlbnRSb3dCaXRt
YXAoKSkpOworICAgIHNsb3dQYXRoLmFwcGVuZChqdW1wKCkpOworCisgICAgZm91bmROb25FbXB0
eVJvdy5saW5rKHRoaXMpOworICAgIHN0b3JlUHRyKHJvd0FkZHJlc3NHUFIsIEFkZHJlc3MoYWxs
b2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6
Om9mZnNldE9mQ3VycmVudE1hcmtlZEJsb2NrUm93QWRkcmVzcygpKSk7CisgICAgc3RvcmUzMihy
b3dJbmRleEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRP
ZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZDdXJyZW50Um93SW5kZXgoKSkpOworCisg
ICAgLy8gQml0bWFwIGZhc3QgcGF0aCBzdWNjZWVkZWQ6IHdlIGhhdmUgYSBiaXQgdG8gdXNlLgor
ICAgIGFsbG9jYXRlRnJvbUN1cnJlbnRSb3cubGluayh0aGlzKTsKKyAgICB7CisgICAgICAgIC8v
IFJlbW92ZSB0aGlzIGJpdCBmcm9tIG1fY3VycmVudFJvd0JpdG1hcC4KKyAgICAgICAgYXV0byBh
dG9tSW5kZXhJblJvd0dQUiA9IHJlc3VsdEdQUjsKKyAgICAgICAgY291bnRUcmFpbGluZ1plcm9z
NjRXaXRob3V0TnVsbENoZWNrKHJvd0JpdG1hcEdQUiwgYXRvbUluZGV4SW5Sb3dHUFIpOworICAg
ICAgICBjbGVhckJpdDY0KGF0b21JbmRleEluUm93R1BSLCByb3dCaXRtYXBHUFIsIHNjcmF0Y2hH
UFIyKTsKKworICAgICAgICBhdXRvIHJvd0FkZHJlc3NHUFIgPSBzY3JhdGNoR1BSMjsKKyAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9m
RnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZkN1cnJlbnRNYXJrZWRCbG9ja1Jvd0FkZHJl
c3MoKSksIHJvd0FkZHJlc3NHUFIpOworICAgICAgICBzdG9yZTY0KHJvd0JpdG1hcEdQUiwgQWRk
cmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBG
cmVlTGlzdDo6b2Zmc2V0T2ZDdXJyZW50Um93Qml0bWFwKCkpKTsKKworICAgICAgICAvLyBDb21w
dXRlIGF0b20gYWRkcmVzcyBvZiB0aGlzIGJpdC4KKyAgICAgICAgQVNTRVJUKHJlc3VsdEdQUiA9
PSBhdG9tSW5kZXhJblJvd0dQUik7CisgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMihGcmVl
TGlzdDo6YXRvbVNpemVTaGlmdCksIHJlc3VsdEdQUik7CisgICAgICAgIGFkZFB0cihyb3dBZGRy
ZXNzR1BSLCByZXN1bHRHUFIpOworICAgIH0KKworI2Vsc2UKICAgICBsb2FkUHRyKEFkZHJlc3Mo
YWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxp
c3Q6Om9mZnNldE9mU2NyYW1ibGVkSGVhZCgpKSwgcmVzdWx0R1BSKTsKICAgICB4b3JQdHIoQWRk
cmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBG
cmVlTGlzdDo6b2Zmc2V0T2ZTZWNyZXQoKSksIHJlc3VsdEdQUik7CiAgICAgc2xvd1BhdGguYXBw
ZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVzdWx0R1BSKSk7CkBAIC01NDYsNyArNjE3LDggQEAg
dm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZVdpdGhObwogICAgIC8vIGl0J3Mgc3Rp
bGwgb24gdGhlIEdDJ3MgZnJlZSBsaXN0LgogICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIs
IEZyZWVDZWxsOjpvZmZzZXRPZlNjcmFtYmxlZE5leHQoKSksIHNjcmF0Y2hHUFIpOwogICAgIHN0
b3JlUHRyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6
b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2NyYW1ibGVkSGVhZCgpKSk7
Ci0gICAgICAgIAorI2VuZGlmCisKICAgICBkb25lLmxpbmsodGhpcyk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjYy
ODg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTg4Nyw4ICsxODg3LDggQEAgcHVibGljOgogICAgIC8vIHRoYXQgYWxs
b2NhdG9yIGlzIG5vbi1udWxsOyBhbGxvY2F0b3IgY2FuIGJlIG51bGwgYXMgYSBzaWduYWwgdGhh
dCB3ZSBkb24ndCBrbm93IHdoYXQgdGhlCiAgICAgLy8gdmFsdWUgb2YgYWxsb2NhdG9yR1BSIGlz
LiBBZGRpdGlvbmFsbHksIGlmIHRoZSBhbGxvY2F0b3IgaXMgbm90IG51bGwsIHRoZW4gdGhlcmUg
aXMgbm8gbmVlZAogICAgIC8vIHRvIHBvcHVsYXRlIGFsbG9jYXRvckdQUiAtIHRoaXMgY29kZSB3
aWxsIGlnbm9yZSB0aGUgY29udGVudHMgb2YgYWxsb2NhdG9yR1BSLgotICAgIHZvaWQgZW1pdEFs
bG9jYXRlV2l0aE5vbk51bGxBbGxvY2F0b3IoR1BSUmVnIHJlc3VsdEdQUiwgY29uc3QgSklUQWxs
b2NhdG9yJiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIEdQUlJlZyBzY3JhdGNoR1BS
LCBKdW1wTGlzdCYgc2xvd1BhdGgpOwotICAgIAorICAgIHZvaWQgZW1pdEFsbG9jYXRlV2l0aE5v
bk51bGxBbGxvY2F0b3IoR1BSUmVnIHJlc3VsdEdQUiwgY29uc3QgSklUQWxsb2NhdG9yJiwgR1BS
UmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCwg
R1BSUmVnIHNjcmF0Y2hHUFIyID0gSW52YWxpZEdQUlJlZyk7CisKICAgICB2b2lkIGVtaXRBbGxv
Y2F0ZShHUFJSZWcgcmVzdWx0R1BSLCBjb25zdCBKSVRBbGxvY2F0b3ImIGFsbG9jYXRvciwgR1BS
UmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCk7
CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3RydWN0dXJlVHlwZT4KSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0JpdG1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdG1hcC5o
CShyZXZpc2lvbiAyNjI4ODgpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAkod29ya2luZyBj
b3B5KQpAQCAtMTMwLDkgKzEzMCwxNSBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBoYXNoKCkg
Y29uc3Q7CiAKKyAgICAvLyBMb3cgbGV2ZWwgaW50ZXJmYWNlLgorICAgIHVzaW5nIFdvcmQgPSBX
b3JkVHlwZTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdHNJbldvcmQgPSBjb3Vu
dE9mQml0czxXb3JkVHlwZT47CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJP
ZldvcmRzID0gKGJpdG1hcFNpemUgKyBiaXRzSW5Xb3JkIC0gMSkgLyBiaXRzSW5Xb3JkOworICAg
IFdvcmRUeXBlIHdvcmRBdChzaXplX3Qgd29yZEluZGV4KSBjb25zdCB7IHJldHVybiBiaXRzW3dv
cmRJbmRleF07IH0KKwogcHJpdmF0ZToKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHdv
cmRTaXplID0gc2l6ZW9mKFdvcmRUeXBlKSAqIDg7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCB3b3JkcyA9IChiaXRtYXBTaXplICsgd29yZFNpemUgLSAxKSAvIHdvcmRTaXplOworICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgd29yZFNpemUgPSBiaXRzSW5Xb3JkOworICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgd29yZHMgPSBudW1iZXJPZldvcmRzOwogCiAgICAgLy8g
dGhlIGxpdGVyYWwgJzEnIGlzIG9mIHR5cGUgc2lnbmVkIGludC4gIFdlIHdhbnQgdG8gdXNlIGFu
IHVuc2lnbmVkCiAgICAgLy8gdmVyc2lvbiBvZiB0aGUgY29ycmVjdCBzaXplIHdoZW4gZG9pbmcg
dGhlIGNhbGN1bGF0aW9ucyBiZWNhdXNlIGlmCkBAIC0zODAsMTIgKzM4NiwyNSBAQCBpbmxpbmUg
dm9pZCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+CiAgICAgICAgIGlmICghd29yZCkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBzaXplX3QgYmFzZSA9IGkgKiB3b3JkU2l6ZTsK
LSAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB3b3JkU2l6ZTsgKytqKSB7CisgICAgICAg
IHNpemVfdCBqID0gMDsKKyAgICAgICAgZm9yICg7IHdvcmQ7ICsraikgewogICAgICAgICAgICAg
aWYgKHdvcmQgJiAxKQogICAgICAgICAgICAgICAgIGZ1bmMoYmFzZSArIGopOwogICAgICAgICAg
ICAgd29yZCA+Pj0gMTsKICAgICAgICAgfQorICAgICAgICBBU1NFUlQoaiA8PSB3b3JkU2l6ZSk7
CiAgICAgfQorICAgIC8vIG1sYW0gTk9URTogbWljcm9iZW5jaG1hcmtzIHNob3dzIHRoaXMgdG8g
YmUgc2xvd2VyIGlmIGJpdHMgYXJlIGNvbnRpZ3VvdXMuCisvLyAgICBzaXplX3QgYmFzZSA9IDA7
CisvLyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmRzOyArK2kpIHsKKy8vICAgICAgICBX
b3JkVHlwZSB3b3JkID0gYml0c1tpXTsKKy8vICAgICAgICB3aGlsZSAod29yZCkgeworLy8gICAg
ICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGN0eih3b3JkKTsKKy8vICAgICAgICAgICAgd29yZCAm
PSB+KDEgPDwgaW5kZXgpOworLy8gICAgICAgICAgICBmdW5jKGJhc2UgKyBpbmRleCk7CisvLyAg
ICAgICAgfQorLy8gICAgICAgIGJhc2UgKz0gd29yZFNpemU7CisvLyAgICB9CiB9CiAKIHRlbXBs
YXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL01hdGhFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0
cmFzLmgJKHJldmlzaW9uIDI2Mjg4OCkKKysrIFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAko
d29ya2luZyBjb3B5KQpAQCAtNTkzLDcgKzU5Myw3IEBAIHZvaWQgc2h1ZmZsZVZlY3RvcihWZWN0
b3JUeXBlJiB2ZWN0b3IsIGMKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogY29uc3RleHByIHVuc2ln
bmVkIGNsekNvbnN0ZXhwcihUIHZhbHVlKQogewotICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRT
aXplID0gc2l6ZW9mKFQpICogQ0hBUl9CSVQ7CisgICAgY29uc3RleHByIHVuc2lnbmVkIGJpdFNp
emUgPSBjb3VudE9mQml0czxUPjsKIAogICAgIHVzaW5nIFVUID0gdHlwZW5hbWUgc3RkOjptYWtl
X3Vuc2lnbmVkPFQ+Ojp0eXBlOwogICAgIFVUIHVWYWx1ZSA9IHZhbHVlOwpAQCAtNjEwLDEzICs2
MTAsMTMgQEAgY29uc3RleHByIHVuc2lnbmVkIGNsekNvbnN0ZXhwcihUIHZhbHVlKQogdGVtcGxh
dGU8dHlwZW5hbWUgVD4KIGlubGluZSB1bnNpZ25lZCBjbHooVCB2YWx1ZSkKIHsKLSAgICBjb25z
dGV4cHIgdW5zaWduZWQgYml0U2l6ZSA9IHNpemVvZihUKSAqIENIQVJfQklUOworICAgIGNvbnN0
ZXhwciBzaXplX3QgYml0U2l6ZSA9IGNvdW50T2ZCaXRzPFQ+OwogCiAgICAgdXNpbmcgVVQgPSB0
eXBlbmFtZSBzdGQ6Om1ha2VfdW5zaWduZWQ8VD46OnR5cGU7CiAgICAgVVQgdVZhbHVlID0gdmFs
dWU7CiAKICNpZiBDT01QSUxFUihHQ0NfQ09NUEFUSUJMRSkKLSAgICBjb25zdGV4cHIgdW5zaWdu
ZWQgYml0U2l6ZTY0ID0gc2l6ZW9mKHVpbnQ2NF90KSAqIENIQVJfQklUOworICAgIGNvbnN0ZXhw
ciBzaXplX3QgYml0U2l6ZTY0ID0gY291bnRPZkJpdHM8dWludDY0X3Q+OwogICAgIGlmICh1VmFs
dWUpCiAgICAgICAgIHJldHVybiBfX2J1aWx0aW5fY2x6bGwodVZhbHVlKSAtIChiaXRTaXplNjQg
LSBiaXRTaXplKTsKICAgICByZXR1cm4gYml0U2l6ZTsKQEAgLTYzOCw3ICs2MzgsNyBAQCBpbmxp
bmUgdW5zaWduZWQgY2x6KFQgdmFsdWUpCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIGNvbnN0ZXhw
ciB1bnNpZ25lZCBjdHpDb25zdGV4cHIoVCB2YWx1ZSkKIHsKLSAgICBjb25zdGV4cHIgdW5zaWdu
ZWQgYml0U2l6ZSA9IHNpemVvZihUKSAqIENIQVJfQklUOworICAgIGNvbnN0ZXhwciB1bnNpZ25l
ZCBiaXRTaXplID0gY291bnRPZkJpdHM8VD47CiAKICAgICB1c2luZyBVVCA9IHR5cGVuYW1lIHN0
ZDo6bWFrZV91bnNpZ25lZDxUPjo6dHlwZTsKICAgICBVVCB1VmFsdWUgPSB2YWx1ZTsKQEAgLTY1
Nyw3ICs2NTcsNyBAQCBjb25zdGV4cHIgdW5zaWduZWQgY3R6Q29uc3RleHByKFQgdmFsdWUpCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgogaW5saW5lIHVuc2lnbmVkIGN0eihUIHZhbHVlKQogewotICAg
IGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRTaXplID0gc2l6ZW9mKFQpICogQ0hBUl9CSVQ7CisgICAg
Y29uc3RleHByIHVuc2lnbmVkIGJpdFNpemUgPSBjb3VudE9mQml0czxUPjsKIAogICAgIHVzaW5n
IFVUID0gdHlwZW5hbWUgc3RkOjptYWtlX3Vuc2lnbmVkPFQ+Ojp0eXBlOwogICAgIFVUIHVWYWx1
ZSA9IHZhbHVlOwpAQCAtNjk1LDcgKzY5NSw3IEBAIGNvbnN0ZXhwciB1bnNpZ25lZCBnZXRMU0JT
ZXRDb25zdGV4cHIoVCAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUgdW5zaWduZWQgZ2V0
TVNCU2V0KFQgdCkKIHsKLSAgICBjb25zdGV4cHIgdW5zaWduZWQgYml0U2l6ZSA9IHNpemVvZihU
KSAqIENIQVJfQklUOworICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRTaXplID0gY291bnRPZkJp
dHM8VD47CiAgICAgQVNTRVJUKHQpOwogICAgIHJldHVybiBiaXRTaXplIC0gMSAtIGNseih0KTsK
IH0KQEAgLTcwMywxMSArNzAzLDE0IEBAIGlubGluZSB1bnNpZ25lZCBnZXRNU0JTZXQoVCB0KQog
dGVtcGxhdGU8dHlwZW5hbWUgVD4KIGNvbnN0ZXhwciB1bnNpZ25lZCBnZXRNU0JTZXRDb25zdGV4
cHIoVCB0KQogewotICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRTaXplID0gc2l6ZW9mKFQpICog
Q0hBUl9CSVQ7CisgICAgY29uc3RleHByIHVuc2lnbmVkIGJpdFNpemUgPSBjb3VudE9mQml0czxU
PjsKICAgICBBU1NFUlRfVU5ERVJfQ09OU1RFWFBSX0NPTlRFWFQodCk7CiAgICAgcmV0dXJuIGJp
dFNpemUgLSAxIC0gY2x6Q29uc3RleHByKHQpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1
bnNpZ25lZCBsb2cyKFQgdmFsdWUpIHsgcmV0dXJuIGdldE1TQlNldCh2YWx1ZSk7IH0KK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciB1bnNpZ25lZCBsb2cyQ29uc3RleHByKFQgdmFsdWUp
IHsgcmV0dXJuIGdldE1TQlNldENvbnN0ZXhwcih2YWx1ZSk7IH0KKwogfSAvLyBuYW1lc3BhY2Ug
V1RGCiAKIHVzaW5nIFdURjo6c2h1ZmZsZVZlY3RvcjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401679</attachid>
            <date>2020-06-11 13:42:45 -0700</date>
            <delta_ts>2020-06-12 23:05:24 -0700</delta_ts>
            <desc>test patch 2: does use adjusted bitmap start.</desc>
            <filename>bug-213071b.patch</filename>
            <type>text/plain</type>
            <size>34461</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJ
KHJldmlzaW9uIDI2Mjg4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0IzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwNTEsNyArMTUwNTEsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzKys7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgIHBhdGNocG9pbnQtPmFwcGVuZFNvbWVSZWdpc3RlcldpdGhD
bG9iYmVyKGFsbG9jYXRvcik7Ci0gICAgICAgIHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lz
dGVycysrOworICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgKz0gMjsK
ICAgICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWludHMgPSB7IFZhbHVlUmVwOjpTb21l
RWFybHlSZWdpc3RlciB9OwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kU3VjY2Vzc29y
KHVzdWFsbHkoY29udGludWF0aW9uKSk7CkBAIC0xNTA2NCw3ICsxNTA2NCw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgR1BSUmVnIGFsbG9jYXRvckdQUjsK
ICAgICAgICAgICAgICAgICBpZiAoYWN0dWFsQWxsb2NhdG9yLmlzQ29uc3RhbnQoKSkKLSAgICAg
ICAgICAgICAgICAgICAgYWxsb2NhdG9yR1BSID0gcGFyYW1zLmdwU2NyYXRjaCgxKTsKKyAgICAg
ICAgICAgICAgICAgICAgYWxsb2NhdG9yR1BSID0gcGFyYW1zLmdwU2NyYXRjaCgyKTsKICAgICAg
ICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRvckdQUiA9IHBhcmFt
c1sxXS5ncHIoKTsKICAgICAgICAgICAgICAgICAKQEAgLTE1MDc2LDcgKzE1MDc2LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAvLyBhbGwgb2YgdGhlIGNvbXBpbGVyIHRpZXJzLgogICAg
ICAgICAgICAgICAgIGppdC5lbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcigKICAgICAg
ICAgICAgICAgICAgICAgcGFyYW1zWzBdLmdwcigpLCBhY3R1YWxBbGxvY2F0b3IsIGFsbG9jYXRv
ckdQUiwgcGFyYW1zLmdwU2NyYXRjaCgwKSwKLSAgICAgICAgICAgICAgICAgICAganVtcFRvU2xv
d1BhdGgpOworICAgICAgICAgICAgICAgICAgICBqdW1wVG9TbG93UGF0aCwgcGFyYW1zLmdwU2Ny
YXRjaCgxKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIGp1bXBUb1N1Y2Nlc3M7CiAgICAgICAgICAgICAgICAgaWYgKCFwYXJhbXMuZmFsbHNU
aHJvdWdoVG9TdWNjZXNzb3IoMCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9G
cmVlTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJl
ZUxpc3QuY3BwCShyZXZpc2lvbiAyNjI4ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9GcmVlTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zOSwxMyArMzksNDcgQEAgRnJlZUxp
c3Q6On5GcmVlTGlzdCgpCiAKIHZvaWQgRnJlZUxpc3Q6OmNsZWFyKCkKIHsKKyNpZiBFTkFCTEUo
QklUTUFQX0ZSRUVMSVNUKQorICAgIG1fY3VycmVudFJvd0JpdG1hcCA9IDA7CisgICAgbV9jdXJy
ZW50Um93SW5kZXggPSAwOworI2Vsc2UKICAgICBtX3NjcmFtYmxlZEhlYWQgPSAwOwogICAgIG1f
c2VjcmV0ID0gMDsKKyNlbmRpZgogICAgIG1fcGF5bG9hZEVuZCA9IG51bGxwdHI7CiAgICAgbV9y
ZW1haW5pbmcgPSAwOwogICAgIG1fb3JpZ2luYWxTaXplID0gMDsKIH0KIAorI2lmIEVOQUJMRShC
SVRNQVBfRlJFRUxJU1QpCisKK3ZvaWQgRnJlZUxpc3Q6OmluaXRpYWxpemVBdG9tc0JpdG1hcChN
YXJrZWRCbG9jazo6SGFuZGxlKiBibG9jaywgQXRvbXNCaXRtYXAmIGZyZWVBdG9tcykKK3sKKyNp
ZiBBU1NFUlRfRU5BQkxFRAorICAgIG1fbWFya2VkQmxvY2sgPSBibG9jazsKKyNlbmRpZgorICAg
IEFTU0VSVF9VTlVTRUQoZnJlZUF0b21zLCAmZnJlZUF0b21zID09ICZtX2JpdG1hcCk7CisgICAg
Ly8gbV9iaXRtYXAgaGFzIGFscmVhZHkgYmVlbiBmaWxsZWQgaW4gYnkgTWFya2VkQmxvY2s6Okhh
bmRsZTo6c3BlY2lhbGl6ZWRTd2VlcCgpLgorCisgICAgbV9jdXJyZW50Um93Qml0bWFwID0gMDsK
KyAgICBzaXplX3Qgcm93SW5kZXggPSBBdG9tc0JpdG1hcDo6bnVtYmVyT2ZXb3JkczsKKyAgICB3
aGlsZSAocm93SW5kZXgtLSkgeworICAgICAgICBhdXRvIHJvd0JpdG1hcCA9IG1fYml0bWFwLndv
cmRBdChyb3dJbmRleCk7CisgICAgICAgIGlmIChyb3dCaXRtYXApIHsKKyAgICAgICAgICAgIG1f
Y3VycmVudFJvd0JpdG1hcCA9IHJvd0JpdG1hcDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorICAgIEFTU0VSVChtX2N1cnJlbnRSb3dCaXRtYXAgfHwgbV9iaXRtYXAuaXNF
bXB0eSgpKTsKKyAgICBtX2N1cnJlbnRSb3dJbmRleCA9IG1fY3VycmVudFJvd0JpdG1hcCA/IHJv
d0luZGV4IDogMDsKKworICAgIHNpemVfdCBmaXJzdEF0b21JblJvdyA9IG1fY3VycmVudFJvd0lu
ZGV4ICogYXRvbXNQZXJSb3c7CisgICAgbV9jdXJyZW50TWFya2VkQmxvY2tSb3dBZGRyZXNzID0g
Yml0d2lzZV9jYXN0PEF0b20qPihibG9jay0+YXRvbUF0KGZpcnN0QXRvbUluUm93KSk7Cit9CisK
KyNlbHNlCisvLyBMaW5rZWQgTGlzdCBpbXBsZW1lbnRhdGlvbi4KKwogdm9pZCBGcmVlTGlzdDo6
aW5pdGlhbGl6ZUxpc3QoRnJlZUNlbGwqIGhlYWQsIHVpbnRwdHJfdCBzZWNyZXQsIHVuc2lnbmVk
IGJ5dGVzKQogewogICAgIC8vIEl0J3MgKnNsaWdodGx5KiBtb3JlIG9wdGltYWwgdG8gdXNlIGEg
c2NyYW1ibGVkIGhlYWQuIEl0IHNhdmVzIGEgcmVnaXN0ZXIgb24gdGhlIGZhc3QgcGF0aC4KQEAg
LTU2LDE2ICs5MCwyMyBAQCB2b2lkIEZyZWVMaXN0Ojppbml0aWFsaXplTGlzdChGcmVlQ2VsbCog
CiAgICAgbV9vcmlnaW5hbFNpemUgPSBieXRlczsKIH0KIAorI2VuZGlmIC8vIEVOQUJMRShCSVRN
QVBfRlJFRUxJU1QpCisKIHZvaWQgRnJlZUxpc3Q6OmluaXRpYWxpemVCdW1wKGNoYXIqIHBheWxv
YWRFbmQsIHVuc2lnbmVkIHJlbWFpbmluZykKIHsKKyNpZiBFTkFCTEUoQklUTUFQX0ZSRUVMSVNU
KQorICAgIG1fY3VycmVudFJvd0JpdG1hcCA9IDA7CisgICAgbV9jdXJyZW50Um93SW5kZXggPSAw
OworI2Vsc2UKICAgICBtX3NjcmFtYmxlZEhlYWQgPSAwOwogICAgIG1fc2VjcmV0ID0gMDsKKyNl
bmRpZgogICAgIG1fcGF5bG9hZEVuZCA9IHBheWxvYWRFbmQ7CiAgICAgbV9yZW1haW5pbmcgPSBy
ZW1haW5pbmc7CiAgICAgbV9vcmlnaW5hbFNpemUgPSByZW1haW5pbmc7CiB9CiAKLWJvb2wgRnJl
ZUxpc3Q6OmNvbnRhaW5zKEhlYXBDZWxsKiB0YXJnZXQpIGNvbnN0Citib29sIEZyZWVMaXN0Ojpj
b250YWlucyhIZWFwQ2VsbCogdGFyZ2V0LCBNYXJrZWRCbG9jazo6SGFuZGxlKiBjdXJyZW50Qmxv
Y2spIGNvbnN0CiB7CiAgICAgaWYgKG1fcmVtYWluaW5nKSB7CiAgICAgICAgIGNvbnN0IHZvaWQq
IHN0YXJ0ID0gKG1fcGF5bG9hZEVuZCAtIG1fcmVtYWluaW5nKTsKQEAgLTczLDE5ICsxMTQsNDgg
QEAgYm9vbCBGcmVlTGlzdDo6Y29udGFpbnMoSGVhcENlbGwqIHRhcmdldAogICAgICAgICByZXR1
cm4gKHN0YXJ0IDw9IHRhcmdldCkgJiYgKHRhcmdldCA8IGVuZCk7CiAgICAgfQogCisjaWYgRU5B
QkxFKEJJVE1BUF9GUkVFTElTVCkKKyAgICBpZiAoYml0bWFwSXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyBjdXJyZW50QmxvY2sgbWF5IGJlIG51bGwgaWYgdGhlIGFs
bG9jYXRvciBoYXMgYmVlbiByZXNldCAoYW5kIHRoZXJlZm9yZSwKKyAgICAvLyB0aGUgRnJlZUxp
c3QgY2xlYXJlZC4gSGVuY2UsIHdlIHNob3VsZCBvbmx5IGNoZWNrIHRoaXMgYXNzZXJ0aW9uIGFm
dGVyCisgICAgLy8gd2UgY2hlY2sgaWYgdGhlIEZyZWVMaXN0IGJpdG1hcCBpcyBlbXB0eSBhYm92
ZS4KKyAgICBBU1NFUlQobV9tYXJrZWRCbG9jayA9PSBjdXJyZW50QmxvY2spOworICAgIGlmICgh
Y3VycmVudEJsb2NrLT5jb250YWlucyh0YXJnZXQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICB1bnNpZ25lZCBhdG9tTnVtYmVyID0gY3VycmVudEJsb2NrLT5ibG9jaygpLmF0b21OdW1i
ZXIodGFyZ2V0KTsKKyAgICB1bnNpZ25lZCByb3dJbmRleCA9IGF0b21OdW1iZXIgLyBhdG9tc1Bl
clJvdzsKKyAgICBpZiAocm93SW5kZXggPiBtX2N1cnJlbnRSb3dJbmRleCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChyb3dJbmRleCA9PSBtX2N1cnJlbnRSb3dJbmRleCkgeworICAg
ICAgICBjb25zdGV4cHIgQXRvbXNCaXRtYXA6OldvcmQgb25lID0gMTsKKyAgICAgICAgdW5zaWdu
ZWQgZmlyc3RBdG9tSW5Sb3cgPSByb3dJbmRleCAqIGF0b21zUGVyUm93OworICAgICAgICB1bnNp
Z25lZCBhdG9tSW5kZXhJblJvdyA9IGF0b21OdW1iZXIgLSBmaXJzdEF0b21JblJvdzsKKyAgICAg
ICAgcmV0dXJuIG1fY3VycmVudFJvd0JpdG1hcCAmIChvbmUgPDwgYXRvbUluZGV4SW5Sb3cpOwor
ICAgIH0KKyAgICByZXR1cm4gbV9iaXRtYXAuZ2V0KGF0b21OdW1iZXIpOworCisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTShjdXJyZW50QmxvY2spOwogICAgIEZyZWVDZWxsKiBjYW5kaWRhdGUgPSBo
ZWFkKCk7CiAgICAgd2hpbGUgKGNhbmRpZGF0ZSkgewogICAgICAgICBpZiAoYml0d2lzZV9jYXN0
PEhlYXBDZWxsKj4oY2FuZGlkYXRlKSA9PSB0YXJnZXQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgY2FuZGlkYXRlID0gY2FuZGlkYXRlLT5uZXh0KG1fc2VjcmV0KTsKICAgICB9
Ci0KICAgICByZXR1cm4gZmFsc2U7CisjZW5kaWYKIH0KIAogdm9pZCBGcmVlTGlzdDo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAogeworI2lmIEVOQUJMRShCSVRNQVBfRlJFRUxJU1QpCisg
ICAgb3V0LnByaW50KCJ7Y3VycmVudFJvd0JpdG1hcCA9ICIsIG1fY3VycmVudFJvd0JpdG1hcCwg
IiwgY3VycmVudFJvd0luZGV4ID0gIiwgbV9jdXJyZW50Um93SW5kZXgsICIsIHBheWxvYWRFbmQg
PSAiLCBSYXdQb2ludGVyKG1fcGF5bG9hZEVuZCksICIsIHJlbWFpbmluZyA9ICIsIG1fcmVtYWlu
aW5nLCAiLCBvcmlnaW5hbFNpemUgPSAiLCBtX29yaWdpbmFsU2l6ZSwgIn0iKTsKKyNlbHNlCiAg
ICAgb3V0LnByaW50KCJ7aGVhZCA9ICIsIFJhd1BvaW50ZXIoaGVhZCgpKSwgIiwgc2VjcmV0ID0g
IiwgbV9zZWNyZXQsICIsIHBheWxvYWRFbmQgPSAiLCBSYXdQb2ludGVyKG1fcGF5bG9hZEVuZCks
ICIsIHJlbWFpbmluZyA9ICIsIG1fcmVtYWluaW5nLCAiLCBvcmlnaW5hbFNpemUgPSAiLCBtX29y
aWdpbmFsU2l6ZSwgIn0iKTsKKyNlbmRpZgogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAkocmV2aXNpb24gMjYyODg4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTI1LDEzICsyNSwyMyBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIk1hcmtlZEJsb2Nr
LmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1ByaW50U3Ry
ZWFtLmg+CisjaW5jbHVkZSA8d3RmL1N0ZEludEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsK
IAogY2xhc3MgSGVhcENlbGw7CiAKKyNpZiBDUFUoQVJNNjQpIHx8IENQVShYODZfNjQpCisjZGVm
aW5lIEVOQUJMRV9CSVRNQVBfRlJFRUxJU1QgMQorI2Vsc2UKKyNkZWZpbmUgRU5BQkxFX0JJVE1B
UF9GUkVFTElTVCAwCisjZW5kaWYKKyNkZWZpbmUgVVNFX0FESlVTVEVEX0JJVE1BUF9TVEFSVCAx
CisKKyNpZiAhRU5BQkxFKEJJVE1BUF9GUkVFTElTVCkKIHN0cnVjdCBGcmVlQ2VsbCB7CiAgICAg
c3RhdGljIHVpbnRwdHJfdCBzY3JhbWJsZShGcmVlQ2VsbCogY2VsbCwgdWludHB0cl90IHNlY3Jl
dCkKICAgICB7CkBAIC01OCw2ICs2OCw3IEBAIHN0cnVjdCBGcmVlQ2VsbCB7CiAgICAgdWludDY0
X3QgcHJlc2VydmVkQml0c0ZvckNyYXNoQW5hbHlzaXM7CiAgICAgdWludHB0cl90IHNjcmFtYmxl
ZE5leHQ7CiB9OworI2VuZGlmCiAKIGNsYXNzIEZyZWVMaXN0IHsKIHB1YmxpYzoKQEAgLTY2LDI0
ICs3Nyw1NCBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBjbGVhcigpOwogICAgIAotICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZUxpc3QoRnJlZUNlbGwqIGhlYWQsIHVpbnRw
dHJfdCBzZWNyZXQsIHVuc2lnbmVkIGJ5dGVzKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGluaXRpYWxpemVCdW1wKGNoYXIqIHBheWxvYWRFbmQsIHVuc2lnbmVkIHJlbWFpbmluZyk7CiAg
ICAgCi0gICAgYm9vbCBhbGxvY2F0aW9uV2lsbEZhaWwoKSBjb25zdCB7IHJldHVybiAhaGVhZCgp
ICYmICFtX3JlbWFpbmluZzsgfQogICAgIGJvb2wgYWxsb2NhdGlvbldpbGxTdWNjZWVkKCkgY29u
c3QgeyByZXR1cm4gIWFsbG9jYXRpb25XaWxsRmFpbCgpOyB9CiAgICAgCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuYz4KICAgICBIZWFwQ2VsbCogYWxsb2NhdGUoY29uc3QgRnVuYyYgc2xvd1Bh
dGgpOwogICAgIAotICAgIGJvb2wgY29udGFpbnMoSGVhcENlbGwqKSBjb25zdDsKKyAgICBib29s
IGNvbnRhaW5zKEhlYXBDZWxsKiwgTWFya2VkQmxvY2s6OkhhbmRsZSogY3VycmVudEJsb2NrKSBj
b25zdDsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgogICAgIHZvaWQgZm9yRWFj
aChjb25zdCBGdW5jJikgY29uc3Q7CiAgICAgCiAgICAgdW5zaWduZWQgb3JpZ2luYWxTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9vcmlnaW5hbFNpemU7IH0KIAorI2lmIEVOQUJMRShCSVRNQVBfRlJF
RUxJU1QpCisgICAgdXNpbmcgQXRvbSA9IE1hcmtlZEJsb2NrOjpBdG9tOworICAgIHVzaW5nIEF0
b21zQml0bWFwID0gTWFya2VkQmxvY2s6OkF0b21zQml0bWFwOworCisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBpbml0aWFsaXplQXRvbXNCaXRtYXAoTWFya2VkQmxvY2s6OkhhbmRsZSosIEF0
b21zQml0bWFwJiBmcmVlQXRvbXMpOworCisgICAgYm9vbCBiaXRtYXBJc0VtcHR5KCkgY29uc3QK
KyAgICB7CisgICAgICAgIC8vIFJlbWVtYmVyLCB3ZSBkb24ndCBhY3R1YWxseSBjbGVhciB0aGUg
Yml0cyBpbiBtX2JpdG1hcCBhcyB3ZSBhbGxvY2F0ZQorICAgICAgICAvLyB0aGUgYXRvbXMuIElu
c3RlYWQsIG1fY3VycmVudFJvd0JpdG1hcCBhbmQgbV9jdXJyZW50Um93SW5kZXggdGVsbHMgdXMK
KyAgICAgICAgLy8gaWYgdGhlcmUgYXRvbXMgc3RpbGwgYXZhaWxhYmxlIGZvciBhbGxvY2F0aW9u
LiBTZWUgY29tbWVudCBibG9iIGJlbG93CisgICAgICAgIC8vIGF0IHRoZSBkZWNsYXJhdGlvbiBv
ZiBtX2N1cnJlbnRSb3dJbmRleCBmb3IgbW9yZSBkZXRhaWxzLgorICAgICAgICByZXR1cm4gIW1f
Y3VycmVudFJvd0JpdG1hcCAmJiAhbV9jdXJyZW50Um93SW5kZXg7CisgICAgfQorICAgIGJvb2wg
YWxsb2NhdGlvbldpbGxGYWlsKCkgY29uc3QgeyByZXR1cm4gYml0bWFwSXNFbXB0eSgpICYmICFt
X3JlbWFpbmluZzsgfQorCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkN1cnJlbnRSb3dC
aXRtYXAoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3QsIG1fY3VycmVudFJvd0Jp
dG1hcCk7IH0KKyNpZiBVU0VfQURKVVNURURfQklUTUFQX1NUQVJUCisgICAgc3RhdGljIHB0cmRp
ZmZfdCBvZmZzZXRPZkJpdG1hcFJvd3MoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxp
c3QsIG1fYml0bWFwKSAtIHNpemVvZihBdG9tc0JpdG1hcDo6V29yZCk7IH0KKyNlbHNlCisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkJpdG1hcFJvd3MoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoRnJlZUxpc3QsIG1fYml0bWFwKTsgfQorI2VuZGlmCisKKyAgICBzdGF0aWMgcHRyZGlm
Zl90IG9mZnNldE9mQ3VycmVudFJvd0luZGV4KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZy
ZWVMaXN0LCBtX2N1cnJlbnRSb3dJbmRleCk7IH0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNl
dE9mQ3VycmVudE1hcmtlZEJsb2NrUm93QWRkcmVzcygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRP
RihGcmVlTGlzdCwgbV9jdXJyZW50TWFya2VkQmxvY2tSb3dBZGRyZXNzKTsgfQorI2Vsc2UKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVMaXN0KEZyZWVDZWxsKiBoZWFkLCB1
aW50cHRyX3Qgc2VjcmV0LCB1bnNpZ25lZCBieXRlcyk7CisKKyAgICBib29sIGFsbG9jYXRpb25X
aWxsRmFpbCgpIGNvbnN0IHsgcmV0dXJuICFoZWFkKCkgJiYgIW1fcmVtYWluaW5nOyB9CisKICAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2NyYW1ibGVkSGVhZCgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihGcmVlTGlzdCwgbV9zY3JhbWJsZWRIZWFkKTsgfQogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZTZWNyZXQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3Qs
IG1fc2VjcmV0KTsgfQorI2VuZGlmCisKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mUGF5
bG9hZEVuZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgbV9wYXlsb2FkRW5k
KTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZSZW1haW5pbmcoKSB7IHJldHVybiBP
QkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3QsIG1fcmVtYWluaW5nKTsgfQogICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZPcmlnaW5hbFNpemUoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnJl
ZUxpc3QsIG1fb3JpZ2luYWxTaXplKTsgfQpAQCAtOTMsMTUgKzEzNCw3NiBAQCBwdWJsaWM6CiAK
ICAgICB1bnNpZ25lZCBjZWxsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2VsbFNpemU7IH0KICAg
ICAKKyNpZiBFTkFCTEUoQklUTUFQX0ZSRUVMSVNUKQorICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6
ZV90IGF0b21zUGVyUm93ID0gQXRvbXNCaXRtYXA6OmJpdHNJbldvcmQ7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBzaXplX3QgYXRvbXNSb3dCeXRlcyA9IGF0b21zUGVyUm93ICogc2l6ZW9mKEF0b20p
OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYXRvbVNpemVTaGlmdCA9IFdURjo6bG9n
MkNvbnN0ZXhwcihzaXplb2YoQXRvbSkpOworICAgIHN0YXRpY19hc3NlcnQoKHN0YXRpY19jYXN0
PHNpemVfdD4oMSkgPDwgYXRvbVNpemVTaGlmdCkgPT0gc2l6ZW9mKEF0b20pKTsKKyNlbmRpZgor
CiBwcml2YXRlOgorI2lmIEVOQUJMRShCSVRNQVBfRlJFRUxJU1QpCisgICAgQXRvbXNCaXRtYXAm
IGF0b21zQml0bWFwKCkgeyByZXR1cm4gbV9iaXRtYXA7IH0KKyAgICBBdG9tc0JpdG1hcDo6V29y
ZCogYml0bWFwUm93cygpIGNvbnN0CisgICAgeworI2lmIFVTRV9BREpVU1RFRF9CSVRNQVBfU1RB
UlQKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxBdG9tc0JpdG1hcDo6V29yZCo+KCZtX2Jp
dG1hcCkgLSAxOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxBdG9tc0JpdG1h
cDo6V29yZCo+KCZtX2JpdG1hcCk7CisjZW5kaWYKKyAgICB9CisKKyNlbHNlCiAgICAgRnJlZUNl
bGwqIGhlYWQoKSBjb25zdCB7IHJldHVybiBGcmVlQ2VsbDo6ZGVzY3JhbWJsZShtX3NjcmFtYmxl
ZEhlYWQsIG1fc2VjcmV0KTsgfQotICAgIAotICAgIHVpbnRwdHJfdCBtX3NjcmFtYmxlZEhlYWQg
eyAwIH07Ci0gICAgdWludHB0cl90IG1fc2VjcmV0IHsgMCB9OworI2VuZGlmCisKICAgICBjaGFy
KiBtX3BheWxvYWRFbmQgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV9jZWxsU2l6ZSB7IDAg
fTsKICAgICB1bnNpZ25lZCBtX3JlbWFpbmluZyB7IDAgfTsKICAgICB1bnNpZ25lZCBtX29yaWdp
bmFsU2l6ZSB7IDAgfTsKLSAgICB1bnNpZ25lZCBtX2NlbGxTaXplIHsgMCB9OworCisjaWYgRU5B
QkxFKEJJVE1BUF9GUkVFTElTVCkKKyAgICAvLyBUaGlzIGFsbG9jYXRpb24gYWxnb3JpdGhtIHRo
aW5rcyBvZiB0aGUgTWFya2VkQmxvY2sgYXMgY29uc2lzdGluZyBvZiByb3dzCisgICAgLy8gb2Yg
YXRvbXMsIHdoZXJlIHRoZSBudW1iZXIgb2YgYXRvbXMgaW4gYSByb3cgZXF1YWxzIHRoZSBudW1i
ZXIgb2YgYml0cyBpbgorICAgIC8vIGEgQXRvbXNCaXRtYXA6OldvcmQuIE9uIDY0LWJpdCBDUFVz
LCB0aGlzIHdvdWxkIGJlIDY0LgorICAgIC8vCisgICAgLy8gV2Ugd2lsbCBzdGFydCBhbGxvY2F0
ZSBmcm9tIHRoZSBsYXN0IChoaWdoZXN0IG51bWJlcmVkKSByb3cgZG93biB0byB0aGUKKyAgICAv
LyBmaXJzdCAocm93IDApLiBBcyB3ZSBhbGxvY2F0ZSwgd2Ugd2lsbCBvbmx5IHVwZGF0ZSBtX2N1
cnJlbnRSb3dJbmRleCBhbmQKKyAgICAvLyBtX2N1cnJlbnRSb3dCaXRtYXAuIG1fYml0bWFwIHdp
bGwgbm90IGJlIHVwZGF0ZWQuIFRoaXMgaXMgdG8gcmVkdWNlIHRoZQorICAgIC8vIG51bWJlciBv
ZiBpbnN0cnVjdGlvbnMgdG8gZXhlY3V0ZWQgZHVyaW5nIGFuIGFsbG9jYXRpb24uCisgICAgLy8K
KyAgICAvLyBXaGVuIG1fY3VycmVudFJvd0luZGV4IHBvaW50cyB0byBOLCB0aGUgQXRvbXNCaXRt
YXA6OldvcmQgZm9yIHJvdyBOIGluCisgICAgLy8gbV9iaXRtYXAgd2lsbCBoYXZlIGJlZW4gY29w
aWVkIGludG8gbV9jdXJyZW50Um93Qml0bWFwLiBUaGlzIGlzIHRoZSByb3cKKyAgICAvLyB0aGF0
IHdlIHdpbGwgYmUgYWxsb2NhdGluZyBmcm9tIHVudGlsIHRoZSByb3cgaXMgZXhoYXVzdGVkLgor
ICAgIC8vCisgICAgLy8gVGhpcyBpcyBob3cgd2Uga25vdyB3aGV0aGVyIGFuIGF0b20gaXMgYXZh
aWxhYmxlIGZvciBhbGxvY2F0aW9uIG9yIG5vdDoKKyAgICAvLyAxLiBBdG9tcyBpbiBhbnkgcm93
cyBhYm92ZSBtX2N1cnJlbnRSb3dJbmRleCBhcmUgZ3VhcmFudGVlZCB0byBiZQorICAgIC8vICAg
IGFsbG9jYXRlZCBhbHJlYWR5IChiZWNhdXNlIHdlIGFsbG9jYXRlIGRvd253YXJkcykuCisgICAg
Ly8gMi4gRm9yIHJvdyBtX2N1cnJlbnRSb3dJbmRleCwgbV9jdXJyZW50Um93Qml0bWFwIGlzIHRo
ZSBzb3VyY2Ugb2YgdHJ1dGgKKyAgICAvLyAgICBvbiB3aGljaCBhdG9tcyBpbiB0aGUgcm93IGFy
ZSBhdmFpbGFibGUgZm9yIGFsbG9jYXRpb24uCisgICAgLy8gMy4gRm9yIHJvd3MgYmVsb3cgbV9j
dXJyZW50Um93SW5kZXgsIG1fYml0bWFwIGlzIHRoZSBzb3VyY2Ugb2YgdHJ1dGggb24KKyAgICAv
LyAgICB3aGljaCBhdG9tcyBhcmUgYXZhaWxhYmxlIGZvciBhbGxvY2F0aW9uLgorICAgIC8vCisg
ICAgLy8gV2hlbiBtX2N1cnJlbnRSb3dJbmRleCByZWFjaGVzIDAsIHRoZSBpbmZvIGluIG1fYml0
bWFwIGlzIGNvbXBsZXRlbHkKKyAgICAvLyBvYnNvbGV0ZWQsIGFuZCBtX2N1cnJlbnRSb3dCaXRt
YXAgaG9sZHMgdGhlIGF2YWlsYWJpbGl0eSBpbmZvIGZvciByb3cgMC4KKyAgICAvLyBXaGVuIGJv
dGggbV9jdXJyZW50Um93SW5kZXggYW5kIG1fY3VycmVudFJvd0JpdG1hcCBhcmUgMCwgdGhlbiB3
ZSBoYXZlCisgICAgLy8gY29tcGxldGVseSBleGhhdXN0ZWQgdGhlIGJsb2NrIGFuZCBubyBtb3Jl
IGF0b21zIGFyZSBhdmFpbGFibGUgZm9yCisgICAgLy8gYWxsb2NhdGlvbi4KKworICAgIHVuc2ln
bmVkIG1fY3VycmVudFJvd0luZGV4IHsgMCB9OworICAgIEF0b21zQml0bWFwOjpXb3JkIG1fY3Vy
cmVudFJvd0JpdG1hcCB7IDAgfTsKKyAgICBBdG9tKiBtX2N1cnJlbnRNYXJrZWRCbG9ja1Jvd0Fk
ZHJlc3MgeyBudWxscHRyIH07CisgICAgQXRvbXNCaXRtYXAgbV9iaXRtYXA7CisjZWxzZQorICAg
IHVpbnRwdHJfdCBtX3NjcmFtYmxlZEhlYWQgeyAwIH07CisgICAgdWludHB0cl90IG1fc2VjcmV0
IHsgMCB9OworI2VuZGlmCisKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIE1hcmtlZEJsb2NrOjpI
YW5kbGUqIG1fbWFya2VkQmxvY2sgeyBudWxscHRyIH07CisjZW5kaWYKKworICAgIGZyaWVuZCBj
bGFzcyBNYXJrZWRCbG9jazsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3RJbmxpbmVzLmgJKHJldmlzaW9uIDI2Mjg4
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0SW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI2LDcgKzI2LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRnJlZUxp
c3QuaCIKLSNpbmNsdWRlICJNYXJrZWRCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC00MCwxMyArNDAsNDggQEAgQUxXQVlTX0lOTElO
RSBIZWFwQ2VsbCogRnJlZUxpc3Q6OmFsbG9jYQogICAgICAgICBtX3JlbWFpbmluZyA9IHJlbWFp
bmluZzsKICAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KG1fcGF5bG9hZEVu
ZCAtIHJlbWFpbmluZyAtIGNlbGxTaXplKTsKICAgICB9Ci0gICAgCisKKyNpZiBFTkFCTEUoQklU
TUFQX0ZSRUVMSVNUKQorICAgIEF0b21zQml0bWFwOjpXb3JkIHJvd0JpdG1hcCA9IG1fY3VycmVu
dFJvd0JpdG1hcDsKKyAgICBkbyB7CisgICAgICAgIGlmIChyb3dCaXRtYXApIHsKKyAgICAgICAg
ICAgIGNvbnN0ZXhwciBBdG9tc0JpdG1hcDo6V29yZCBvbmUgPSAxOworICAgICAgICAgICAgdW5z
aWduZWQgYXRvbUluZGV4SW5Sb3cgPSBjdHoocm93Qml0bWFwKTsKKyAgICAgICAgICAgIGF1dG8q
IGNlbGwgPSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPigmbV9jdXJyZW50TWFya2VkQmxvY2tSb3dB
ZGRyZXNzW2F0b21JbmRleEluUm93XSk7CisgICAgICAgICAgICByb3dCaXRtYXAgJj0gfihvbmUg
PDwgYXRvbUluZGV4SW5Sb3cpOworICAgICAgICAgICAgbV9jdXJyZW50Um93Qml0bWFwID0gcm93
Qml0bWFwOworICAgICAgICAgICAgcmV0dXJuIGNlbGw7CisgICAgICAgIH0KKworICAgICAgICB1
bnNpZ25lZCByb3dJbmRleCA9IG1fY3VycmVudFJvd0luZGV4OworICAgICAgICBhdXRvKiByb3dB
ZGRyZXNzID0gbV9jdXJyZW50TWFya2VkQmxvY2tSb3dBZGRyZXNzOworI2lmIFVTRV9BREpVU1RF
RF9CSVRNQVBfU1RBUlQKKyAgICAgICAgd2hpbGUgKHJvd0luZGV4KSB7CisgICAgICAgICAgICBy
b3dCaXRtYXAgPSBiaXRtYXBSb3dzKClbcm93SW5kZXgtLV07CisjZWxzZQorICAgICAgICB3aGls
ZSAocm93SW5kZXgpIHsKKyAgICAgICAgICAgIHJvd0JpdG1hcCA9IGJpdG1hcFJvd3MoKVstLXJv
d0luZGV4XTsKKyNlbmRpZgorICAgICAgICAgICAgcm93QWRkcmVzcyAtPSBhdG9tc1BlclJvdzsK
KyAgICAgICAgICAgIGlmIChyb3dCaXRtYXApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgbV9jdXJyZW50TWFya2VkQmxvY2tSb3dBZGRyZXNzID0gcm93QWRkcmVz
czsKKyAgICAgICAgbV9jdXJyZW50Um93SW5kZXggPSByb3dJbmRleDsKKyAgICB9IHdoaWxlIChy
b3dCaXRtYXApOworCisgICAgbV9jdXJyZW50Um93Qml0bWFwID0gcm93Qml0bWFwOworICAgIEFT
U0VSVChiaXRtYXBJc0VtcHR5KCkpOworICAgIHJldHVybiBzbG93UGF0aCgpOworCisjZWxzZSAv
LyAhRU5BQkxFKEJJVE1BUF9GUkVFTElTVCkKICAgICBGcmVlQ2VsbCogcmVzdWx0ID0gaGVhZCgp
OwogICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkKICAgICAgICAgcmV0dXJuIHNsb3dQYXRoKCk7
CiAgICAgCiAgICAgbV9zY3JhbWJsZWRIZWFkID0gcmVzdWx0LT5zY3JhbWJsZWROZXh0OwogICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPihyZXN1bHQpOworI2VuZGlmIC8vICFFTkFC
TEUoQklUTUFQX0ZSRUVMSVNUKQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgpAQCAtNTYs
NiArOTEsMzUgQEAgdm9pZCBGcmVlTGlzdDo6Zm9yRWFjaChjb25zdCBGdW5jJiBmdW5jKQogICAg
ICAgICBmb3IgKHVuc2lnbmVkIHJlbWFpbmluZyA9IG1fcmVtYWluaW5nOyByZW1haW5pbmc7IHJl
bWFpbmluZyAtPSBtX2NlbGxTaXplKQogICAgICAgICAgICAgZnVuYyhiaXR3aXNlX2Nhc3Q8SGVh
cENlbGwqPihtX3BheWxvYWRFbmQgLSByZW1haW5pbmcpKTsKICAgICB9IGVsc2UgeworI2lmIEVO
QUJMRShCSVRNQVBfRlJFRUxJU1QpCisgICAgICAgIGlmIChiaXRtYXBJc0VtcHR5KCkpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgQXRvbXNCaXRtYXA6OldvcmQgcm93Qml0bWFwID0g
bV9jdXJyZW50Um93Qml0bWFwOworICAgICAgICB1bnNpZ25lZCByb3dJbmRleCA9IG1fY3VycmVu
dFJvd0luZGV4OworICAgICAgICBBdG9tKiBjdXJyZW50TWFya2VkQmxvY2tSb3dBZGRyZXNzID0g
bV9jdXJyZW50TWFya2VkQmxvY2tSb3dBZGRyZXNzOworICAgICAgICBkbyB7CisgICAgICAgICAg
ICB3aGlsZSAocm93Qml0bWFwKSB7CisgICAgICAgICAgICAgICAgY29uc3RleHByIEF0b21zQml0
bWFwOjpXb3JkIG9uZSA9IDE7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgYXRvbUluZGV4SW5S
b3cgPSBjdHoocm93Qml0bWFwKTsKKyAgICAgICAgICAgICAgICBhdXRvKiBjZWxsID0gYml0d2lz
ZV9jYXN0PEhlYXBDZWxsKj4oJmN1cnJlbnRNYXJrZWRCbG9ja1Jvd0FkZHJlc3NbYXRvbUluZGV4
SW5Sb3ddKTsKKyAgICAgICAgICAgICAgICByb3dCaXRtYXAgJj0gfihvbmUgPDwgYXRvbUluZGV4
SW5Sb3cpOworICAgICAgICAgICAgICAgIGZ1bmMoY2VsbCk7CisgICAgICAgICAgICB9CisKKyNp
ZiBVU0VfQURKVVNURURfQklUTUFQX1NUQVJUCisgICAgICAgICAgICB3aGlsZSAocm93SW5kZXgp
IHsKKyAgICAgICAgICAgICAgICByb3dCaXRtYXAgPSBiaXRtYXBSb3dzKClbcm93SW5kZXgtLV07
CisjZWxzZQorICAgICAgICAgICAgd2hpbGUgKHJvd0luZGV4KSB7CisgICAgICAgICAgICAgICAg
cm93Qml0bWFwID0gYml0bWFwUm93cygpWy0tcm93SW5kZXhdOworI2VuZGlmCisgICAgICAgICAg
ICAgICAgY3VycmVudE1hcmtlZEJsb2NrUm93QWRkcmVzcyAtPSBhdG9tc1BlclJvdzsKKyAgICAg
ICAgICAgICAgICBpZiAocm93Qml0bWFwKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAocm93Qml0bWFwKTsKKyNlbHNlCiAgICAgICAg
IGZvciAoRnJlZUNlbGwqIGNlbGwgPSBoZWFkKCk7IGNlbGw7KSB7CiAgICAgICAgICAgICAvLyBX
ZSBjYW4gdXNlIHRoaXMgdG8gb3ZlcndyaXRlIGZyZWUgb2JqZWN0cyBiZWZvcmUgZGVzdHJveWlu
ZyB0aGUgZnJlZSBsaXN0LiBTbywgd2UgbmVlZAogICAgICAgICAgICAgLy8gdG8gZ2V0IG5leHQg
YmVmb3JlIHByb2NlZWRpbmcgZnVydGhlci4KQEAgLTYzLDggKzEyNyw4IEBAIHZvaWQgRnJlZUxp
c3Q6OmZvckVhY2goY29uc3QgRnVuYyYgZnVuYykKICAgICAgICAgICAgIGZ1bmMoYml0d2lzZV9j
YXN0PEhlYXBDZWxsKj4oY2VsbCkpOwogICAgICAgICAgICAgY2VsbCA9IG5leHQ7CiAgICAgICAg
IH0KKyNlbmRpZgogICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAJKHJldmlzaW9uIDI2
Mjg4OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTgt
MjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI3Miw3ICsyNzIsNyBAQCBib29sIExvY2FsQWxsb2NhdG9yOjpp
c0ZyZWVMaXN0ZWRDZWxsKGNvCiAgICAgLy8gaWYgd2Uga25vdyB0aGF0IHRoZSBibG9jayBvd25p
bmcgdGhlIG9iamVjdCBpcyBmcmVlLWxpc3RlZCwgdGhlbiBpdCdzIGltcG9zc2libGUgZm9yIGFu
eQogICAgIC8vIG9iamVjdHMgdG8gYmUgaW4gdGhlIGRlYWQtYnV0LW5vdC1kZXN0cnVjdGVkIHN0
YXRlLgogICAgIC8vIEZJWE1FOiBHZXQgcmlkIG9mIHRoaXMgYWJvbWluYXRpb24uIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODE2NTUKLSAgICByZXR1cm4gbV9mcmVl
TGlzdC5jb250YWlucyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPih0YXJnZXQpKTsKKyAgICByZXR1
cm4gbV9mcmVlTGlzdC5jb250YWlucyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPih0YXJnZXQpLCBt
X2N1cnJlbnRCbG9jayk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyNjI4ODgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQb3J0ZW4g
KHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1r
QHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC04NCw2ICs4NCw4IEBA
IHB1YmxpYzoKICAgICBzdGF0aWNfYXNzZXJ0KCEoTWFya2VkQmxvY2s6OmF0b21TaXplICYgKE1h
cmtlZEJsb2NrOjphdG9tU2l6ZSAtIDEpKSwgIk1hcmtlZEJsb2NrOjphdG9tU2l6ZSBtdXN0IGJl
IGEgcG93ZXIgb2YgdHdvLiIpOwogICAgIHN0YXRpY19hc3NlcnQoIShNYXJrZWRCbG9jazo6Ymxv
Y2tTaXplICYgKE1hcmtlZEJsb2NrOjpibG9ja1NpemUgLSAxKSksICJNYXJrZWRCbG9jazo6Ymxv
Y2tTaXplIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7CiAgICAgCisgICAgdXNpbmcgQXRvbXNC
aXRtYXAgPSBCaXRtYXA8YXRvbXNQZXJCbG9jaz47CisKICAgICBzdHJ1Y3QgVm9pZEZ1bmN0b3Ig
ewogICAgICAgICB0eXBlZGVmIHZvaWQgUmV0dXJuVHlwZTsKICAgICAgICAgdm9pZCByZXR1cm5W
YWx1ZSgpIHsgfQpAQCAtMjAzLDYgKzIwNSw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAg
IHZvaWQqIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gJm1fYmxvY2stPmF0b21zKClbMF07IH0KICAg
ICAgICAgdm9pZCogZW5kKCkgY29uc3QgeyByZXR1cm4gJm1fYmxvY2stPmF0b21zKClbbV9lbmRB
dG9tXTsgfQorICAgICAgICB2b2lkKiBhdG9tQXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0dXJuICZt
X2Jsb2NrLT5hdG9tcygpW2ldOyB9CiAgICAgICAgIGJvb2wgY29udGFpbnModm9pZCogcCkgY29u
c3QgeyByZXR1cm4gc3RhcnQoKSA8PSBwICYmIHAgPCBlbmQoKTsgfQogCiAgICAgICAgIHZvaWQg
ZHVtcFN0YXRlKFByaW50U3RyZWFtJik7CkBAIC0yOTQsOCArMjk3LDggQEAgcHVibGljOgogICAg
ICAgICBIZWFwVmVyc2lvbiBtX21hcmtpbmdWZXJzaW9uOwogICAgICAgICBIZWFwVmVyc2lvbiBt
X25ld2x5QWxsb2NhdGVkVmVyc2lvbjsKIAotICAgICAgICBCaXRtYXA8YXRvbXNQZXJCbG9jaz4g
bV9tYXJrczsKLSAgICAgICAgQml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbmV3bHlBbGxvY2F0ZWQ7
CisgICAgICAgIEF0b21zQml0bWFwIG1fbWFya3M7CisgICAgICAgIEF0b21zQml0bWFwIG1fbmV3
bHlBbGxvY2F0ZWQ7CiAgICAgfTsKICAgICAKIHByaXZhdGU6ICAgIApAQCAtMzM2LDcgKzMzOSw3
IEBAIHB1YmxpYzoKICAgICBib29sIGlzTmV3bHlBbGxvY2F0ZWQoY29uc3Qgdm9pZCopOwogICAg
IHZvaWQgc2V0TmV3bHlBbGxvY2F0ZWQoY29uc3Qgdm9pZCopOwogICAgIHZvaWQgY2xlYXJOZXds
eUFsbG9jYXRlZChjb25zdCB2b2lkKik7Ci0gICAgY29uc3QgQml0bWFwPGF0b21zUGVyQmxvY2s+
JiBuZXdseUFsbG9jYXRlZCgpIGNvbnN0OworICAgIGNvbnN0IEF0b21zQml0bWFwJiBuZXdseUFs
bG9jYXRlZCgpIGNvbnN0OwogICAgIAogICAgIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVkVmVy
c2lvbigpIGNvbnN0IHsgcmV0dXJuIGZvb3RlcigpLm1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uOyB9
CiAgICAgCkBAIC0zNzQsNyArMzc3LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNNYXJrZWRSYXco
Y29uc3Qgdm9pZCogcCk7CiAgICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24oKSBjb25zdCB7
IHJldHVybiBmb290ZXIoKS5tX21hcmtpbmdWZXJzaW9uOyB9CiAgICAgCi0gICAgY29uc3QgQml0
bWFwPGF0b21zUGVyQmxvY2s+JiBtYXJrcygpIGNvbnN0OworICAgIGNvbnN0IEF0b21zQml0bWFw
JiBtYXJrcygpIGNvbnN0OwogICAgIAogICAgIENvdW50aW5nTG9jayYgbG9jaygpIHsgcmV0dXJu
IGZvb3RlcigpLm1fbG9jazsgfQogICAgIApAQCAtMzk5LDYgKzQwMiw4IEBAIHByaXZhdGU6CiAg
ICAgCiAgICAgaW5saW5lIGJvb2wgbWFya3NDb252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcoSGVh
cFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwogICAgIGlubGluZSBib29sIG1hcmtzQ29udmV5TGl2
ZW5lc3NEdXJpbmdNYXJraW5nKEhlYXBWZXJzaW9uIG15TWFya2luZ1ZlcnNpb24sIEhlYXBWZXJz
aW9uIG1hcmtpbmdWZXJzaW9uKTsKKworICAgIGZyaWVuZCBjbGFzcyBGcmVlTGlzdDsKIH07CiAK
IGlubGluZSBNYXJrZWRCbG9jazo6Rm9vdGVyJiBNYXJrZWRCbG9jazo6Zm9vdGVyKCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCShy
ZXZpc2lvbiAyNjI4ODgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9j
a0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAzLDYgKzMwMyw2NCBAQCB2b2lkIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
KyNpZiBFTkFCTEUoQklUTUFQX0ZSRUVMSVNUKQorICAgIEF0b21zQml0bWFwIGxvY2FsRnJlZUF0
b21zOworICAgIEF0b21zQml0bWFwJiBmcmVlQXRvbXMgPSBmcmVlTGlzdCA/IGZyZWVMaXN0LT5h
dG9tc0JpdG1hcCgpIDogbG9jYWxGcmVlQXRvbXM7CisKKyAgICBhdXRvIGhhbmRsZURlYWRDZWxs
ID0gWyZdIChzaXplX3QgaSkgeworICAgICAgICBIZWFwQ2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0
X2Nhc3RfcHRyPEhlYXBDZWxsKj4oYXRvbUF0KGkpKTsKKworICAgICAgICBpZiAoZGVzdHJ1Y3Rp
b25Nb2RlICE9IEJsb2NrSGFzTm9EZXN0cnVjdG9ycykKKyAgICAgICAgICAgIGRlc3Ryb3koY2Vs
bCk7CisKKyAgICAgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpIHsKKyAgICAg
ICAgICAgIGlmIChzY3JpYmJsZU1vZGUgPT0gU2NyaWJibGUpCisgICAgICAgICAgICAgICAgc2Ny
aWJibGUoY2VsbCwgY2VsbFNpemUpOworICAgICAgICB9CisgICAgfTsKKworICAgIGJvb2wgaXNF
bXB0eSA9IHRydWU7CisKKyAgICBBdG9tc0JpdG1hcCBjZWxsTG9jYXRpb25zOworICAgIGNlbGxM
b2NhdGlvbnMuc2V0RWFjaE50aEJpdChtX2F0b21zUGVyQ2VsbCwgMCwgbV9lbmRBdG9tKTsKKwor
ICAgIGlmIChlbXB0eU1vZGUgPT0gTm90RW1wdHkpIHsKKyAgICAgICAgaWYgKG1hcmtzTW9kZSA9
PSBNYXJrc05vdFN0YWxlKSB7CisgICAgICAgICAgICBmcmVlQXRvbXMgPSBmb290ZXIubV9tYXJr
czsKKyAgICAgICAgICAgIGlmIChuZXdseUFsbG9jYXRlZE1vZGUgPT0gSGFzTmV3bHlBbGxvY2F0
ZWQpCisgICAgICAgICAgICAgICAgZnJlZUF0b21zIHw9IGZvb3Rlci5tX25ld2x5QWxsb2NhdGVk
OworICAgICAgICB9IGVsc2UgaWYgKG5ld2x5QWxsb2NhdGVkTW9kZSA9PSBIYXNOZXdseUFsbG9j
YXRlZCkKKyAgICAgICAgICAgIGZyZWVBdG9tcyA9IGZvb3Rlci5tX25ld2x5QWxsb2NhdGVkOwor
ICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCBhIHNldCBiaXQgaW4gZnJlZUF0b21zIHJlcHJlc2Vu
dHMgbGl2ZSBjZWxscy4KKyAgICAgICAgaXNFbXB0eSA9IGZyZWVBdG9tcy5pc0VtcHR5KCk7CisK
KyAgICAgICAgLy8gSW52ZXJ0IHRoZSBiaXRzIGF0IGVhY2ggY2VsbCBsb2NhdGlvbiBzbyB0aGF0
IHRoZSBvbmVzIGZvciBsaXZlIGNlbGxzCisgICAgICAgIC8vIGFyZSBjbGVhcmVkLCBhbmQgdGhl
IG9uZXMgZm9yIGRlYWQgY2VsbHMgYXJlIHNldC4KKyAgICAgICAgZnJlZUF0b21zIF49IGNlbGxM
b2NhdGlvbnM7CisgICAgfSBlbHNlCisgICAgICAgIGZyZWVBdG9tcyA9IGNlbGxMb2NhdGlvbnM7
IC8vIGFsbCBjZWxscyBhcmUgZnJlZS4KKyAgICAKKyAgICAvLyBXZSBvbmx5IHdhbnQgdG8gZGlz
Y2FyZCB0aGUgbmV3bHlBbGxvY2F0ZWQgYml0cyBpZiB3ZSdyZSBjcmVhdGluZyBhIEZyZWVMaXN0
LAorICAgIC8vIG90aGVyd2lzZSB3ZSB3b3VsZCBsb3NlIGluZm9ybWF0aW9uIG9uIHdoYXQncyBj
dXJyZW50bHkgYWxpdmUuCisgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QgJiYg
bmV3bHlBbGxvY2F0ZWRNb2RlID09IEhhc05ld2x5QWxsb2NhdGVkKQorICAgICAgICBmb290ZXIu
bV9uZXdseUFsbG9jYXRlZFZlcnNpb24gPSBNYXJrZWRTcGFjZTo6bnVsbFZlcnNpb247CisKKyAg
ICBpZiAoc3BhY2UoKS0+aXNNYXJraW5nKCkpCisgICAgICAgIGZvb3Rlci5tX2xvY2sudW5sb2Nr
KCk7CisKKyAgICBpZiAoZGVzdHJ1Y3Rpb25Nb2RlICE9IEJsb2NrSGFzTm9EZXN0cnVjdG9ycykK
KyAgICAgICAgZnJlZUF0b21zLmZvckVhY2hTZXRCaXQoaGFuZGxlRGVhZENlbGwpOworCisgICAg
aWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpIHsKKyAgICAgICAgZnJlZUxpc3QtPmlu
aXRpYWxpemVBdG9tc0JpdG1hcCh0aGlzLCBmcmVlQXRvbXMpOworICAgICAgICBzZXRJc0ZyZWVM
aXN0ZWQoKTsKKyAgICB9IGVsc2UgaWYgKGlzRW1wdHkpCisgICAgICAgIG1fZGlyZWN0b3J5LT5z
ZXRJc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcywgdHJ1ZSk7CisgICAgaWYgKGZhbHNl
KQorICAgICAgICBkYXRhTG9nKCJTbG93bHkgc3dlcHQgYmxvY2sgIiwgUmF3UG9pbnRlcigmYmxv
Y2spLCAiIHdpdGggY2VsbCBzaXplICIsIGNlbGxTaXplLCAiIGFuZCBhdHRyaWJ1dGVzICIsIG1f
YXR0cmlidXRlcywgIjogIiwgcG9pbnRlckR1bXAoZnJlZUxpc3QpLCAiXG4iKTsKKworI2Vsc2Ug
Ly8gbm90IEVOQUJMRShCSVRNQVBfRlJFRUxJU1QpCisKICAgICAvLyBUaGlzIHByb2R1Y2VzIGEg
ZnJlZSBsaXN0IHRoYXQgaXMgb3JkZXJlZCBpbiByZXZlcnNlIHRocm91Z2ggdGhlIGJsb2NrLgog
ICAgIC8vIFRoaXMgaXMgZmluZSwgc2luY2UgdGhlIGFsbG9jYXRpb24gY29kZSBtYWtlcyBubyBh
c3N1bXB0aW9ucyBhYm91dCB0aGUKICAgICAvLyBvcmRlciBvZiB0aGUgZnJlZSBsaXN0LgpAQCAt
MzYxLDYgKzQxOSw3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2UK
ICAgICAgICAgbV9kaXJlY3RvcnktPnNldElzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlz
LCB0cnVlKTsKICAgICBpZiAoZmFsc2UpCiAgICAgICAgIGRhdGFMb2coIlNsb3dseSBzd2VwdCBi
bG9jayAiLCBSYXdQb2ludGVyKCZibG9jayksICIgd2l0aCBjZWxsIHNpemUgIiwgY2VsbFNpemUs
ICIgYW5kIGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzLCAiOiAiLCBwb2ludGVyRHVtcChmcmVl
TGlzdCksICJcbiIpOworI2VuZGlmIC8vIEVOQUJMRShCSVRNQVBfRlJFRUxJU1QpCiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIERlc3Ryb3lGdW5jPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjYyODg4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MDMsNyArNTAzLDcgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRSYW5kb21UaHVuayhW
TQogfQogI2VuZGlmCiAKLXZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0QWxsb2NhdGVXaXRoTm9u
TnVsbEFsbG9jYXRvcihHUFJSZWcgcmVzdWx0R1BSLCBjb25zdCBKSVRBbGxvY2F0b3ImIGFsbG9j
YXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBz
bG93UGF0aCkKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFs
bG9jYXRvcihHUFJSZWcgcmVzdWx0R1BSLCBjb25zdCBKSVRBbGxvY2F0b3ImIGFsbG9jYXRvciwg
R1BSUmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0
aCwgR1BSUmVnIHNjcmF0Y2hHUFIyKQogewogICAgIGlmIChPcHRpb25zOjpmb3JjZUdDU2xvd1Bh
dGhzKCkpIHsKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKGp1bXAoKSk7CkBAIC01MTYsNyArNTE2
LDcgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZVdpdGhObwogICAgIC8vIC0g
V2UgKmNhbiogdXNlIFJlZ2lzdGVyU2V0OjptYWNyb1NjcmF0Y2hSZWdpc3RlcnMgb24gQVJNLgog
CiAgICAgSnVtcCBwb3BQYXRoOwotICAgIEp1bXAgZG9uZTsKKyAgICBKdW1wTGlzdCBkb25lOwog
ICAgIAogICAgIGlmIChhbGxvY2F0b3IuaXNDb25zdGFudCgpKQogICAgICAgICBtb3ZlKFRydXN0
ZWRJbW1QdHIoYWxsb2NhdG9yLmFsbG9jYXRvcigpLmxvY2FsQWxsb2NhdG9yKCkpLCBhbGxvY2F0
b3JHUFIpOwpAQCAtNTM0LDEwICs1MzQsODEgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRB
bGxvY2F0ZVdpdGhObwogICAgIEFkZHJlc3MgcGF5bG9hZEVuZEFkZHIgPSBBZGRyZXNzKGFsbG9j
YXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0Ojpv
ZmZzZXRPZlBheWxvYWRFbmQoKSk7CiAgICAgYWRkUHRyKHBheWxvYWRFbmRBZGRyLCByZXN1bHRH
UFIpOwogCi0gICAgZG9uZSA9IGp1bXAoKTsKKyAgICBkb25lLmFwcGVuZChqdW1wKCkpOwogICAg
ICAgICAKICAgICBwb3BQYXRoLmxpbmsodGhpcyk7Ci0gICAgICAgIAorCisjaWYgRU5BQkxFKEJJ
VE1BUF9GUkVFTElTVCkKKyAgICBpZiAoc2NyYXRjaEdQUjIgPT0gSW52YWxpZEdQUlJlZykKKyAg
ICAgICAgc2NyYXRjaEdQUjIgPSBzY3JhdGNoUmVnaXN0ZXIoKTsKKyAgICBSRUxFQVNFX0FTU0VS
VChzY3JhdGNoR1BSMiAhPSByZXN1bHRHUFIpOworICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2hH
UFIyICE9IHNjcmF0Y2hHUFIpOworICAgIFJFTEVBU0VfQVNTRVJUKHNjcmF0Y2hHUFIgIT0gcmVz
dWx0R1BSKTsKKworICAgIC8vIFRoZSBjb2RlIGJlbG93IGZvciByb3dCaXRtYXBHUFIgcmVsaWVz
IG9uIHRoaXMuCisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoRnJlZUxpc3Q6OkF0b21zQml0bWFw
OjpXb3JkKSA9PSBzaXplb2YodWludDY0X3QpKTsKKworICAgIC8vIENoZWNrIGZvciBhbiBhdmFp
bGFibGUgYml0IGluIG1fY3VycmVudFJvd0JpdG1hcC4KKyAgICBhdXRvIHJvd0JpdG1hcEdQUiA9
IHNjcmF0Y2hHUFI7CisgICAgbG9hZDY0KEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9j
YXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mQ3VycmVudFJvd0Jp
dG1hcCgpKSwgcm93Qml0bWFwR1BSKTsKKyAgICBKdW1wIGFsbG9jYXRlRnJvbUN1cnJlbnRSb3cg
PSBicmFuY2hUZXN0NjQoTm9uWmVybywgcm93Qml0bWFwR1BSKTsKKworICAgIC8vIEJpdG1hcCBm
YXN0IHBhdGggZmFpbGVkOiBjaGVjayBpZiB0aGVyZSdzIGFub3RoZXIgcm93IHRvIGFsbG9jYXRl
IGZyb20uCisgICAgYXV0byByb3dJbmRleEdQUiA9IHJlc3VsdEdQUjsKKyAgICBsb2FkMzIoQWRk
cmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBG
cmVlTGlzdDo6b2Zmc2V0T2ZDdXJyZW50Um93SW5kZXgoKSksIHJvd0luZGV4R1BSKTsKKyAgICBz
bG93UGF0aC5hcHBlbmQoYnJhbmNoVGVzdFB0cihaZXJvLCByb3dJbmRleEdQUikpOworCisgICAg
YXV0byByb3dBZGRyZXNzR1BSID0gc2NyYXRjaEdQUjI7CisgICAgbG9hZFB0cihBZGRyZXNzKGFs
bG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0
OjpvZmZzZXRPZkN1cnJlbnRNYXJrZWRCbG9ja1Jvd0FkZHJlc3MoKSksIHJvd0FkZHJlc3NHUFIp
OworCisgICAgLy8gVGhlcmUgaXMgYW5vdGhlciByb3cgbGVmdCB0byBjaGVjay4KKyAgICBKdW1w
IGZvdW5kTm9uRW1wdHlSb3c7CisgICAgTGFiZWwgY2hlY2tOZXh0Um93ID0gbGFiZWwoKTsKKyAg
ICB7CisgICAgICAgIC8vIExvYWQgdGhlIG5leHQgcm93IGJpdG1hcCBhbmQgcG9pbnQgbV9jdXJy
ZW50TWFya2VkQmxvY2tSb3dBZGRyZXNzIHRvIHRoZSBuZXh0IHJvdy4KKyNpZiAhVVNFX0FESlVT
VEVEX0JJVE1BUF9TVEFSVAorICAgICAgICBzdWI2NChUcnVzdGVkSW1tMzIoMSksIHJvd0luZGV4
R1BSKTsKKyNlbmRpZgorICAgICAgICBsb2FkNjQoQmFzZUluZGV4KGFsbG9jYXRvckdQUiwgcm93
SW5kZXhHUFIsIFRpbWVzRWlnaHQsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkg
KyBGcmVlTGlzdDo6b2Zmc2V0T2ZCaXRtYXBSb3dzKCkpLCByb3dCaXRtYXBHUFIpOworCisjaWYg
VVNFX0FESlVTVEVEX0JJVE1BUF9TVEFSVAorICAgICAgICBzdWI2NChUcnVzdGVkSW1tMzIoMSks
IHJvd0luZGV4R1BSKTsKKyNlbmRpZgorICAgICAgICBzdWJQdHIoVHJ1c3RlZEltbTMyKEZyZWVM
aXN0OjphdG9tc1Jvd0J5dGVzKSwgcm93QWRkcmVzc0dQUik7CisKKyAgICAgICAgZm91bmROb25F
bXB0eVJvdyA9IGJyYW5jaFRlc3Q2NChOb25aZXJvLCByb3dCaXRtYXBHUFIpOworICAgICAgICBi
cmFuY2hUZXN0UHRyKE5vblplcm8sIHJvd0luZGV4R1BSKS5saW5rVG8oY2hlY2tOZXh0Um93LCB0
aGlzKTsKKyAgICB9CisKKyAgICAvLyBObyBtb3JlIHJvd3MuCisgICAgLy8gQm90aCByb3dJbmRl
eEdQUiBhbmQgcm93Qml0bWFwR1BSIHNob3VsZCBiZSBudWxsIGhlcmUuCisgICAgc3RvcmUzMihy
b3dJbmRleEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRP
ZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZDdXJyZW50Um93SW5kZXgoKSkpOworICAg
IHN0b3JlNjQocm93Qml0bWFwR1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0
b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZkN1cnJlbnRSb3dCaXRt
YXAoKSkpOworICAgIHNsb3dQYXRoLmFwcGVuZChqdW1wKCkpOworCisgICAgZm91bmROb25FbXB0
eVJvdy5saW5rKHRoaXMpOworICAgIHN0b3JlUHRyKHJvd0FkZHJlc3NHUFIsIEFkZHJlc3MoYWxs
b2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6
Om9mZnNldE9mQ3VycmVudE1hcmtlZEJsb2NrUm93QWRkcmVzcygpKSk7CisgICAgc3RvcmUzMihy
b3dJbmRleEdQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRP
ZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZDdXJyZW50Um93SW5kZXgoKSkpOworCisg
ICAgLy8gQml0bWFwIGZhc3QgcGF0aCBzdWNjZWVkZWQ6IHdlIGhhdmUgYSBiaXQgdG8gdXNlLgor
ICAgIGFsbG9jYXRlRnJvbUN1cnJlbnRSb3cubGluayh0aGlzKTsKKyAgICB7CisgICAgICAgIC8v
IFJlbW92ZSB0aGlzIGJpdCBmcm9tIG1fY3VycmVudFJvd0JpdG1hcC4KKyAgICAgICAgYXV0byBh
dG9tSW5kZXhJblJvd0dQUiA9IHJlc3VsdEdQUjsKKyAgICAgICAgY291bnRUcmFpbGluZ1plcm9z
NjRXaXRob3V0TnVsbENoZWNrKHJvd0JpdG1hcEdQUiwgYXRvbUluZGV4SW5Sb3dHUFIpOworICAg
ICAgICBjbGVhckJpdDY0KGF0b21JbmRleEluUm93R1BSLCByb3dCaXRtYXBHUFIsIHNjcmF0Y2hH
UFIyKTsKKworICAgICAgICBhdXRvIHJvd0FkZHJlc3NHUFIgPSBzY3JhdGNoR1BSMjsKKyAgICAg
ICAgbG9hZFB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9m
RnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZkN1cnJlbnRNYXJrZWRCbG9ja1Jvd0FkZHJl
c3MoKSksIHJvd0FkZHJlc3NHUFIpOworICAgICAgICBzdG9yZTY0KHJvd0JpdG1hcEdQUiwgQWRk
cmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBG
cmVlTGlzdDo6b2Zmc2V0T2ZDdXJyZW50Um93Qml0bWFwKCkpKTsKKworICAgICAgICAvLyBDb21w
dXRlIGF0b20gYWRkcmVzcyBvZiB0aGlzIGJpdC4KKyAgICAgICAgQVNTRVJUKHJlc3VsdEdQUiA9
PSBhdG9tSW5kZXhJblJvd0dQUik7CisgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJbW0zMihGcmVl
TGlzdDo6YXRvbVNpemVTaGlmdCksIHJlc3VsdEdQUik7CisgICAgICAgIGFkZFB0cihyb3dBZGRy
ZXNzR1BSLCByZXN1bHRHUFIpOworICAgIH0KKworI2Vsc2UKICAgICBsb2FkUHRyKEFkZHJlc3Mo
YWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxp
c3Q6Om9mZnNldE9mU2NyYW1ibGVkSGVhZCgpKSwgcmVzdWx0R1BSKTsKICAgICB4b3JQdHIoQWRk
cmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBG
cmVlTGlzdDo6b2Zmc2V0T2ZTZWNyZXQoKSksIHJlc3VsdEdQUik7CiAgICAgc2xvd1BhdGguYXBw
ZW5kKGJyYW5jaFRlc3RQdHIoWmVybywgcmVzdWx0R1BSKSk7CkBAIC01NDYsNyArNjE3LDggQEAg
dm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZVdpdGhObwogICAgIC8vIGl0J3Mgc3Rp
bGwgb24gdGhlIEdDJ3MgZnJlZSBsaXN0LgogICAgIGxvYWRQdHIoQWRkcmVzcyhyZXN1bHRHUFIs
IEZyZWVDZWxsOjpvZmZzZXRPZlNjcmFtYmxlZE5leHQoKSksIHNjcmF0Y2hHUFIpOwogICAgIHN0
b3JlUHRyKHNjcmF0Y2hHUFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6
b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2NyYW1ibGVkSGVhZCgpKSk7
Ci0gICAgICAgIAorI2VuZGlmCisKICAgICBkb25lLmxpbmsodGhpcyk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkocmV2aXNpb24gMjYy
ODg4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTg4Nyw4ICsxODg3LDggQEAgcHVibGljOgogICAgIC8vIHRoYXQgYWxs
b2NhdG9yIGlzIG5vbi1udWxsOyBhbGxvY2F0b3IgY2FuIGJlIG51bGwgYXMgYSBzaWduYWwgdGhh
dCB3ZSBkb24ndCBrbm93IHdoYXQgdGhlCiAgICAgLy8gdmFsdWUgb2YgYWxsb2NhdG9yR1BSIGlz
LiBBZGRpdGlvbmFsbHksIGlmIHRoZSBhbGxvY2F0b3IgaXMgbm90IG51bGwsIHRoZW4gdGhlcmUg
aXMgbm8gbmVlZAogICAgIC8vIHRvIHBvcHVsYXRlIGFsbG9jYXRvckdQUiAtIHRoaXMgY29kZSB3
aWxsIGlnbm9yZSB0aGUgY29udGVudHMgb2YgYWxsb2NhdG9yR1BSLgotICAgIHZvaWQgZW1pdEFs
bG9jYXRlV2l0aE5vbk51bGxBbGxvY2F0b3IoR1BSUmVnIHJlc3VsdEdQUiwgY29uc3QgSklUQWxs
b2NhdG9yJiBhbGxvY2F0b3IsIEdQUlJlZyBhbGxvY2F0b3JHUFIsIEdQUlJlZyBzY3JhdGNoR1BS
LCBKdW1wTGlzdCYgc2xvd1BhdGgpOwotICAgIAorICAgIHZvaWQgZW1pdEFsbG9jYXRlV2l0aE5v
bk51bGxBbGxvY2F0b3IoR1BSUmVnIHJlc3VsdEdQUiwgY29uc3QgSklUQWxsb2NhdG9yJiwgR1BS
UmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCwg
R1BSUmVnIHNjcmF0Y2hHUFIyID0gSW52YWxpZEdQUlJlZyk7CisKICAgICB2b2lkIGVtaXRBbGxv
Y2F0ZShHUFJSZWcgcmVzdWx0R1BSLCBjb25zdCBKSVRBbGxvY2F0b3ImIGFsbG9jYXRvciwgR1BS
UmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCk7
CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgU3RydWN0dXJlVHlwZT4KSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL0JpdG1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdG1hcC5o
CShyZXZpc2lvbiAyNjI4ODgpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRtYXAuaAkod29ya2luZyBj
b3B5KQpAQCAtMTMwLDkgKzEzMCwxNSBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBoYXNoKCkg
Y29uc3Q7CiAKKyAgICAvLyBMb3cgbGV2ZWwgaW50ZXJmYWNlLgorICAgIHVzaW5nIFdvcmQgPSBX
b3JkVHlwZTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGJpdHNJbldvcmQgPSBjb3Vu
dE9mQml0czxXb3JkVHlwZT47CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCBudW1iZXJP
ZldvcmRzID0gKGJpdG1hcFNpemUgKyBiaXRzSW5Xb3JkIC0gMSkgLyBiaXRzSW5Xb3JkOworICAg
IFdvcmRUeXBlIHdvcmRBdChzaXplX3Qgd29yZEluZGV4KSBjb25zdCB7IHJldHVybiBiaXRzW3dv
cmRJbmRleF07IH0KKwogcHJpdmF0ZToKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHdv
cmRTaXplID0gc2l6ZW9mKFdvcmRUeXBlKSAqIDg7Ci0gICAgc3RhdGljIGNvbnN0ZXhwciB1bnNp
Z25lZCB3b3JkcyA9IChiaXRtYXBTaXplICsgd29yZFNpemUgLSAxKSAvIHdvcmRTaXplOworICAg
IHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgd29yZFNpemUgPSBiaXRzSW5Xb3JkOworICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgd29yZHMgPSBudW1iZXJPZldvcmRzOwogCiAgICAgLy8g
dGhlIGxpdGVyYWwgJzEnIGlzIG9mIHR5cGUgc2lnbmVkIGludC4gIFdlIHdhbnQgdG8gdXNlIGFu
IHVuc2lnbmVkCiAgICAgLy8gdmVyc2lvbiBvZiB0aGUgY29ycmVjdCBzaXplIHdoZW4gZG9pbmcg
dGhlIGNhbGN1bGF0aW9ucyBiZWNhdXNlIGlmCkBAIC0zODAsMTIgKzM4NiwyNSBAQCBpbmxpbmUg
dm9pZCBCaXRtYXA8Yml0bWFwU2l6ZSwgV29yZFR5cGU+CiAgICAgICAgIGlmICghd29yZCkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBzaXplX3QgYmFzZSA9IGkgKiB3b3JkU2l6ZTsK
LSAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB3b3JkU2l6ZTsgKytqKSB7CisgICAgICAg
IHNpemVfdCBqID0gMDsKKyAgICAgICAgZm9yICg7IHdvcmQ7ICsraikgewogICAgICAgICAgICAg
aWYgKHdvcmQgJiAxKQogICAgICAgICAgICAgICAgIGZ1bmMoYmFzZSArIGopOwogICAgICAgICAg
ICAgd29yZCA+Pj0gMTsKICAgICAgICAgfQorICAgICAgICBBU1NFUlQoaiA8PSB3b3JkU2l6ZSk7
CiAgICAgfQorICAgIC8vIG1sYW0gTk9URTogbWljcm9iZW5jaG1hcmtzIHNob3dzIHRoaXMgdG8g
YmUgc2xvd2VyIGlmIGJpdHMgYXJlIGNvbnRpZ3VvdXMuCisvLyAgICBzaXplX3QgYmFzZSA9IDA7
CisvLyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdvcmRzOyArK2kpIHsKKy8vICAgICAgICBX
b3JkVHlwZSB3b3JkID0gYml0c1tpXTsKKy8vICAgICAgICB3aGlsZSAod29yZCkgeworLy8gICAg
ICAgICAgICB1bnNpZ25lZCBpbmRleCA9IGN0eih3b3JkKTsKKy8vICAgICAgICAgICAgd29yZCAm
PSB+KDEgPDwgaW5kZXgpOworLy8gICAgICAgICAgICBmdW5jKGJhc2UgKyBpbmRleCk7CisvLyAg
ICAgICAgfQorLy8gICAgICAgIGJhc2UgKz0gd29yZFNpemU7CisvLyAgICB9CiB9CiAKIHRlbXBs
YXRlPHNpemVfdCBiaXRtYXBTaXplLCB0eXBlbmFtZSBXb3JkVHlwZT4KSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL01hdGhFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0
cmFzLmgJKHJldmlzaW9uIDI2Mjg4OCkKKysrIFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAko
d29ya2luZyBjb3B5KQpAQCAtNTkzLDcgKzU5Myw3IEBAIHZvaWQgc2h1ZmZsZVZlY3RvcihWZWN0
b3JUeXBlJiB2ZWN0b3IsIGMKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogY29uc3RleHByIHVuc2ln
bmVkIGNsekNvbnN0ZXhwcihUIHZhbHVlKQogewotICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRT
aXplID0gc2l6ZW9mKFQpICogQ0hBUl9CSVQ7CisgICAgY29uc3RleHByIHVuc2lnbmVkIGJpdFNp
emUgPSBjb3VudE9mQml0czxUPjsKIAogICAgIHVzaW5nIFVUID0gdHlwZW5hbWUgc3RkOjptYWtl
X3Vuc2lnbmVkPFQ+Ojp0eXBlOwogICAgIFVUIHVWYWx1ZSA9IHZhbHVlOwpAQCAtNjEwLDEzICs2
MTAsMTMgQEAgY29uc3RleHByIHVuc2lnbmVkIGNsekNvbnN0ZXhwcihUIHZhbHVlKQogdGVtcGxh
dGU8dHlwZW5hbWUgVD4KIGlubGluZSB1bnNpZ25lZCBjbHooVCB2YWx1ZSkKIHsKLSAgICBjb25z
dGV4cHIgdW5zaWduZWQgYml0U2l6ZSA9IHNpemVvZihUKSAqIENIQVJfQklUOworICAgIGNvbnN0
ZXhwciBzaXplX3QgYml0U2l6ZSA9IGNvdW50T2ZCaXRzPFQ+OwogCiAgICAgdXNpbmcgVVQgPSB0
eXBlbmFtZSBzdGQ6Om1ha2VfdW5zaWduZWQ8VD46OnR5cGU7CiAgICAgVVQgdVZhbHVlID0gdmFs
dWU7CiAKICNpZiBDT01QSUxFUihHQ0NfQ09NUEFUSUJMRSkKLSAgICBjb25zdGV4cHIgdW5zaWdu
ZWQgYml0U2l6ZTY0ID0gc2l6ZW9mKHVpbnQ2NF90KSAqIENIQVJfQklUOworICAgIGNvbnN0ZXhw
ciBzaXplX3QgYml0U2l6ZTY0ID0gY291bnRPZkJpdHM8dWludDY0X3Q+OwogICAgIGlmICh1VmFs
dWUpCiAgICAgICAgIHJldHVybiBfX2J1aWx0aW5fY2x6bGwodVZhbHVlKSAtIChiaXRTaXplNjQg
LSBiaXRTaXplKTsKICAgICByZXR1cm4gYml0U2l6ZTsKQEAgLTYzOCw3ICs2MzgsNyBAQCBpbmxp
bmUgdW5zaWduZWQgY2x6KFQgdmFsdWUpCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIGNvbnN0ZXhw
ciB1bnNpZ25lZCBjdHpDb25zdGV4cHIoVCB2YWx1ZSkKIHsKLSAgICBjb25zdGV4cHIgdW5zaWdu
ZWQgYml0U2l6ZSA9IHNpemVvZihUKSAqIENIQVJfQklUOworICAgIGNvbnN0ZXhwciB1bnNpZ25l
ZCBiaXRTaXplID0gY291bnRPZkJpdHM8VD47CiAKICAgICB1c2luZyBVVCA9IHR5cGVuYW1lIHN0
ZDo6bWFrZV91bnNpZ25lZDxUPjo6dHlwZTsKICAgICBVVCB1VmFsdWUgPSB2YWx1ZTsKQEAgLTY1
Nyw3ICs2NTcsNyBAQCBjb25zdGV4cHIgdW5zaWduZWQgY3R6Q29uc3RleHByKFQgdmFsdWUpCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgogaW5saW5lIHVuc2lnbmVkIGN0eihUIHZhbHVlKQogewotICAg
IGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRTaXplID0gc2l6ZW9mKFQpICogQ0hBUl9CSVQ7CisgICAg
Y29uc3RleHByIHVuc2lnbmVkIGJpdFNpemUgPSBjb3VudE9mQml0czxUPjsKIAogICAgIHVzaW5n
IFVUID0gdHlwZW5hbWUgc3RkOjptYWtlX3Vuc2lnbmVkPFQ+Ojp0eXBlOwogICAgIFVUIHVWYWx1
ZSA9IHZhbHVlOwpAQCAtNjk1LDcgKzY5NSw3IEBAIGNvbnN0ZXhwciB1bnNpZ25lZCBnZXRMU0JT
ZXRDb25zdGV4cHIoVCAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUgdW5zaWduZWQgZ2V0
TVNCU2V0KFQgdCkKIHsKLSAgICBjb25zdGV4cHIgdW5zaWduZWQgYml0U2l6ZSA9IHNpemVvZihU
KSAqIENIQVJfQklUOworICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRTaXplID0gY291bnRPZkJp
dHM8VD47CiAgICAgQVNTRVJUKHQpOwogICAgIHJldHVybiBiaXRTaXplIC0gMSAtIGNseih0KTsK
IH0KQEAgLTcwMywxMSArNzAzLDE0IEBAIGlubGluZSB1bnNpZ25lZCBnZXRNU0JTZXQoVCB0KQog
dGVtcGxhdGU8dHlwZW5hbWUgVD4KIGNvbnN0ZXhwciB1bnNpZ25lZCBnZXRNU0JTZXRDb25zdGV4
cHIoVCB0KQogewotICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRTaXplID0gc2l6ZW9mKFQpICog
Q0hBUl9CSVQ7CisgICAgY29uc3RleHByIHVuc2lnbmVkIGJpdFNpemUgPSBjb3VudE9mQml0czxU
PjsKICAgICBBU1NFUlRfVU5ERVJfQ09OU1RFWFBSX0NPTlRFWFQodCk7CiAgICAgcmV0dXJuIGJp
dFNpemUgLSAxIC0gY2x6Q29uc3RleHByKHQpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1
bnNpZ25lZCBsb2cyKFQgdmFsdWUpIHsgcmV0dXJuIGdldE1TQlNldCh2YWx1ZSk7IH0KK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciB1bnNpZ25lZCBsb2cyQ29uc3RleHByKFQgdmFsdWUp
IHsgcmV0dXJuIGdldE1TQlNldENvbnN0ZXhwcih2YWx1ZSk7IH0KKwogfSAvLyBuYW1lc3BhY2Ug
V1RGCiAKIHVzaW5nIFdURjo6c2h1ZmZsZVZlY3RvcjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>401826</attachid>
            <date>2020-06-12 23:05:24 -0700</date>
            <delta_ts>2020-06-17 15:58:42 -0700</delta_ts>
            <desc>test patch 3: post-tuned</desc>
            <filename>bug-213071c.patch</filename>
            <type>text/plain</type>
            <size>39993</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAyNjI5MzIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMTE2LDEwICsxMTYsMzggQEAgcHVibGljOgogICAgIC8vIGRlc2NyaWJpbmcgaW1tZWRp
YXRlICBhbmQgbWVtb3J5IG9wZXJhbmRzIHRvIHRoZSBpbnN0cnVjdGlvbnMgdG8gYmUgcGxhbnRl
ZC4KIAogICAgIGVudW0gU2NhbGUgewotICAgICAgICBUaW1lc09uZSwKLSAgICAgICAgVGltZXNU
d28sCi0gICAgICAgIFRpbWVzRm91ciwKLSAgICAgICAgVGltZXNFaWdodCwKKyAgICAgICAgVGlt
ZXNPbmUsICAgLy8gMSA8PCAwCisgICAgICAgIFRpbWVzVHdvLCAgIC8vIDEgPDwgMQorICAgICAg
ICBUaW1lc0ZvdXIsICAvLyAxIDw8IDIKKyAgICAgICAgVGltZXNFaWdodCwgLy8gMSA8PCAzCisg
ICAgICAgIFRpbWVzMTYsICAgIC8vIDEgPDwgNAorICAgICAgICBUaW1lczMyLCAgICAvLyAxIDw8
IDUKKyAgICAgICAgVGltZXM2NCwgICAgLy8gMSA8PCA2CisgICAgICAgIFRpbWVzMTI4LCAgIC8v
IDEgPDwgNworICAgICAgICBUaW1lczI1NiwgICAvLyAxIDw8IDgKKyAgICAgICAgVGltZXM1MTIs
ICAgLy8gMSA8PCA5CisgICAgICAgIFRpbWVzMUssICAgIC8vIDEgPDwgMTAKKyAgICAgICAgVGlt
ZXMySywgICAgLy8gMSA8PCAxMQorICAgICAgICBUaW1lczRLLCAgICAvLyAxIDw8IDEyCisgICAg
ICAgIFRpbWVzOEssICAgIC8vIDEgPDwgMTMKKyAgICAgICAgVGltZXMxNkssICAgLy8gMSA8PCAx
NAorICAgICAgICBUaW1lczMySywgICAvLyAxIDw8IDE1CisgICAgICAgIFRpbWVzNjRLLCAgIC8v
IDEgPDwgMTYKKyAgICAgICAgVGltZXMxMjhLLCAgLy8gMSA8PCAxNworICAgICAgICBUaW1lczI1
NkssICAvLyAxIDw8IDE4CisgICAgICAgIFRpbWVzNTEySywgIC8vIDEgPDwgMTkKKyAgICAgICAg
VGltZXMxTSwgICAgLy8gMSA8PCAyMAorICAgICAgICBUaW1lczJNLCAgICAvLyAxIDw8IDIxCisg
ICAgICAgIFRpbWVzNE0sICAgIC8vIDEgPDwgMjIKKyAgICAgICAgVGltZXM4TSwgICAgLy8gMSA8
PCAyMworICAgICAgICBUaW1lczE2TSwgICAvLyAxIDw8IDI0CisgICAgICAgIFRpbWVzMzJNLCAg
IC8vIDEgPDwgMjUKKyAgICAgICAgVGltZXM2NE0sICAgLy8gMSA8PCAyNgorICAgICAgICBUaW1l
czEyOE0sICAvLyAxIDw8IDI3CisgICAgICAgIFRpbWVzMjU2TSwgIC8vIDEgPDwgMjgKKyAgICAg
ICAgVGltZXM1MTJNLCAgLy8gMSA8PCAyOQorICAgICAgICBUaW1lczFHLCAgICAvLyAxIDw8IDMw
CisgICAgICAgIFRpbWVzMkcsICAgIC8vIDEgPDwgMzEKICAgICB9OwogICAgIAogICAgIHN0YXRp
YyBTY2FsZSB0aW1lc1B0cigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lvbiAyNjI5
MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2
Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzNyw2ICsyMzcsMjMgQEAgcHVibGljOgogICAg
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBp
ZiAoaW5kZXguc2NhbGUgPiBUaW1lc0VpZ2h0KSB7CisgICAgICAgICAgICBSZWdpc3RlcklEIGlu
ZGV4U2NyYXRjaCA9IGRlc3Q7CisgICAgICAgICAgICBib29sIG5lZWRUb1Jlc3RvcmVJbmRleFJl
Z2lzdGVyID0gZmFsc2U7CisgICAgICAgICAgICBpZiAoaW5kZXguYmFzZSA9PSBkZXN0KSB7Cisg
ICAgICAgICAgICAgICAgaW5kZXhTY3JhdGNoID0gc2NyYXRjaFJlZ2lzdGVyKCk7CisgICAgICAg
ICAgICAgICAgaWYgKGluZGV4LmluZGV4ID09IGluZGV4U2NyYXRjaCkgeworICAgICAgICAgICAg
ICAgICAgICBwdXNoKGluZGV4LmluZGV4KTsKKyAgICAgICAgICAgICAgICAgICAgbmVlZFRvUmVz
dG9yZUluZGV4UmVnaXN0ZXIgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIG1vdmUoaW5kZXguaW5kZXgsIGluZGV4U2NyYXRjaCk7CisgICAgICAg
ICAgICBsc2hpZnQzMihUcnVzdGVkSW1tMzIoaW5kZXguc2NhbGUpLCBpbmRleFNjcmF0Y2gpOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIubGVhbF9tcihpbmRleC5vZmZzZXQsIGluZGV4LmJhc2Us
IGluZGV4U2NyYXRjaCwgMCwgZGVzdCk7CisgICAgICAgICAgICBpZiAobmVlZFRvUmVzdG9yZUlu
ZGV4UmVnaXN0ZXIpCisgICAgICAgICAgICAgICAgcG9wKGluZGV4LmluZGV4KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICBtX2Fzc2VtYmxlci5sZWFsX21yKGluZGV4
Lm9mZnNldCwgaW5kZXguYmFzZSwgaW5kZXguaW5kZXgsIGluZGV4LnNjYWxlLCBkZXN0KTsKICAg
ICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXJYODZfNjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyWDg2XzY0LmgJKHJldmlzaW9uIDI2MjkzMikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzg4LDYgKzM4OCwyMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIGlmIChpbmRleC5zY2FsZSA+IFRpbWVz
RWlnaHQpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgaW5kZXhTY3JhdGNoID0gZGVzdDsKKyAg
ICAgICAgICAgIGJvb2wgbmVlZFRvUmVzdG9yZUluZGV4UmVnaXN0ZXIgPSBmYWxzZTsKKyAgICAg
ICAgICAgIGlmIChpbmRleC5iYXNlID09IGRlc3QpIHsKKyAgICAgICAgICAgICAgICBpbmRleFNj
cmF0Y2ggPSBzY3JhdGNoUmVnaXN0ZXIoKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5kZXguaW5k
ZXggPT0gaW5kZXhTY3JhdGNoKSB7CisgICAgICAgICAgICAgICAgICAgIHB1c2goaW5kZXguaW5k
ZXgpOworICAgICAgICAgICAgICAgICAgICBuZWVkVG9SZXN0b3JlSW5kZXhSZWdpc3RlciA9IHRy
dWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbW92ZShp
bmRleC5pbmRleCwgaW5kZXhTY3JhdGNoKTsKKyAgICAgICAgICAgIGxzaGlmdDY0KFRydXN0ZWRJ
bW0zMihpbmRleC5zY2FsZSksIGluZGV4U2NyYXRjaCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5sZWFxX21yKGluZGV4Lm9mZnNldCwgaW5kZXguYmFzZSwgaW5kZXhTY3JhdGNoLCAwLCBkZXN0
KTsKKyAgICAgICAgICAgIGlmIChuZWVkVG9SZXN0b3JlSW5kZXhSZWdpc3RlcikKKyAgICAgICAg
ICAgICAgICBwb3AoaW5kZXguaW5kZXgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CiAgICAgICAgIG1fYXNzZW1ibGVyLmxlYXFfbXIoaW5kZXgub2Zmc2V0LCBpbmRleC5iYXNlLCBp
bmRleC5pbmRleCwgaW5kZXguc2NhbGUsIGRlc3QpOwogICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAkocmV2aXNpb24gMjYyOTMy
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTA1MSw3ICsxNTA1MSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBw
YXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMrKzsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgcGF0Y2hwb2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyV2l0aENsb2JiZXIoYWxsb2NhdG9y
KTsKLSAgICAgICAgcGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzKys7CisgICAgICAg
IHBhdGNocG9pbnQtPm51bUdQU2NyYXRjaFJlZ2lzdGVycyArPSAzOwogICAgICAgICBwYXRjaHBv
aW50LT5yZXN1bHRDb25zdHJhaW50cyA9IHsgVmFsdWVSZXA6OlNvbWVFYXJseVJlZ2lzdGVyIH07
CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRTdWNjZXNzb3IodXN1YWxseShjb250aW51
YXRpb24pKTsKQEAgLTE1MDY0LDcgKzE1MDY0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBHUFJSZWcgYWxsb2NhdG9yR1BSOwogICAgICAgICAgICAgICAg
IGlmIChhY3R1YWxBbGxvY2F0b3IuaXNDb25zdGFudCgpKQotICAgICAgICAgICAgICAgICAgICBh
bGxvY2F0b3JHUFIgPSBwYXJhbXMuZ3BTY3JhdGNoKDEpOworICAgICAgICAgICAgICAgICAgICBh
bGxvY2F0b3JHUFIgPSBwYXJhbXMuZ3BTY3JhdGNoKDMpOwogICAgICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yR1BSID0gcGFyYW1zWzFdLmdwcigpOwogICAg
ICAgICAgICAgICAgIApAQCAtMTUwNzYsNyArMTUwNzYsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIC8vIGFsbCBvZiB0aGUgY29tcGlsZXIgdGllcnMuCiAgICAgICAgICAgICAgICAgaml0
LmVtaXRBbGxvY2F0ZVdpdGhOb25OdWxsQWxsb2NhdG9yKAogICAgICAgICAgICAgICAgICAgICBw
YXJhbXNbMF0uZ3ByKCksIGFjdHVhbEFsbG9jYXRvciwgYWxsb2NhdG9yR1BSLCBwYXJhbXMuZ3BT
Y3JhdGNoKDApLAotICAgICAgICAgICAgICAgICAgICBqdW1wVG9TbG93UGF0aCk7CisgICAgICAg
ICAgICAgICAgICAgIGp1bXBUb1Nsb3dQYXRoLCBwYXJhbXMuZ3BTY3JhdGNoKDEpLCBwYXJhbXMu
Z3BTY3JhdGNoKDIpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAganVtcFRvU3VjY2VzczsKICAgICAgICAgICAgICAgICBpZiAoIXBhcmFtcy5m
YWxsc1Rocm91Z2hUb1N1Y2Nlc3NvcigwKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0ZyZWVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9GcmVlTGlzdC5jcHAJKHJldmlzaW9uIDI2MjkzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0ZyZWVMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM5LDEzICszOSw0NyBAQCBG
cmVlTGlzdDo6fkZyZWVMaXN0KCkKIAogdm9pZCBGcmVlTGlzdDo6Y2xlYXIoKQogeworI2lmIEVO
QUJMRShCSVRNQVBfRlJFRUxJU1QpCisgICAgbV9jdXJyZW50Um93Qml0bWFwID0gMDsKKyAgICBt
X2N1cnJlbnRSb3dJbmRleCA9IDA7CisjZWxzZQogICAgIG1fc2NyYW1ibGVkSGVhZCA9IDA7CiAg
ICAgbV9zZWNyZXQgPSAwOworI2VuZGlmCiAgICAgbV9wYXlsb2FkRW5kID0gbnVsbHB0cjsKICAg
ICBtX3JlbWFpbmluZyA9IDA7CiAgICAgbV9vcmlnaW5hbFNpemUgPSAwOwogfQogCisjaWYgRU5B
QkxFKEJJVE1BUF9GUkVFTElTVCkKKwordm9pZCBGcmVlTGlzdDo6aW5pdGlhbGl6ZUF0b21zQml0
bWFwKE1hcmtlZEJsb2NrOjpIYW5kbGUqIGJsb2NrLCBBdG9tc0JpdG1hcCYgZnJlZUF0b21zKQor
eworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgbV9tYXJrZWRCbG9jayA9IGJsb2NrOworI2VuZGlm
CisgICAgQVNTRVJUX1VOVVNFRChmcmVlQXRvbXMsICZmcmVlQXRvbXMgPT0gJm1fYml0bWFwKTsK
KyAgICAvLyBtX2JpdG1hcCBoYXMgYWxyZWFkeSBiZWVuIGZpbGxlZCBpbiBieSBNYXJrZWRCbG9j
azo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZWVwKCkuCisKKyAgICBtX2N1cnJlbnRSb3dCaXRtYXAg
PSAwOworICAgIHNpemVfdCByb3dJbmRleCA9IEF0b21zQml0bWFwOjpudW1iZXJPZldvcmRzOwor
ICAgIHdoaWxlIChyb3dJbmRleC0tKSB7CisgICAgICAgIGF1dG8gcm93Qml0bWFwID0gbV9iaXRt
YXAud29yZEF0KHJvd0luZGV4KTsKKyAgICAgICAgaWYgKHJvd0JpdG1hcCkgeworICAgICAgICAg
ICAgbV9jdXJyZW50Um93Qml0bWFwID0gcm93Qml0bWFwOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKG1fY3VycmVudFJvd0JpdG1hcCB8fCBtX2JpdG1h
cC5pc0VtcHR5KCkpOworICAgIG1fY3VycmVudFJvd0luZGV4ID0gbV9jdXJyZW50Um93Qml0bWFw
ID8gcm93SW5kZXggOiAwOworCisgICAgc2l6ZV90IGZpcnN0QXRvbUluUm93ID0gbV9jdXJyZW50
Um93SW5kZXggKiBhdG9tc1BlclJvdzsKKyAgICBtX2N1cnJlbnRNYXJrZWRCbG9ja1Jvd0FkZHJl
c3MgPSBiaXR3aXNlX2Nhc3Q8QXRvbSo+KGJsb2NrLT5hdG9tQXQoZmlyc3RBdG9tSW5Sb3cpKTsK
K30KKworI2Vsc2UKKy8vIExpbmtlZCBMaXN0IGltcGxlbWVudGF0aW9uLgorCiB2b2lkIEZyZWVM
aXN0Ojppbml0aWFsaXplTGlzdChGcmVlQ2VsbCogaGVhZCwgdWludHB0cl90IHNlY3JldCwgdW5z
aWduZWQgYnl0ZXMpCiB7CiAgICAgLy8gSXQncyAqc2xpZ2h0bHkqIG1vcmUgb3B0aW1hbCB0byB1
c2UgYSBzY3JhbWJsZWQgaGVhZC4gSXQgc2F2ZXMgYSByZWdpc3RlciBvbiB0aGUgZmFzdCBwYXRo
LgpAQCAtNTYsMTYgKzkwLDIzIEBAIHZvaWQgRnJlZUxpc3Q6OmluaXRpYWxpemVMaXN0KEZyZWVD
ZWxsKiAKICAgICBtX29yaWdpbmFsU2l6ZSA9IGJ5dGVzOwogfQogCisjZW5kaWYgLy8gRU5BQkxF
KEJJVE1BUF9GUkVFTElTVCkKKwogdm9pZCBGcmVlTGlzdDo6aW5pdGlhbGl6ZUJ1bXAoY2hhciog
cGF5bG9hZEVuZCwgdW5zaWduZWQgcmVtYWluaW5nKQogeworI2lmIEVOQUJMRShCSVRNQVBfRlJF
RUxJU1QpCisgICAgbV9jdXJyZW50Um93Qml0bWFwID0gMDsKKyAgICBtX2N1cnJlbnRSb3dJbmRl
eCA9IDA7CisjZWxzZQogICAgIG1fc2NyYW1ibGVkSGVhZCA9IDA7CiAgICAgbV9zZWNyZXQgPSAw
OworI2VuZGlmCiAgICAgbV9wYXlsb2FkRW5kID0gcGF5bG9hZEVuZDsKICAgICBtX3JlbWFpbmlu
ZyA9IHJlbWFpbmluZzsKICAgICBtX29yaWdpbmFsU2l6ZSA9IHJlbWFpbmluZzsKIH0KIAotYm9v
bCBGcmVlTGlzdDo6Y29udGFpbnMoSGVhcENlbGwqIHRhcmdldCkgY29uc3QKK2Jvb2wgRnJlZUxp
c3Q6OmNvbnRhaW5zKEhlYXBDZWxsKiB0YXJnZXQsIE1hcmtlZEJsb2NrOjpIYW5kbGUqIGN1cnJl
bnRCbG9jaykgY29uc3QKIHsKICAgICBpZiAobV9yZW1haW5pbmcpIHsKICAgICAgICAgY29uc3Qg
dm9pZCogc3RhcnQgPSAobV9wYXlsb2FkRW5kIC0gbV9yZW1haW5pbmcpOwpAQCAtNzMsMTkgKzEx
NCw0OCBAQCBib29sIEZyZWVMaXN0Ojpjb250YWlucyhIZWFwQ2VsbCogdGFyZ2V0CiAgICAgICAg
IHJldHVybiAoc3RhcnQgPD0gdGFyZ2V0KSAmJiAodGFyZ2V0IDwgZW5kKTsKICAgICB9CiAKKyNp
ZiBFTkFCTEUoQklUTUFQX0ZSRUVMSVNUKQorICAgIGlmIChiaXRtYXBJc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIGN1cnJlbnRCbG9jayBtYXkgYmUgbnVsbCBpZiB0
aGUgYWxsb2NhdG9yIGhhcyBiZWVuIHJlc2V0IChhbmQgdGhlcmVmb3JlLAorICAgIC8vIHRoZSBG
cmVlTGlzdCBjbGVhcmVkLiBIZW5jZSwgd2Ugc2hvdWxkIG9ubHkgY2hlY2sgdGhpcyBhc3NlcnRp
b24gYWZ0ZXIKKyAgICAvLyB3ZSBjaGVjayBpZiB0aGUgRnJlZUxpc3QgYml0bWFwIGlzIGVtcHR5
IGFib3ZlLgorICAgIEFTU0VSVChtX21hcmtlZEJsb2NrID09IGN1cnJlbnRCbG9jayk7CisgICAg
aWYgKCFjdXJyZW50QmxvY2stPmNvbnRhaW5zKHRhcmdldCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHVuc2lnbmVkIGF0b21OdW1iZXIgPSBjdXJyZW50QmxvY2stPmJsb2NrKCkuYXRv
bU51bWJlcih0YXJnZXQpOworICAgIHVuc2lnbmVkIHJvd0luZGV4ID0gYXRvbU51bWJlciAvIGF0
b21zUGVyUm93OworICAgIGlmIChyb3dJbmRleCA+IG1fY3VycmVudFJvd0luZGV4KQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKHJvd0luZGV4ID09IG1fY3VycmVudFJvd0luZGV4KSB7
CisgICAgICAgIGNvbnN0ZXhwciBBdG9tc0JpdG1hcDo6V29yZCBvbmUgPSAxOworICAgICAgICB1
bnNpZ25lZCBmaXJzdEF0b21JblJvdyA9IHJvd0luZGV4ICogYXRvbXNQZXJSb3c7CisgICAgICAg
IHVuc2lnbmVkIGF0b21JbmRleEluUm93ID0gYXRvbU51bWJlciAtIGZpcnN0QXRvbUluUm93Owor
ICAgICAgICByZXR1cm4gbV9jdXJyZW50Um93Qml0bWFwICYgKG9uZSA8PCBhdG9tSW5kZXhJblJv
dyk7CisgICAgfQorICAgIHJldHVybiBtX2JpdG1hcC5nZXQoYXRvbU51bWJlcik7CisKKyNlbHNl
CisgICAgVU5VU0VEX1BBUkFNKGN1cnJlbnRCbG9jayk7CiAgICAgRnJlZUNlbGwqIGNhbmRpZGF0
ZSA9IGhlYWQoKTsKICAgICB3aGlsZSAoY2FuZGlkYXRlKSB7CiAgICAgICAgIGlmIChiaXR3aXNl
X2Nhc3Q8SGVhcENlbGwqPihjYW5kaWRhdGUpID09IHRhcmdldCkKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICBjYW5kaWRhdGUgPSBjYW5kaWRhdGUtPm5leHQobV9zZWNyZXQpOwog
ICAgIH0KLQogICAgIHJldHVybiBmYWxzZTsKKyNlbmRpZgogfQogCiB2b2lkIEZyZWVMaXN0Ojpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CisjaWYgRU5BQkxFKEJJVE1BUF9GUkVFTElT
VCkKKyAgICBvdXQucHJpbnQoIntjdXJyZW50Um93Qml0bWFwID0gIiwgbV9jdXJyZW50Um93Qml0
bWFwLCAiLCBjdXJyZW50Um93SW5kZXggPSAiLCBtX2N1cnJlbnRSb3dJbmRleCwgIiwgcGF5bG9h
ZEVuZCA9ICIsIFJhd1BvaW50ZXIobV9wYXlsb2FkRW5kKSwgIiwgcmVtYWluaW5nID0gIiwgbV9y
ZW1haW5pbmcsICIsIG9yaWdpbmFsU2l6ZSA9ICIsIG1fb3JpZ2luYWxTaXplLCAifSIpOworI2Vs
c2UKICAgICBvdXQucHJpbnQoIntoZWFkID0gIiwgUmF3UG9pbnRlcihoZWFkKCkpLCAiLCBzZWNy
ZXQgPSAiLCBtX3NlY3JldCwgIiwgcGF5bG9hZEVuZCA9ICIsIFJhd1BvaW50ZXIobV9wYXlsb2Fk
RW5kKSwgIiwgcmVtYWluaW5nID0gIiwgbV9yZW1haW5pbmcsICIsIG9yaWdpbmFsU2l6ZSA9ICIs
IG1fb3JpZ2luYWxTaXplLCAifSIpOworI2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5oCShyZXZpc2lvbiAyNjI5MzIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjUsMTMgKzI1LDIyIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiTWFya2Vk
QmxvY2suaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUHJp
bnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvU3RkSW50RXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewogCiBjbGFzcyBIZWFwQ2VsbDsKIAorI2lmIENQVShBUk02NCkgfHwgQ1BVKFg4Nl82NCkK
KyNkZWZpbmUgRU5BQkxFX0JJVE1BUF9GUkVFTElTVCAxCisjZWxzZQorI2RlZmluZSBFTkFCTEVf
QklUTUFQX0ZSRUVMSVNUIDAKKyNlbmRpZgorCisjaWYgIUVOQUJMRShCSVRNQVBfRlJFRUxJU1Qp
CiBzdHJ1Y3QgRnJlZUNlbGwgewogICAgIHN0YXRpYyB1aW50cHRyX3Qgc2NyYW1ibGUoRnJlZUNl
bGwqIGNlbGwsIHVpbnRwdHJfdCBzZWNyZXQpCiAgICAgewpAQCAtNTgsNiArNjcsNyBAQCBzdHJ1
Y3QgRnJlZUNlbGwgewogICAgIHVpbnQ2NF90IHByZXNlcnZlZEJpdHNGb3JDcmFzaEFuYWx5c2lz
OwogICAgIHVpbnRwdHJfdCBzY3JhbWJsZWROZXh0OwogfTsKKyNlbmRpZgogCiBjbGFzcyBGcmVl
TGlzdCB7CiBwdWJsaWM6CkBAIC02NiwyNCArNzYsNTQgQEAgcHVibGljOgogICAgIAogICAgIHZv
aWQgY2xlYXIoKTsKICAgICAKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVM
aXN0KEZyZWVDZWxsKiBoZWFkLCB1aW50cHRyX3Qgc2VjcmV0LCB1bnNpZ25lZCBieXRlcyk7CiAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXplQnVtcChjaGFyKiBwYXlsb2FkRW5k
LCB1bnNpZ25lZCByZW1haW5pbmcpOwogICAgIAotICAgIGJvb2wgYWxsb2NhdGlvbldpbGxGYWls
KCkgY29uc3QgeyByZXR1cm4gIWhlYWQoKSAmJiAhbV9yZW1haW5pbmc7IH0KICAgICBib29sIGFs
bG9jYXRpb25XaWxsU3VjY2VlZCgpIGNvbnN0IHsgcmV0dXJuICFhbGxvY2F0aW9uV2lsbEZhaWwo
KTsgfQogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgSGVhcENlbGwqIGFs
bG9jYXRlKGNvbnN0IEZ1bmMmIHNsb3dQYXRoKTsKICAgICAKLSAgICBib29sIGNvbnRhaW5zKEhl
YXBDZWxsKikgY29uc3Q7CisgICAgYm9vbCBjb250YWlucyhIZWFwQ2VsbCosIE1hcmtlZEJsb2Nr
OjpIYW5kbGUqIGN1cnJlbnRCbG9jaykgY29uc3Q7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuYz4KICAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuYyYpIGNvbnN0OwogICAgIAogICAg
IHVuc2lnbmVkIG9yaWdpbmFsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luYWxTaXplOyB9
CiAKKyNpZiBFTkFCTEUoQklUTUFQX0ZSRUVMSVNUKQorICAgIHVzaW5nIEF0b20gPSBNYXJrZWRC
bG9jazo6QXRvbTsKKyAgICB1c2luZyBBdG9tc0JpdG1hcCA9IE1hcmtlZEJsb2NrOjpBdG9tc0Jp
dG1hcDsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgaW5pdGlhbGl6ZUF0b21zQml0bWFw
KE1hcmtlZEJsb2NrOjpIYW5kbGUqLCBBdG9tc0JpdG1hcCYgZnJlZUF0b21zKTsKKworICAgIGJv
b2wgYml0bWFwSXNFbXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICAvLyBSZW1lbWJlciwgd2Ug
ZG9uJ3QgYWN0dWFsbHkgY2xlYXIgdGhlIGJpdHMgaW4gbV9iaXRtYXAgYXMgd2UgYWxsb2NhdGUK
KyAgICAgICAgLy8gdGhlIGF0b21zLiBJbnN0ZWFkLCBtX2N1cnJlbnRSb3dCaXRtYXAgYW5kIG1f
Y3VycmVudFJvd0luZGV4IHRlbGxzIHVzCisgICAgICAgIC8vIGlmIHRoZXJlIGF0b21zIHN0aWxs
IGF2YWlsYWJsZSBmb3IgYWxsb2NhdGlvbi4gU2VlIGNvbW1lbnQgYmxvYiBiZWxvdworICAgICAg
ICAvLyBhdCB0aGUgZGVjbGFyYXRpb24gb2YgbV9jdXJyZW50Um93SW5kZXggZm9yIG1vcmUgZGV0
YWlscy4KKyAgICAgICAgcmV0dXJuICFtX2N1cnJlbnRSb3dCaXRtYXAgJiYgIW1fY3VycmVudFJv
d0luZGV4OworICAgIH0KKyAgICBib29sIGFsbG9jYXRpb25XaWxsRmFpbCgpIGNvbnN0IHsgcmV0
dXJuIGJpdG1hcElzRW1wdHkoKSAmJiAhbV9yZW1haW5pbmc7IH0KKworICAgIHN0YXRpYyBwdHJk
aWZmX3Qgb2Zmc2V0T2ZDdXJyZW50Um93Qml0bWFwKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEZyZWVMaXN0LCBtX2N1cnJlbnRSb3dCaXRtYXApOyB9CisKKyAgICAvLyBXZSdyZSBkZWxpYmVy
YXRlbHkgcmV0dXJuaW5nIHRoZSBhZGRyZXNzIG9mIDEgd29yZCBiZWZvcmUgbV9iaXRtYXAgc28g
dGhhdAorICAgIC8vIHdlIGNhbiBzY2hlZHVsZSBpbnN0cnVjdGlvbnMgYmV0dGVyIGkuZS4gdG8g
ZG8gYSBsb2FkIGJlZm9yZSBkZWNyZW1lbnRpbmcgdGhlCisgICAgLy8gcm93IGluZGV4LgorICAg
IHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZCaXRtYXBSb3dzKCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEZyZWVMaXN0LCBtX2JpdG1hcCkgLSBzaXplb2YoQXRvbXNCaXRtYXA6OldvcmQpOyB9
CisKKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ3VycmVudFJvd0luZGV4KCkgeyByZXR1
cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBtX2N1cnJlbnRSb3dJbmRleCk7IH0KKyAgICBz
dGF0aWMgcHRyZGlmZl90IG9mZnNldE9mQ3VycmVudE1hcmtlZEJsb2NrUm93QWRkcmVzcygpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgbV9jdXJyZW50TWFya2VkQmxvY2tSb3dB
ZGRyZXNzKTsgfQorI2Vsc2UKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVM
aXN0KEZyZWVDZWxsKiBoZWFkLCB1aW50cHRyX3Qgc2VjcmV0LCB1bnNpZ25lZCBieXRlcyk7CisK
KyAgICBib29sIGFsbG9jYXRpb25XaWxsRmFpbCgpIGNvbnN0IHsgcmV0dXJuICFoZWFkKCkgJiYg
IW1fcmVtYWluaW5nOyB9CisKICAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mU2NyYW1ibGVk
SGVhZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgbV9zY3JhbWJsZWRIZWFk
KTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZTZWNyZXQoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoRnJlZUxpc3QsIG1fc2VjcmV0KTsgfQorI2VuZGlmCisKICAgICBzdGF0aWMg
cHRyZGlmZl90IG9mZnNldE9mUGF5bG9hZEVuZCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihG
cmVlTGlzdCwgbV9wYXlsb2FkRW5kKTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZS
ZW1haW5pbmcoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3QsIG1fcmVtYWluaW5n
KTsgfQogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZPcmlnaW5hbFNpemUoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3QsIG1fb3JpZ2luYWxTaXplKTsgfQpAQCAtOTMsMTUg
KzEzMyw3MyBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBjZWxsU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fY2VsbFNpemU7IH0KICAgICAKKyNpZiBFTkFCTEUoQklUTUFQX0ZSRUVMSVNUKQorICAg
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGF0b21zUGVyUm93ID0gQXRvbXNCaXRtYXA6OmJpdHNJ
bldvcmQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgYXRvbXNSb3dCeXRlcyA9IGF0b21z
UGVyUm93ICogc2l6ZW9mKEF0b20pOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYXRv
bVNpemVTaGlmdCA9IFdURjo6bG9nMkNvbnN0ZXhwcihzaXplb2YoQXRvbSkpOworICAgIHN0YXRp
Y19hc3NlcnQoKHN0YXRpY19jYXN0PHNpemVfdD4oMSkgPDwgYXRvbVNpemVTaGlmdCkgPT0gc2l6
ZW9mKEF0b20pKTsKKyNlbmRpZgorCiBwcml2YXRlOgorI2lmIEVOQUJMRShCSVRNQVBfRlJFRUxJ
U1QpCisgICAgQXRvbXNCaXRtYXAmIGF0b21zQml0bWFwKCkgeyByZXR1cm4gbV9iaXRtYXA7IH0K
KyAgICBBdG9tc0JpdG1hcDo6V29yZCogYml0bWFwUm93cygpIGNvbnN0CisgICAgeworICAgICAg
ICAvLyBTZWUgY29tbWVudCBhYm91dCBvZmZzZXRPZkJpdG1hcFJvd3MoKS4KKyAgICAgICAgcmV0
dXJuIGJpdHdpc2VfY2FzdDxBdG9tc0JpdG1hcDo6V29yZCo+KCZtX2JpdG1hcCkgLSAxOworICAg
IH0KKworI2Vsc2UKICAgICBGcmVlQ2VsbCogaGVhZCgpIGNvbnN0IHsgcmV0dXJuIEZyZWVDZWxs
OjpkZXNjcmFtYmxlKG1fc2NyYW1ibGVkSGVhZCwgbV9zZWNyZXQpOyB9Ci0gICAgCi0gICAgdWlu
dHB0cl90IG1fc2NyYW1ibGVkSGVhZCB7IDAgfTsKLSAgICB1aW50cHRyX3QgbV9zZWNyZXQgeyAw
IH07CisjZW5kaWYKKwogICAgIGNoYXIqIG1fcGF5bG9hZEVuZCB7IG51bGxwdHIgfTsKKyAgICB1
bnNpZ25lZCBtX2NlbGxTaXplIHsgMCB9OwogICAgIHVuc2lnbmVkIG1fcmVtYWluaW5nIHsgMCB9
OwogICAgIHVuc2lnbmVkIG1fb3JpZ2luYWxTaXplIHsgMCB9OwotICAgIHVuc2lnbmVkIG1fY2Vs
bFNpemUgeyAwIH07CisKKyNpZiBFTkFCTEUoQklUTUFQX0ZSRUVMSVNUKQorICAgIC8vIFRoaXMg
YWxsb2NhdGlvbiBhbGdvcml0aG0gdGhpbmtzIG9mIHRoZSBNYXJrZWRCbG9jayBhcyBjb25zaXN0
aW5nIG9mIHJvd3MKKyAgICAvLyBvZiBhdG9tcywgd2hlcmUgdGhlIG51bWJlciBvZiBhdG9tcyBp
biBhIHJvdyBlcXVhbHMgdGhlIG51bWJlciBvZiBiaXRzIGluCisgICAgLy8gYSBBdG9tc0JpdG1h
cDo6V29yZC4gT24gNjQtYml0IENQVXMsIHRoaXMgd291bGQgYmUgNjQuCisgICAgLy8KKyAgICAv
LyBXZSB3aWxsIHN0YXJ0IGFsbG9jYXRlIGZyb20gdGhlIGxhc3QgKGhpZ2hlc3QgbnVtYmVyZWQp
IHJvdyBkb3duIHRvIHRoZQorICAgIC8vIGZpcnN0IChyb3cgMCkuIEFzIHdlIGFsbG9jYXRlLCB3
ZSB3aWxsIG9ubHkgdXBkYXRlIG1fY3VycmVudFJvd0luZGV4IGFuZAorICAgIC8vIG1fY3VycmVu
dFJvd0JpdG1hcC4gbV9iaXRtYXAgd2lsbCBub3QgYmUgdXBkYXRlZC4gVGhpcyBpcyB0byByZWR1
Y2UgdGhlCisgICAgLy8gbnVtYmVyIG9mIGluc3RydWN0aW9ucyB0byBleGVjdXRlZCBkdXJpbmcg
YW4gYWxsb2NhdGlvbi4KKyAgICAvLworICAgIC8vIFdoZW4gbV9jdXJyZW50Um93SW5kZXggcG9p
bnRzIHRvIE4sIHRoZSBBdG9tc0JpdG1hcDo6V29yZCBmb3Igcm93IE4gaW4KKyAgICAvLyBtX2Jp
dG1hcCB3aWxsIGhhdmUgYmVlbiBjb3BpZWQgaW50byBtX2N1cnJlbnRSb3dCaXRtYXAuIFRoaXMg
aXMgdGhlIHJvdworICAgIC8vIHRoYXQgd2Ugd2lsbCBiZSBhbGxvY2F0aW5nIGZyb20gdW50aWwg
dGhlIHJvdyBpcyBleGhhdXN0ZWQuCisgICAgLy8KKyAgICAvLyBUaGlzIGlzIGhvdyB3ZSBrbm93
IHdoZXRoZXIgYW4gYXRvbSBpcyBhdmFpbGFibGUgZm9yIGFsbG9jYXRpb24gb3Igbm90OgorICAg
IC8vIDEuIEF0b21zIGluIGFueSByb3dzIGFib3ZlIG1fY3VycmVudFJvd0luZGV4IGFyZSBndWFy
YW50ZWVkIHRvIGJlCisgICAgLy8gICAgYWxsb2NhdGVkIGFscmVhZHkgKGJlY2F1c2Ugd2UgYWxs
b2NhdGUgZG93bndhcmRzKS4KKyAgICAvLyAyLiBGb3Igcm93IG1fY3VycmVudFJvd0luZGV4LCBt
X2N1cnJlbnRSb3dCaXRtYXAgaXMgdGhlIHNvdXJjZSBvZiB0cnV0aAorICAgIC8vICAgIG9uIHdo
aWNoIGF0b21zIGluIHRoZSByb3cgYXJlIGF2YWlsYWJsZSBmb3IgYWxsb2NhdGlvbi4KKyAgICAv
LyAzLiBGb3Igcm93cyBiZWxvdyBtX2N1cnJlbnRSb3dJbmRleCwgbV9iaXRtYXAgaXMgdGhlIHNv
dXJjZSBvZiB0cnV0aCBvbgorICAgIC8vICAgIHdoaWNoIGF0b21zIGFyZSBhdmFpbGFibGUgZm9y
IGFsbG9jYXRpb24uCisgICAgLy8KKyAgICAvLyBXaGVuIG1fY3VycmVudFJvd0luZGV4IHJlYWNo
ZXMgMCwgdGhlIGluZm8gaW4gbV9iaXRtYXAgaXMgY29tcGxldGVseQorICAgIC8vIG9ic29sZXRl
ZCwgYW5kIG1fY3VycmVudFJvd0JpdG1hcCBob2xkcyB0aGUgYXZhaWxhYmlsaXR5IGluZm8gZm9y
IHJvdyAwLgorICAgIC8vIFdoZW4gYm90aCBtX2N1cnJlbnRSb3dJbmRleCBhbmQgbV9jdXJyZW50
Um93Qml0bWFwIGFyZSAwLCB0aGVuIHdlIGhhdmUKKyAgICAvLyBjb21wbGV0ZWx5IGV4aGF1c3Rl
ZCB0aGUgYmxvY2sgYW5kIG5vIG1vcmUgYXRvbXMgYXJlIGF2YWlsYWJsZSBmb3IKKyAgICAvLyBh
bGxvY2F0aW9uLgorCisgICAgdW5zaWduZWQgbV9jdXJyZW50Um93SW5kZXggeyAwIH07CisgICAg
QXRvbXNCaXRtYXA6OldvcmQgbV9jdXJyZW50Um93Qml0bWFwIHsgMCB9OworICAgIEF0b20qIG1f
Y3VycmVudE1hcmtlZEJsb2NrUm93QWRkcmVzcyB7IG51bGxwdHIgfTsKKyAgICBBdG9tc0JpdG1h
cCBtX2JpdG1hcDsKKyNlbHNlCisgICAgdWludHB0cl90IG1fc2NyYW1ibGVkSGVhZCB7IDAgfTsK
KyAgICB1aW50cHRyX3QgbV9zZWNyZXQgeyAwIH07CisjZW5kaWYKKworI2lmIEFTU0VSVF9FTkFC
TEVECisgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogbV9tYXJrZWRCbG9jayB7IG51bGxwdHIgfTsK
KyNlbmRpZgorCisgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJsb2NrOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdElubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdElu
bGluZXMuaAkocmV2aXNpb24gMjYyOTMyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
RnJlZUxpc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxNy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsNyArMjYsNyBAQAogI3ByYWdtYSBv
bmNlCiAKICNpbmNsdWRlICJGcmVlTGlzdC5oIgotI2luY2x1ZGUgIk1hcmtlZEJsb2NrLmgiCisj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQwLDEz
ICs0MCw0NiBAQCBBTFdBWVNfSU5MSU5FIEhlYXBDZWxsKiBGcmVlTGlzdDo6YWxsb2NhCiAgICAg
ICAgIG1fcmVtYWluaW5nID0gcmVtYWluaW5nOwogICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PEhlYXBDZWxsKj4obV9wYXlsb2FkRW5kIC0gcmVtYWluaW5nIC0gY2VsbFNpemUpOwogICAgIH0K
LSAgICAKKworI2lmIEVOQUJMRShCSVRNQVBfRlJFRUxJU1QpCisgICAgQXRvbXNCaXRtYXA6Oldv
cmQgcm93Qml0bWFwID0gbV9jdXJyZW50Um93Qml0bWFwOworICAgIGRvIHsKKyAgICAgICAgaWYg
KHJvd0JpdG1hcCkgeworICAgICAgICAgICAgY29uc3RleHByIEF0b21zQml0bWFwOjpXb3JkIG9u
ZSA9IDE7CisgICAgICAgICAgICB1bnNpZ25lZCBhdG9tSW5kZXhJblJvdyA9IGN0eihyb3dCaXRt
YXApOworICAgICAgICAgICAgYXV0byogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KCZt
X2N1cnJlbnRNYXJrZWRCbG9ja1Jvd0FkZHJlc3NbYXRvbUluZGV4SW5Sb3ddKTsKKyAgICAgICAg
ICAgIHJvd0JpdG1hcCAmPSB+KG9uZSA8PCBhdG9tSW5kZXhJblJvdyk7CisgICAgICAgICAgICBt
X2N1cnJlbnRSb3dCaXRtYXAgPSByb3dCaXRtYXA7CisgICAgICAgICAgICByZXR1cm4gY2VsbDsK
KyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHJvd0luZGV4ID0gbV9jdXJyZW50Um93SW5k
ZXg7CisgICAgICAgIGF1dG8qIHJvd0FkZHJlc3MgPSBtX2N1cnJlbnRNYXJrZWRCbG9ja1Jvd0Fk
ZHJlc3M7CisgICAgICAgIHdoaWxlIChyb3dJbmRleCkgeworICAgICAgICAgICAgLy8gV2UgbG9h
ZCBiZWZvcmUgZGVjcmVtZW50aW5nIHJvd0luZGV4IGJlY2F1c2UgYml0bWFwUm93cygpIHBvaW50
cworICAgICAgICAgICAgLy8gdG8gMSB3b3JkIGJlZm9yZSBtX2JpdG1hcC4gU2VlIGNvbW1lbnRz
IGFib3V0IG9mZnNldE9mQml0bWFwUm93cygpCisgICAgICAgICAgICAvLyBmb3Igd2h5IHdlIGRv
IHRoaXMuCisgICAgICAgICAgICByb3dCaXRtYXAgPSBiaXRtYXBSb3dzKClbcm93SW5kZXgtLV07
CisgICAgICAgICAgICByb3dBZGRyZXNzIC09IGF0b21zUGVyUm93OworICAgICAgICAgICAgaWYg
KHJvd0JpdG1hcCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBt
X2N1cnJlbnRNYXJrZWRCbG9ja1Jvd0FkZHJlc3MgPSByb3dBZGRyZXNzOworICAgICAgICBtX2N1
cnJlbnRSb3dJbmRleCA9IHJvd0luZGV4OworICAgIH0gd2hpbGUgKHJvd0JpdG1hcCk7CisKKyAg
ICBtX2N1cnJlbnRSb3dCaXRtYXAgPSByb3dCaXRtYXA7CisgICAgQVNTRVJUKGJpdG1hcElzRW1w
dHkoKSk7CisgICAgcmV0dXJuIHNsb3dQYXRoKCk7CisKKyNlbHNlIC8vICFFTkFCTEUoQklUTUFQ
X0ZSRUVMSVNUKQogICAgIEZyZWVDZWxsKiByZXN1bHQgPSBoZWFkKCk7CiAgICAgaWYgKFVOTElL
RUxZKCFyZXN1bHQpKQogICAgICAgICByZXR1cm4gc2xvd1BhdGgoKTsKICAgICAKICAgICBtX3Nj
cmFtYmxlZEhlYWQgPSByZXN1bHQtPnNjcmFtYmxlZE5leHQ7CiAgICAgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDxIZWFwQ2VsbCo+KHJlc3VsdCk7CisjZW5kaWYgLy8gIUVOQUJMRShCSVRNQVBfRlJFRUxJ
U1QpCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CkBAIC01Niw2ICs4OSwzMyBAQCB2b2lk
IEZyZWVMaXN0Ojpmb3JFYWNoKGNvbnN0IEZ1bmMmIGZ1bmMpCiAgICAgICAgIGZvciAodW5zaWdu
ZWQgcmVtYWluaW5nID0gbV9yZW1haW5pbmc7IHJlbWFpbmluZzsgcmVtYWluaW5nIC09IG1fY2Vs
bFNpemUpCiAgICAgICAgICAgICBmdW5jKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KG1fcGF5bG9h
ZEVuZCAtIHJlbWFpbmluZykpOwogICAgIH0gZWxzZSB7CisjaWYgRU5BQkxFKEJJVE1BUF9GUkVF
TElTVCkKKyAgICAgICAgaWYgKGJpdG1hcElzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBBdG9tc0JpdG1hcDo6V29yZCByb3dCaXRtYXAgPSBtX2N1cnJlbnRSb3dCaXRt
YXA7CisgICAgICAgIHVuc2lnbmVkIHJvd0luZGV4ID0gbV9jdXJyZW50Um93SW5kZXg7CisgICAg
ICAgIEF0b20qIGN1cnJlbnRNYXJrZWRCbG9ja1Jvd0FkZHJlc3MgPSBtX2N1cnJlbnRNYXJrZWRC
bG9ja1Jvd0FkZHJlc3M7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHdoaWxlIChyb3dCaXRt
YXApIHsKKyAgICAgICAgICAgICAgICBjb25zdGV4cHIgQXRvbXNCaXRtYXA6OldvcmQgb25lID0g
MTsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBhdG9tSW5kZXhJblJvdyA9IGN0eihyb3dCaXRt
YXApOworICAgICAgICAgICAgICAgIGF1dG8qIGNlbGwgPSBiaXR3aXNlX2Nhc3Q8SGVhcENlbGwq
PigmY3VycmVudE1hcmtlZEJsb2NrUm93QWRkcmVzc1thdG9tSW5kZXhJblJvd10pOworICAgICAg
ICAgICAgICAgIHJvd0JpdG1hcCAmPSB+KG9uZSA8PCBhdG9tSW5kZXhJblJvdyk7CisgICAgICAg
ICAgICAgICAgZnVuYyhjZWxsKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgd2hpbGUg
KHJvd0luZGV4KSB7CisgICAgICAgICAgICAgICAgLy8gV2UgbG9hZCBiZWZvcmUgZGVjcmVtZW50
aW5nIHJvd0luZGV4IGJlY2F1c2UgYml0bWFwUm93cygpIHBvaW50cworICAgICAgICAgICAgICAg
IC8vIHRvIDEgd29yZCBiZWZvcmUgbV9iaXRtYXAuIFNlZSBjb21tZW50cyBhYm91dCBvZmZzZXRP
ZkJpdG1hcFJvd3MoKQorICAgICAgICAgICAgICAgIC8vIGZvciB3aHkgd2UgZG8gdGhpcy4KKyAg
ICAgICAgICAgICAgICByb3dCaXRtYXAgPSBiaXRtYXBSb3dzKClbcm93SW5kZXgtLV07CisgICAg
ICAgICAgICAgICAgY3VycmVudE1hcmtlZEJsb2NrUm93QWRkcmVzcyAtPSBhdG9tc1BlclJvdzsK
KyAgICAgICAgICAgICAgICBpZiAocm93Qml0bWFwKQorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAocm93Qml0bWFwKTsKKyNlbHNlCiAg
ICAgICAgIGZvciAoRnJlZUNlbGwqIGNlbGwgPSBoZWFkKCk7IGNlbGw7KSB7CiAgICAgICAgICAg
ICAvLyBXZSBjYW4gdXNlIHRoaXMgdG8gb3ZlcndyaXRlIGZyZWUgb2JqZWN0cyBiZWZvcmUgZGVz
dHJveWluZyB0aGUgZnJlZSBsaXN0LiBTbywgd2UgbmVlZAogICAgICAgICAgICAgLy8gdG8gZ2V0
IG5leHQgYmVmb3JlIHByb2NlZWRpbmcgZnVydGhlci4KQEAgLTYzLDggKzEyMyw4IEBAIHZvaWQg
RnJlZUxpc3Q6OmZvckVhY2goY29uc3QgRnVuYyYgZnVuYykKICAgICAgICAgICAgIGZ1bmMoYml0
d2lzZV9jYXN0PEhlYXBDZWxsKj4oY2VsbCkpOwogICAgICAgICAgICAgY2VsbCA9IG5leHQ7CiAg
ICAgICAgIH0KKyNlbmRpZgogICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9Mb2NhbEFsbG9jYXRvci5jcHAJKHJldmlz
aW9uIDI2MjkzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTgtMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI3Miw3ICsyNzIsNyBAQCBib29sIExvY2FsQWxsb2Nh
dG9yOjppc0ZyZWVMaXN0ZWRDZWxsKGNvCiAgICAgLy8gaWYgd2Uga25vdyB0aGF0IHRoZSBibG9j
ayBvd25pbmcgdGhlIG9iamVjdCBpcyBmcmVlLWxpc3RlZCwgdGhlbiBpdCdzIGltcG9zc2libGUg
Zm9yIGFueQogICAgIC8vIG9iamVjdHMgdG8gYmUgaW4gdGhlIGRlYWQtYnV0LW5vdC1kZXN0cnVj
dGVkIHN0YXRlLgogICAgIC8vIEZJWE1FOiBHZXQgcmlkIG9mIHRoaXMgYWJvbWluYXRpb24uIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODE2NTUKLSAgICByZXR1cm4g
bV9mcmVlTGlzdC5jb250YWlucyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPih0YXJnZXQpKTsKKyAg
ICByZXR1cm4gbV9mcmVlTGlzdC5jb250YWlucyhiaXR3aXNlX2Nhc3Q8SGVhcENlbGwqPih0YXJn
ZXQpLCBtX2N1cnJlbnRCbG9jayk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyNjI5MzIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBIYXJyaSBQ
b3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxs
eSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCkBAIC04NCw2ICs4
NCw4IEBAIHB1YmxpYzoKICAgICBzdGF0aWNfYXNzZXJ0KCEoTWFya2VkQmxvY2s6OmF0b21TaXpl
ICYgKE1hcmtlZEJsb2NrOjphdG9tU2l6ZSAtIDEpKSwgIk1hcmtlZEJsb2NrOjphdG9tU2l6ZSBt
dXN0IGJlIGEgcG93ZXIgb2YgdHdvLiIpOwogICAgIHN0YXRpY19hc3NlcnQoIShNYXJrZWRCbG9j
azo6YmxvY2tTaXplICYgKE1hcmtlZEJsb2NrOjpibG9ja1NpemUgLSAxKSksICJNYXJrZWRCbG9j
azo6YmxvY2tTaXplIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7CiAgICAgCisgICAgdXNpbmcg
QXRvbXNCaXRtYXAgPSBCaXRtYXA8YXRvbXNQZXJCbG9jaz47CisKICAgICBzdHJ1Y3QgVm9pZEZ1
bmN0b3IgewogICAgICAgICB0eXBlZGVmIHZvaWQgUmV0dXJuVHlwZTsKICAgICAgICAgdm9pZCBy
ZXR1cm5WYWx1ZSgpIHsgfQpAQCAtMjAzLDYgKzIwNSw3IEBAIHB1YmxpYzoKICAgICAgICAgCiAg
ICAgICAgIHZvaWQqIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gJm1fYmxvY2stPmF0b21zKClbMF07
IH0KICAgICAgICAgdm9pZCogZW5kKCkgY29uc3QgeyByZXR1cm4gJm1fYmxvY2stPmF0b21zKClb
bV9lbmRBdG9tXTsgfQorICAgICAgICB2b2lkKiBhdG9tQXQoc2l6ZV90IGkpIGNvbnN0IHsgcmV0
dXJuICZtX2Jsb2NrLT5hdG9tcygpW2ldOyB9CiAgICAgICAgIGJvb2wgY29udGFpbnModm9pZCog
cCkgY29uc3QgeyByZXR1cm4gc3RhcnQoKSA8PSBwICYmIHAgPCBlbmQoKTsgfQogCiAgICAgICAg
IHZvaWQgZHVtcFN0YXRlKFByaW50U3RyZWFtJik7CkBAIC0yOTQsOCArMjk3LDggQEAgcHVibGlj
OgogICAgICAgICBIZWFwVmVyc2lvbiBtX21hcmtpbmdWZXJzaW9uOwogICAgICAgICBIZWFwVmVy
c2lvbiBtX25ld2x5QWxsb2NhdGVkVmVyc2lvbjsKIAotICAgICAgICBCaXRtYXA8YXRvbXNQZXJC
bG9jaz4gbV9tYXJrczsKLSAgICAgICAgQml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbmV3bHlBbGxv
Y2F0ZWQ7CisgICAgICAgIEF0b21zQml0bWFwIG1fbWFya3M7CisgICAgICAgIEF0b21zQml0bWFw
IG1fbmV3bHlBbGxvY2F0ZWQ7CiAgICAgfTsKICAgICAKIHByaXZhdGU6ICAgIApAQCAtMzM2LDcg
KzMzOSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzTmV3bHlBbGxvY2F0ZWQoY29uc3Qgdm9pZCop
OwogICAgIHZvaWQgc2V0TmV3bHlBbGxvY2F0ZWQoY29uc3Qgdm9pZCopOwogICAgIHZvaWQgY2xl
YXJOZXdseUFsbG9jYXRlZChjb25zdCB2b2lkKik7Ci0gICAgY29uc3QgQml0bWFwPGF0b21zUGVy
QmxvY2s+JiBuZXdseUFsbG9jYXRlZCgpIGNvbnN0OworICAgIGNvbnN0IEF0b21zQml0bWFwJiBu
ZXdseUFsbG9jYXRlZCgpIGNvbnN0OwogICAgIAogICAgIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2Nh
dGVkVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZvb3RlcigpLm1fbmV3bHlBbGxvY2F0ZWRWZXJz
aW9uOyB9CiAgICAgCkBAIC0zNzQsNyArMzc3LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNNYXJr
ZWRSYXcoY29uc3Qgdm9pZCogcCk7CiAgICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24oKSBj
b25zdCB7IHJldHVybiBmb290ZXIoKS5tX21hcmtpbmdWZXJzaW9uOyB9CiAgICAgCi0gICAgY29u
c3QgQml0bWFwPGF0b21zUGVyQmxvY2s+JiBtYXJrcygpIGNvbnN0OworICAgIGNvbnN0IEF0b21z
Qml0bWFwJiBtYXJrcygpIGNvbnN0OwogICAgIAogICAgIENvdW50aW5nTG9jayYgbG9jaygpIHsg
cmV0dXJuIGZvb3RlcigpLm1fbG9jazsgfQogICAgIApAQCAtMzk5LDYgKzQwMiw4IEBAIHByaXZh
dGU6CiAgICAgCiAgICAgaW5saW5lIGJvb2wgbWFya3NDb252ZXlMaXZlbmVzc0R1cmluZ01hcmtp
bmcoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwogICAgIGlubGluZSBib29sIG1hcmtzQ29u
dmV5TGl2ZW5lc3NEdXJpbmdNYXJraW5nKEhlYXBWZXJzaW9uIG15TWFya2luZ1ZlcnNpb24sIEhl
YXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKKworICAgIGZyaWVuZCBjbGFzcyBGcmVlTGlzdDsK
IH07CiAKIGlubGluZSBNYXJrZWRCbG9jazo6Rm9vdGVyJiBNYXJrZWRCbG9jazo6Zm9vdGVyKCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5l
cy5oCShyZXZpc2lvbiAyNjI5MzIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
ZWRCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzAzLDYgKzMwMyw2NCBAQCB2b2lk
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKKyNpZiBFTkFCTEUoQklUTUFQX0ZSRUVMSVNUKQorICAgIEF0b21zQml0bWFwIGxvY2Fs
RnJlZUF0b21zOworICAgIEF0b21zQml0bWFwJiBmcmVlQXRvbXMgPSBmcmVlTGlzdCA/IGZyZWVM
aXN0LT5hdG9tc0JpdG1hcCgpIDogbG9jYWxGcmVlQXRvbXM7CisKKyAgICBhdXRvIGhhbmRsZURl
YWRDZWxsID0gWyZdIChzaXplX3QgaSkgeworICAgICAgICBIZWFwQ2VsbCogY2VsbCA9IHJlaW50
ZXJwcmV0X2Nhc3RfcHRyPEhlYXBDZWxsKj4oYXRvbUF0KGkpKTsKKworICAgICAgICBpZiAoZGVz
dHJ1Y3Rpb25Nb2RlICE9IEJsb2NrSGFzTm9EZXN0cnVjdG9ycykKKyAgICAgICAgICAgIGRlc3Ry
b3koY2VsbCk7CisKKyAgICAgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpIHsK
KyAgICAgICAgICAgIGlmIChzY3JpYmJsZU1vZGUgPT0gU2NyaWJibGUpCisgICAgICAgICAgICAg
ICAgc2NyaWJibGUoY2VsbCwgY2VsbFNpemUpOworICAgICAgICB9CisgICAgfTsKKworICAgIGJv
b2wgaXNFbXB0eSA9IHRydWU7CisKKyAgICBBdG9tc0JpdG1hcCBjZWxsTG9jYXRpb25zOworICAg
IGNlbGxMb2NhdGlvbnMuc2V0RWFjaE50aEJpdChtX2F0b21zUGVyQ2VsbCwgMCwgbV9lbmRBdG9t
KTsKKworICAgIGlmIChlbXB0eU1vZGUgPT0gTm90RW1wdHkpIHsKKyAgICAgICAgaWYgKG1hcmtz
TW9kZSA9PSBNYXJrc05vdFN0YWxlKSB7CisgICAgICAgICAgICBmcmVlQXRvbXMgPSBmb290ZXIu
bV9tYXJrczsKKyAgICAgICAgICAgIGlmIChuZXdseUFsbG9jYXRlZE1vZGUgPT0gSGFzTmV3bHlB
bGxvY2F0ZWQpCisgICAgICAgICAgICAgICAgZnJlZUF0b21zIHw9IGZvb3Rlci5tX25ld2x5QWxs
b2NhdGVkOworICAgICAgICB9IGVsc2UgaWYgKG5ld2x5QWxsb2NhdGVkTW9kZSA9PSBIYXNOZXds
eUFsbG9jYXRlZCkKKyAgICAgICAgICAgIGZyZWVBdG9tcyA9IGZvb3Rlci5tX25ld2x5QWxsb2Nh
dGVkOworICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCBhIHNldCBiaXQgaW4gZnJlZUF0b21zIHJl
cHJlc2VudHMgbGl2ZSBjZWxscy4KKyAgICAgICAgaXNFbXB0eSA9IGZyZWVBdG9tcy5pc0VtcHR5
KCk7CisKKyAgICAgICAgLy8gSW52ZXJ0IHRoZSBiaXRzIGF0IGVhY2ggY2VsbCBsb2NhdGlvbiBz
byB0aGF0IHRoZSBvbmVzIGZvciBsaXZlIGNlbGxzCisgICAgICAgIC8vIGFyZSBjbGVhcmVkLCBh
bmQgdGhlIG9uZXMgZm9yIGRlYWQgY2VsbHMgYXJlIHNldC4KKyAgICAgICAgZnJlZUF0b21zIF49
IGNlbGxMb2NhdGlvbnM7CisgICAgfSBlbHNlCisgICAgICAgIGZyZWVBdG9tcyA9IGNlbGxMb2Nh
dGlvbnM7IC8vIGFsbCBjZWxscyBhcmUgZnJlZS4KKyAgICAKKyAgICAvLyBXZSBvbmx5IHdhbnQg
dG8gZGlzY2FyZCB0aGUgbmV3bHlBbGxvY2F0ZWQgYml0cyBpZiB3ZSdyZSBjcmVhdGluZyBhIEZy
ZWVMaXN0LAorICAgIC8vIG90aGVyd2lzZSB3ZSB3b3VsZCBsb3NlIGluZm9ybWF0aW9uIG9uIHdo
YXQncyBjdXJyZW50bHkgYWxpdmUuCisgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxp
c3QgJiYgbmV3bHlBbGxvY2F0ZWRNb2RlID09IEhhc05ld2x5QWxsb2NhdGVkKQorICAgICAgICBm
b290ZXIubV9uZXdseUFsbG9jYXRlZFZlcnNpb24gPSBNYXJrZWRTcGFjZTo6bnVsbFZlcnNpb247
CisKKyAgICBpZiAoc3BhY2UoKS0+aXNNYXJraW5nKCkpCisgICAgICAgIGZvb3Rlci5tX2xvY2su
dW5sb2NrKCk7CisKKyAgICBpZiAoZGVzdHJ1Y3Rpb25Nb2RlICE9IEJsb2NrSGFzTm9EZXN0cnVj
dG9ycykKKyAgICAgICAgZnJlZUF0b21zLmZvckVhY2hTZXRCaXQoaGFuZGxlRGVhZENlbGwpOwor
CisgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxpc3QpIHsKKyAgICAgICAgZnJlZUxp
c3QtPmluaXRpYWxpemVBdG9tc0JpdG1hcCh0aGlzLCBmcmVlQXRvbXMpOworICAgICAgICBzZXRJ
c0ZyZWVMaXN0ZWQoKTsKKyAgICB9IGVsc2UgaWYgKGlzRW1wdHkpCisgICAgICAgIG1fZGlyZWN0
b3J5LT5zZXRJc0VtcHR5KE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcywgdHJ1ZSk7CisgICAgaWYg
KGZhbHNlKQorICAgICAgICBkYXRhTG9nKCJTbG93bHkgc3dlcHQgYmxvY2sgIiwgUmF3UG9pbnRl
cigmYmxvY2spLCAiIHdpdGggY2VsbCBzaXplICIsIGNlbGxTaXplLCAiIGFuZCBhdHRyaWJ1dGVz
ICIsIG1fYXR0cmlidXRlcywgIjogIiwgcG9pbnRlckR1bXAoZnJlZUxpc3QpLCAiXG4iKTsKKwor
I2Vsc2UgLy8gbm90IEVOQUJMRShCSVRNQVBfRlJFRUxJU1QpCisKICAgICAvLyBUaGlzIHByb2R1
Y2VzIGEgZnJlZSBsaXN0IHRoYXQgaXMgb3JkZXJlZCBpbiByZXZlcnNlIHRocm91Z2ggdGhlIGJs
b2NrLgogICAgIC8vIFRoaXMgaXMgZmluZSwgc2luY2UgdGhlIGFsbG9jYXRpb24gY29kZSBtYWtl
cyBubyBhc3N1bXB0aW9ucyBhYm91dCB0aGUKICAgICAvLyBvcmRlciBvZiB0aGUgZnJlZSBsaXN0
LgpAQCAtMzYxLDYgKzQxOSw3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6
ZWRTd2UKICAgICAgICAgbV9kaXJlY3RvcnktPnNldElzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5
LCB0aGlzLCB0cnVlKTsKICAgICBpZiAoZmFsc2UpCiAgICAgICAgIGRhdGFMb2coIlNsb3dseSBz
d2VwdCBibG9jayAiLCBSYXdQb2ludGVyKCZibG9jayksICIgd2l0aCBjZWxsIHNpemUgIiwgY2Vs
bFNpemUsICIgYW5kIGF0dHJpYnV0ZXMgIiwgbV9hdHRyaWJ1dGVzLCAiOiAiLCBwb2ludGVyRHVt
cChmcmVlTGlzdCksICJcbiIpOworI2VuZGlmIC8vIEVOQUJMRShCSVRNQVBfRlJFRUxJU1QpCiB9
CiAKIHRlbXBsYXRlPHR5cGVuYW1lIERlc3Ryb3lGdW5jPgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkocmV2aXNpb24gMjYyOTMyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MDMsNyArNTAzLDcgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRSYW5kb21U
aHVuayhWTQogfQogI2VuZGlmCiAKLXZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0QWxsb2NhdGVX
aXRoTm9uTnVsbEFsbG9jYXRvcihHUFJSZWcgcmVzdWx0R1BSLCBjb25zdCBKSVRBbGxvY2F0b3Im
IGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBM
aXN0JiBzbG93UGF0aCkKK3ZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0QWxsb2NhdGVXaXRoTm9u
TnVsbEFsbG9jYXRvcihHUFJSZWcgcmVzdWx0R1BSLCBjb25zdCBKSVRBbGxvY2F0b3ImIGFsbG9j
YXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBz
bG93UGF0aCwgT3B0aW9uYWw8R1BSUmVnPiBvcHRpb25hbFNjcmF0Y2hHUFIyLCBPcHRpb25hbDxH
UFJSZWc+IG9wdGlvbmFsU2NyYXRjaEdQUjMpCiB7CiAgICAgaWYgKE9wdGlvbnM6OmZvcmNlR0NT
bG93UGF0aHMoKSkgewogICAgICAgICBzbG93UGF0aC5hcHBlbmQoanVtcCgpKTsKQEAgLTUxNiw3
ICs1MTYsNyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRlV2l0aE5vCiAgICAg
Ly8gLSBXZSAqY2FuKiB1c2UgUmVnaXN0ZXJTZXQ6Om1hY3JvU2NyYXRjaFJlZ2lzdGVycyBvbiBB
Uk0uCiAKICAgICBKdW1wIHBvcFBhdGg7Ci0gICAgSnVtcCBkb25lOworICAgIEp1bXBMaXN0IGRv
bmU7CiAgICAgCiAgICAgaWYgKGFsbG9jYXRvci5pc0NvbnN0YW50KCkpCiAgICAgICAgIG1vdmUo
VHJ1c3RlZEltbVB0cihhbGxvY2F0b3IuYWxsb2NhdG9yKCkubG9jYWxBbGxvY2F0b3IoKSksIGFs
bG9jYXRvckdQUik7CkBAIC01MzQsMTAgKzUzNCwxMjIgQEAgdm9pZCBBc3NlbWJseUhlbHBlcnM6
OmVtaXRBbGxvY2F0ZVdpdGhObwogICAgIEFkZHJlc3MgcGF5bG9hZEVuZEFkZHIgPSBBZGRyZXNz
KGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVM
aXN0OjpvZmZzZXRPZlBheWxvYWRFbmQoKSk7CiAgICAgYWRkUHRyKHBheWxvYWRFbmRBZGRyLCBy
ZXN1bHRHUFIpOwogCi0gICAgZG9uZSA9IGp1bXAoKTsKKyAgICBkb25lLmFwcGVuZChqdW1wKCkp
OwogICAgICAgICAKKyNpZiBFTkFCTEUoQklUTUFQX0ZSRUVMSVNUKQorICAgIEFTU0VSVChyZXN1
bHRHUFIgIT0gc2NyYXRjaEdQUik7CisKKyAgICBhdXRvIHJvd0luZGV4R1BSID0gcmVzdWx0R1BS
OworICAgIGF1dG8gcm93Qml0bWFwR1BSID0gc2NyYXRjaEdQUjsKKworICAgIEdQUlJlZyBzY3Jh
dGNoR1BSMiA9IG9wdGlvbmFsU2NyYXRjaEdQUjIgPyBvcHRpb25hbFNjcmF0Y2hHUFIyLnZhbHVl
KCkgOiBzY3JhdGNoUmVnaXN0ZXIoKTsKKyAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gcmVzdWx0
R1BSKTsKKyAgICBBU1NFUlQoc2NyYXRjaEdQUjIgIT0gc2NyYXRjaEdQUik7CisKKyAgICBhdXRv
IHJvd0FkZHJlc3NHUFIgPSBzY3JhdGNoR1BSMjsKKyAgICBhdXRvIGNsZWFyQml0NjRTY3JhdGNo
R1BSID0gc2NyYXRjaEdQUjI7CisKKyAgICBib29sIGNhblByZWxvYWRSb3dBZGRyZXNzR1BSID0g
ZmFsc2U7CisgICAgaWYgKG9wdGlvbmFsU2NyYXRjaEdQUjMpIHsKKyAgICAgICAgY2xlYXJCaXQ2
NFNjcmF0Y2hHUFIgPSBvcHRpb25hbFNjcmF0Y2hHUFIzLnZhbHVlKCk7CisgICAgICAgIGNhblBy
ZWxvYWRSb3dBZGRyZXNzR1BSID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKGlzWDg2XzY0KCkpIHsK
KyAgICAgICAgLy8geDg2XzY0J3MgY2xlYXJCaXQ2NCgpIGRvZXMgYWN0dWFsbHkgbmVlZCB0byB1
c2UgY2xlYXJCaXQ2NFNjcmF0Y2hHUFIuCisgICAgICAgIC8vIFNvLCB3ZSBjYW4gcHJlbG9hZCB0
aGUgcm93IGFkZHJlc3MgaW50byBpdC4KKyAgICAgICAgY2xlYXJCaXQ2NFNjcmF0Y2hHUFIgPSBJ
bnZhbGlkR1BSUmVnOworICAgICAgICBjYW5QcmVsb2FkUm93QWRkcmVzc0dQUiA9IHRydWU7Cisj
aWYgQ1BVKEFSTTY0KQorICAgIH0gZWxzZSBpZiAoaXNBUk02NCgpKSB7CisgICAgICAgIC8vIEFS
TTY0J3MgZmFzdCBwYXRoIGRvZXMgYWN0dWFsbHkgbmVlZCB0byB1c2UgdGhlIG1lbW9yeVRlbXBS
ZWdpc3Rlci4KKyAgICAgICAgLy8gU28sIHdlIGNhbiB1c2UgdGhhdCBmb3IgdGhlIGNsZWFyQml0
NjRTY3JhdGNoR1BSIGFuZCBhbGxvdyB0aGUKKyAgICAgICAgLy8gcm93IGFkZHJlc3MgdG8gYmUg
cHJlbG9hZGVkIGluIHNjcmF0Y2hHUFIyLgorICAgICAgICBjbGVhckJpdDY0U2NyYXRjaEdQUiA9
IGdldENhY2hlZE1lbW9yeVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpOworICAgICAgICBj
YW5QcmVsb2FkUm93QWRkcmVzc0dQUiA9IHRydWU7CisjZW5kaWYKKyAgICB9CisgICAgQVNTRVJU
KGNsZWFyQml0NjRTY3JhdGNoR1BSICE9IHJlc3VsdEdQUik7CisgICAgQVNTRVJUKGNsZWFyQml0
NjRTY3JhdGNoR1BSICE9IHNjcmF0Y2hHUFIpOworICAgIGlmIChjYW5QcmVsb2FkUm93QWRkcmVz
c0dQUikKKyAgICAgICAgQVNTRVJUKGNsZWFyQml0NjRTY3JhdGNoR1BSICE9IHNjcmF0Y2hHUFIy
KTsKKworICAgIC8vIFRoZSBjb2RlIGJlbG93IGZvciByb3dCaXRtYXBHUFIgcmVsaWVzIG9uIHRo
aXMuCisgICAgc3RhdGljX2Fzc2VydChzaXplb2YoRnJlZUxpc3Q6OkF0b21zQml0bWFwOjpXb3Jk
KSA9PSBzaXplb2YodWludDY0X3QpKTsKKworICAgIC8vIENoZWNrIGZvciBtaWRkbGUgcGF0aDog
aGF2ZSBhbm90aGVyIHJvdyB0byB2aXNpdD8KKyAgICBMYWJlbCBjaGVja0Zvck1vcmVSb3dzID0g
bGFiZWwoKTsKKworICAgIGxvYWQzMihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0
b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZkN1cnJlbnRSb3dJbmRl
eCgpKSwgcm93SW5kZXhHUFIpOworCisgICAgaWYgKCFjYW5QcmVsb2FkUm93QWRkcmVzc0dQUikK
KyAgICAgICAgbG9hZFB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9m
ZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZkN1cnJlbnRNYXJrZWRCbG9ja1Jv
d0FkZHJlc3MoKSksIHJvd0FkZHJlc3NHUFIpOworCisgICAgc2xvd1BhdGguYXBwZW5kKGJyYW5j
aFRlc3RQdHIoWmVybywgcm93SW5kZXhHUFIpKTsKKworICAgIC8vIE1pZGRsZSBwYXRoOiB0aGVy
ZSBpcyBhbm90aGVyIHJvdyBsZWZ0IHRvIHZpc2l0LgorICAgIEp1bXAgZm91bmROb25FbXB0eVJv
dzsKKyAgICBMYWJlbCBjaGVja05leHRSb3cgPSBsYWJlbCgpOworICAgIHsKKyAgICAgICAgLy8g
TG9hZCB0aGUgbmV4dCByb3cgYml0bWFwIGFuZCBwb2ludCBtX2N1cnJlbnRNYXJrZWRCbG9ja1Jv
d0FkZHJlc3MgdG8gdGhlIG5leHQgcm93LgorCisgICAgICAgIC8vIE5vdGU6IG9mZnNldE9mQml0
bWFwUm93cygpIHBvaW50cyB0byAxIHdvcmQgYmVmb3JlIG1fYml0bWFwLiBXZSBkbyB0aGlzCisg
ICAgICAgIC8vIGRlbGliZXJhdGVseSBiZWNhdXNlIGl0IGFsbG93cyB1cyB0byBzY2hlZHVsZSBp
bnN0cnVjdGlvbnMgYmV0dGVyIGFuZAorICAgICAgICAvLyBkbyB0aGlzIGxvYWQgYmVmb3JlIHRo
ZSBkZWNyZW1lbnQgYmVsb3cuCisgICAgICAgIGxvYWQ2NChCYXNlSW5kZXgoYWxsb2NhdG9yR1BS
LCByb3dJbmRleEdQUiwgVGltZXNFaWdodCwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxp
c3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZkJpdG1hcFJvd3MoKSksIHJvd0JpdG1hcEdQUik7CisK
KyAgICAgICAgc3ViNjQoVHJ1c3RlZEltbTMyKDEpLCByb3dJbmRleEdQUik7CisgICAgICAgIHN1
YlB0cihUcnVzdGVkSW1tMzIoRnJlZUxpc3Q6OmF0b21zUm93Qnl0ZXMpLCByb3dBZGRyZXNzR1BS
KTsKKworICAgICAgICBmb3VuZE5vbkVtcHR5Um93ID0gYnJhbmNoVGVzdDY0KE5vblplcm8sIHJv
d0JpdG1hcEdQUik7CisgICAgICAgIGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcm93SW5kZXhHUFIp
LmxpbmtUbyhjaGVja05leHRSb3csIHRoaXMpOworICAgIH0KKworICAgIC8vIFNsb3cgcGF0aDog
bm8gbW9yZSByb3dzLgorICAgIC8vIEJvdGggcm93SW5kZXhHUFIgYW5kIHJvd0JpdG1hcEdQUiBz
aG91bGQgYmUgbnVsbCBoZXJlLgorICAgIHN0b3JlMzIocm93SW5kZXhHUFIsIEFkZHJlc3MoYWxs
b2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6
Om9mZnNldE9mQ3VycmVudFJvd0luZGV4KCkpKTsKKyAgICBzdG9yZTY0KHJvd0JpdG1hcEdQUiwg
QWRkcmVzcyhhbGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkg
KyBGcmVlTGlzdDo6b2Zmc2V0T2ZDdXJyZW50Um93Qml0bWFwKCkpKTsKKyAgICBzbG93UGF0aC5h
cHBlbmQoanVtcCgpKTsKKworICAgIC8vIFRyYW5zaXRpb24gZnJvbSBtaWRkbGUgcGF0aCBiYWNr
IHRvIGZhc3QgcGF0aCB0byBhbGxvY2F0ZS4KKyAgICBmb3VuZE5vbkVtcHR5Um93LmxpbmsodGhp
cyk7CisgICAgc3RvcmVQdHIocm93QWRkcmVzc0dQUiwgQWRkcmVzcyhhbGxvY2F0b3JHUFIsIExv
Y2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZDdXJy
ZW50TWFya2VkQmxvY2tSb3dBZGRyZXNzKCkpKTsKKyAgICBzdG9yZTMyKHJvd0luZGV4R1BSLCBB
ZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSAr
IEZyZWVMaXN0OjpvZmZzZXRPZkN1cnJlbnRSb3dJbmRleCgpKSk7CisKKyAgICBKdW1wIGFsbG9j
YXRlRnJvbUN1cnJlbnRSb3cgPSBqdW1wKCk7CisKICAgICBwb3BQYXRoLmxpbmsodGhpcyk7Ci0g
ICAgICAgIAorCisgICAgLy8gQ2hlY2sgZm9yIGZhc3QgcGF0aDogaGF2ZSBhdmFpbGFibGUgYml0
IGluIG1fY3VycmVudFJvd0JpdG1hcD8KKyAgICBsb2FkNjQoQWRkcmVzcyhhbGxvY2F0b3JHUFIs
IExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlzdDo6b2Zmc2V0T2ZD
dXJyZW50Um93Qml0bWFwKCkpLCByb3dCaXRtYXBHUFIpOworCisgICAgaWYgKGNhblByZWxvYWRS
b3dBZGRyZXNzR1BSKSB7CisgICAgICAgIC8vIFByZWxvYWQgdGhlIHJvdyBhZGRyZXNzIG5lZWRl
ZCBvbiB0aGUgZmFzdCBhbmQgbWlkZGxlIHBhdGguCisgICAgICAgIGxvYWRQdHIoQWRkcmVzcyhh
bGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlz
dDo6b2Zmc2V0T2ZDdXJyZW50TWFya2VkQmxvY2tSb3dBZGRyZXNzKCkpLCByb3dBZGRyZXNzR1BS
KTsKKyAgICB9CisKKyAgICBicmFuY2hUZXN0NjQoWmVybywgcm93Qml0bWFwR1BSKS5saW5rVG8o
Y2hlY2tGb3JNb3JlUm93cywgdGhpcyk7CisKKyAgICAvLyBGYXN0IHBhdGg6IHdlIGhhdmUgYSBi
aXQgdG8gdXNlLgorICAgIGFsbG9jYXRlRnJvbUN1cnJlbnRSb3cubGluayh0aGlzKTsKKyAgICB7
CisgICAgICAgIC8vIFJlbW92ZSB0aGlzIGJpdCBmcm9tIG1fY3VycmVudFJvd0JpdG1hcC4KKyAg
ICAgICAgYXV0byBhdG9tSW5kZXhJblJvd0dQUiA9IHJlc3VsdEdQUjsKKyAgICAgICAgY291bnRU
cmFpbGluZ1plcm9zNjRXaXRob3V0TnVsbENoZWNrKHJvd0JpdG1hcEdQUiwgYXRvbUluZGV4SW5S
b3dHUFIpOworICAgICAgICBjbGVhckJpdDY0KGF0b21JbmRleEluUm93R1BSLCByb3dCaXRtYXBH
UFIsIGNsZWFyQml0NjRTY3JhdGNoR1BSKTsKKworICAgICAgICBpZiAoIWNhblByZWxvYWRSb3dB
ZGRyZXNzR1BSKQorICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9j
YWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZkN1cnJl
bnRNYXJrZWRCbG9ja1Jvd0FkZHJlc3MoKSksIHJvd0FkZHJlc3NHUFIpOworCisgICAgICAgIHN0
b3JlNjQocm93Qml0bWFwR1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6
Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZkN1cnJlbnRSb3dCaXRtYXAo
KSkpOworCisgICAgICAgIC8vIENvbXB1dGUgYXRvbSBhZGRyZXNzIG9mIHRoaXMgYml0LgorICAg
ICAgICBBU1NFUlQocmVzdWx0R1BSID09IGF0b21JbmRleEluUm93R1BSKTsKKyAgICAgICAgc3Rh
dGljX2Fzc2VydChGcmVlTGlzdDo6YXRvbVNpemVTaGlmdCA9PSBUaW1lczE2KTsKKyAgICAgICAg
Z2V0RWZmZWN0aXZlQWRkcmVzcyhCYXNlSW5kZXgocm93QWRkcmVzc0dQUiwgcmVzdWx0R1BSLCBU
aW1lczE2KSwgcmVzdWx0R1BSKTsKKyAgICB9CisKKyNlbHNlCisgICAgcG9wUGF0aC5saW5rKHRo
aXMpOworCiAgICAgbG9hZFB0cihBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6
Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlNjcmFtYmxlZEhlYWQoKSks
IHJlc3VsdEdQUik7CiAgICAgeG9yUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9j
YXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mU2VjcmV0KCkpLCBy
ZXN1bHRHUFIpOwogICAgIHNsb3dQYXRoLmFwcGVuZChicmFuY2hUZXN0UHRyKFplcm8sIHJlc3Vs
dEdQUikpOwpAQCAtNTQ2LDcgKzY1OCw4IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0QWxs
b2NhdGVXaXRoTm8KICAgICAvLyBpdCdzIHN0aWxsIG9uIHRoZSBHQydzIGZyZWUgbGlzdC4KICAg
ICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBGcmVlQ2VsbDo6b2Zmc2V0T2ZTY3JhbWJsZWRO
ZXh0KCkpLCBzY3JhdGNoR1BSKTsKICAgICBzdG9yZVB0cihzY3JhdGNoR1BSLCBBZGRyZXNzKGFs
bG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0
OjpvZmZzZXRPZlNjcmFtYmxlZEhlYWQoKSkpOwotICAgICAgICAKKyNlbmRpZgorCiAgICAgZG9u
ZS5saW5rKHRoaXMpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2Vt
Ymx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNz
ZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI2MjkzMikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDcgQEAK
ICNpbmNsdWRlICJUYWdSZWdpc3RlcnNNb2RlLmgiCiAjaW5jbHVkZSAiVHlwZW9mVHlwZS5oIgog
I2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewogCkBAIC0xODg3LDggKzE4ODgsOCBAQCBwdWJsaWM6CiAgICAgLy8gdGhhdCBhbGxvY2F0
b3IgaXMgbm9uLW51bGw7IGFsbG9jYXRvciBjYW4gYmUgbnVsbCBhcyBhIHNpZ25hbCB0aGF0IHdl
IGRvbid0IGtub3cgd2hhdCB0aGUKICAgICAvLyB2YWx1ZSBvZiBhbGxvY2F0b3JHUFIgaXMuIEFk
ZGl0aW9uYWxseSwgaWYgdGhlIGFsbG9jYXRvciBpcyBub3QgbnVsbCwgdGhlbiB0aGVyZSBpcyBu
byBuZWVkCiAgICAgLy8gdG8gcG9wdWxhdGUgYWxsb2NhdG9yR1BSIC0gdGhpcyBjb2RlIHdpbGwg
aWdub3JlIHRoZSBjb250ZW50cyBvZiBhbGxvY2F0b3JHUFIuCi0gICAgdm9pZCBlbWl0QWxsb2Nh
dGVXaXRoTm9uTnVsbEFsbG9jYXRvcihHUFJSZWcgcmVzdWx0R1BSLCBjb25zdCBKSVRBbGxvY2F0
b3ImIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIEp1
bXBMaXN0JiBzbG93UGF0aCk7Ci0gICAgCisgICAgdm9pZCBlbWl0QWxsb2NhdGVXaXRoTm9uTnVs
bEFsbG9jYXRvcihHUFJSZWcgcmVzdWx0R1BSLCBjb25zdCBKSVRBbGxvY2F0b3ImLCBHUFJSZWcg
YWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoLCBPcHRp
b25hbDxHUFJSZWc+IHNjcmF0Y2hHUFIyID0geyB9LCBPcHRpb25hbDxHUFJSZWc+IHNjcmF0Y2hH
UFIzID0geyB9KTsKKwogICAgIHZvaWQgZW1pdEFsbG9jYXRlKEdQUlJlZyByZXN1bHRHUFIsIGNv
bnN0IEpJVEFsbG9jYXRvciYgYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcg
c2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBTdHJ1Y3R1cmVUeXBlPgpJbmRleDogU291cmNlL1dURi93dGYvQml0bWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvQml0bWFwLmgJKHJldmlzaW9uIDI2MjkzMikKKysrIFNv
dXJjZS9XVEYvd3RmL0JpdG1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzAsOSArMTMwLDE1IEBA
IHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKIAorICAgIC8vIExvdyBsZXZl
bCBpbnRlcmZhY2UuCisgICAgdXNpbmcgV29yZCA9IFdvcmRUeXBlOworICAgIHN0YXRpYyBjb25z
dGV4cHIgdW5zaWduZWQgYml0c0luV29yZCA9IGNvdW50T2ZCaXRzPFdvcmRUeXBlPjsKKyAgICBz
dGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJlck9mV29yZHMgPSAoYml0bWFwU2l6ZSArIGJp
dHNJbldvcmQgLSAxKSAvIGJpdHNJbldvcmQ7CisgICAgV29yZFR5cGUgd29yZEF0KHNpemVfdCB3
b3JkSW5kZXgpIGNvbnN0IHsgcmV0dXJuIGJpdHNbd29yZEluZGV4XTsgfQorCiBwcml2YXRlOgot
ICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgd29yZFNpemUgPSBzaXplb2YoV29yZFR5cGUp
ICogODsKLSAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIHdvcmRzID0gKGJpdG1hcFNpemUg
KyB3b3JkU2l6ZSAtIDEpIC8gd29yZFNpemU7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25l
ZCB3b3JkU2l6ZSA9IGJpdHNJbldvcmQ7CisgICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB3
b3JkcyA9IG51bWJlck9mV29yZHM7CiAKICAgICAvLyB0aGUgbGl0ZXJhbCAnMScgaXMgb2YgdHlw
ZSBzaWduZWQgaW50LiAgV2Ugd2FudCB0byB1c2UgYW4gdW5zaWduZWQKICAgICAvLyB2ZXJzaW9u
IG9mIHRoZSBjb3JyZWN0IHNpemUgd2hlbiBkb2luZyB0aGUgY2FsY3VsYXRpb25zIGJlY2F1c2Ug
aWYKQEAgLTM4MCwxMSArMzg2LDEzIEBAIGlubGluZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBX
b3JkVHlwZT4KICAgICAgICAgaWYgKCF3b3JkKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIHNpemVfdCBiYXNlID0gaSAqIHdvcmRTaXplOwotICAgICAgICBmb3IgKHNpemVfdCBqID0g
MDsgaiA8IHdvcmRTaXplOyArK2opIHsKKyAgICAgICAgc2l6ZV90IGogPSAwOworICAgICAgICBm
b3IgKDsgd29yZDsgKytqKSB7CiAgICAgICAgICAgICBpZiAod29yZCAmIDEpCiAgICAgICAgICAg
ICAgICAgZnVuYyhiYXNlICsgaik7CiAgICAgICAgICAgICB3b3JkID4+PSAxOwogICAgICAgICB9
CisgICAgICAgIEFTU0VSVChqIDw9IHdvcmRTaXplKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL01hdGhFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NYXRo
RXh0cmFzLmgJKHJldmlzaW9uIDI2MjkzMikKKysrIFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMu
aAkod29ya2luZyBjb3B5KQpAQCAtNTkzLDcgKzU5Myw3IEBAIHZvaWQgc2h1ZmZsZVZlY3RvcihW
ZWN0b3JUeXBlJiB2ZWN0b3IsIGMKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogY29uc3RleHByIHVu
c2lnbmVkIGNsekNvbnN0ZXhwcihUIHZhbHVlKQogewotICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBi
aXRTaXplID0gc2l6ZW9mKFQpICogQ0hBUl9CSVQ7CisgICAgY29uc3RleHByIHVuc2lnbmVkIGJp
dFNpemUgPSBjb3VudE9mQml0czxUPjsKIAogICAgIHVzaW5nIFVUID0gdHlwZW5hbWUgc3RkOjpt
YWtlX3Vuc2lnbmVkPFQ+Ojp0eXBlOwogICAgIFVUIHVWYWx1ZSA9IHZhbHVlOwpAQCAtNjEwLDEz
ICs2MTAsMTMgQEAgY29uc3RleHByIHVuc2lnbmVkIGNsekNvbnN0ZXhwcihUIHZhbHVlKQogdGVt
cGxhdGU8dHlwZW5hbWUgVD4KIGlubGluZSB1bnNpZ25lZCBjbHooVCB2YWx1ZSkKIHsKLSAgICBj
b25zdGV4cHIgdW5zaWduZWQgYml0U2l6ZSA9IHNpemVvZihUKSAqIENIQVJfQklUOworICAgIGNv
bnN0ZXhwciBzaXplX3QgYml0U2l6ZSA9IGNvdW50T2ZCaXRzPFQ+OwogCiAgICAgdXNpbmcgVVQg
PSB0eXBlbmFtZSBzdGQ6Om1ha2VfdW5zaWduZWQ8VD46OnR5cGU7CiAgICAgVVQgdVZhbHVlID0g
dmFsdWU7CiAKICNpZiBDT01QSUxFUihHQ0NfQ09NUEFUSUJMRSkKLSAgICBjb25zdGV4cHIgdW5z
aWduZWQgYml0U2l6ZTY0ID0gc2l6ZW9mKHVpbnQ2NF90KSAqIENIQVJfQklUOworICAgIGNvbnN0
ZXhwciBzaXplX3QgYml0U2l6ZTY0ID0gY291bnRPZkJpdHM8dWludDY0X3Q+OwogICAgIGlmICh1
VmFsdWUpCiAgICAgICAgIHJldHVybiBfX2J1aWx0aW5fY2x6bGwodVZhbHVlKSAtIChiaXRTaXpl
NjQgLSBiaXRTaXplKTsKICAgICByZXR1cm4gYml0U2l6ZTsKQEAgLTYzOCw3ICs2MzgsNyBAQCBp
bmxpbmUgdW5zaWduZWQgY2x6KFQgdmFsdWUpCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIGNvbnN0
ZXhwciB1bnNpZ25lZCBjdHpDb25zdGV4cHIoVCB2YWx1ZSkKIHsKLSAgICBjb25zdGV4cHIgdW5z
aWduZWQgYml0U2l6ZSA9IHNpemVvZihUKSAqIENIQVJfQklUOworICAgIGNvbnN0ZXhwciB1bnNp
Z25lZCBiaXRTaXplID0gY291bnRPZkJpdHM8VD47CiAKICAgICB1c2luZyBVVCA9IHR5cGVuYW1l
IHN0ZDo6bWFrZV91bnNpZ25lZDxUPjo6dHlwZTsKICAgICBVVCB1VmFsdWUgPSB2YWx1ZTsKQEAg
LTY1Nyw3ICs2NTcsNyBAQCBjb25zdGV4cHIgdW5zaWduZWQgY3R6Q29uc3RleHByKFQgdmFsdWUp
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogaW5saW5lIHVuc2lnbmVkIGN0eihUIHZhbHVlKQogewot
ICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRTaXplID0gc2l6ZW9mKFQpICogQ0hBUl9CSVQ7Cisg
ICAgY29uc3RleHByIHVuc2lnbmVkIGJpdFNpemUgPSBjb3VudE9mQml0czxUPjsKIAogICAgIHVz
aW5nIFVUID0gdHlwZW5hbWUgc3RkOjptYWtlX3Vuc2lnbmVkPFQ+Ojp0eXBlOwogICAgIFVUIHVW
YWx1ZSA9IHZhbHVlOwpAQCAtNjk1LDcgKzY5NSw3IEBAIGNvbnN0ZXhwciB1bnNpZ25lZCBnZXRM
U0JTZXRDb25zdGV4cHIoVCAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUgdW5zaWduZWQg
Z2V0TVNCU2V0KFQgdCkKIHsKLSAgICBjb25zdGV4cHIgdW5zaWduZWQgYml0U2l6ZSA9IHNpemVv
ZihUKSAqIENIQVJfQklUOworICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRTaXplID0gY291bnRP
ZkJpdHM8VD47CiAgICAgQVNTRVJUKHQpOwogICAgIHJldHVybiBiaXRTaXplIC0gMSAtIGNseih0
KTsKIH0KQEAgLTcwMywxMSArNzAzLDE0IEBAIGlubGluZSB1bnNpZ25lZCBnZXRNU0JTZXQoVCB0
KQogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGNvbnN0ZXhwciB1bnNpZ25lZCBnZXRNU0JTZXRDb25z
dGV4cHIoVCB0KQogewotICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRTaXplID0gc2l6ZW9mKFQp
ICogQ0hBUl9CSVQ7CisgICAgY29uc3RleHByIHVuc2lnbmVkIGJpdFNpemUgPSBjb3VudE9mQml0
czxUPjsKICAgICBBU1NFUlRfVU5ERVJfQ09OU1RFWFBSX0NPTlRFWFQodCk7CiAgICAgcmV0dXJu
IGJpdFNpemUgLSAxIC0gY2x6Q29uc3RleHByKHQpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB1bnNpZ25lZCBsb2cyKFQgdmFsdWUpIHsgcmV0dXJuIGdldE1TQlNldCh2YWx1ZSk7IH0KK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IGNvbnN0ZXhwciB1bnNpZ25lZCBsb2cyQ29uc3RleHByKFQgdmFs
dWUpIHsgcmV0dXJuIGdldE1TQlNldENvbnN0ZXhwcih2YWx1ZSk7IH0KKwogfSAvLyBuYW1lc3Bh
Y2UgV1RGCiAKIHVzaW5nIFdURjo6c2h1ZmZsZVZlY3RvcjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402163</attachid>
            <date>2020-06-17 15:58:42 -0700</date>
            <delta_ts>2020-06-17 16:12:07 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-213071.patch</filename>
            <type>text/plain</type>
            <size>46306</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjYzMTgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0OSBA
QAorMjAyMC0wNi0xNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVwbGFjZSBKU0M6OkZyZWVMaXN0IGxpbmtlZCBsaXN0IHdpdGggYSBCaXRtYXAuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTMwNzEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgYW4gYWx0
ZXJuYXRpdmUgdG8gdGhlIGxpbmtlZCBsaXN0IEZyZWVMaXN0LiAgVGhpcyBhbHRlcm5hdGl2ZSB1
c2VzCisgICAgICAgIGEgQml0bWFwIHRvIHJlY29yZCB3aGljaCBhdG9tIGluIHRoZSBibG9jayBp
cyBhdmFpbGFibGUgZm9yIGFsbG9jYXRpb24uCisKKyAgICAgICAgVGhlIGludHVpdGlvbiBoZXJl
IGlzIHRoYXQgYWxsb2NhdGlvbiB1c2luZyB0aGUgQml0bWFwIGltcGxlbWVudGF0aW9uIHdpbGwg
ZG86CisgICAgICAgICAgICAyIGxvYWRzIC0gbV9jdXJyZW50Um93Qml0bWFwLCBtX2N1cnJlbnRN
YXJrZWRCbG9ja1Jvd0FkZHJlc3MKKyAgICAgICAgICAgIDEgc3RvcmUgLSBtX2N1cnJlbnRSb3dC
aXRtYXAKKworICAgICAgICB3aGVyZWFzIHRoZSBsaW5rZWQgbGlzdCBpbXBsZW1lbnRhdGlvbiB3
aWxsIGRvOgorICAgICAgICAgICAgMyBsb2FkcyAtIG1fc2NyYW1ibGVkSGVhZCwgbV9zZWNyZXQs
IHJlc3VsdC0+c2NyYW1ibGVkTmV4dAorICAgICAgICAgICAgMSBzdG9yZSAtIG1fc2NyYW1ibGVk
SGVhZAorCisgICAgICAgIGFuZCByZXN1bHQtPnNjcmFtYmxlZE5leHQgaXMgZnJvbSBhIGRpZmZl
cmVudCByZWdpb24gb2YgY29kZSBhbmQgdGhlcmVmb3JlIG5vdAorICAgICAgICBpbiB0aGUgc2Ft
ZSBjYWNoZSBsaW5lLgorCisgICAgICAgIFRoZSBkb3duc2lkZSBvZiB0aGUgQml0bWFwIGltcGxl
bWVudGF0aW9uIGlzIHRoYXQgaXQgdXNlcyBtb3JlIGluc3RydWN0aW9ucy4KKworICAgICAgICBU
aGlzIGNoYW5nZSBpcyBjdXJyZW50bHkgb25seSBlbmFibGVkIGZvciB4ODZfNjQsIHdoaWNoIHNo
b3dzIGFib3V0IGEgMC44JQorICAgICAgICBwcm9ncmVzc2lvbiBvbiBTcGVlZG9tZXRlciAyLgor
CisgICAgICAgIEl0IGFwcGVhcnMgdG8gYmUgYWJvdXQgYSAxJSByZWdyZXNzaW9uIG9uIEFSTTY0
RS4gIEhlbmNlLCBmb3Igbm93LCB3ZSBrZWVwIHRoZQorICAgICAgICBsaW5rZWQgbGlzdCBpbXBs
ZW1lbnRhdGlvbiBmb3IgQVJNNjQgYnVpbGRzLgorCisgICAgICAgIFRoaXMgaXMgaG93IHRoZSBC
aXRtYXAgRnJlZUxpc3Qgd29ya3M6CisKKyAgICAgICAgMS4gVGhlIEJpdG1hcCBpbXBsZW1lbnRh
dGlvbiBvbmx5IHJlcGxhY2VzIHRoZSBsaW5rZWQgbGlzdCBpbXBsZW1lbnRhdGlvbi4gIEl0Cisg
ICAgICAgICAgIGRvZXMgbm90IHJlcGxhY2UgdGhlIGJ1bXAgYWxsb2NhdG9yLgorCisgICAgICAg
IDIuIFRoZSBCaXRtYXAgYWxsb2NhdG9yIGtlZXBzIGEgbV9iaXRtYXAgdGhhdCBpcyBpbml0aWFs
aXplZCBpbgorICAgICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZWVw
KCkgdG8gaGF2ZSBhIGJpdCBzZXQgZm9yIGVhY2ggYXRvbQorICAgICAgICAgICBsb2NhdGlvbiB0
aGF0IGlzIGF2YWlsYWJsZSBmb3IgYWxsb2NhdGlvbiAoaS5lLiBpcyBmcmVlKS4gIE5vdGUgdGhh
dCBhIGNlbGwKKyAgICAgICAgICAgaXMgdXN1YWxseSBhbGxvY2F0ZWQgdXNpbmcgbW9yZSB0aGFu
IDEgYXRvbS4gIE9ubHkgdGhlIGJpdCBjb3JyZXNwb25kaW5nIHRvCisgICAgICAgICAgIHRoZSBm
aXJzdCBhdG9tIChpbiB0aGF0IGNlbGwgbGVuZ3RoIHJhbmdlIG9mIGZyZWUgYXRvbXMpIHdpbGwg
YmUgc2V0LgorCisgICAgICAgICAgIFRoaXMgaXMgY29uc2lzdGVudCB3aXRoIGhvdyBiaXRzIGlu
IE1hcmtlZEJsb2NrOjpGb290ZXI6Om1fbWFya3MgYW5kCisgICAgICAgICAgIE1hcmtlZEJsb2Nr
OjpGb290ZXI6Om1fbmV3bHlBbGxvY2F0ZWQgYXJlIHNldCBpLmUuIG9ubHkgdGhlIGJpdCBmb3Ig
dGhlIGZpcnN0CisgICAgICAgICAgIGF0b20gaW4gdGhlIGNlbGwgY2FuIGJlIHNldC4KKworICAg
ICAgICAzLiBUaGUgYWxsb2NhdGlvbiBhbGdvcml0aG0gdGhpbmtzIG9mIHRoZSBNYXJrZWRCbG9j
ayBhcyBjb25zaXN0aW5nIG9mIHJvd3MKKyAgICAgICAgICAgb2YgYXRvbXMsIHdoZXJlIHRoZSBu
dW1iZXIgb2YgYXRvbXMgaW4gYSByb3cgZXF1YWxzIHRoZSBudW1iZXIgb2YgYml0cyBpbgorICAg
ICAgICAgICBhIEF0b21zQml0bWFwOjpXb3JkLiAgT24gNjQtYml0IENQVXMsIHRoaXMgd291bGQg
YmUgNjQuCisKKyAgICAgICAgICAgV2Ugd2lsbCBzdGFydCBhbGxvY2F0aW5nIGZyb20gdGhlIGxh
c3QgKGhpZ2hlc3QgbnVtYmVyZWQpIHJvdyBkb3duIHRvIHRoZQorICAgICAgICAgICBmaXJzdCAo
cm93IDApLiAgQXMgd2UgYWxsb2NhdGUsIHdlIHdpbGwgb25seSB1cGRhdGUgbV9jdXJyZW50Um93
SW5kZXggYW5kCisgICAgICAgICAgIG1fY3VycmVudFJvd0JpdG1hcC4gIG1fYml0bWFwIHdpbGwg
bm90IGJlIHVwZGF0ZWQuICBUaGlzIGlzIHNvIGluIG9yZGVyIHRvCisgICAgICAgICAgIHJlZHVj
ZSB0aGUgbnVtYmVyIG9mIGluc3RydWN0aW9ucyBleGVjdXRlZCBkdXJpbmcgYW4gYWxsb2NhdGlv
bi4KKworICAgICAgICAgICBXaGVuIG1fY3VycmVudFJvd0luZGV4IHBvaW50cyB0byBOLCB0aGUg
QXRvbXNCaXRtYXA6OldvcmQgZm9yIHJvdyBOIGluCisgICAgICAgICAgIG1fYml0bWFwIHdpbGwg
aGF2ZSBiZWVuIGNvcGllZCBpbnRvIG1fY3VycmVudFJvd0JpdG1hcC4gIFRoaXMgaXMgdGhlIHJv
dworICAgICAgICAgICB0aGF0IHdlIHdpbGwgYmUgYWxsb2NhdGluZyBmcm9tIHVudGlsIHRoZSBy
b3cgaXMgZXhoYXVzdGVkLgorCisgICAgICAgICAgIFRoaXMgaXMgaG93IHdlIGtub3cgd2hldGhl
ciBhbiBhdG9tIGlzIGF2YWlsYWJsZSBmb3IgYWxsb2NhdGlvbiBvciBub3Q6CisgICAgICAgICAg
ICAgaS4gQXRvbXMgaW4gYW55IHJvd3MgYWJvdmUgbV9jdXJyZW50Um93SW5kZXggYXJlIGd1YXJh
bnRlZWQgdG8gYmUKKyAgICAgICAgICAgICAgICBhbGxvY2F0ZWQgYWxyZWFkeSAoYmVjYXVzZSB3
ZSBhbGxvY2F0ZSBkb3dud2FyZHMpLCBhbmQgaGVuY2UsIGFyZSBub3QKKyAgICAgICAgICAgICAg
ICBhdmFpbGFibGUuCisgICAgICAgICAgICBpaS4gRm9yIHJvdyBtX2N1cnJlbnRSb3dJbmRleCwg
bV9jdXJyZW50Um93Qml0bWFwIGlzIHRoZSBzb3VyY2Ugb2YgdHJ1dGgKKyAgICAgICAgICAgICAg
ICBvbiB3aGljaCBhdG9tcyBpbiB0aGUgcm93IGFyZSBhdmFpbGFibGUgZm9yIGFsbG9jYXRpb24u
CisgICAgICAgICAgIGlpaS4gRm9yIHJvd3MgYmVsb3cgbV9jdXJyZW50Um93SW5kZXgsIG1fYml0
bWFwIGlzIHRoZSBzb3VyY2Ugb2YgdHJ1dGggb24KKyAgICAgICAgICAgICAgICB3aGljaCBhdG9t
cyBhcmUgYXZhaWxhYmxlIGZvciBhbGxvY2F0aW9uLgorCisgICAgICAgICAgIFdoZW4gbV9jdXJy
ZW50Um93SW5kZXggcmVhY2hlcyAwLCB0aGUgaW5mbyBpbiBtX2JpdG1hcCBpcyBjb21wbGV0ZWx5
CisgICAgICAgICAgIG9ic29sZXRlZCwgYW5kIG1fY3VycmVudFJvd0JpdG1hcCBob2xkcyB0aGUg
YXZhaWxhYmlsaXR5IGluZm8gZm9yIHJvdyAwLgorICAgICAgICAgICBXaGVuIGJvdGggbV9jdXJy
ZW50Um93SW5kZXggYW5kIG1fY3VycmVudFJvd0JpdG1hcCBhcmUgMCwgdGhlbiB3ZSBoYXZlCisg
ICAgICAgICAgIGNvbXBsZXRlbHkgZXhoYXVzdGVkIHRoZSBibG9jayBhbmQgbm8gbW9yZSBhdG9t
cyBhcmUgYXZhaWxhYmxlIGZvcgorICAgICAgICAgICBhbGxvY2F0aW9uLgorCisgICAgICAgIDQu
IEFsbG9jYXRpb24gaGFwcGVucyBpbiAzIHBhdGhzOiBmYXN0LCBtaWRkbGUsIHNsb3cuCisKKyAg
ICAgICAgICAgVGhlIGZhc3QgcGF0aCBjaGVja3MgbV9jdXJyZW50Um93Qml0bWFwLiAgSWYgaXQn
cyBub3QgMCwgdGhlbiB3ZSBjb21wdXRlIHRoZQorICAgICAgICAgICBiaXQgbnVtYmVyIG9mIHRo
ZSBsb3dlc3Qgc2V0IGJpdCBpbiBpdC4gIFRoYXQgYml0IG51bWJlciB3aWxsIGJlIHVzZWQgdG9n
ZXRoZXIKKyAgICAgICAgICAgd2l0aCBtX2N1cnJlbnRNYXJrZWRCbG9ja1Jvd0FkZHJlc3MgdG8g
Y29tcHV0ZSB0aGUgYWRkcmVzcyBvZiB0aGUgYXRvbQorICAgICAgICAgICBsb2NhdGlvbiBhdmFp
bGFibGUgZm9yIGFsbG9jYXRpb24uICBtX2N1cnJlbnRSb3dCaXRtYXAgd2lsbCBiZSB1cGRhdGVk
IHRvIGNsZWFyCisgICAgICAgICAgIHRoZSBiaXQgZm9yIHRoZSBhdG9tIHRoYXQgaGFzIGp1c3Qg
YmVuIGFsbG9jYXRlZC4KKworICAgICAgICAgICBJZiBtX2N1cnJlbnRSb3dCaXRtYXAgaXMgMCwg
dGhlbiB3ZSdsbCBnbyB0byB0aGUgbWlkZGxlIHBhdGguCisKKyAgICAgICAgICAgVGhlIG1pZGRs
ZSBwYXRoIGNoZWNrcyBtX2N1cnJlbnRSb3dJbmRleCB0byBzZWUgaWYgd2UgaGF2ZSBtb3JlIHJv
d3MgdG8gYWxsb2NhdGUKKyAgICAgICAgICAgZnJvbS4gIEZvciBlYWNoIG1fY3VycmVudFJvd0lu
ZGV4LCB3ZSBjaGVjayBpdHMgY29ycmVzcG9uZGluZyBBdG9tc0JpdG1hcDo6V29yZAorICAgICAg
ICAgICBpbiBtX2JpdG1hcC4gIElmIHRoZSB3b3JkIGlzIG5vbi16ZXJvLCB3ZSBjb3B5IGl0IHRv
IG1fY3VycmVudFJvd0JpdG1hcCBhbmQKKyAgICAgICAgICAganVtcCB0byB0aGUgZmFzdCBwYXRo
IHRvIGRvIHRoZSBhbGxvY2F0aW9uLiAgVGhlIG1pZGRsZSBwYXRoIHdpbGwgdXBkYXRlCisgICAg
ICAgICAgIG1fY3VycmVudFJvd0luZGV4IHRvIHBvaW50IHRvIHRoZSBjdXJyZW50IHJvdyB3ZSdy
ZSBhbGxvY2F0aW5nIGZyb20uCisKKyAgICAgICAgICAgSWYgd2UgaGF2ZSBkZWNyZW1lbnRlZCBt
X2N1cnJlbnRSb3dJbmRleCBkb3duIHRvIDAgYnV0IHN0aWxsIGNhbid0IGZpbmQgYQorICAgICAg
ICAgICBub24temVybyBBdG9tc0JpdG1hcDo6V29yZCBpbiBtX2JpdG1hcCwgdGhlbiB0aGUgYmxv
Y2sgaGFzIGJlZW4gZXhoYXVzdGVkLCBhbmQKKyAgICAgICAgICAgd2UnbGwgZ28gdG8gdGhlIHNs
b3cgcGF0aC4KKworICAgICAgICAgICBUaGUgc2xvdyBwYXRoIGlzIGFuYWxvZ291cyB0byB0aGUg
b2xkIHNsb3cgcGF0aCBpLmUuIHdlIHRyeSB0byByZWZpbGwgdGhlCisgICAgICAgICAgIExvY2Fs
QWxsb2NhdG9yIHdpdGggYSBuZXcgTWFya2VkQmxvY2suCisKKyAgICAgICAgNS4gT24gdGhlIGxh
eW91dCBvZiBmaWVsZHMgaW4gRnJlZUxpc3QgKHNlZSBjaGFuZ2VzIGluIEZyZWVMaXN0LmgpLCB3
ZSB0cnkgdG8KKyAgICAgICAgICAgcHJlc2VydmUgdGhlIHBvc2l0aW9ucyBvZiB0aGUgYnVtcCBh
bGxvY2F0b3IgZmllbGRzLiAgVGhlIG9ubHkgY2hhbmdlIHdlIG1hZGUKKyAgICAgICAgICAgdGhl
cmUgaXMgbiB0aGUgbG9jYXRpb24gb2YgbV9jZWxsU2l6ZS4gIEl0IGlzIG5vdyBtb3ZlZCB1cCBu
ZXh0IHRvIG1fcmVtYWluaW5nLAorICAgICAgICAgICBhbmQgbV9vcmlnaW5hbFNpemUgaXMgbW92
ZWQgZG93bi4gIFRoaXMgaXMgYmVjYXVzZSBtX29yaWdpbmFsU2l6ZSBpcyBvbmx5CisgICAgICAg
ICAgIGFjY2Vzc2VkIGluIHRoZSBzbG93IHBhdGgsIGFuZCBtX2NlbGxTaXplIGlzIGFjY2Vzc2Vk
IGluIHRoZSBidW1wIGFsbG9jYXRpb24KKyAgICAgICAgICAgcGF0aC4KKworICAgICAgICAgICBO
ZXh0LCB3ZSB0cnkgdG8gcHV0IEJpdG1hcCBhbGxvY2F0aW9uIGZpZWxkcyB3aGVyZSB0aGUgbGlu
a2VkIGxpc3QgZmllbGRzCisgICAgICAgICAgIHdvdWxkIGhhdmUgYmVlbi4gIFRoZSBvbmUgYml0
IG9mIHRyaWNraW5lc3MgaXMgdGhhdCB3ZSdsbCBwdXQKKyAgICAgICAgICAgbV9jdXJyZW50TWFy
a2VkQmxvY2tSb3dBZGRyZXNzIGluIGEgdW5pb24gd2l0aCBtX3BheWxvYWRFbmQuICBUaGlzIGlz
IGJlY2F1c2UKKyAgICAgICAgICAgbV9wYXlsb2FkRW5kIGlzIG9ubHkgdXNlZCBpbiB0aGUgYnVt
cCBhbGxvY2F0aW9uIHBhdGguICBJZiBtX3JlbWFpbmluZyBpcyAwLAorICAgICAgICAgICB0aGVu
IHdlIGNhbiByZXVzZSB0aGlzIGxvY2F0aW9uIGZvciBtX2N1cnJlbnRNYXJrZWRCbG9ja1Jvd0Fk
ZHJlc3MuCisKKyAgICAgICAgICAgV2l0aCB0aGlzLCB3ZSB3b3VsZCBoYXZlIDQgYnl0ZXMgb2Yg
cGFkZGluZyBhZnRlciBtX2N1cnJlbnRSb3dJbmRleC4gIEZvcgorICAgICAgICAgICBjb21wYWN0
bmVzcywgd2UgcHV0IG1fb3JpZ2luYWxTaXplIHRoZXJlIGluIHRoYXQgc3BhY2UuICBGb3IgYnVp
bGRzIHRoYXQgdXNlCisgICAgICAgICAgIHRoZSBsaW5rZWQgbGlzdCBpbXBsZW1lbnRhdGlvbiwg
bV9vcmlnaW5hbFNpemUgd2lsbCBiZSBsb2NhdGVkIGJlbG93IGFmdGVyCisgICAgICAgICAgIG1f
Y2VsbFNpemUuCisKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVIZWFwQ2VsbCk6CisgICAgICAg
ICogaGVhcC9GcmVlTGlzdC5jcHA6CisgICAgICAgIChKU0M6OkZyZWVMaXN0OjpjbGVhcik6Cisg
ICAgICAgIChKU0M6OkZyZWVMaXN0Ojppbml0aWFsaXplQXRvbXNCaXRtYXApOgorICAgICAgICAo
SlNDOjpGcmVlTGlzdDo6aW5pdGlhbGl6ZUJ1bXApOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6
Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6ZHVtcCBjb25zdCk6Cisg
ICAgICAgICogaGVhcC9GcmVlTGlzdC5oOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6Yml0bWFw
SXNFbXB0eSBjb25zdCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0OjphbGxvY2F0aW9uV2lsbEZh
aWwgY29uc3QpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6b2Zmc2V0T2ZDdXJyZW50Um93Qml0
bWFwKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6Om9mZnNldE9mQml0bWFwUm93cyk6CisgICAg
ICAgIChKU0M6OkZyZWVMaXN0OjpvZmZzZXRPZkN1cnJlbnRSb3dJbmRleCk6CisgICAgICAgIChK
U0M6OkZyZWVMaXN0OjpvZmZzZXRPZkN1cnJlbnRNYXJrZWRCbG9ja1Jvd0FkZHJlc3MpOgorICAg
ICAgICAoSlNDOjpGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5pbmcpOgorICAgICAgICAoSlNDOjpG
cmVlTGlzdDo6YXRvbXNCaXRtYXApOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6Yml0bWFwUm93
cyBjb25zdCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0OjpvZmZzZXRPZk9yaWdpbmFsU2l6ZSk6
IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9GcmVlTGlzdElubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6RnJlZUxpc3Q6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OmZvckVhY2gg
Y29uc3QpOgorICAgICAgICAqIGhlYXAvTG9jYWxBbGxvY2F0b3IuY3BwOgorICAgICAgICAoSlND
OjpMb2NhbEFsbG9jYXRvcjo6aXNGcmVlTGlzdGVkQ2VsbCBjb25zdCk6CisgICAgICAgICogaGVh
cC9NYXJrZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjphdG9t
QXQgY29uc3QpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXApOgorICAgICAgICAq
IGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6
OmVtaXRBbGxvY2F0ZVdpdGhOb25OdWxsQWxsb2NhdG9yKToKKyAgICAgICAgKiBqaXQvQXNzZW1i
bHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRl
V2l0aE5vbk51bGxBbGxvY2F0b3IpOgorCiAyMDIwLTA2LTE3ICBZdXN1a2UgU3V6dWtpICA8eXN1
enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gRnJlZXplIEpTQmlnSW50IHdoZW4gc2V0
dGluZyBpdCBhcyBhIGNvbnN0YW50IGluIEFJCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyNjMxODEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1MDc5LDcgKzE1MDc5LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBwYXRjaHBvaW50LT5u
dW1HUFNjcmF0Y2hSZWdpc3RlcnMrKzsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcGF0Y2hw
b2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyV2l0aENsb2JiZXIoYWxsb2NhdG9yKTsKLSAgICAgICAg
cGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzKys7CisjaWYgRU5BQkxFKEJJVE1BUF9G
UkVFTElTVCkKKyAgICAgICAgY29uc3RleHByIHVuc2lnbmVkIHNjcmF0Y2hSZWdpc3RlcnNOZWVk
ZWQgPSAzOworICAgICAgICBjb25zdGV4cHIgdW5zaWduZWQgYWxsb2NhdG9yU2NyYXRjaCA9IDM7
CisjZWxzZQorICAgICAgICBjb25zdGV4cHIgdW5zaWduZWQgc2NyYXRjaFJlZ2lzdGVyc05lZWRl
ZCA9IDE7CisgICAgICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBhbGxvY2F0b3JTY3JhdGNoID0gMTsK
KyNlbmRpZgorICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgKz0gc2Ny
YXRjaFJlZ2lzdGVyc05lZWRlZDsKICAgICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWlu
dHMgPSB7IFZhbHVlUmVwOjpTb21lRWFybHlSZWdpc3RlciB9OwogICAgICAgICAKICAgICAgICAg
bV9vdXQuYXBwZW5kU3VjY2Vzc29yKHVzdWFsbHkoY29udGludWF0aW9uKSk7CkBAIC0xNTA5Miw3
ICsxNTA5OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
R1BSUmVnIGFsbG9jYXRvckdQUjsKICAgICAgICAgICAgICAgICBpZiAoYWN0dWFsQWxsb2NhdG9y
LmlzQ29uc3RhbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yR1BSID0gcGFyYW1z
LmdwU2NyYXRjaCgxKTsKKyAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yR1BSID0gcGFyYW1z
LmdwU2NyYXRjaChhbGxvY2F0b3JTY3JhdGNoKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgIGFsbG9jYXRvckdQUiA9IHBhcmFtc1sxXS5ncHIoKTsKICAgICAgICAg
ICAgICAgICAKQEAgLTE1MTA0LDcgKzE1MTExLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgLy8gYWxsIG9mIHRoZSBjb21waWxlciB0aWVycy4KICAgICAgICAgICAgICAgICBqaXQuZW1p
dEFsbG9jYXRlV2l0aE5vbk51bGxBbGxvY2F0b3IoCiAgICAgICAgICAgICAgICAgICAgIHBhcmFt
c1swXS5ncHIoKSwgYWN0dWFsQWxsb2NhdG9yLCBhbGxvY2F0b3JHUFIsIHBhcmFtcy5ncFNjcmF0
Y2goMCksCi0gICAgICAgICAgICAgICAgICAgIGp1bXBUb1Nsb3dQYXRoKTsKKyAgICAgICAgICAg
ICAgICAgICAganVtcFRvU2xvd1BhdGgKKyNpZiBFTkFCTEUoQklUTUFQX0ZSRUVMSVNUKQorICAg
ICAgICAgICAgICAgICAgICAsIHBhcmFtcy5ncFNjcmF0Y2goMSksIHBhcmFtcy5ncFNjcmF0Y2go
MikKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBqdW1wVG9TdWNjZXNzOwogICAgICAgICAg
ICAgICAgIGlmICghcGFyYW1zLmZhbGxzVGhyb3VnaFRvU3VjY2Vzc29yKDApKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmNwcAkocmV2aXNpb24gMjYzMTgxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzksMTMgKzM5LDQ4IEBAIEZyZWVMaXN0Ojp+RnJlZUxpc3QoKQogCiB2b2lkIEZyZWVMaXN0
OjpjbGVhcigpCiB7CisjaWYgRU5BQkxFKEJJVE1BUF9GUkVFTElTVCkKKyAgICBtX2N1cnJlbnRS
b3dCaXRtYXAgPSAwOworICAgIG1fY3VycmVudFJvd0luZGV4ID0gMDsKKyNlbHNlCiAgICAgbV9z
Y3JhbWJsZWRIZWFkID0gMDsKICAgICBtX3NlY3JldCA9IDA7CisjZW5kaWYKICAgICBtX3BheWxv
YWRFbmQgPSBudWxscHRyOwogICAgIG1fcmVtYWluaW5nID0gMDsKICAgICBtX29yaWdpbmFsU2l6
ZSA9IDA7CiB9CiAKKyNpZiBFTkFCTEUoQklUTUFQX0ZSRUVMSVNUKQorCit2b2lkIEZyZWVMaXN0
Ojppbml0aWFsaXplQXRvbXNCaXRtYXAoTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2ssIEF0b21z
Qml0bWFwJiBmcmVlQXRvbXMsIHVuc2lnbmVkIGJ5dGVzKQoreworI2lmIEFTU0VSVF9FTkFCTEVE
CisgICAgbV9tYXJrZWRCbG9jayA9IGJsb2NrOworI2VuZGlmCisgICAgQVNTRVJUX1VOVVNFRChm
cmVlQXRvbXMsICZmcmVlQXRvbXMgPT0gJm1fYml0bWFwKTsKKyAgICAvLyBtX2JpdG1hcCBoYXMg
YWxyZWFkeSBiZWVuIGZpbGxlZCBpbiBieSBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXpl
ZFN3ZWVwKCkuCisKKyAgICBtX2N1cnJlbnRSb3dCaXRtYXAgPSAwOworICAgIHNpemVfdCByb3dJ
bmRleCA9IEF0b21zQml0bWFwOjpudW1iZXJPZldvcmRzOworICAgIHdoaWxlIChyb3dJbmRleC0t
KSB7CisgICAgICAgIGF1dG8gcm93Qml0bWFwID0gbV9iaXRtYXAud29yZEF0KHJvd0luZGV4KTsK
KyAgICAgICAgaWYgKHJvd0JpdG1hcCkgeworICAgICAgICAgICAgbV9jdXJyZW50Um93Qml0bWFw
ID0gcm93Qml0bWFwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAg
QVNTRVJUKG1fY3VycmVudFJvd0JpdG1hcCB8fCBtX2JpdG1hcC5pc0VtcHR5KCkpOworICAgIG1f
Y3VycmVudFJvd0luZGV4ID0gbV9jdXJyZW50Um93Qml0bWFwID8gcm93SW5kZXggOiAwOworCisg
ICAgc2l6ZV90IGZpcnN0QXRvbUluUm93ID0gbV9jdXJyZW50Um93SW5kZXggKiBhdG9tc1BlclJv
dzsKKyAgICBtX2N1cnJlbnRNYXJrZWRCbG9ja1Jvd0FkZHJlc3MgPSBiaXR3aXNlX2Nhc3Q8QXRv
bSo+KGJsb2NrLT5hdG9tQXQoZmlyc3RBdG9tSW5Sb3cpKTsKKyAgICBtX29yaWdpbmFsU2l6ZSA9
IGJ5dGVzOworfQorCisjZWxzZQorLy8gTGlua2VkIExpc3QgaW1wbGVtZW50YXRpb24uCisKIHZv
aWQgRnJlZUxpc3Q6OmluaXRpYWxpemVMaXN0KEZyZWVDZWxsKiBoZWFkLCB1aW50cHRyX3Qgc2Vj
cmV0LCB1bnNpZ25lZCBieXRlcykKIHsKICAgICAvLyBJdCdzICpzbGlnaHRseSogbW9yZSBvcHRp
bWFsIHRvIHVzZSBhIHNjcmFtYmxlZCBoZWFkLiBJdCBzYXZlcyBhIHJlZ2lzdGVyIG9uIHRoZSBm
YXN0IHBhdGguCkBAIC01NiwxNiArOTEsMjMgQEAgdm9pZCBGcmVlTGlzdDo6aW5pdGlhbGl6ZUxp
c3QoRnJlZUNlbGwqIAogICAgIG1fb3JpZ2luYWxTaXplID0gYnl0ZXM7CiB9CiAKKyNlbmRpZiAv
LyBFTkFCTEUoQklUTUFQX0ZSRUVMSVNUKQorCiB2b2lkIEZyZWVMaXN0Ojppbml0aWFsaXplQnVt
cChjaGFyKiBwYXlsb2FkRW5kLCB1bnNpZ25lZCByZW1haW5pbmcpCiB7CisjaWYgRU5BQkxFKEJJ
VE1BUF9GUkVFTElTVCkKKyAgICBtX2N1cnJlbnRSb3dCaXRtYXAgPSAwOworICAgIG1fY3VycmVu
dFJvd0luZGV4ID0gMDsKKyNlbHNlCiAgICAgbV9zY3JhbWJsZWRIZWFkID0gMDsKICAgICBtX3Nl
Y3JldCA9IDA7CisjZW5kaWYKICAgICBtX3BheWxvYWRFbmQgPSBwYXlsb2FkRW5kOwogICAgIG1f
cmVtYWluaW5nID0gcmVtYWluaW5nOwogICAgIG1fb3JpZ2luYWxTaXplID0gcmVtYWluaW5nOwog
fQogCi1ib29sIEZyZWVMaXN0Ojpjb250YWlucyhIZWFwQ2VsbCogdGFyZ2V0KSBjb25zdAorYm9v
bCBGcmVlTGlzdDo6Y29udGFpbnMoSGVhcENlbGwqIHRhcmdldCwgTWFya2VkQmxvY2s6OkhhbmRs
ZSogY3VycmVudEJsb2NrKSBjb25zdAogewogICAgIGlmIChtX3JlbWFpbmluZykgewogICAgICAg
ICBjb25zdCB2b2lkKiBzdGFydCA9IChtX3BheWxvYWRFbmQgLSBtX3JlbWFpbmluZyk7CkBAIC03
MywxOSArMTE1LDUxIEBAIGJvb2wgRnJlZUxpc3Q6OmNvbnRhaW5zKEhlYXBDZWxsKiB0YXJnZXQK
ICAgICAgICAgcmV0dXJuIChzdGFydCA8PSB0YXJnZXQpICYmICh0YXJnZXQgPCBlbmQpOwogICAg
IH0KIAorI2lmIEVOQUJMRShCSVRNQVBfRlJFRUxJU1QpCisgICAgaWYgKGJpdG1hcElzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gY3VycmVudEJsb2NrIG1heSBiZSBu
dWxsIGlmIHRoZSBhbGxvY2F0b3IgaGFzIGJlZW4gcmVzZXQgKGFuZCB0aGVyZWZvcmUsCisgICAg
Ly8gdGhlIEZyZWVMaXN0IGNsZWFyZWQuIEhlbmNlLCB3ZSBzaG91bGQgb25seSBjaGVjayB0aGlz
IGFzc2VydGlvbiBhZnRlcgorICAgIC8vIHdlIGNoZWNrIGlmIHRoZSBGcmVlTGlzdCBiaXRtYXAg
aXMgZW1wdHkgYWJvdmUuCisgICAgQVNTRVJUKG1fbWFya2VkQmxvY2sgPT0gY3VycmVudEJsb2Nr
KTsKKyAgICBpZiAoIWN1cnJlbnRCbG9jay0+Y29udGFpbnModGFyZ2V0KSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgdW5zaWduZWQgYXRvbU51bWJlciA9IGN1cnJlbnRCbG9jay0+Ymxv
Y2soKS5hdG9tTnVtYmVyKHRhcmdldCk7CisgICAgdW5zaWduZWQgcm93SW5kZXggPSBhdG9tTnVt
YmVyIC8gYXRvbXNQZXJSb3c7CisgICAgaWYgKHJvd0luZGV4ID4gbV9jdXJyZW50Um93SW5kZXgp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAocm93SW5kZXggPT0gbV9jdXJyZW50Um93
SW5kZXgpIHsKKyAgICAgICAgY29uc3RleHByIEF0b21zQml0bWFwOjpXb3JkIG9uZSA9IDE7Cisg
ICAgICAgIHVuc2lnbmVkIGZpcnN0QXRvbUluUm93ID0gcm93SW5kZXggKiBhdG9tc1BlclJvdzsK
KyAgICAgICAgdW5zaWduZWQgYXRvbUluZGV4SW5Sb3cgPSBhdG9tTnVtYmVyIC0gZmlyc3RBdG9t
SW5Sb3c7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRSb3dCaXRtYXAgJiAob25lIDw8IGF0b21J
bmRleEluUm93KTsKKyAgICB9CisgICAgcmV0dXJuIG1fYml0bWFwLmdldChhdG9tTnVtYmVyKTsK
KworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY3VycmVudEJsb2NrKTsKICAgICBGcmVlQ2VsbCog
Y2FuZGlkYXRlID0gaGVhZCgpOwogICAgIHdoaWxlIChjYW5kaWRhdGUpIHsKICAgICAgICAgaWYg
KGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KGNhbmRpZGF0ZSkgPT0gdGFyZ2V0KQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZS0+bmV4dChtX3Nl
Y3JldCk7CiAgICAgfQotCiAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiB9CiAKIHZvaWQgRnJl
ZUxpc3Q6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKKyNpZiBFTkFCTEUoQklUTUFQ
X0ZSRUVMSVNUKQorICAgIGlmIChtX3JlbWFpbmluZykKKyAgICAgICAgb3V0LnByaW50KCJ7cGF5
bG9hZEVuZCA9ICIsIFJhd1BvaW50ZXIobV9wYXlsb2FkRW5kKSwgIiwgcmVtYWluaW5nID0gIiwg
bV9yZW1haW5pbmcsICIsIG9yaWdpbmFsU2l6ZSA9ICIsIG1fb3JpZ2luYWxTaXplLCAifSIpOwor
ICAgIGVsc2UKKyAgICAgICAgb3V0LnByaW50KCJ7Y3VycmVudFJvd0JpdG1hcCA9ICIsIG1fY3Vy
cmVudFJvd0JpdG1hcCwgIiwgY3VycmVudFJvd0luZGV4ID0gIiwgbV9jdXJyZW50Um93SW5kZXgs
ICIsIG9yaWdpbmFsU2l6ZSA9ICIsIG1fb3JpZ2luYWxTaXplLCAifSIpOworI2Vsc2UKICAgICBv
dXQucHJpbnQoIntoZWFkID0gIiwgUmF3UG9pbnRlcihoZWFkKCkpLCAiLCBzZWNyZXQgPSAiLCBt
X3NlY3JldCwgIiwgcGF5bG9hZEVuZCA9ICIsIFJhd1BvaW50ZXIobV9wYXlsb2FkRW5kKSwgIiwg
cmVtYWluaW5nID0gIiwgbV9yZW1haW5pbmcsICIsIG9yaWdpbmFsU2l6ZSA9ICIsIG1fb3JpZ2lu
YWxTaXplLCAifSIpOworI2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5oCShyZXZpc2lvbiAyNjMxODEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUs
MTMgKzI1LDIyIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIK
ICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KKyNpbmNsdWRlIDx3dGYvU3RkSW50RXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBj
bGFzcyBIZWFwQ2VsbDsKIAorI2lmIENQVShYODZfNjQpCisjZGVmaW5lIEVOQUJMRV9CSVRNQVBf
RlJFRUxJU1QgMQorI2Vsc2UKKyNkZWZpbmUgRU5BQkxFX0JJVE1BUF9GUkVFTElTVCAwCisjZW5k
aWYKKworI2lmICFFTkFCTEUoQklUTUFQX0ZSRUVMSVNUKQogc3RydWN0IEZyZWVDZWxsIHsKICAg
ICBzdGF0aWMgdWludHB0cl90IHNjcmFtYmxlKEZyZWVDZWxsKiBjZWxsLCB1aW50cHRyX3Qgc2Vj
cmV0KQogICAgIHsKQEAgLTU4LDYgKzY3LDcgQEAgc3RydWN0IEZyZWVDZWxsIHsKICAgICB1aW50
NjRfdCBwcmVzZXJ2ZWRCaXRzRm9yQ3Jhc2hBbmFseXNpczsKICAgICB1aW50cHRyX3Qgc2NyYW1i
bGVkTmV4dDsKIH07CisjZW5kaWYKIAogY2xhc3MgRnJlZUxpc3QgewogcHVibGljOgpAQCAtNjYs
MjcgKzc2LDYxIEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGNsZWFyKCk7CiAgICAgCi0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXplTGlzdChGcmVlQ2VsbCogaGVhZCwgdWlu
dHB0cl90IHNlY3JldCwgdW5zaWduZWQgYnl0ZXMpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgaW5pdGlhbGl6ZUJ1bXAoY2hhciogcGF5bG9hZEVuZCwgdW5zaWduZWQgcmVtYWluaW5nKTsK
ICAgICAKLSAgICBib29sIGFsbG9jYXRpb25XaWxsRmFpbCgpIGNvbnN0IHsgcmV0dXJuICFoZWFk
KCkgJiYgIW1fcmVtYWluaW5nOyB9CiAgICAgYm9vbCBhbGxvY2F0aW9uV2lsbFN1Y2NlZWQoKSBj
b25zdCB7IHJldHVybiAhYWxsb2NhdGlvbldpbGxGYWlsKCk7IH0KICAgICAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jPgogICAgIEhlYXBDZWxsKiBhbGxvY2F0ZShjb25zdCBGdW5jJiBzbG93
UGF0aCk7CiAgICAgCi0gICAgYm9vbCBjb250YWlucyhIZWFwQ2VsbCopIGNvbnN0OworICAgIGJv
b2wgY29udGFpbnMoSGVhcENlbGwqLCBNYXJrZWRCbG9jazo6SGFuZGxlKiBjdXJyZW50QmxvY2sp
IGNvbnN0OwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JF
YWNoKGNvbnN0IEZ1bmMmKSBjb25zdDsKICAgICAKICAgICB1bnNpZ25lZCBvcmlnaW5hbFNpemUo
KSBjb25zdCB7IHJldHVybiBtX29yaWdpbmFsU2l6ZTsgfQogCisjaWYgRU5BQkxFKEJJVE1BUF9G
UkVFTElTVCkKKyAgICB1c2luZyBBdG9tID0gTWFya2VkQmxvY2s6OkF0b207CisgICAgdXNpbmcg
QXRvbXNCaXRtYXAgPSBNYXJrZWRCbG9jazo6QXRvbXNCaXRtYXA7CisKKyAgICBzdGF0aWMgY29u
c3RleHByIHNpemVfdCBhdG9tc1BlclJvdyA9IEF0b21zQml0bWFwOjpiaXRzSW5Xb3JkOworICAg
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGF0b21zUm93Qnl0ZXMgPSBhdG9tc1BlclJvdyAqIHNp
emVvZihBdG9tKTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGF0b21TaXplU2hpZnQg
PSBXVEY6OmxvZzJDb25zdGV4cHIoc2l6ZW9mKEF0b20pKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChz
dGF0aWNfY2FzdDxzaXplX3Q+KDEpIDw8IGF0b21TaXplU2hpZnQpID09IHNpemVvZihBdG9tKSk7
CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVBdG9tc0JpdG1hcChNYXJr
ZWRCbG9jazo6SGFuZGxlKiwgQXRvbXNCaXRtYXAmIGZyZWVBdG9tcywgdW5zaWduZWQgYnl0ZXMp
OworCisgICAgYm9vbCBiaXRtYXBJc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIFJl
bWVtYmVyLCB3ZSBkb24ndCBhY3R1YWxseSBjbGVhciB0aGUgYml0cyBpbiBtX2JpdG1hcCBhcyB3
ZSBhbGxvY2F0ZQorICAgICAgICAvLyB0aGUgYXRvbXMuIEluc3RlYWQsIG1fY3VycmVudFJvd0Jp
dG1hcCBhbmQgbV9jdXJyZW50Um93SW5kZXggdGVsbHMgdXMKKyAgICAgICAgLy8gaWYgdGhlcmUg
YXRvbXMgc3RpbGwgYXZhaWxhYmxlIGZvciBhbGxvY2F0aW9uLiBTZWUgY29tbWVudCBibG9iIGJl
bG93CisgICAgICAgIC8vIGF0IHRoZSBkZWNsYXJhdGlvbiBvZiBtX2N1cnJlbnRSb3dJbmRleCBm
b3IgbW9yZSBkZXRhaWxzLgorICAgICAgICByZXR1cm4gIW1fY3VycmVudFJvd0JpdG1hcCAmJiAh
bV9jdXJyZW50Um93SW5kZXg7CisgICAgfQorICAgIGJvb2wgYWxsb2NhdGlvbldpbGxGYWlsKCkg
Y29uc3QgeyByZXR1cm4gYml0bWFwSXNFbXB0eSgpICYmICFtX3JlbWFpbmluZzsgfQorCisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkN1cnJlbnRSb3dCaXRtYXAoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoRnJlZUxpc3QsIG1fY3VycmVudFJvd0JpdG1hcCk7IH0KKworICAgIC8vIFdl
J3JlIGRlbGliZXJhdGVseSByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgMSB3b3JkIGJlZm9yZSBt
X2JpdG1hcCBzbyB0aGF0CisgICAgLy8gd2UgY2FuIHNjaGVkdWxlIGluc3RydWN0aW9ucyBiZXR0
ZXIgaS5lLiB0byBkbyBhIGxvYWQgYmVmb3JlIGRlY3JlbWVudGluZyB0aGUKKyAgICAvLyByb3cg
aW5kZXguCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkJpdG1hcFJvd3MoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3QsIG1fYml0bWFwKSAtIHNpemVvZihBdG9tc0JpdG1h
cDo6V29yZCk7IH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDdXJyZW50Um93SW5k
ZXgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3QsIG1fY3VycmVudFJvd0luZGV4
KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDdXJyZW50TWFya2VkQmxvY2tSb3dB
ZGRyZXNzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBtX2N1cnJlbnRNYXJr
ZWRCbG9ja1Jvd0FkZHJlc3MpOyB9CisjZWxzZQorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
aW5pdGlhbGl6ZUxpc3QoRnJlZUNlbGwqIGhlYWQsIHVpbnRwdHJfdCBzZWNyZXQsIHVuc2lnbmVk
IGJ5dGVzKTsKKworICAgIGJvb2wgYWxsb2NhdGlvbldpbGxGYWlsKCkgY29uc3QgeyByZXR1cm4g
IWhlYWQoKSAmJiAhbV9yZW1haW5pbmc7IH0KKwogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZTY3JhbWJsZWRIZWFkKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBtX3Nj
cmFtYmxlZEhlYWQpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNlY3JldCgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgbV9zZWNyZXQpOyB9CisjZW5kaWYKKwog
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQYXlsb2FkRW5kKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEZyZWVMaXN0LCBtX3BheWxvYWRFbmQpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZlJlbWFpbmluZygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwg
bV9yZW1haW5pbmcpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk9yaWdpbmFsU2l6
ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgbV9vcmlnaW5hbFNpemUpOyB9
CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNlbGxTaXplKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEZyZWVMaXN0LCBtX2NlbGxTaXplKTsgfQogICAgIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpAQCAtOTQsMTQgKzEzOCw3NCBA
QCBwdWJsaWM6CiAgICAgdW5zaWduZWQgY2VsbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2NlbGxT
aXplOyB9CiAgICAgCiBwcml2YXRlOgorCisjaWYgRU5BQkxFKEJJVE1BUF9GUkVFTElTVCkKKyAg
ICBBdG9tc0JpdG1hcCYgYXRvbXNCaXRtYXAoKSB7IHJldHVybiBtX2JpdG1hcDsgfQorICAgIEF0
b21zQml0bWFwOjpXb3JkKiBiaXRtYXBSb3dzKCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIFNl
ZSBjb21tZW50IGFib3V0IG9mZnNldE9mQml0bWFwUm93cygpLgorICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PEF0b21zQml0bWFwOjpXb3JkKj4oJm1fYml0bWFwKSAtIDE7CisgICAgfQorCisg
ICAgLy8gVGhpcyBhbGxvY2F0aW9uIGFsZ29yaXRobSB0aGlua3Mgb2YgdGhlIE1hcmtlZEJsb2Nr
IGFzIGNvbnNpc3Rpbmcgb2Ygcm93cworICAgIC8vIG9mIGF0b21zLCB3aGVyZSB0aGUgbnVtYmVy
IG9mIGF0b21zIGluIGEgcm93IGVxdWFscyB0aGUgbnVtYmVyIG9mIGJpdHMgaW4KKyAgICAvLyBh
IEF0b21zQml0bWFwOjpXb3JkLiBPbiA2NC1iaXQgQ1BVcywgdGhpcyB3b3VsZCBiZSA2NC4KKyAg
ICAvLworICAgIC8vIFdlIHdpbGwgc3RhcnQgYWxsb2NhdGluZyBmcm9tIHRoZSBsYXN0IChoaWdo
ZXN0IG51bWJlcmVkKSByb3cgZG93biB0byB0aGUKKyAgICAvLyBmaXJzdCAocm93IDApLiBBcyB3
ZSBhbGxvY2F0ZSwgd2Ugd2lsbCBvbmx5IHVwZGF0ZSBtX2N1cnJlbnRSb3dJbmRleCBhbmQKKyAg
ICAvLyBtX2N1cnJlbnRSb3dCaXRtYXAuIG1fYml0bWFwIHdpbGwgbm90IGJlIHVwZGF0ZWQuIFRo
aXMgaXMgc28gaW4gb2RlciB0bworICAgIC8vIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGluc3RydWN0
aW9ucyBleGVjdXRlZCBkdXJpbmcgYW4gYWxsb2NhdGlvbi4KKyAgICAvLworICAgIC8vIFdoZW4g
bV9jdXJyZW50Um93SW5kZXggcG9pbnRzIHRvIE4sIHRoZSBBdG9tc0JpdG1hcDo6V29yZCBmb3Ig
cm93IE4gaW4KKyAgICAvLyBtX2JpdG1hcCB3aWxsIGhhdmUgYmVlbiBjb3BpZWQgaW50byBtX2N1
cnJlbnRSb3dCaXRtYXAuIFRoaXMgaXMgdGhlIHJvdworICAgIC8vIHRoYXQgd2Ugd2lsbCBiZSBh
bGxvY2F0aW5nIGZyb20gdW50aWwgdGhlIHJvdyBpcyBleGhhdXN0ZWQuCisgICAgLy8KKyAgICAv
LyBUaGlzIGlzIGhvdyB3ZSBrbm93IHdoZXRoZXIgYW4gYXRvbSBpcyBhdmFpbGFibGUgZm9yIGFs
bG9jYXRpb24gb3Igbm90OgorICAgIC8vIDEuIEF0b21zIGluIGFueSByb3dzIGFib3ZlIG1fY3Vy
cmVudFJvd0luZGV4IGFyZSBndWFyYW50ZWVkIHRvIGJlCisgICAgLy8gICAgYWxsb2NhdGVkIGFs
cmVhZHkgKGJlY2F1c2Ugd2UgYWxsb2NhdGUgZG93bndhcmRzKSwgYW5kIGhlbmNlLCBhcmUgbm90
CisgICAgLy8gICAgYXZhaWxhYmxlLgorICAgIC8vIDIuIEZvciByb3cgbV9jdXJyZW50Um93SW5k
ZXgsIG1fY3VycmVudFJvd0JpdG1hcCBpcyB0aGUgc291cmNlIG9mIHRydXRoCisgICAgLy8gICAg
b24gd2hpY2ggYXRvbXMgaW4gdGhlIHJvdyBhcmUgYXZhaWxhYmxlIGZvciBhbGxvY2F0aW9uLgor
ICAgIC8vIDMuIEZvciByb3dzIGJlbG93IG1fY3VycmVudFJvd0luZGV4LCBtX2JpdG1hcCBpcyB0
aGUgc291cmNlIG9mIHRydXRoIG9uCisgICAgLy8gICAgd2hpY2ggYXRvbXMgYXJlIGF2YWlsYWJs
ZSBmb3IgYWxsb2NhdGlvbi4KKyAgICAvLworICAgIC8vIFdoZW4gbV9jdXJyZW50Um93SW5kZXgg
cmVhY2hlcyAwLCB0aGUgaW5mbyBpbiBtX2JpdG1hcCBpcyBjb21wbGV0ZWx5CisgICAgLy8gb2Jz
b2xldGVkLCBhbmQgbV9jdXJyZW50Um93Qml0bWFwIGhvbGRzIHRoZSBhdmFpbGFiaWxpdHkgaW5m
byBmb3Igcm93IDAuCisgICAgLy8gV2hlbiBib3RoIG1fY3VycmVudFJvd0luZGV4IGFuZCBtX2N1
cnJlbnRSb3dCaXRtYXAgYXJlIDAsIHRoZW4gd2UgaGF2ZQorICAgIC8vIGNvbXBsZXRlbHkgZXho
YXVzdGVkIHRoZSBibG9jayBhbmQgbm8gbW9yZSBhdG9tcyBhcmUgYXZhaWxhYmxlIGZvcgorICAg
IC8vIGFsbG9jYXRpb24uCisKKyAgICBBdG9tc0JpdG1hcDo6V29yZCBtX2N1cnJlbnRSb3dCaXRt
YXAgeyAwIH07CisgICAgdW5zaWduZWQgbV9jdXJyZW50Um93SW5kZXggeyAwIH07CisgICAgdW5z
aWduZWQgbV9vcmlnaW5hbFNpemUgeyAwIH07CisKKyNlbHNlCiAgICAgRnJlZUNlbGwqIGhlYWQo
KSBjb25zdCB7IHJldHVybiBGcmVlQ2VsbDo6ZGVzY3JhbWJsZShtX3NjcmFtYmxlZEhlYWQsIG1f
c2VjcmV0KTsgfQotICAgIAorCiAgICAgdWludHB0cl90IG1fc2NyYW1ibGVkSGVhZCB7IDAgfTsK
ICAgICB1aW50cHRyX3QgbV9zZWNyZXQgeyAwIH07Ci0gICAgY2hhciogbV9wYXlsb2FkRW5kIHsg
bnVsbHB0ciB9OworI2VuZGlmCisKKyAgICB1bmlvbiB7CisgICAgICAgIGNoYXIqIG1fcGF5bG9h
ZEVuZCB7IG51bGxwdHIgfTsKKyNpZiBFTkFCTEUoQklUTUFQX0ZSRUVMSVNUKQorICAgICAgICBB
dG9tKiBtX2N1cnJlbnRNYXJrZWRCbG9ja1Jvd0FkZHJlc3M7CisjZW5kaWYKKyAgICB9OwogICAg
IHVuc2lnbmVkIG1fcmVtYWluaW5nIHsgMCB9OwotICAgIHVuc2lnbmVkIG1fb3JpZ2luYWxTaXpl
IHsgMCB9OwogICAgIHVuc2lnbmVkIG1fY2VsbFNpemUgeyAwIH07CisKKyNpZiBFTkFCTEUoQklU
TUFQX0ZSRUVMSVNUKQorICAgIEF0b21zQml0bWFwIG1fYml0bWFwOworI2Vsc2UKKyAgICB1bnNp
Z25lZCBtX29yaWdpbmFsU2l6ZSB7IDAgfTsKKyNlbmRpZgorCisjaWYgQVNTRVJUX0VOQUJMRUQK
KyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBtX21hcmtlZEJsb2NrIHsgbnVsbHB0ciB9OworI2Vu
ZGlmCisKKyAgICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0SW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0SW5saW5l
cy5oCShyZXZpc2lvbiAyNjMxODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVl
TGlzdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw3ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgIkZyZWVMaXN0LmgiCi0jaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKKyNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDAsMTMgKzQw
LDQ2IEBAIEFMV0FZU19JTkxJTkUgSGVhcENlbGwqIEZyZWVMaXN0OjphbGxvY2EKICAgICAgICAg
bV9yZW1haW5pbmcgPSByZW1haW5pbmc7CiAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SGVh
cENlbGwqPihtX3BheWxvYWRFbmQgLSByZW1haW5pbmcgLSBjZWxsU2l6ZSk7CiAgICAgfQotICAg
IAorCisjaWYgRU5BQkxFKEJJVE1BUF9GUkVFTElTVCkKKyAgICBBdG9tc0JpdG1hcDo6V29yZCBy
b3dCaXRtYXAgPSBtX2N1cnJlbnRSb3dCaXRtYXA7CisgICAgZG8geworICAgICAgICBpZiAocm93
Qml0bWFwKSB7CisgICAgICAgICAgICBjb25zdGV4cHIgQXRvbXNCaXRtYXA6OldvcmQgb25lID0g
MTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGF0b21JbmRleEluUm93ID0gY3R6KHJvd0JpdG1hcCk7
CisgICAgICAgICAgICBhdXRvKiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4oJm1fY3Vy
cmVudE1hcmtlZEJsb2NrUm93QWRkcmVzc1thdG9tSW5kZXhJblJvd10pOworICAgICAgICAgICAg
cm93Qml0bWFwICY9IH4ob25lIDw8IGF0b21JbmRleEluUm93KTsKKyAgICAgICAgICAgIG1fY3Vy
cmVudFJvd0JpdG1hcCA9IHJvd0JpdG1hcDsKKyAgICAgICAgICAgIHJldHVybiBjZWxsOworICAg
ICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgcm93SW5kZXggPSBtX2N1cnJlbnRSb3dJbmRleDsK
KyAgICAgICAgYXV0byogcm93QWRkcmVzcyA9IG1fY3VycmVudE1hcmtlZEJsb2NrUm93QWRkcmVz
czsKKyAgICAgICAgd2hpbGUgKHJvd0luZGV4KSB7CisgICAgICAgICAgICAvLyBXZSBsb2FkIGJl
Zm9yZSBkZWNyZW1lbnRpbmcgcm93SW5kZXggYmVjYXVzZSBiaXRtYXBSb3dzKCkgcG9pbnRzCisg
ICAgICAgICAgICAvLyB0byAxIHdvcmQgYmVmb3JlIG1fYml0bWFwLiBTZWUgY29tbWVudHMgYWJv
dXQgb2Zmc2V0T2ZCaXRtYXBSb3dzKCkKKyAgICAgICAgICAgIC8vIGZvciB3aHkgd2UgZG8gdGhp
cy4KKyAgICAgICAgICAgIHJvd0JpdG1hcCA9IGJpdG1hcFJvd3MoKVtyb3dJbmRleC0tXTsKKyAg
ICAgICAgICAgIHJvd0FkZHJlc3MgLT0gYXRvbXNQZXJSb3c7CisgICAgICAgICAgICBpZiAocm93
Qml0bWFwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG1fY3Vy
cmVudE1hcmtlZEJsb2NrUm93QWRkcmVzcyA9IHJvd0FkZHJlc3M7CisgICAgICAgIG1fY3VycmVu
dFJvd0luZGV4ID0gcm93SW5kZXg7CisgICAgfSB3aGlsZSAocm93Qml0bWFwKTsKKworICAgIG1f
Y3VycmVudFJvd0JpdG1hcCA9IHJvd0JpdG1hcDsKKyAgICBBU1NFUlQoYml0bWFwSXNFbXB0eSgp
KTsKKyAgICByZXR1cm4gc2xvd1BhdGgoKTsKKworI2Vsc2UgLy8gIUVOQUJMRShCSVRNQVBfRlJF
RUxJU1QpCiAgICAgRnJlZUNlbGwqIHJlc3VsdCA9IGhlYWQoKTsKICAgICBpZiAoVU5MSUtFTFko
IXJlc3VsdCkpCiAgICAgICAgIHJldHVybiBzbG93UGF0aCgpOwogICAgIAogICAgIG1fc2NyYW1i
bGVkSGVhZCA9IHJlc3VsdC0+c2NyYW1ibGVkTmV4dDsKICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PEhlYXBDZWxsKj4ocmVzdWx0KTsKKyNlbmRpZiAvLyAhRU5BQkxFKEJJVE1BUF9GUkVFTElTVCkK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KQEAgLTU2LDYgKzg5LDMzIEBAIHZvaWQgRnJl
ZUxpc3Q6OmZvckVhY2goY29uc3QgRnVuYyYgZnVuYykKICAgICAgICAgZm9yICh1bnNpZ25lZCBy
ZW1haW5pbmcgPSBtX3JlbWFpbmluZzsgcmVtYWluaW5nOyByZW1haW5pbmcgLT0gbV9jZWxsU2l6
ZSkKICAgICAgICAgICAgIGZ1bmMoYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4obV9wYXlsb2FkRW5k
IC0gcmVtYWluaW5nKSk7CiAgICAgfSBlbHNlIHsKKyNpZiBFTkFCTEUoQklUTUFQX0ZSRUVMSVNU
KQorICAgICAgICBpZiAoYml0bWFwSXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIEF0b21zQml0bWFwOjpXb3JkIHJvd0JpdG1hcCA9IG1fY3VycmVudFJvd0JpdG1hcDsK
KyAgICAgICAgdW5zaWduZWQgcm93SW5kZXggPSBtX2N1cnJlbnRSb3dJbmRleDsKKyAgICAgICAg
QXRvbSogY3VycmVudE1hcmtlZEJsb2NrUm93QWRkcmVzcyA9IG1fY3VycmVudE1hcmtlZEJsb2Nr
Um93QWRkcmVzczsKKyAgICAgICAgZG8geworICAgICAgICAgICAgd2hpbGUgKHJvd0JpdG1hcCkg
eworICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBBdG9tc0JpdG1hcDo6V29yZCBvbmUgPSAxOwor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGF0b21JbmRleEluUm93ID0gY3R6KHJvd0JpdG1hcCk7
CisgICAgICAgICAgICAgICAgYXV0byogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KCZj
dXJyZW50TWFya2VkQmxvY2tSb3dBZGRyZXNzW2F0b21JbmRleEluUm93XSk7CisgICAgICAgICAg
ICAgICAgcm93Qml0bWFwICY9IH4ob25lIDw8IGF0b21JbmRleEluUm93KTsKKyAgICAgICAgICAg
ICAgICBmdW5jKGNlbGwpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3aGlsZSAocm93
SW5kZXgpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBsb2FkIGJlZm9yZSBkZWNyZW1lbnRpbmcg
cm93SW5kZXggYmVjYXVzZSBiaXRtYXBSb3dzKCkgcG9pbnRzCisgICAgICAgICAgICAgICAgLy8g
dG8gMSB3b3JkIGJlZm9yZSBtX2JpdG1hcC4gU2VlIGNvbW1lbnRzIGFib3V0IG9mZnNldE9mQml0
bWFwUm93cygpCisgICAgICAgICAgICAgICAgLy8gZm9yIHdoeSB3ZSBkbyB0aGlzLgorICAgICAg
ICAgICAgICAgIHJvd0JpdG1hcCA9IGJpdG1hcFJvd3MoKVtyb3dJbmRleC0tXTsKKyAgICAgICAg
ICAgICAgICBjdXJyZW50TWFya2VkQmxvY2tSb3dBZGRyZXNzIC09IGF0b21zUGVyUm93OworICAg
ICAgICAgICAgICAgIGlmIChyb3dCaXRtYXApCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChyb3dCaXRtYXApOworI2Vsc2UKICAgICAg
ICAgZm9yIChGcmVlQ2VsbCogY2VsbCA9IGhlYWQoKTsgY2VsbDspIHsKICAgICAgICAgICAgIC8v
IFdlIGNhbiB1c2UgdGhpcyB0byBvdmVyd3JpdGUgZnJlZSBvYmplY3RzIGJlZm9yZSBkZXN0cm95
aW5nIHRoZSBmcmVlIGxpc3QuIFNvLCB3ZSBuZWVkCiAgICAgICAgICAgICAvLyB0byBnZXQgbmV4
dCBiZWZvcmUgcHJvY2VlZGluZyBmdXJ0aGVyLgpAQCAtNjMsOCArMTIzLDggQEAgdm9pZCBGcmVl
TGlzdDo6Zm9yRWFjaChjb25zdCBGdW5jJiBmdW5jKQogICAgICAgICAgICAgZnVuYyhiaXR3aXNl
X2Nhc3Q8SGVhcENlbGwqPihjZWxsKSk7CiAgICAgICAgICAgICBjZWxsID0gbmV4dDsKICAgICAg
ICAgfQorI2VuZGlmCiAgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAkocmV2aXNpb24g
MjYzMTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjcyLDcgKzI3Miw3IEBAIGJvb2wgTG9jYWxBbGxvY2F0b3I6
OmlzRnJlZUxpc3RlZENlbGwoY28KICAgICAvLyBpZiB3ZSBrbm93IHRoYXQgdGhlIGJsb2NrIG93
bmluZyB0aGUgb2JqZWN0IGlzIGZyZWUtbGlzdGVkLCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3Ig
YW55CiAgICAgLy8gb2JqZWN0cyB0byBiZSBpbiB0aGUgZGVhZC1idXQtbm90LWRlc3RydWN0ZWQg
c3RhdGUuCiAgICAgLy8gRklYTUU6IEdldCByaWQgb2YgdGhpcyBhYm9taW5hdGlvbi4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTY1NQotICAgIHJldHVybiBtX2Zy
ZWVMaXN0LmNvbnRhaW5zKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHRhcmdldCkpOworICAgIHJl
dHVybiBtX2ZyZWVMaXN0LmNvbnRhaW5zKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHRhcmdldCks
IG1fY3VycmVudEJsb2NrKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDI2MzE4MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRl
biAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChw
bWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTg0LDYgKzg0LDgg
QEAgcHVibGljOgogICAgIHN0YXRpY19hc3NlcnQoIShNYXJrZWRCbG9jazo6YXRvbVNpemUgJiAo
TWFya2VkQmxvY2s6OmF0b21TaXplIC0gMSkpLCAiTWFya2VkQmxvY2s6OmF0b21TaXplIG11c3Qg
YmUgYSBwb3dlciBvZiB0d28uIik7CiAgICAgc3RhdGljX2Fzc2VydCghKE1hcmtlZEJsb2NrOjpi
bG9ja1NpemUgJiAoTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSAtIDEpKSwgIk1hcmtlZEJsb2NrOjpi
bG9ja1NpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4iKTsKICAgICAKKyAgICB1c2luZyBBdG9t
c0JpdG1hcCA9IEJpdG1hcDxhdG9tc1BlckJsb2NrPjsKKwogICAgIHN0cnVjdCBWb2lkRnVuY3Rv
ciB7CiAgICAgICAgIHR5cGVkZWYgdm9pZCBSZXR1cm5UeXBlOwogICAgICAgICB2b2lkIHJldHVy
blZhbHVlKCkgeyB9CkBAIC0yMDMsNiArMjA1LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAg
ICAgdm9pZCogc3RhcnQoKSBjb25zdCB7IHJldHVybiAmbV9ibG9jay0+YXRvbXMoKVswXTsgfQog
ICAgICAgICB2b2lkKiBlbmQoKSBjb25zdCB7IHJldHVybiAmbV9ibG9jay0+YXRvbXMoKVttX2Vu
ZEF0b21dOyB9CisgICAgICAgIHZvaWQqIGF0b21BdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4g
Jm1fYmxvY2stPmF0b21zKClbaV07IH0KICAgICAgICAgYm9vbCBjb250YWlucyh2b2lkKiBwKSBj
b25zdCB7IHJldHVybiBzdGFydCgpIDw9IHAgJiYgcCA8IGVuZCgpOyB9CiAKICAgICAgICAgdm9p
ZCBkdW1wU3RhdGUoUHJpbnRTdHJlYW0mKTsKQEAgLTI5NCw4ICsyOTcsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIEhlYXBWZXJzaW9uIG1fbWFya2luZ1ZlcnNpb247CiAgICAgICAgIEhlYXBWZXJzaW9u
IG1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uOwogCi0gICAgICAgIEJpdG1hcDxhdG9tc1BlckJsb2Nr
PiBtX21hcmtzOwotICAgICAgICBCaXRtYXA8YXRvbXNQZXJCbG9jaz4gbV9uZXdseUFsbG9jYXRl
ZDsKKyAgICAgICAgQXRvbXNCaXRtYXAgbV9tYXJrczsKKyAgICAgICAgQXRvbXNCaXRtYXAgbV9u
ZXdseUFsbG9jYXRlZDsKICAgICB9OwogICAgIAogcHJpdmF0ZTogICAgCkBAIC0zMzYsNyArMzM5
LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNOZXdseUFsbG9jYXRlZChjb25zdCB2b2lkKik7CiAg
ICAgdm9pZCBzZXROZXdseUFsbG9jYXRlZChjb25zdCB2b2lkKik7CiAgICAgdm9pZCBjbGVhck5l
d2x5QWxsb2NhdGVkKGNvbnN0IHZvaWQqKTsKLSAgICBjb25zdCBCaXRtYXA8YXRvbXNQZXJCbG9j
az4mIG5ld2x5QWxsb2NhdGVkKCkgY29uc3Q7CisgICAgY29uc3QgQXRvbXNCaXRtYXAmIG5ld2x5
QWxsb2NhdGVkKCkgY29uc3Q7CiAgICAgCiAgICAgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRW
ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gZm9vdGVyKCkubV9uZXdseUFsbG9jYXRlZFZlcnNpb247
IH0KICAgICAKQEAgLTM3NCw3ICszNzcsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc01hcmtlZFJh
dyhjb25zdCB2b2lkKiBwKTsKICAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbigpIGNvbnN0
IHsgcmV0dXJuIGZvb3RlcigpLm1fbWFya2luZ1ZlcnNpb247IH0KICAgICAKLSAgICBjb25zdCBC
aXRtYXA8YXRvbXNQZXJCbG9jaz4mIG1hcmtzKCkgY29uc3Q7CisgICAgY29uc3QgQXRvbXNCaXRt
YXAmIG1hcmtzKCkgY29uc3Q7CiAgICAgCiAgICAgQ291bnRpbmdMb2NrJiBsb2NrKCkgeyByZXR1
cm4gZm9vdGVyKCkubV9sb2NrOyB9CiAgICAgCkBAIC0zOTksNiArNDAyLDggQEAgcHJpdmF0ZToK
ICAgICAKICAgICBpbmxpbmUgYm9vbCBtYXJrc0NvbnZleUxpdmVuZXNzRHVyaW5nTWFya2luZyhI
ZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbik7CiAgICAgaW5saW5lIGJvb2wgbWFya3NDb252ZXlM
aXZlbmVzc0R1cmluZ01hcmtpbmcoSGVhcFZlcnNpb24gbXlNYXJraW5nVmVyc2lvbiwgSGVhcFZl
cnNpb24gbWFya2luZ1ZlcnNpb24pOworCisgICAgZnJpZW5kIGNsYXNzIEZyZWVMaXN0OwogfTsK
IAogaW5saW5lIE1hcmtlZEJsb2NrOjpGb290ZXImIE1hcmtlZEJsb2NrOjpmb290ZXIoKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgJ
KHJldmlzaW9uIDI2MzE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJs
b2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDMsNiArMzAzLDY2IEBAIHZvaWQgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2UKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAorI2lmIEVOQUJMRShCSVRNQVBfRlJFRUxJU1QpCisgICAgQXRvbXNCaXRtYXAgbG9jYWxGcmVl
QXRvbXM7CisgICAgQXRvbXNCaXRtYXAmIGZyZWVBdG9tcyA9IGZyZWVMaXN0ID8gZnJlZUxpc3Qt
PmF0b21zQml0bWFwKCkgOiBsb2NhbEZyZWVBdG9tczsKKyAgICBzaXplX3QgY291bnQgPSAwOwor
CisgICAgYXV0byBoYW5kbGVEZWFkQ2VsbCA9IFsmXSAoc2l6ZV90IGkpIHsKKyAgICAgICAgSGVh
cENlbGwqIGNlbGwgPSByZWludGVycHJldF9jYXN0X3B0cjxIZWFwQ2VsbCo+KGF0b21BdChpKSk7
CisKKyAgICAgICAgaWYgKGRlc3RydWN0aW9uTW9kZSAhPSBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMp
CisgICAgICAgICAgICBkZXN0cm95KGNlbGwpOworCisgICAgICAgIGlmIChzd2VlcE1vZGUgPT0g
U3dlZXBUb0ZyZWVMaXN0KSB7CisgICAgICAgICAgICBpZiAoc2NyaWJibGVNb2RlID09IFNjcmli
YmxlKQorICAgICAgICAgICAgICAgIHNjcmliYmxlKGNlbGwsIGNlbGxTaXplKTsKKyAgICAgICAg
ICAgICsrY291bnQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgYm9vbCBpc0VtcHR5ID0gdHJ1
ZTsKKworICAgIEF0b21zQml0bWFwIGNlbGxMb2NhdGlvbnM7CisgICAgY2VsbExvY2F0aW9ucy5z
ZXRFYWNoTnRoQml0KG1fYXRvbXNQZXJDZWxsLCAwLCBtX2VuZEF0b20pOworCisgICAgaWYgKGVt
cHR5TW9kZSA9PSBOb3RFbXB0eSkgeworICAgICAgICBpZiAobWFya3NNb2RlID09IE1hcmtzTm90
U3RhbGUpIHsKKyAgICAgICAgICAgIGZyZWVBdG9tcyA9IGZvb3Rlci5tX21hcmtzOworICAgICAg
ICAgICAgaWYgKG5ld2x5QWxsb2NhdGVkTW9kZSA9PSBIYXNOZXdseUFsbG9jYXRlZCkKKyAgICAg
ICAgICAgICAgICBmcmVlQXRvbXMgfD0gZm9vdGVyLm1fbmV3bHlBbGxvY2F0ZWQ7CisgICAgICAg
IH0gZWxzZSBpZiAobmV3bHlBbGxvY2F0ZWRNb2RlID09IEhhc05ld2x5QWxsb2NhdGVkKQorICAg
ICAgICAgICAgZnJlZUF0b21zID0gZm9vdGVyLm1fbmV3bHlBbGxvY2F0ZWQ7CisgICAgICAgIC8v
IEF0IHRoaXMgcG9pbnQsIGEgc2V0IGJpdCBpbiBmcmVlQXRvbXMgcmVwcmVzZW50cyBsaXZlIGNl
bGxzLgorICAgICAgICBpc0VtcHR5ID0gZnJlZUF0b21zLmlzRW1wdHkoKTsKKworICAgICAgICAv
LyBJbnZlcnQgdGhlIGJpdHMgYXQgZWFjaCBjZWxsIGxvY2F0aW9uIHNvIHRoYXQgdGhlIG9uZXMg
Zm9yIGxpdmUgY2VsbHMKKyAgICAgICAgLy8gYXJlIGNsZWFyZWQsIGFuZCB0aGUgb25lcyBmb3Ig
ZGVhZCBjZWxscyBhcmUgc2V0LgorICAgICAgICBmcmVlQXRvbXMgXj0gY2VsbExvY2F0aW9uczsK
KyAgICB9IGVsc2UKKyAgICAgICAgZnJlZUF0b21zID0gY2VsbExvY2F0aW9uczsgLy8gYWxsIGNl
bGxzIGFyZSBmcmVlLgorICAgIAorICAgIC8vIFdlIG9ubHkgd2FudCB0byBkaXNjYXJkIHRoZSBu
ZXdseUFsbG9jYXRlZCBiaXRzIGlmIHdlJ3JlIGNyZWF0aW5nIGEgRnJlZUxpc3QsCisgICAgLy8g
b3RoZXJ3aXNlIHdlIHdvdWxkIGxvc2UgaW5mb3JtYXRpb24gb24gd2hhdCdzIGN1cnJlbnRseSBh
bGl2ZS4KKyAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCAmJiBuZXdseUFsbG9j
YXRlZE1vZGUgPT0gSGFzTmV3bHlBbGxvY2F0ZWQpCisgICAgICAgIGZvb3Rlci5tX25ld2x5QWxs
b2NhdGVkVmVyc2lvbiA9IE1hcmtlZFNwYWNlOjpudWxsVmVyc2lvbjsKKworICAgIGlmIChzcGFj
ZSgpLT5pc01hcmtpbmcoKSkKKyAgICAgICAgZm9vdGVyLm1fbG9jay51bmxvY2soKTsKKworICAg
IGlmIChkZXN0cnVjdGlvbk1vZGUgIT0gQmxvY2tIYXNOb0Rlc3RydWN0b3JzKQorICAgICAgICBm
cmVlQXRvbXMuZm9yRWFjaFNldEJpdChoYW5kbGVEZWFkQ2VsbCk7CisKKyAgICBpZiAoc3dlZXBN
b2RlID09IFN3ZWVwVG9GcmVlTGlzdCkgeworICAgICAgICBmcmVlTGlzdC0+aW5pdGlhbGl6ZUF0
b21zQml0bWFwKHRoaXMsIGZyZWVBdG9tcywgY291bnQgKiBjZWxsU2l6ZSk7CisgICAgICAgIHNl
dElzRnJlZUxpc3RlZCgpOworICAgIH0gZWxzZSBpZiAoaXNFbXB0eSkKKyAgICAgICAgbV9kaXJl
Y3RvcnktPnNldElzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzLCB0cnVlKTsKKyAgICBp
ZiAoZmFsc2UpCisgICAgICAgIGRhdGFMb2coIlNsb3dseSBzd2VwdCBibG9jayAiLCBSYXdQb2lu
dGVyKCZibG9jayksICIgd2l0aCBjZWxsIHNpemUgIiwgY2VsbFNpemUsICIgYW5kIGF0dHJpYnV0
ZXMgIiwgbV9hdHRyaWJ1dGVzLCAiOiAiLCBwb2ludGVyRHVtcChmcmVlTGlzdCksICJcbiIpOwor
CisjZWxzZSAvLyBub3QgRU5BQkxFKEJJVE1BUF9GUkVFTElTVCkKKwogICAgIC8vIFRoaXMgcHJv
ZHVjZXMgYSBmcmVlIGxpc3QgdGhhdCBpcyBvcmRlcmVkIGluIHJldmVyc2UgdGhyb3VnaCB0aGUg
YmxvY2suCiAgICAgLy8gVGhpcyBpcyBmaW5lLCBzaW5jZSB0aGUgYWxsb2NhdGlvbiBjb2RlIG1h
a2VzIG5vIGFzc3VtcHRpb25zIGFib3V0IHRoZQogICAgIC8vIG9yZGVyIG9mIHRoZSBmcmVlIGxp
c3QuCkBAIC0zNjEsNiArNDIxLDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFs
aXplZFN3ZQogICAgICAgICBtX2RpcmVjdG9yeS0+c2V0SXNFbXB0eShOb0xvY2tpbmdOZWNlc3Nh
cnksIHRoaXMsIHRydWUpOwogICAgIGlmIChmYWxzZSkKICAgICAgICAgZGF0YUxvZygiU2xvd2x5
IHN3ZXB0IGJsb2NrICIsIFJhd1BvaW50ZXIoJmJsb2NrKSwgIiB3aXRoIGNlbGwgc2l6ZSAiLCBj
ZWxsU2l6ZSwgIiBhbmQgYXR0cmlidXRlcyAiLCBtX2F0dHJpYnV0ZXMsICI6ICIsIHBvaW50ZXJE
dW1wKGZyZWVMaXN0KSwgIlxuIik7CisjZW5kaWYgLy8gRU5BQkxFKEJJVE1BUF9GUkVFTElTVCkK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRGVzdHJveUZ1bmM+CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyNjMxODEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUwMyw3ICs1MDMsNyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFJhbmRv
bVRodW5rKFZNCiB9CiAjZW5kaWYKIAotdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0
ZVdpdGhOb25OdWxsQWxsb2NhdG9yKEdQUlJlZyByZXN1bHRHUFIsIGNvbnN0IEpJVEFsbG9jYXRv
ciYgYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVt
cExpc3QmIHNsb3dQYXRoKQordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZVdpdGhO
b25OdWxsQWxsb2NhdG9yKEdQUlJlZyByZXN1bHRHUFIsIGNvbnN0IEpJVEFsbG9jYXRvciYgYWxs
b2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3Qm
IHNsb3dQYXRoLCBPcHRpb25hbDxHUFJSZWc+IG9wdGlvbmFsU2NyYXRjaEdQUjIsIE9wdGlvbmFs
PEdQUlJlZz4gb3B0aW9uYWxTY3JhdGNoR1BSMykKIHsKICAgICBpZiAoT3B0aW9uczo6Zm9yY2VH
Q1Nsb3dQYXRocygpKSB7CiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqdW1wKCkpOwpAQCAtNTE2
LDcgKzUxNiw3IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0QWxsb2NhdGVXaXRoTm8KICAg
ICAvLyAtIFdlICpjYW4qIHVzZSBSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzIG9u
IEFSTS4KIAogICAgIEp1bXAgcG9wUGF0aDsKLSAgICBKdW1wIGRvbmU7CisgICAgSnVtcExpc3Qg
ZG9uZTsKICAgICAKICAgICBpZiAoYWxsb2NhdG9yLmlzQ29uc3RhbnQoKSkKICAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvci5hbGxvY2F0b3IoKS5sb2NhbEFsbG9jYXRvcigpKSwg
YWxsb2NhdG9yR1BSKTsKQEAgLTUzNCwxMCArNTM0LDEyNCBAQCB2b2lkIEFzc2VtYmx5SGVscGVy
czo6ZW1pdEFsbG9jYXRlV2l0aE5vCiAgICAgQWRkcmVzcyBwYXlsb2FkRW5kQWRkciA9IEFkZHJl
c3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJl
ZUxpc3Q6Om9mZnNldE9mUGF5bG9hZEVuZCgpKTsKICAgICBhZGRQdHIocGF5bG9hZEVuZEFkZHIs
IHJlc3VsdEdQUik7CiAKLSAgICBkb25lID0ganVtcCgpOworICAgIGRvbmUuYXBwZW5kKGp1bXAo
KSk7CiAgICAgICAgIAorI2lmIEVOQUJMRShCSVRNQVBfRlJFRUxJU1QpCisgICAgQVNTRVJUKHJl
c3VsdEdQUiAhPSBzY3JhdGNoR1BSKTsKKworICAgIGF1dG8gcm93SW5kZXhHUFIgPSByZXN1bHRH
UFI7CisgICAgYXV0byByb3dCaXRtYXBHUFIgPSBzY3JhdGNoR1BSOworCisgICAgR1BSUmVnIHNj
cmF0Y2hHUFIyID0gb3B0aW9uYWxTY3JhdGNoR1BSMiA/IG9wdGlvbmFsU2NyYXRjaEdQUjIudmFs
dWUoKSA6IHNjcmF0Y2hSZWdpc3RlcigpOworICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSByZXN1
bHRHUFIpOworICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSBzY3JhdGNoR1BSKTsKKworICAgIGF1
dG8gcm93QWRkcmVzc0dQUiA9IHNjcmF0Y2hHUFIyOworICAgIGF1dG8gY2xlYXJCaXQ2NFNjcmF0
Y2hHUFIgPSBzY3JhdGNoR1BSMjsKKworICAgIGJvb2wgY2FuUHJlbG9hZFJvd0FkZHJlc3NHUFIg
PSBmYWxzZTsKKyAgICBpZiAob3B0aW9uYWxTY3JhdGNoR1BSMykgeworICAgICAgICBjbGVhckJp
dDY0U2NyYXRjaEdQUiA9IG9wdGlvbmFsU2NyYXRjaEdQUjMudmFsdWUoKTsKKyAgICAgICAgY2Fu
UHJlbG9hZFJvd0FkZHJlc3NHUFIgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoaXNYODZfNjQoKSkg
eworICAgICAgICAvLyB4ODZfNjQncyBjbGVhckJpdDY0KCkgZG9lcyBhY3R1YWxseSBuZWVkIHRv
IHVzZSBjbGVhckJpdDY0U2NyYXRjaEdQUi4KKyAgICAgICAgLy8gU28sIHdlIGNhbiBwcmVsb2Fk
IHRoZSByb3cgYWRkcmVzcyBpbnRvIGl0LgorICAgICAgICBjbGVhckJpdDY0U2NyYXRjaEdQUiA9
IEludmFsaWRHUFJSZWc7CisgICAgICAgIGNhblByZWxvYWRSb3dBZGRyZXNzR1BSID0gdHJ1ZTsK
KyNpZiBDUFUoQVJNNjQpCisgICAgfSBlbHNlIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgLy8g
QVJNNjQncyBmYXN0IHBhdGggZG9lcyBhY3R1YWxseSBuZWVkIHRvIHVzZSB0aGUgbWVtb3J5VGVt
cFJlZ2lzdGVyLgorICAgICAgICAvLyBTbywgd2UgY2FuIHVzZSB0aGF0IGZvciB0aGUgY2xlYXJC
aXQ2NFNjcmF0Y2hHUFIgYW5kIGFsbG93IHRoZQorICAgICAgICAvLyByb3cgYWRkcmVzcyB0byBi
ZSBwcmVsb2FkZWQgaW4gc2NyYXRjaEdQUjIuCisgICAgICAgIGNsZWFyQml0NjRTY3JhdGNoR1BS
ID0gZ2V0Q2FjaGVkTWVtb3J5VGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCk7CisgICAgICAg
IGNhblByZWxvYWRSb3dBZGRyZXNzR1BSID0gdHJ1ZTsKKyNlbmRpZgorICAgIH0KKyAgICBBU1NF
UlQoY2xlYXJCaXQ2NFNjcmF0Y2hHUFIgIT0gcmVzdWx0R1BSKTsKKyAgICBBU1NFUlQoY2xlYXJC
aXQ2NFNjcmF0Y2hHUFIgIT0gc2NyYXRjaEdQUik7CisgICAgaWYgKGNhblByZWxvYWRSb3dBZGRy
ZXNzR1BSKQorICAgICAgICBBU1NFUlQoY2xlYXJCaXQ2NFNjcmF0Y2hHUFIgIT0gc2NyYXRjaEdQ
UjIpOworCisgICAgLy8gVGhlIGNvZGUgYmVsb3cgZm9yIHJvd0JpdG1hcEdQUiByZWxpZXMgb24g
dGhpcy4KKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihGcmVlTGlzdDo6QXRvbXNCaXRtYXA6Oldv
cmQpID09IHNpemVvZih1aW50NjRfdCkpOworCisgICAgLy8gQ2hlY2sgZm9yIG1pZGRsZSBwYXRo
OiBoYXZlIGFub3RoZXIgcm93IHRvIHZpc2l0PworICAgIExhYmVsIGNoZWNrRm9yTW9yZVJvd3Mg
PSBsYWJlbCgpOworCisgICAgbG9hZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9j
YXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mQ3VycmVudFJvd0lu
ZGV4KCkpLCByb3dJbmRleEdQUik7CisKKyAgICBpZiAoIWNhblByZWxvYWRSb3dBZGRyZXNzR1BS
KQorICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6
b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mQ3VycmVudE1hcmtlZEJsb2Nr
Um93QWRkcmVzcygpKSwgcm93QWRkcmVzc0dQUik7CisKKyAgICBzbG93UGF0aC5hcHBlbmQoYnJh
bmNoVGVzdFB0cihaZXJvLCByb3dJbmRleEdQUikpOworCisgICAgLy8gTWlkZGxlIHBhdGg6IHRo
ZXJlIGlzIGFub3RoZXIgcm93IGxlZnQgdG8gdmlzaXQuCisgICAgSnVtcCBmb3VuZE5vbkVtcHR5
Um93OworICAgIExhYmVsIGNoZWNrTmV4dFJvdyA9IGxhYmVsKCk7CisgICAgeworICAgICAgICAv
LyBMb2FkIHRoZSBuZXh0IHJvdyBiaXRtYXAgYW5kIHBvaW50IG1fY3VycmVudE1hcmtlZEJsb2Nr
Um93QWRkcmVzcyB0byB0aGUgbmV4dCByb3cuCisKKyAgICAgICAgLy8gTm90ZTogb2Zmc2V0T2ZC
aXRtYXBSb3dzKCkgcG9pbnRzIHRvIDEgd29yZCBiZWZvcmUgbV9iaXRtYXAuIFdlIGRvIHRoaXMK
KyAgICAgICAgLy8gZGVsaWJlcmF0ZWx5IGJlY2F1c2UgaXQgYWxsb3dzIHVzIHRvIHNjaGVkdWxl
IGluc3RydWN0aW9ucyBiZXR0ZXIgYW5kCisgICAgICAgIC8vIGRvIHRoaXMgbG9hZCBiZWZvcmUg
dGhlIGRlY3JlbWVudCBiZWxvdy4KKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChhbGxvY2F0b3JH
UFIsIHJvd0luZGV4R1BSLCBUaW1lc0VpZ2h0LCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVl
TGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mQml0bWFwUm93cygpKSwgcm93Qml0bWFwR1BSKTsK
KworICAgICAgICBzdWI2NChUcnVzdGVkSW1tMzIoMSksIHJvd0luZGV4R1BSKTsKKyAgICAgICAg
c3ViUHRyKFRydXN0ZWRJbW0zMihGcmVlTGlzdDo6YXRvbXNSb3dCeXRlcyksIHJvd0FkZHJlc3NH
UFIpOworCisgICAgICAgIGZvdW5kTm9uRW1wdHlSb3cgPSBicmFuY2hUZXN0NjQoTm9uWmVybywg
cm93Qml0bWFwR1BSKTsKKyAgICAgICAgYnJhbmNoVGVzdFB0cihOb25aZXJvLCByb3dJbmRleEdQ
UikubGlua1RvKGNoZWNrTmV4dFJvdywgdGhpcyk7CisgICAgfQorCisgICAgLy8gU2xvdyBwYXRo
OiBubyBtb3JlIHJvd3MuCisgICAgLy8gQm90aCByb3dJbmRleEdQUiBhbmQgcm93Qml0bWFwR1BS
IHNob3VsZCBiZSBudWxsIGhlcmUuCisgICAgc3RvcmUzMihyb3dJbmRleEdQUiwgQWRkcmVzcyhh
bGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlz
dDo6b2Zmc2V0T2ZDdXJyZW50Um93SW5kZXgoKSkpOworICAgIHN0b3JlNjQocm93Qml0bWFwR1BS
LCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3Qo
KSArIEZyZWVMaXN0OjpvZmZzZXRPZkN1cnJlbnRSb3dCaXRtYXAoKSkpOworICAgIHNsb3dQYXRo
LmFwcGVuZChqdW1wKCkpOworCisgICAgLy8gVHJhbnNpdGlvbiBmcm9tIG1pZGRsZSBwYXRoIGJh
Y2sgdG8gZmFzdCBwYXRoIHRvIGFsbG9jYXRlLgorICAgIGZvdW5kTm9uRW1wdHlSb3cubGluayh0
aGlzKTsKKyAgICBzdG9yZVB0cihyb3dBZGRyZXNzR1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwg
TG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZkN1
cnJlbnRNYXJrZWRCbG9ja1Jvd0FkZHJlc3MoKSkpOworICAgIHN0b3JlMzIocm93SW5kZXhHUFIs
IEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgp
ICsgRnJlZUxpc3Q6Om9mZnNldE9mQ3VycmVudFJvd0luZGV4KCkpKTsKKworICAgIEp1bXAgYWxs
b2NhdGVGcm9tQ3VycmVudFJvdyA9IGp1bXAoKTsKKwogICAgIHBvcFBhdGgubGluayh0aGlzKTsK
LSAgICAgICAgCisKKyAgICAvLyBDaGVjayBmb3IgZmFzdCBwYXRoOiBoYXZlIGF2YWlsYWJsZSBi
aXQgaW4gbV9jdXJyZW50Um93Qml0bWFwPworICAgIGxvYWQ2NChBZGRyZXNzKGFsbG9jYXRvckdQ
UiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRP
ZkN1cnJlbnRSb3dCaXRtYXAoKSksIHJvd0JpdG1hcEdQUik7CisKKyAgICBpZiAoY2FuUHJlbG9h
ZFJvd0FkZHJlc3NHUFIpIHsKKyAgICAgICAgLy8gUHJlbG9hZCB0aGUgcm93IGFkZHJlc3MgbmVl
ZGVkIG9uIHRoZSBmYXN0IGFuZCBtaWRkbGUgcGF0aC4KKyAgICAgICAgbG9hZFB0cihBZGRyZXNz
KGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVM
aXN0OjpvZmZzZXRPZkN1cnJlbnRNYXJrZWRCbG9ja1Jvd0FkZHJlc3MoKSksIHJvd0FkZHJlc3NH
UFIpOworICAgIH0KKworICAgIGJyYW5jaFRlc3Q2NChaZXJvLCByb3dCaXRtYXBHUFIpLmxpbmtU
byhjaGVja0Zvck1vcmVSb3dzLCB0aGlzKTsKKworICAgIC8vIEZhc3QgcGF0aDogd2UgaGF2ZSBh
IGJpdCB0byB1c2UuCisgICAgYWxsb2NhdGVGcm9tQ3VycmVudFJvdy5saW5rKHRoaXMpOworICAg
IHsKKyAgICAgICAgLy8gUmVtb3ZlIHRoaXMgYml0IGZyb20gbV9jdXJyZW50Um93Qml0bWFwLgor
ICAgICAgICBhdXRvIGF0b21JbmRleEluUm93R1BSID0gcmVzdWx0R1BSOworICAgICAgICBjb3Vu
dFRyYWlsaW5nWmVyb3M2NFdpdGhvdXROdWxsQ2hlY2socm93Qml0bWFwR1BSLCBhdG9tSW5kZXhJ
blJvd0dQUik7CisgICAgICAgIGNsZWFyQml0NjQoYXRvbUluZGV4SW5Sb3dHUFIsIHJvd0JpdG1h
cEdQUiwgY2xlYXJCaXQ2NFNjcmF0Y2hHUFIpOworCisgICAgICAgIGlmICghY2FuUHJlbG9hZFJv
d0FkZHJlc3NHUFIpCisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBM
b2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mQ3Vy
cmVudE1hcmtlZEJsb2NrUm93QWRkcmVzcygpKSwgcm93QWRkcmVzc0dQUik7CisKKyAgICAgICAg
c3RvcmU2NChyb3dCaXRtYXBHUFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRv
cjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mQ3VycmVudFJvd0JpdG1h
cCgpKSk7CisKKyAgICAgICAgLy8gQ29tcHV0ZSBhdG9tIGFkZHJlc3Mgb2YgdGhpcyBiaXQuCisg
ICAgICAgIEFTU0VSVChyZXN1bHRHUFIgPT0gYXRvbUluZGV4SW5Sb3dHUFIpOworICAgICAgICBz
aGlmdEFuZEFkZChyb3dBZGRyZXNzR1BSLCByZXN1bHRHUFIsIEZyZWVMaXN0OjphdG9tU2l6ZVNo
aWZ0LCByZXN1bHRHUFIpOworICAgIH0KKworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ob3B0aW9u
YWxTY3JhdGNoR1BSMik7CisgICAgVU5VU0VEX1BBUkFNKG9wdGlvbmFsU2NyYXRjaEdQUjMpOwor
CisgICAgcG9wUGF0aC5saW5rKHRoaXMpOworCiAgICAgbG9hZFB0cihBZGRyZXNzKGFsbG9jYXRv
ckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZz
ZXRPZlNjcmFtYmxlZEhlYWQoKSksIHJlc3VsdEdQUik7CiAgICAgeG9yUHRyKEFkZHJlc3MoYWxs
b2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6
Om9mZnNldE9mU2VjcmV0KCkpLCByZXN1bHRHUFIpOwogICAgIHNsb3dQYXRoLmFwcGVuZChicmFu
Y2hUZXN0UHRyKFplcm8sIHJlc3VsdEdQUikpOwpAQCAtNTQ2LDcgKzY2MCw4IEBAIHZvaWQgQXNz
ZW1ibHlIZWxwZXJzOjplbWl0QWxsb2NhdGVXaXRoTm8KICAgICAvLyBpdCdzIHN0aWxsIG9uIHRo
ZSBHQydzIGZyZWUgbGlzdC4KICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBGcmVlQ2Vs
bDo6b2Zmc2V0T2ZTY3JhbWJsZWROZXh0KCkpLCBzY3JhdGNoR1BSKTsKICAgICBzdG9yZVB0cihz
Y3JhdGNoR1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9m
RnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlNjcmFtYmxlZEhlYWQoKSkpOwotICAgICAg
ICAKKyNlbmRpZgorCiAgICAgZG9uZS5saW5rKHRoaXMpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI2MzE4MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJUYWdSZWdpc3RlcnNNb2RlLmgiCiAjaW5j
bHVkZSAiVHlwZW9mVHlwZS5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xOTUxLDggKzE5NTIsOCBAQCBwdWJsaWM6
CiAgICAgLy8gdGhhdCBhbGxvY2F0b3IgaXMgbm9uLW51bGw7IGFsbG9jYXRvciBjYW4gYmUgbnVs
bCBhcyBhIHNpZ25hbCB0aGF0IHdlIGRvbid0IGtub3cgd2hhdCB0aGUKICAgICAvLyB2YWx1ZSBv
ZiBhbGxvY2F0b3JHUFIgaXMuIEFkZGl0aW9uYWxseSwgaWYgdGhlIGFsbG9jYXRvciBpcyBub3Qg
bnVsbCwgdGhlbiB0aGVyZSBpcyBubyBuZWVkCiAgICAgLy8gdG8gcG9wdWxhdGUgYWxsb2NhdG9y
R1BSIC0gdGhpcyBjb2RlIHdpbGwgaWdub3JlIHRoZSBjb250ZW50cyBvZiBhbGxvY2F0b3JHUFIu
Ci0gICAgdm9pZCBlbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcihHUFJSZWcgcmVzdWx0
R1BSLCBjb25zdCBKSVRBbGxvY2F0b3ImIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwg
R1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCk7Ci0gICAgCisgICAgdm9pZCBl
bWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcihHUFJSZWcgcmVzdWx0R1BSLCBjb25zdCBK
SVRBbGxvY2F0b3ImLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVt
cExpc3QmIHNsb3dQYXRoLCBPcHRpb25hbDxHUFJSZWc+IHNjcmF0Y2hHUFIyID0geyB9LCBPcHRp
b25hbDxHUFJSZWc+IHNjcmF0Y2hHUFIzID0geyB9KTsKKwogICAgIHZvaWQgZW1pdEFsbG9jYXRl
KEdQUlJlZyByZXN1bHRHUFIsIGNvbnN0IEpJVEFsbG9jYXRvciYgYWxsb2NhdG9yLCBHUFJSZWcg
YWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKTsKICAg
ICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPgpJbmRleDogU291cmNlL1dU
Ri9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9u
IDI2MzE4MSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjcgQEAKKzIwMjAtMDYtMTcgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisg
ICAgICAgIFJlcGxhY2UgSlNDOjpGcmVlTGlzdCBsaW5rZWQgbGlzdCB3aXRoIGEgQml0bWFwLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzMDcxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgMS4gVXNlIGNv
dW50T2ZCaXRzPD4gdGVtcGxhdGUgdG8gY29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJpdHMuCisgICAg
ICAgIDIuIEludHJvZHVjZSBsb2cyKCkgYW5kIGxvZzJDb25zdGV4cHIoKSB1dGlsaXR5IGZ1bmN0
aW9ucy4KKyAgICAgICAgMy4gTWFrZSBCaXRtYXA8Pjo6Zm9yRWFjaFNldEJpdCgpIGEgbGl0dGxl
IGJpdCBtb3JlIGVmZmljaWVudDogd2UgZG9uJ3QgbmVlZCB0bworICAgICAgICAgICBrZWVwIGl0
ZXJhdGluZyBpZiB0aGUgYml0bWFwIHdvcmQgaXMgYWxyZWFkeSBlbXB0eSBvZiBiaXRzLgorCisg
ICAgICAgICogd3RmL0JpdG1hcC5oOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46OmZvckVhY2hT
ZXRCaXQgY29uc3QpOgorICAgICAgICAqIHd0Zi9NYXRoRXh0cmFzLmg6CisgICAgICAgIChXVEY6
OmNsekNvbnN0ZXhwcik6CisgICAgICAgIChXVEY6OmNseik6CisgICAgICAgIChXVEY6OmN0ekNv
bnN0ZXhwcik6CisgICAgICAgIChXVEY6OmN0eik6CisgICAgICAgIChXVEY6OmdldE1TQlNldCk6
CisgICAgICAgIChXVEY6OmdldE1TQlNldENvbnN0ZXhwcik6CisgICAgICAgIChXVEY6OmxvZzIp
OgorICAgICAgICAoV1RGOjpsb2cyQ29uc3RleHByKToKKwogMjAyMC0wNi0xNyAgRGF2aWQgS2ls
emVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJlcGxhY2UgT3B0aW9uU2V0VHJh
aXRzL09wdGlvblNldFZhbHVlcyB3aXRoIEVudW1UcmFpdHMvRW51bVZhbHVlcwpJbmRleDogU291
cmNlL1dURi93dGYvQml0bWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0bWFw
LmgJKHJldmlzaW9uIDI2MzE4MSkKKysrIFNvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzAsOSArMTMwLDE1IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIGhhc2go
KSBjb25zdDsKIAorICAgIC8vIExvdyBsZXZlbCBpbnRlcmZhY2UuCisgICAgdXNpbmcgV29yZCA9
IFdvcmRUeXBlOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0c0luV29yZCA9IGNv
dW50T2ZCaXRzPFdvcmRUeXBlPjsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJl
ck9mV29yZHMgPSAoYml0bWFwU2l6ZSArIGJpdHNJbldvcmQgLSAxKSAvIGJpdHNJbldvcmQ7Cisg
ICAgV29yZFR5cGUgd29yZEF0KHNpemVfdCB3b3JkSW5kZXgpIGNvbnN0IHsgcmV0dXJuIGJpdHNb
d29yZEluZGV4XTsgfQorCiBwcml2YXRlOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
d29yZFNpemUgPSBzaXplb2YoV29yZFR5cGUpICogODsKLSAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIHdvcmRzID0gKGJpdG1hcFNpemUgKyB3b3JkU2l6ZSAtIDEpIC8gd29yZFNpemU7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB3b3JkU2l6ZSA9IGJpdHNJbldvcmQ7CisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB3b3JkcyA9IG51bWJlck9mV29yZHM7CiAKICAgICAv
LyB0aGUgbGl0ZXJhbCAnMScgaXMgb2YgdHlwZSBzaWduZWQgaW50LiAgV2Ugd2FudCB0byB1c2Ug
YW4gdW5zaWduZWQKICAgICAvLyB2ZXJzaW9uIG9mIHRoZSBjb3JyZWN0IHNpemUgd2hlbiBkb2lu
ZyB0aGUgY2FsY3VsYXRpb25zIGJlY2F1c2UgaWYKQEAgLTM3NywxNCArMzgzLDE2IEBAIGlubGlu
ZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT4KIHsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHdvcmRzOyArK2kpIHsKICAgICAgICAgV29yZFR5cGUgd29yZCA9IGJpdHNbaV07
Ci0gICAgICAgIGlmICghd29yZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOworLy8gICAgICAgIGlm
ICghd29yZCkKKy8vICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIHNpemVfdCBiYXNlID0g
aSAqIHdvcmRTaXplOwotICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHdvcmRTaXplOyAr
K2opIHsKKyAgICAgICAgc2l6ZV90IGogPSAwOworICAgICAgICBmb3IgKDsgd29yZDsgKytqKSB7
CiAgICAgICAgICAgICBpZiAod29yZCAmIDEpCiAgICAgICAgICAgICAgICAgZnVuYyhiYXNlICsg
aik7CiAgICAgICAgICAgICB3b3JkID4+PSAxOwogICAgICAgICB9CisgICAgICAgIEFTU0VSVChq
IDw9IHdvcmRTaXplKTsKICAgICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01hdGhFeHRy
YXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgJKHJldmlzaW9u
IDI2MzE4MSkKKysrIFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAkod29ya2luZyBjb3B5KQpA
QCAtNTkzLDcgKzU5Myw3IEBAIHZvaWQgc2h1ZmZsZVZlY3RvcihWZWN0b3JUeXBlJiB2ZWN0b3Is
IGMKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogY29uc3RleHByIHVuc2lnbmVkIGNsekNvbnN0ZXhw
cihUIHZhbHVlKQogewotICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRTaXplID0gc2l6ZW9mKFQp
ICogQ0hBUl9CSVQ7CisgICAgY29uc3RleHByIHVuc2lnbmVkIGJpdFNpemUgPSBjb3VudE9mQml0
czxUPjsKIAogICAgIHVzaW5nIFVUID0gdHlwZW5hbWUgc3RkOjptYWtlX3Vuc2lnbmVkPFQ+Ojp0
eXBlOwogICAgIFVUIHVWYWx1ZSA9IHZhbHVlOwpAQCAtNjEwLDEzICs2MTAsMTMgQEAgY29uc3Rl
eHByIHVuc2lnbmVkIGNsekNvbnN0ZXhwcihUIHZhbHVlKQogdGVtcGxhdGU8dHlwZW5hbWUgVD4K
IGlubGluZSB1bnNpZ25lZCBjbHooVCB2YWx1ZSkKIHsKLSAgICBjb25zdGV4cHIgdW5zaWduZWQg
Yml0U2l6ZSA9IHNpemVvZihUKSAqIENIQVJfQklUOworICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBi
aXRTaXplID0gY291bnRPZkJpdHM8VD47CiAKICAgICB1c2luZyBVVCA9IHR5cGVuYW1lIHN0ZDo6
bWFrZV91bnNpZ25lZDxUPjo6dHlwZTsKICAgICBVVCB1VmFsdWUgPSB2YWx1ZTsKIAogI2lmIENP
TVBJTEVSKEdDQ19DT01QQVRJQkxFKQotICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRTaXplNjQg
PSBzaXplb2YodWludDY0X3QpICogQ0hBUl9CSVQ7CisgICAgY29uc3RleHByIHVuc2lnbmVkIGJp
dFNpemU2NCA9IGNvdW50T2ZCaXRzPHVpbnQ2NF90PjsKICAgICBpZiAodVZhbHVlKQogICAgICAg
ICByZXR1cm4gX19idWlsdGluX2NsemxsKHVWYWx1ZSkgLSAoYml0U2l6ZTY0IC0gYml0U2l6ZSk7
CiAgICAgcmV0dXJuIGJpdFNpemU7CkBAIC02MzgsNyArNjM4LDcgQEAgaW5saW5lIHVuc2lnbmVk
IGNseihUIHZhbHVlKQogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiBjb25zdGV4cHIgdW5zaWduZWQg
Y3R6Q29uc3RleHByKFQgdmFsdWUpCiB7Ci0gICAgY29uc3RleHByIHVuc2lnbmVkIGJpdFNpemUg
PSBzaXplb2YoVCkgKiBDSEFSX0JJVDsKKyAgICBjb25zdGV4cHIgdW5zaWduZWQgYml0U2l6ZSA9
IGNvdW50T2ZCaXRzPFQ+OwogCiAgICAgdXNpbmcgVVQgPSB0eXBlbmFtZSBzdGQ6Om1ha2VfdW5z
aWduZWQ8VD46OnR5cGU7CiAgICAgVVQgdVZhbHVlID0gdmFsdWU7CkBAIC02NTcsNyArNjU3LDcg
QEAgY29uc3RleHByIHVuc2lnbmVkIGN0ekNvbnN0ZXhwcihUIHZhbHVlKQogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KIGlubGluZSB1bnNpZ25lZCBjdHooVCB2YWx1ZSkKIHsKLSAgICBjb25zdGV4cHIg
dW5zaWduZWQgYml0U2l6ZSA9IHNpemVvZihUKSAqIENIQVJfQklUOworICAgIGNvbnN0ZXhwciB1
bnNpZ25lZCBiaXRTaXplID0gY291bnRPZkJpdHM8VD47CiAKICAgICB1c2luZyBVVCA9IHR5cGVu
YW1lIHN0ZDo6bWFrZV91bnNpZ25lZDxUPjo6dHlwZTsKICAgICBVVCB1VmFsdWUgPSB2YWx1ZTsK
QEAgLTY5NSw3ICs2OTUsNyBAQCBjb25zdGV4cHIgdW5zaWduZWQgZ2V0TFNCU2V0Q29uc3RleHBy
KFQgCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogaW5saW5lIHVuc2lnbmVkIGdldE1TQlNldChUIHQp
CiB7Ci0gICAgY29uc3RleHByIHVuc2lnbmVkIGJpdFNpemUgPSBzaXplb2YoVCkgKiBDSEFSX0JJ
VDsKKyAgICBjb25zdGV4cHIgdW5zaWduZWQgYml0U2l6ZSA9IGNvdW50T2ZCaXRzPFQ+OwogICAg
IEFTU0VSVCh0KTsKICAgICByZXR1cm4gYml0U2l6ZSAtIDEgLSBjbHoodCk7CiB9CkBAIC03MDMs
MTEgKzcwMywxNCBAQCBpbmxpbmUgdW5zaWduZWQgZ2V0TVNCU2V0KFQgdCkKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CiBjb25zdGV4cHIgdW5zaWduZWQgZ2V0TVNCU2V0Q29uc3RleHByKFQgdCkKIHsK
LSAgICBjb25zdGV4cHIgdW5zaWduZWQgYml0U2l6ZSA9IHNpemVvZihUKSAqIENIQVJfQklUOwor
ICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRTaXplID0gY291bnRPZkJpdHM8VD47CiAgICAgQVNT
RVJUX1VOREVSX0NPTlNURVhQUl9DT05URVhUKHQpOwogICAgIHJldHVybiBiaXRTaXplIC0gMSAt
IGNsekNvbnN0ZXhwcih0KTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4gdW5zaWduZWQgbG9n
MihUIHZhbHVlKSB7IHJldHVybiBnZXRNU0JTZXQodmFsdWUpOyB9Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBjb25zdGV4cHIgdW5zaWduZWQgbG9nMkNvbnN0ZXhwcihUIHZhbHVlKSB7IHJldHVybiBn
ZXRNU0JTZXRDb25zdGV4cHIodmFsdWUpOyB9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiB1c2lu
ZyBXVEY6OnNodWZmbGVWZWN0b3I7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>402164</attachid>
            <date>2020-06-17 16:12:07 -0700</date>
            <delta_ts>2020-06-17 19:16:08 -0700</delta_ts>
            <desc>proposed patch.</desc>
            <filename>bug-213071.patch</filename>
            <type>text/plain</type>
            <size>46259</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjYzMTgxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0OSBA
QAorMjAyMC0wNi0xNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVwbGFjZSBKU0M6OkZyZWVMaXN0IGxpbmtlZCBsaXN0IHdpdGggYSBCaXRtYXAuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTMwNzEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgYW4gYWx0
ZXJuYXRpdmUgdG8gdGhlIGxpbmtlZCBsaXN0IEZyZWVMaXN0LiAgVGhpcyBhbHRlcm5hdGl2ZSB1
c2VzCisgICAgICAgIGEgQml0bWFwIHRvIHJlY29yZCB3aGljaCBhdG9tIGluIHRoZSBibG9jayBp
cyBhdmFpbGFibGUgZm9yIGFsbG9jYXRpb24uCisKKyAgICAgICAgVGhlIGludHVpdGlvbiBoZXJl
IGlzIHRoYXQgYWxsb2NhdGlvbiB1c2luZyB0aGUgQml0bWFwIGltcGxlbWVudGF0aW9uIHdpbGwg
ZG86CisgICAgICAgICAgICAyIGxvYWRzIC0gbV9jdXJyZW50Um93Qml0bWFwLCBtX2N1cnJlbnRN
YXJrZWRCbG9ja1Jvd0FkZHJlc3MKKyAgICAgICAgICAgIDEgc3RvcmUgLSBtX2N1cnJlbnRSb3dC
aXRtYXAKKworICAgICAgICB3aGVyZWFzIHRoZSBsaW5rZWQgbGlzdCBpbXBsZW1lbnRhdGlvbiB3
aWxsIGRvOgorICAgICAgICAgICAgMyBsb2FkcyAtIG1fc2NyYW1ibGVkSGVhZCwgbV9zZWNyZXQs
IHJlc3VsdC0+c2NyYW1ibGVkTmV4dAorICAgICAgICAgICAgMSBzdG9yZSAtIG1fc2NyYW1ibGVk
SGVhZAorCisgICAgICAgIGFuZCByZXN1bHQtPnNjcmFtYmxlZE5leHQgaXMgZnJvbSBhIGRpZmZl
cmVudCByZWdpb24gb2YgY29kZSBhbmQgdGhlcmVmb3JlIG5vdAorICAgICAgICBpbiB0aGUgc2Ft
ZSBjYWNoZSBsaW5lLgorCisgICAgICAgIFRoZSBkb3duc2lkZSBvZiB0aGUgQml0bWFwIGltcGxl
bWVudGF0aW9uIGlzIHRoYXQgaXQgdXNlcyBtb3JlIGluc3RydWN0aW9ucy4KKworICAgICAgICBU
aGlzIGNoYW5nZSBpcyBjdXJyZW50bHkgb25seSBlbmFibGVkIGZvciB4ODZfNjQsIHdoaWNoIHNo
b3dzIGFib3V0IGEgMC44JQorICAgICAgICBwcm9ncmVzc2lvbiBvbiBTcGVlZG9tZXRlciAyLgor
CisgICAgICAgIEl0IGFwcGVhcnMgdG8gYmUgYWJvdXQgYSAxJSByZWdyZXNzaW9uIG9uIEFSTTY0
RS4gIEhlbmNlLCBmb3Igbm93LCB3ZSBrZWVwIHRoZQorICAgICAgICBsaW5rZWQgbGlzdCBpbXBs
ZW1lbnRhdGlvbiBmb3IgQVJNNjQgYnVpbGRzLgorCisgICAgICAgIFRoaXMgaXMgaG93IHRoZSBC
aXRtYXAgRnJlZUxpc3Qgd29ya3M6CisKKyAgICAgICAgMS4gVGhlIEJpdG1hcCBpbXBsZW1lbnRh
dGlvbiBvbmx5IHJlcGxhY2VzIHRoZSBsaW5rZWQgbGlzdCBpbXBsZW1lbnRhdGlvbi4gIEl0Cisg
ICAgICAgICAgIGRvZXMgbm90IHJlcGxhY2UgdGhlIGJ1bXAgYWxsb2NhdG9yLgorCisgICAgICAg
IDIuIFRoZSBCaXRtYXAgYWxsb2NhdG9yIGtlZXBzIGEgbV9iaXRtYXAgdGhhdCBpcyBpbml0aWFs
aXplZCBpbgorICAgICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZWVw
KCkgdG8gaGF2ZSBhIGJpdCBzZXQgZm9yIGVhY2ggYXRvbQorICAgICAgICAgICBsb2NhdGlvbiB0
aGF0IGlzIGF2YWlsYWJsZSBmb3IgYWxsb2NhdGlvbiAoaS5lLiBpcyBmcmVlKS4gIE5vdGUgdGhh
dCBhIGNlbGwKKyAgICAgICAgICAgaXMgdXN1YWxseSBhbGxvY2F0ZWQgdXNpbmcgbW9yZSB0aGFu
IDEgYXRvbS4gIE9ubHkgdGhlIGJpdCBjb3JyZXNwb25kaW5nIHRvCisgICAgICAgICAgIHRoZSBm
aXJzdCBhdG9tIChpbiB0aGF0IGNlbGwgbGVuZ3RoIHJhbmdlIG9mIGZyZWUgYXRvbXMpIHdpbGwg
YmUgc2V0LgorCisgICAgICAgICAgIFRoaXMgaXMgY29uc2lzdGVudCB3aXRoIGhvdyBiaXRzIGlu
IE1hcmtlZEJsb2NrOjpGb290ZXI6Om1fbWFya3MgYW5kCisgICAgICAgICAgIE1hcmtlZEJsb2Nr
OjpGb290ZXI6Om1fbmV3bHlBbGxvY2F0ZWQgYXJlIHNldCBpLmUuIG9ubHkgdGhlIGJpdCBmb3Ig
dGhlIGZpcnN0CisgICAgICAgICAgIGF0b20gaW4gdGhlIGNlbGwgY2FuIGJlIHNldC4KKworICAg
ICAgICAzLiBUaGUgYWxsb2NhdGlvbiBhbGdvcml0aG0gdGhpbmtzIG9mIHRoZSBNYXJrZWRCbG9j
ayBhcyBjb25zaXN0aW5nIG9mIHJvd3MKKyAgICAgICAgICAgb2YgYXRvbXMsIHdoZXJlIHRoZSBu
dW1iZXIgb2YgYXRvbXMgaW4gYSByb3cgZXF1YWxzIHRoZSBudW1iZXIgb2YgYml0cyBpbgorICAg
ICAgICAgICBhIEF0b21zQml0bWFwOjpXb3JkLiAgT24gNjQtYml0IENQVXMsIHRoaXMgd291bGQg
YmUgNjQuCisKKyAgICAgICAgICAgV2Ugd2lsbCBzdGFydCBhbGxvY2F0aW5nIGZyb20gdGhlIGxh
c3QgKGhpZ2hlc3QgbnVtYmVyZWQpIHJvdyBkb3duIHRvIHRoZQorICAgICAgICAgICBmaXJzdCAo
cm93IDApLiAgQXMgd2UgYWxsb2NhdGUsIHdlIHdpbGwgb25seSB1cGRhdGUgbV9jdXJyZW50Um93
SW5kZXggYW5kCisgICAgICAgICAgIG1fY3VycmVudFJvd0JpdG1hcC4gIG1fYml0bWFwIHdpbGwg
bm90IGJlIHVwZGF0ZWQuICBUaGlzIGlzIHNvIGluIG9yZGVyIHRvCisgICAgICAgICAgIHJlZHVj
ZSB0aGUgbnVtYmVyIG9mIGluc3RydWN0aW9ucyBleGVjdXRlZCBkdXJpbmcgYW4gYWxsb2NhdGlv
bi4KKworICAgICAgICAgICBXaGVuIG1fY3VycmVudFJvd0luZGV4IHBvaW50cyB0byBOLCB0aGUg
QXRvbXNCaXRtYXA6OldvcmQgZm9yIHJvdyBOIGluCisgICAgICAgICAgIG1fYml0bWFwIHdpbGwg
aGF2ZSBiZWVuIGNvcGllZCBpbnRvIG1fY3VycmVudFJvd0JpdG1hcC4gIFRoaXMgaXMgdGhlIHJv
dworICAgICAgICAgICB0aGF0IHdlIHdpbGwgYmUgYWxsb2NhdGluZyBmcm9tIHVudGlsIHRoZSBy
b3cgaXMgZXhoYXVzdGVkLgorCisgICAgICAgICAgIFRoaXMgaXMgaG93IHdlIGtub3cgd2hldGhl
ciBhbiBhdG9tIGlzIGF2YWlsYWJsZSBmb3IgYWxsb2NhdGlvbiBvciBub3Q6CisgICAgICAgICAg
ICAgaS4gQXRvbXMgaW4gYW55IHJvd3MgYWJvdmUgbV9jdXJyZW50Um93SW5kZXggYXJlIGd1YXJh
bnRlZWQgdG8gYmUKKyAgICAgICAgICAgICAgICBhbGxvY2F0ZWQgYWxyZWFkeSAoYmVjYXVzZSB3
ZSBhbGxvY2F0ZSBkb3dud2FyZHMpLCBhbmQgaGVuY2UsIGFyZSBub3QKKyAgICAgICAgICAgICAg
ICBhdmFpbGFibGUuCisgICAgICAgICAgICBpaS4gRm9yIHJvdyBtX2N1cnJlbnRSb3dJbmRleCwg
bV9jdXJyZW50Um93Qml0bWFwIGlzIHRoZSBzb3VyY2Ugb2YgdHJ1dGgKKyAgICAgICAgICAgICAg
ICBvbiB3aGljaCBhdG9tcyBpbiB0aGUgcm93IGFyZSBhdmFpbGFibGUgZm9yIGFsbG9jYXRpb24u
CisgICAgICAgICAgIGlpaS4gRm9yIHJvd3MgYmVsb3cgbV9jdXJyZW50Um93SW5kZXgsIG1fYml0
bWFwIGlzIHRoZSBzb3VyY2Ugb2YgdHJ1dGggb24KKyAgICAgICAgICAgICAgICB3aGljaCBhdG9t
cyBhcmUgYXZhaWxhYmxlIGZvciBhbGxvY2F0aW9uLgorCisgICAgICAgICAgIFdoZW4gbV9jdXJy
ZW50Um93SW5kZXggcmVhY2hlcyAwLCB0aGUgaW5mbyBpbiBtX2JpdG1hcCBpcyBjb21wbGV0ZWx5
CisgICAgICAgICAgIG9ic29sZXRlZCwgYW5kIG1fY3VycmVudFJvd0JpdG1hcCBob2xkcyB0aGUg
YXZhaWxhYmlsaXR5IGluZm8gZm9yIHJvdyAwLgorICAgICAgICAgICBXaGVuIGJvdGggbV9jdXJy
ZW50Um93SW5kZXggYW5kIG1fY3VycmVudFJvd0JpdG1hcCBhcmUgMCwgdGhlbiB3ZSBoYXZlCisg
ICAgICAgICAgIGNvbXBsZXRlbHkgZXhoYXVzdGVkIHRoZSBibG9jayBhbmQgbm8gbW9yZSBhdG9t
cyBhcmUgYXZhaWxhYmxlIGZvcgorICAgICAgICAgICBhbGxvY2F0aW9uLgorCisgICAgICAgIDQu
IEFsbG9jYXRpb24gaGFwcGVucyBpbiAzIHBhdGhzOiBmYXN0LCBtaWRkbGUsIHNsb3cuCisKKyAg
ICAgICAgICAgVGhlIGZhc3QgcGF0aCBjaGVja3MgbV9jdXJyZW50Um93Qml0bWFwLiAgSWYgaXQn
cyBub3QgMCwgdGhlbiB3ZSBjb21wdXRlIHRoZQorICAgICAgICAgICBiaXQgbnVtYmVyIG9mIHRo
ZSBsb3dlc3Qgc2V0IGJpdCBpbiBpdC4gIFRoYXQgYml0IG51bWJlciB3aWxsIGJlIHVzZWQgdG9n
ZXRoZXIKKyAgICAgICAgICAgd2l0aCBtX2N1cnJlbnRNYXJrZWRCbG9ja1Jvd0FkZHJlc3MgdG8g
Y29tcHV0ZSB0aGUgYWRkcmVzcyBvZiB0aGUgYXRvbQorICAgICAgICAgICBsb2NhdGlvbiBhdmFp
bGFibGUgZm9yIGFsbG9jYXRpb24uICBtX2N1cnJlbnRSb3dCaXRtYXAgd2lsbCBiZSB1cGRhdGVk
IHRvIGNsZWFyCisgICAgICAgICAgIHRoZSBiaXQgZm9yIHRoZSBhdG9tIHRoYXQgaGFzIGp1c3Qg
YmVuIGFsbG9jYXRlZC4KKworICAgICAgICAgICBJZiBtX2N1cnJlbnRSb3dCaXRtYXAgaXMgMCwg
dGhlbiB3ZSdsbCBnbyB0byB0aGUgbWlkZGxlIHBhdGguCisKKyAgICAgICAgICAgVGhlIG1pZGRs
ZSBwYXRoIGNoZWNrcyBtX2N1cnJlbnRSb3dJbmRleCB0byBzZWUgaWYgd2UgaGF2ZSBtb3JlIHJv
d3MgdG8gYWxsb2NhdGUKKyAgICAgICAgICAgZnJvbS4gIEZvciBlYWNoIG1fY3VycmVudFJvd0lu
ZGV4LCB3ZSBjaGVjayBpdHMgY29ycmVzcG9uZGluZyBBdG9tc0JpdG1hcDo6V29yZAorICAgICAg
ICAgICBpbiBtX2JpdG1hcC4gIElmIHRoZSB3b3JkIGlzIG5vbi16ZXJvLCB3ZSBjb3B5IGl0IHRv
IG1fY3VycmVudFJvd0JpdG1hcCBhbmQKKyAgICAgICAgICAganVtcCB0byB0aGUgZmFzdCBwYXRo
IHRvIGRvIHRoZSBhbGxvY2F0aW9uLiAgVGhlIG1pZGRsZSBwYXRoIHdpbGwgdXBkYXRlCisgICAg
ICAgICAgIG1fY3VycmVudFJvd0luZGV4IHRvIHBvaW50IHRvIHRoZSBjdXJyZW50IHJvdyB3ZSdy
ZSBhbGxvY2F0aW5nIGZyb20uCisKKyAgICAgICAgICAgSWYgd2UgaGF2ZSBkZWNyZW1lbnRlZCBt
X2N1cnJlbnRSb3dJbmRleCBkb3duIHRvIDAgYnV0IHN0aWxsIGNhbid0IGZpbmQgYQorICAgICAg
ICAgICBub24temVybyBBdG9tc0JpdG1hcDo6V29yZCBpbiBtX2JpdG1hcCwgdGhlbiB0aGUgYmxv
Y2sgaGFzIGJlZW4gZXhoYXVzdGVkLCBhbmQKKyAgICAgICAgICAgd2UnbGwgZ28gdG8gdGhlIHNs
b3cgcGF0aC4KKworICAgICAgICAgICBUaGUgc2xvdyBwYXRoIGlzIGFuYWxvZ291cyB0byB0aGUg
b2xkIHNsb3cgcGF0aCBpLmUuIHdlIHRyeSB0byByZWZpbGwgdGhlCisgICAgICAgICAgIExvY2Fs
QWxsb2NhdG9yIHdpdGggYSBuZXcgTWFya2VkQmxvY2suCisKKyAgICAgICAgNS4gT24gdGhlIGxh
eW91dCBvZiBmaWVsZHMgaW4gRnJlZUxpc3QgKHNlZSBjaGFuZ2VzIGluIEZyZWVMaXN0LmgpLCB3
ZSB0cnkgdG8KKyAgICAgICAgICAgcHJlc2VydmUgdGhlIHBvc2l0aW9ucyBvZiB0aGUgYnVtcCBh
bGxvY2F0b3IgZmllbGRzLiAgVGhlIG9ubHkgY2hhbmdlIHdlIG1hZGUKKyAgICAgICAgICAgdGhl
cmUgaXMgbiB0aGUgbG9jYXRpb24gb2YgbV9jZWxsU2l6ZS4gIEl0IGlzIG5vdyBtb3ZlZCB1cCBu
ZXh0IHRvIG1fcmVtYWluaW5nLAorICAgICAgICAgICBhbmQgbV9vcmlnaW5hbFNpemUgaXMgbW92
ZWQgZG93bi4gIFRoaXMgaXMgYmVjYXVzZSBtX29yaWdpbmFsU2l6ZSBpcyBvbmx5CisgICAgICAg
ICAgIGFjY2Vzc2VkIGluIHRoZSBzbG93IHBhdGgsIGFuZCBtX2NlbGxTaXplIGlzIGFjY2Vzc2Vk
IGluIHRoZSBidW1wIGFsbG9jYXRpb24KKyAgICAgICAgICAgcGF0aC4KKworICAgICAgICAgICBO
ZXh0LCB3ZSB0cnkgdG8gcHV0IEJpdG1hcCBhbGxvY2F0aW9uIGZpZWxkcyB3aGVyZSB0aGUgbGlu
a2VkIGxpc3QgZmllbGRzCisgICAgICAgICAgIHdvdWxkIGhhdmUgYmVlbi4gIFRoZSBvbmUgYml0
IG9mIHRyaWNraW5lc3MgaXMgdGhhdCB3ZSdsbCBwdXQKKyAgICAgICAgICAgbV9jdXJyZW50TWFy
a2VkQmxvY2tSb3dBZGRyZXNzIGluIGEgdW5pb24gd2l0aCBtX3BheWxvYWRFbmQuICBUaGlzIGlz
IGJlY2F1c2UKKyAgICAgICAgICAgbV9wYXlsb2FkRW5kIGlzIG9ubHkgdXNlZCBpbiB0aGUgYnVt
cCBhbGxvY2F0aW9uIHBhdGguICBJZiBtX3JlbWFpbmluZyBpcyAwLAorICAgICAgICAgICB0aGVu
IHdlIGNhbiByZXVzZSB0aGlzIGxvY2F0aW9uIGZvciBtX2N1cnJlbnRNYXJrZWRCbG9ja1Jvd0Fk
ZHJlc3MuCisKKyAgICAgICAgICAgV2l0aCB0aGlzLCB3ZSB3b3VsZCBoYXZlIDQgYnl0ZXMgb2Yg
cGFkZGluZyBhZnRlciBtX2N1cnJlbnRSb3dJbmRleC4gIEZvcgorICAgICAgICAgICBjb21wYWN0
bmVzcywgd2UgcHV0IG1fb3JpZ2luYWxTaXplIHRoZXJlIGluIHRoYXQgc3BhY2UuICBGb3IgYnVp
bGRzIHRoYXQgdXNlCisgICAgICAgICAgIHRoZSBsaW5rZWQgbGlzdCBpbXBsZW1lbnRhdGlvbiwg
bV9vcmlnaW5hbFNpemUgd2lsbCBiZSBsb2NhdGVkIGJlbG93IGFmdGVyCisgICAgICAgICAgIG1f
Y2VsbFNpemUuCisKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0IzLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6YWxsb2NhdGVIZWFwQ2VsbCk6CisgICAgICAg
ICogaGVhcC9GcmVlTGlzdC5jcHA6CisgICAgICAgIChKU0M6OkZyZWVMaXN0OjpjbGVhcik6Cisg
ICAgICAgIChKU0M6OkZyZWVMaXN0Ojppbml0aWFsaXplQXRvbXNCaXRtYXApOgorICAgICAgICAo
SlNDOjpGcmVlTGlzdDo6aW5pdGlhbGl6ZUJ1bXApOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6
Y29udGFpbnMgY29uc3QpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6ZHVtcCBjb25zdCk6Cisg
ICAgICAgICogaGVhcC9GcmVlTGlzdC5oOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6Yml0bWFw
SXNFbXB0eSBjb25zdCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0OjphbGxvY2F0aW9uV2lsbEZh
aWwgY29uc3QpOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6b2Zmc2V0T2ZDdXJyZW50Um93Qml0
bWFwKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6Om9mZnNldE9mQml0bWFwUm93cyk6CisgICAg
ICAgIChKU0M6OkZyZWVMaXN0OjpvZmZzZXRPZkN1cnJlbnRSb3dJbmRleCk6CisgICAgICAgIChK
U0M6OkZyZWVMaXN0OjpvZmZzZXRPZkN1cnJlbnRNYXJrZWRCbG9ja1Jvd0FkZHJlc3MpOgorICAg
ICAgICAoSlNDOjpGcmVlTGlzdDo6b2Zmc2V0T2ZSZW1haW5pbmcpOgorICAgICAgICAoSlNDOjpG
cmVlTGlzdDo6YXRvbXNCaXRtYXApOgorICAgICAgICAoSlNDOjpGcmVlTGlzdDo6Yml0bWFwUm93
cyBjb25zdCk6CisgICAgICAgIChKU0M6OkZyZWVMaXN0OjpvZmZzZXRPZk9yaWdpbmFsU2l6ZSk6
IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9GcmVlTGlzdElubGluZXMuaDoKKyAgICAgICAgKEpT
Qzo6RnJlZUxpc3Q6OmFsbG9jYXRlKToKKyAgICAgICAgKEpTQzo6RnJlZUxpc3Q6OmZvckVhY2gg
Y29uc3QpOgorICAgICAgICAqIGhlYXAvTG9jYWxBbGxvY2F0b3IuY3BwOgorICAgICAgICAoSlND
OjpMb2NhbEFsbG9jYXRvcjo6aXNGcmVlTGlzdGVkQ2VsbCBjb25zdCk6CisgICAgICAgICogaGVh
cC9NYXJrZWRCbG9jay5oOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjphdG9t
QXQgY29uc3QpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmg6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXApOgorICAgICAgICAq
IGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAoSlNDOjpBc3NlbWJseUhlbHBlcnM6
OmVtaXRBbGxvY2F0ZVdpdGhOb25OdWxsQWxsb2NhdG9yKToKKyAgICAgICAgKiBqaXQvQXNzZW1i
bHlIZWxwZXJzLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEFsbG9jYXRl
V2l0aE5vbk51bGxBbGxvY2F0b3IpOgorCiAyMDIwLTA2LTE3ICBZdXN1a2UgU3V6dWtpICA8eXN1
enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gRnJlZXplIEpTQmlnSW50IHdoZW4gc2V0
dGluZyBpdCBhcyBhIGNvbnN0YW50IGluIEFJCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyNjMxODEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1MDc5LDcgKzE1MDc5LDE0IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBwYXRjaHBvaW50LT5u
dW1HUFNjcmF0Y2hSZWdpc3RlcnMrKzsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcGF0Y2hw
b2ludC0+YXBwZW5kU29tZVJlZ2lzdGVyV2l0aENsb2JiZXIoYWxsb2NhdG9yKTsKLSAgICAgICAg
cGF0Y2hwb2ludC0+bnVtR1BTY3JhdGNoUmVnaXN0ZXJzKys7CisjaWYgRU5BQkxFKEJJVE1BUF9G
UkVFTElTVCkKKyAgICAgICAgY29uc3RleHByIHVuc2lnbmVkIHNjcmF0Y2hSZWdpc3RlcnNOZWVk
ZWQgPSAzOworICAgICAgICBjb25zdGV4cHIgdW5zaWduZWQgYWxsb2NhdG9yU2NyYXRjaCA9IDM7
CisjZWxzZQorICAgICAgICBjb25zdGV4cHIgdW5zaWduZWQgc2NyYXRjaFJlZ2lzdGVyc05lZWRl
ZCA9IDE7CisgICAgICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBhbGxvY2F0b3JTY3JhdGNoID0gMTsK
KyNlbmRpZgorICAgICAgICBwYXRjaHBvaW50LT5udW1HUFNjcmF0Y2hSZWdpc3RlcnMgKz0gc2Ny
YXRjaFJlZ2lzdGVyc05lZWRlZDsKICAgICAgICAgcGF0Y2hwb2ludC0+cmVzdWx0Q29uc3RyYWlu
dHMgPSB7IFZhbHVlUmVwOjpTb21lRWFybHlSZWdpc3RlciB9OwogICAgICAgICAKICAgICAgICAg
bV9vdXQuYXBwZW5kU3VjY2Vzc29yKHVzdWFsbHkoY29udGludWF0aW9uKSk7CkBAIC0xNTA5Miw3
ICsxNTA5OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAg
R1BSUmVnIGFsbG9jYXRvckdQUjsKICAgICAgICAgICAgICAgICBpZiAoYWN0dWFsQWxsb2NhdG9y
LmlzQ29uc3RhbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yR1BSID0gcGFyYW1z
LmdwU2NyYXRjaCgxKTsKKyAgICAgICAgICAgICAgICAgICAgYWxsb2NhdG9yR1BSID0gcGFyYW1z
LmdwU2NyYXRjaChhbGxvY2F0b3JTY3JhdGNoKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgICAgICAgICAgIGFsbG9jYXRvckdQUiA9IHBhcmFtc1sxXS5ncHIoKTsKICAgICAgICAg
ICAgICAgICAKQEAgLTE1MTA0LDcgKzE1MTExLDExIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgLy8gYWxsIG9mIHRoZSBjb21waWxlciB0aWVycy4KICAgICAgICAgICAgICAgICBqaXQuZW1p
dEFsbG9jYXRlV2l0aE5vbk51bGxBbGxvY2F0b3IoCiAgICAgICAgICAgICAgICAgICAgIHBhcmFt
c1swXS5ncHIoKSwgYWN0dWFsQWxsb2NhdG9yLCBhbGxvY2F0b3JHUFIsIHBhcmFtcy5ncFNjcmF0
Y2goMCksCi0gICAgICAgICAgICAgICAgICAgIGp1bXBUb1Nsb3dQYXRoKTsKKyAgICAgICAgICAg
ICAgICAgICAganVtcFRvU2xvd1BhdGgKKyNpZiBFTkFCTEUoQklUTUFQX0ZSRUVMSVNUKQorICAg
ICAgICAgICAgICAgICAgICAsIHBhcmFtcy5ncFNjcmF0Y2goMSksIHBhcmFtcy5ncFNjcmF0Y2go
MikKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBqdW1wVG9TdWNjZXNzOwogICAgICAgICAg
ICAgICAgIGlmICghcGFyYW1zLmZhbGxzVGhyb3VnaFRvU3VjY2Vzc29yKDApKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0LmNwcAkocmV2aXNpb24gMjYzMTgxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMzksMTMgKzM5LDQ4IEBAIEZyZWVMaXN0Ojp+RnJlZUxpc3QoKQogCiB2b2lkIEZyZWVMaXN0
OjpjbGVhcigpCiB7CisjaWYgRU5BQkxFKEJJVE1BUF9GUkVFTElTVCkKKyAgICBtX2N1cnJlbnRS
b3dCaXRtYXAgPSAwOworICAgIG1fY3VycmVudFJvd0luZGV4ID0gMDsKKyNlbHNlCiAgICAgbV9z
Y3JhbWJsZWRIZWFkID0gMDsKICAgICBtX3NlY3JldCA9IDA7CisjZW5kaWYKICAgICBtX3BheWxv
YWRFbmQgPSBudWxscHRyOwogICAgIG1fcmVtYWluaW5nID0gMDsKICAgICBtX29yaWdpbmFsU2l6
ZSA9IDA7CiB9CiAKKyNpZiBFTkFCTEUoQklUTUFQX0ZSRUVMSVNUKQorCit2b2lkIEZyZWVMaXN0
Ojppbml0aWFsaXplQXRvbXNCaXRtYXAoTWFya2VkQmxvY2s6OkhhbmRsZSogYmxvY2ssIEF0b21z
Qml0bWFwJiBmcmVlQXRvbXMsIHVuc2lnbmVkIGJ5dGVzKQoreworI2lmIEFTU0VSVF9FTkFCTEVE
CisgICAgbV9tYXJrZWRCbG9jayA9IGJsb2NrOworI2VuZGlmCisgICAgQVNTRVJUX1VOVVNFRChm
cmVlQXRvbXMsICZmcmVlQXRvbXMgPT0gJm1fYml0bWFwKTsKKyAgICAvLyBtX2JpdG1hcCBoYXMg
YWxyZWFkeSBiZWVuIGZpbGxlZCBpbiBieSBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXpl
ZFN3ZWVwKCkuCisKKyAgICBtX2N1cnJlbnRSb3dCaXRtYXAgPSAwOworICAgIHNpemVfdCByb3dJ
bmRleCA9IEF0b21zQml0bWFwOjpudW1iZXJPZldvcmRzOworICAgIHdoaWxlIChyb3dJbmRleC0t
KSB7CisgICAgICAgIGF1dG8gcm93Qml0bWFwID0gbV9iaXRtYXAud29yZEF0KHJvd0luZGV4KTsK
KyAgICAgICAgaWYgKHJvd0JpdG1hcCkgeworICAgICAgICAgICAgbV9jdXJyZW50Um93Qml0bWFw
ID0gcm93Qml0bWFwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAg
QVNTRVJUKG1fY3VycmVudFJvd0JpdG1hcCB8fCBtX2JpdG1hcC5pc0VtcHR5KCkpOworICAgIG1f
Y3VycmVudFJvd0luZGV4ID0gbV9jdXJyZW50Um93Qml0bWFwID8gcm93SW5kZXggOiAwOworCisg
ICAgc2l6ZV90IGZpcnN0QXRvbUluUm93ID0gbV9jdXJyZW50Um93SW5kZXggKiBhdG9tc1BlclJv
dzsKKyAgICBtX2N1cnJlbnRNYXJrZWRCbG9ja1Jvd0FkZHJlc3MgPSBiaXR3aXNlX2Nhc3Q8QXRv
bSo+KGJsb2NrLT5hdG9tQXQoZmlyc3RBdG9tSW5Sb3cpKTsKKyAgICBtX29yaWdpbmFsU2l6ZSA9
IGJ5dGVzOworfQorCisjZWxzZQorLy8gTGlua2VkIExpc3QgaW1wbGVtZW50YXRpb24uCisKIHZv
aWQgRnJlZUxpc3Q6OmluaXRpYWxpemVMaXN0KEZyZWVDZWxsKiBoZWFkLCB1aW50cHRyX3Qgc2Vj
cmV0LCB1bnNpZ25lZCBieXRlcykKIHsKICAgICAvLyBJdCdzICpzbGlnaHRseSogbW9yZSBvcHRp
bWFsIHRvIHVzZSBhIHNjcmFtYmxlZCBoZWFkLiBJdCBzYXZlcyBhIHJlZ2lzdGVyIG9uIHRoZSBm
YXN0IHBhdGguCkBAIC01NiwxNiArOTEsMjMgQEAgdm9pZCBGcmVlTGlzdDo6aW5pdGlhbGl6ZUxp
c3QoRnJlZUNlbGwqIAogICAgIG1fb3JpZ2luYWxTaXplID0gYnl0ZXM7CiB9CiAKKyNlbmRpZiAv
LyBFTkFCTEUoQklUTUFQX0ZSRUVMSVNUKQorCiB2b2lkIEZyZWVMaXN0Ojppbml0aWFsaXplQnVt
cChjaGFyKiBwYXlsb2FkRW5kLCB1bnNpZ25lZCByZW1haW5pbmcpCiB7CisjaWYgRU5BQkxFKEJJ
VE1BUF9GUkVFTElTVCkKKyAgICBtX2N1cnJlbnRSb3dCaXRtYXAgPSAwOworICAgIG1fY3VycmVu
dFJvd0luZGV4ID0gMDsKKyNlbHNlCiAgICAgbV9zY3JhbWJsZWRIZWFkID0gMDsKICAgICBtX3Nl
Y3JldCA9IDA7CisjZW5kaWYKICAgICBtX3BheWxvYWRFbmQgPSBwYXlsb2FkRW5kOwogICAgIG1f
cmVtYWluaW5nID0gcmVtYWluaW5nOwogICAgIG1fb3JpZ2luYWxTaXplID0gcmVtYWluaW5nOwog
fQogCi1ib29sIEZyZWVMaXN0Ojpjb250YWlucyhIZWFwQ2VsbCogdGFyZ2V0KSBjb25zdAorYm9v
bCBGcmVlTGlzdDo6Y29udGFpbnMoSGVhcENlbGwqIHRhcmdldCwgTWFya2VkQmxvY2s6OkhhbmRs
ZSogY3VycmVudEJsb2NrKSBjb25zdAogewogICAgIGlmIChtX3JlbWFpbmluZykgewogICAgICAg
ICBjb25zdCB2b2lkKiBzdGFydCA9IChtX3BheWxvYWRFbmQgLSBtX3JlbWFpbmluZyk7CkBAIC03
MywxOSArMTE1LDUxIEBAIGJvb2wgRnJlZUxpc3Q6OmNvbnRhaW5zKEhlYXBDZWxsKiB0YXJnZXQK
ICAgICAgICAgcmV0dXJuIChzdGFydCA8PSB0YXJnZXQpICYmICh0YXJnZXQgPCBlbmQpOwogICAg
IH0KIAorI2lmIEVOQUJMRShCSVRNQVBfRlJFRUxJU1QpCisgICAgaWYgKGJpdG1hcElzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gY3VycmVudEJsb2NrIG1heSBiZSBu
dWxsIGlmIHRoZSBhbGxvY2F0b3IgaGFzIGJlZW4gcmVzZXQgKGFuZCB0aGVyZWZvcmUsCisgICAg
Ly8gdGhlIEZyZWVMaXN0IGNsZWFyZWQuIEhlbmNlLCB3ZSBzaG91bGQgb25seSBjaGVjayB0aGlz
IGFzc2VydGlvbiBhZnRlcgorICAgIC8vIHdlIGNoZWNrIGlmIHRoZSBGcmVlTGlzdCBiaXRtYXAg
aXMgZW1wdHkgYWJvdmUuCisgICAgQVNTRVJUKG1fbWFya2VkQmxvY2sgPT0gY3VycmVudEJsb2Nr
KTsKKyAgICBpZiAoIWN1cnJlbnRCbG9jay0+Y29udGFpbnModGFyZ2V0KSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgdW5zaWduZWQgYXRvbU51bWJlciA9IGN1cnJlbnRCbG9jay0+Ymxv
Y2soKS5hdG9tTnVtYmVyKHRhcmdldCk7CisgICAgdW5zaWduZWQgcm93SW5kZXggPSBhdG9tTnVt
YmVyIC8gYXRvbXNQZXJSb3c7CisgICAgaWYgKHJvd0luZGV4ID4gbV9jdXJyZW50Um93SW5kZXgp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAocm93SW5kZXggPT0gbV9jdXJyZW50Um93
SW5kZXgpIHsKKyAgICAgICAgY29uc3RleHByIEF0b21zQml0bWFwOjpXb3JkIG9uZSA9IDE7Cisg
ICAgICAgIHVuc2lnbmVkIGZpcnN0QXRvbUluUm93ID0gcm93SW5kZXggKiBhdG9tc1BlclJvdzsK
KyAgICAgICAgdW5zaWduZWQgYXRvbUluZGV4SW5Sb3cgPSBhdG9tTnVtYmVyIC0gZmlyc3RBdG9t
SW5Sb3c7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRSb3dCaXRtYXAgJiAob25lIDw8IGF0b21J
bmRleEluUm93KTsKKyAgICB9CisgICAgcmV0dXJuIG1fYml0bWFwLmdldChhdG9tTnVtYmVyKTsK
KworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY3VycmVudEJsb2NrKTsKICAgICBGcmVlQ2VsbCog
Y2FuZGlkYXRlID0gaGVhZCgpOwogICAgIHdoaWxlIChjYW5kaWRhdGUpIHsKICAgICAgICAgaWYg
KGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KGNhbmRpZGF0ZSkgPT0gdGFyZ2V0KQogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZS0+bmV4dChtX3Nl
Y3JldCk7CiAgICAgfQotCiAgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCiB9CiAKIHZvaWQgRnJl
ZUxpc3Q6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKKyNpZiBFTkFCTEUoQklUTUFQ
X0ZSRUVMSVNUKQorICAgIGlmIChtX3JlbWFpbmluZykKKyAgICAgICAgb3V0LnByaW50KCJ7cGF5
bG9hZEVuZCA9ICIsIFJhd1BvaW50ZXIobV9wYXlsb2FkRW5kKSwgIiwgcmVtYWluaW5nID0gIiwg
bV9yZW1haW5pbmcsICIsIG9yaWdpbmFsU2l6ZSA9ICIsIG1fb3JpZ2luYWxTaXplLCAifSIpOwor
ICAgIGVsc2UKKyAgICAgICAgb3V0LnByaW50KCJ7Y3VycmVudFJvd0JpdG1hcCA9ICIsIG1fY3Vy
cmVudFJvd0JpdG1hcCwgIiwgY3VycmVudFJvd0luZGV4ID0gIiwgbV9jdXJyZW50Um93SW5kZXgs
ICIsIG9yaWdpbmFsU2l6ZSA9ICIsIG1fb3JpZ2luYWxTaXplLCAifSIpOworI2Vsc2UKICAgICBv
dXQucHJpbnQoIntoZWFkID0gIiwgUmF3UG9pbnRlcihoZWFkKCkpLCAiLCBzZWNyZXQgPSAiLCBt
X3NlY3JldCwgIiwgcGF5bG9hZEVuZCA9ICIsIFJhd1BvaW50ZXIobV9wYXlsb2FkRW5kKSwgIiwg
cmVtYWluaW5nID0gIiwgbV9yZW1haW5pbmcsICIsIG9yaWdpbmFsU2l6ZSA9ICIsIG1fb3JpZ2lu
YWxTaXplLCAifSIpOworI2VuZGlmCiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvRnJlZUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5oCShyZXZpc2lvbiAyNjMxODEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVlTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjUs
MTMgKzI1LDIyIEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiTWFya2VkQmxvY2suaCIK
ICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KKyNpbmNsdWRlIDx3dGYvU3RkSW50RXh0cmFzLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCiBj
bGFzcyBIZWFwQ2VsbDsKIAorI2lmIENQVShYODZfNjQpCisjZGVmaW5lIEVOQUJMRV9CSVRNQVBf
RlJFRUxJU1QgMQorI2Vsc2UKKyNkZWZpbmUgRU5BQkxFX0JJVE1BUF9GUkVFTElTVCAwCisjZW5k
aWYKKworI2lmICFFTkFCTEUoQklUTUFQX0ZSRUVMSVNUKQogc3RydWN0IEZyZWVDZWxsIHsKICAg
ICBzdGF0aWMgdWludHB0cl90IHNjcmFtYmxlKEZyZWVDZWxsKiBjZWxsLCB1aW50cHRyX3Qgc2Vj
cmV0KQogICAgIHsKQEAgLTU4LDYgKzY3LDcgQEAgc3RydWN0IEZyZWVDZWxsIHsKICAgICB1aW50
NjRfdCBwcmVzZXJ2ZWRCaXRzRm9yQ3Jhc2hBbmFseXNpczsKICAgICB1aW50cHRyX3Qgc2NyYW1i
bGVkTmV4dDsKIH07CisjZW5kaWYKIAogY2xhc3MgRnJlZUxpc3QgewogcHVibGljOgpAQCAtNjYs
MjcgKzc2LDYxIEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGNsZWFyKCk7CiAgICAgCi0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBpbml0aWFsaXplTGlzdChGcmVlQ2VsbCogaGVhZCwgdWlu
dHB0cl90IHNlY3JldCwgdW5zaWduZWQgYnl0ZXMpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgaW5pdGlhbGl6ZUJ1bXAoY2hhciogcGF5bG9hZEVuZCwgdW5zaWduZWQgcmVtYWluaW5nKTsK
ICAgICAKLSAgICBib29sIGFsbG9jYXRpb25XaWxsRmFpbCgpIGNvbnN0IHsgcmV0dXJuICFoZWFk
KCkgJiYgIW1fcmVtYWluaW5nOyB9CiAgICAgYm9vbCBhbGxvY2F0aW9uV2lsbFN1Y2NlZWQoKSBj
b25zdCB7IHJldHVybiAhYWxsb2NhdGlvbldpbGxGYWlsKCk7IH0KICAgICAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jPgogICAgIEhlYXBDZWxsKiBhbGxvY2F0ZShjb25zdCBGdW5jJiBzbG93
UGF0aCk7CiAgICAgCi0gICAgYm9vbCBjb250YWlucyhIZWFwQ2VsbCopIGNvbnN0OworICAgIGJv
b2wgY29udGFpbnMoSGVhcENlbGwqLCBNYXJrZWRCbG9jazo6SGFuZGxlKiBjdXJyZW50QmxvY2sp
IGNvbnN0OwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+CiAgICAgdm9pZCBmb3JF
YWNoKGNvbnN0IEZ1bmMmKSBjb25zdDsKICAgICAKICAgICB1bnNpZ25lZCBvcmlnaW5hbFNpemUo
KSBjb25zdCB7IHJldHVybiBtX29yaWdpbmFsU2l6ZTsgfQogCisjaWYgRU5BQkxFKEJJVE1BUF9G
UkVFTElTVCkKKyAgICB1c2luZyBBdG9tID0gTWFya2VkQmxvY2s6OkF0b207CisgICAgdXNpbmcg
QXRvbXNCaXRtYXAgPSBNYXJrZWRCbG9jazo6QXRvbXNCaXRtYXA7CisKKyAgICBzdGF0aWMgY29u
c3RleHByIHNpemVfdCBhdG9tc1BlclJvdyA9IEF0b21zQml0bWFwOjpiaXRzSW5Xb3JkOworICAg
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGF0b21zUm93Qnl0ZXMgPSBhdG9tc1BlclJvdyAqIHNp
emVvZihBdG9tKTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIGF0b21TaXplU2hpZnQg
PSBXVEY6OmxvZzJDb25zdGV4cHIoc2l6ZW9mKEF0b20pKTsKKyAgICBzdGF0aWNfYXNzZXJ0KChz
dGF0aWNfY2FzdDxzaXplX3Q+KDEpIDw8IGF0b21TaXplU2hpZnQpID09IHNpemVvZihBdG9tKSk7
CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGluaXRpYWxpemVBdG9tc0JpdG1hcChNYXJr
ZWRCbG9jazo6SGFuZGxlKiwgQXRvbXNCaXRtYXAmIGZyZWVBdG9tcywgdW5zaWduZWQgYnl0ZXMp
OworCisgICAgYm9vbCBiaXRtYXBJc0VtcHR5KCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIFJl
bWVtYmVyLCB3ZSBkb24ndCBhY3R1YWxseSBjbGVhciB0aGUgYml0cyBpbiBtX2JpdG1hcCBhcyB3
ZSBhbGxvY2F0ZQorICAgICAgICAvLyB0aGUgYXRvbXMuIEluc3RlYWQsIG1fY3VycmVudFJvd0Jp
dG1hcCBhbmQgbV9jdXJyZW50Um93SW5kZXggdGVsbHMgdXMKKyAgICAgICAgLy8gaWYgdGhlcmUg
YXRvbXMgc3RpbGwgYXZhaWxhYmxlIGZvciBhbGxvY2F0aW9uLiBTZWUgY29tbWVudCBibG9iIGJl
bG93CisgICAgICAgIC8vIGF0IHRoZSBkZWNsYXJhdGlvbiBvZiBtX2N1cnJlbnRSb3dJbmRleCBm
b3IgbW9yZSBkZXRhaWxzLgorICAgICAgICByZXR1cm4gIW1fY3VycmVudFJvd0JpdG1hcCAmJiAh
bV9jdXJyZW50Um93SW5kZXg7CisgICAgfQorICAgIGJvb2wgYWxsb2NhdGlvbldpbGxGYWlsKCkg
Y29uc3QgeyByZXR1cm4gYml0bWFwSXNFbXB0eSgpICYmICFtX3JlbWFpbmluZzsgfQorCisgICAg
c3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkN1cnJlbnRSb3dCaXRtYXAoKSB7IHJldHVybiBPQkpF
Q1RfT0ZGU0VUT0YoRnJlZUxpc3QsIG1fY3VycmVudFJvd0JpdG1hcCk7IH0KKworICAgIC8vIFdl
J3JlIGRlbGliZXJhdGVseSByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgMSB3b3JkIGJlZm9yZSBt
X2JpdG1hcCBzbyB0aGF0CisgICAgLy8gd2UgY2FuIHNjaGVkdWxlIGluc3RydWN0aW9ucyBiZXR0
ZXIgaS5lLiB0byBkbyBhIGxvYWQgYmVmb3JlIGRlY3JlbWVudGluZyB0aGUKKyAgICAvLyByb3cg
aW5kZXguCisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkJpdG1hcFJvd3MoKSB7IHJldHVy
biBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3QsIG1fYml0bWFwKSAtIHNpemVvZihBdG9tc0JpdG1h
cDo6V29yZCk7IH0KKworICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDdXJyZW50Um93SW5k
ZXgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoRnJlZUxpc3QsIG1fY3VycmVudFJvd0luZGV4
KTsgfQorICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZDdXJyZW50TWFya2VkQmxvY2tSb3dB
ZGRyZXNzKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBtX2N1cnJlbnRNYXJr
ZWRCbG9ja1Jvd0FkZHJlc3MpOyB9CisjZWxzZQorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
aW5pdGlhbGl6ZUxpc3QoRnJlZUNlbGwqIGhlYWQsIHVpbnRwdHJfdCBzZWNyZXQsIHVuc2lnbmVk
IGJ5dGVzKTsKKworICAgIGJvb2wgYWxsb2NhdGlvbldpbGxGYWlsKCkgY29uc3QgeyByZXR1cm4g
IWhlYWQoKSAmJiAhbV9yZW1haW5pbmc7IH0KKwogICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0
T2ZTY3JhbWJsZWRIZWFkKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEZyZWVMaXN0LCBtX3Nj
cmFtYmxlZEhlYWQpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZlNlY3JldCgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgbV9zZWNyZXQpOyB9CisjZW5kaWYKKwog
ICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZQYXlsb2FkRW5kKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEZyZWVMaXN0LCBtX3BheWxvYWRFbmQpOyB9CiAgICAgc3RhdGljIHB0cmRpZmZf
dCBvZmZzZXRPZlJlbWFpbmluZygpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwg
bV9yZW1haW5pbmcpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk9yaWdpbmFsU2l6
ZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihGcmVlTGlzdCwgbV9vcmlnaW5hbFNpemUpOyB9
CiAgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkNlbGxTaXplKCkgeyByZXR1cm4gT0JKRUNU
X09GRlNFVE9GKEZyZWVMaXN0LCBtX2NlbGxTaXplKTsgfQogICAgIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwpAQCAtOTQsMTQgKzEzOCw3NCBA
QCBwdWJsaWM6CiAgICAgdW5zaWduZWQgY2VsbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2NlbGxT
aXplOyB9CiAgICAgCiBwcml2YXRlOgorCisjaWYgRU5BQkxFKEJJVE1BUF9GUkVFTElTVCkKKyAg
ICBBdG9tc0JpdG1hcCYgYXRvbXNCaXRtYXAoKSB7IHJldHVybiBtX2JpdG1hcDsgfQorICAgIEF0
b21zQml0bWFwOjpXb3JkKiBiaXRtYXBSb3dzKCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIFNl
ZSBjb21tZW50IGFib3V0IG9mZnNldE9mQml0bWFwUm93cygpLgorICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PEF0b21zQml0bWFwOjpXb3JkKj4oJm1fYml0bWFwKSAtIDE7CisgICAgfQorCisg
ICAgLy8gVGhpcyBhbGxvY2F0aW9uIGFsZ29yaXRobSB0aGlua3Mgb2YgdGhlIE1hcmtlZEJsb2Nr
IGFzIGNvbnNpc3Rpbmcgb2Ygcm93cworICAgIC8vIG9mIGF0b21zLCB3aGVyZSB0aGUgbnVtYmVy
IG9mIGF0b21zIGluIGEgcm93IGVxdWFscyB0aGUgbnVtYmVyIG9mIGJpdHMgaW4KKyAgICAvLyBh
IEF0b21zQml0bWFwOjpXb3JkLiBPbiA2NC1iaXQgQ1BVcywgdGhpcyB3b3VsZCBiZSA2NC4KKyAg
ICAvLworICAgIC8vIFdlIHdpbGwgc3RhcnQgYWxsb2NhdGluZyBmcm9tIHRoZSBsYXN0IChoaWdo
ZXN0IG51bWJlcmVkKSByb3cgZG93biB0byB0aGUKKyAgICAvLyBmaXJzdCAocm93IDApLiBBcyB3
ZSBhbGxvY2F0ZSwgd2Ugd2lsbCBvbmx5IHVwZGF0ZSBtX2N1cnJlbnRSb3dJbmRleCBhbmQKKyAg
ICAvLyBtX2N1cnJlbnRSb3dCaXRtYXAuIG1fYml0bWFwIHdpbGwgbm90IGJlIHVwZGF0ZWQuIFRo
aXMgaXMgc28gaW4gb2RlciB0bworICAgIC8vIHJlZHVjZSB0aGUgbnVtYmVyIG9mIGluc3RydWN0
aW9ucyBleGVjdXRlZCBkdXJpbmcgYW4gYWxsb2NhdGlvbi4KKyAgICAvLworICAgIC8vIFdoZW4g
bV9jdXJyZW50Um93SW5kZXggcG9pbnRzIHRvIE4sIHRoZSBBdG9tc0JpdG1hcDo6V29yZCBmb3Ig
cm93IE4gaW4KKyAgICAvLyBtX2JpdG1hcCB3aWxsIGhhdmUgYmVlbiBjb3BpZWQgaW50byBtX2N1
cnJlbnRSb3dCaXRtYXAuIFRoaXMgaXMgdGhlIHJvdworICAgIC8vIHRoYXQgd2Ugd2lsbCBiZSBh
bGxvY2F0aW5nIGZyb20gdW50aWwgdGhlIHJvdyBpcyBleGhhdXN0ZWQuCisgICAgLy8KKyAgICAv
LyBUaGlzIGlzIGhvdyB3ZSBrbm93IHdoZXRoZXIgYW4gYXRvbSBpcyBhdmFpbGFibGUgZm9yIGFs
bG9jYXRpb24gb3Igbm90OgorICAgIC8vIDEuIEF0b21zIGluIGFueSByb3dzIGFib3ZlIG1fY3Vy
cmVudFJvd0luZGV4IGFyZSBndWFyYW50ZWVkIHRvIGJlCisgICAgLy8gICAgYWxsb2NhdGVkIGFs
cmVhZHkgKGJlY2F1c2Ugd2UgYWxsb2NhdGUgZG93bndhcmRzKSwgYW5kIGhlbmNlLCBhcmUgbm90
CisgICAgLy8gICAgYXZhaWxhYmxlLgorICAgIC8vIDIuIEZvciByb3cgbV9jdXJyZW50Um93SW5k
ZXgsIG1fY3VycmVudFJvd0JpdG1hcCBpcyB0aGUgc291cmNlIG9mIHRydXRoCisgICAgLy8gICAg
b24gd2hpY2ggYXRvbXMgaW4gdGhlIHJvdyBhcmUgYXZhaWxhYmxlIGZvciBhbGxvY2F0aW9uLgor
ICAgIC8vIDMuIEZvciByb3dzIGJlbG93IG1fY3VycmVudFJvd0luZGV4LCBtX2JpdG1hcCBpcyB0
aGUgc291cmNlIG9mIHRydXRoIG9uCisgICAgLy8gICAgd2hpY2ggYXRvbXMgYXJlIGF2YWlsYWJs
ZSBmb3IgYWxsb2NhdGlvbi4KKyAgICAvLworICAgIC8vIFdoZW4gbV9jdXJyZW50Um93SW5kZXgg
cmVhY2hlcyAwLCB0aGUgaW5mbyBpbiBtX2JpdG1hcCBpcyBjb21wbGV0ZWx5CisgICAgLy8gb2Jz
b2xldGVkLCBhbmQgbV9jdXJyZW50Um93Qml0bWFwIGhvbGRzIHRoZSBhdmFpbGFiaWxpdHkgaW5m
byBmb3Igcm93IDAuCisgICAgLy8gV2hlbiBib3RoIG1fY3VycmVudFJvd0luZGV4IGFuZCBtX2N1
cnJlbnRSb3dCaXRtYXAgYXJlIDAsIHRoZW4gd2UgaGF2ZQorICAgIC8vIGNvbXBsZXRlbHkgZXho
YXVzdGVkIHRoZSBibG9jayBhbmQgbm8gbW9yZSBhdG9tcyBhcmUgYXZhaWxhYmxlIGZvcgorICAg
IC8vIGFsbG9jYXRpb24uCisKKyAgICBBdG9tc0JpdG1hcDo6V29yZCBtX2N1cnJlbnRSb3dCaXRt
YXAgeyAwIH07CisgICAgdW5zaWduZWQgbV9jdXJyZW50Um93SW5kZXggeyAwIH07CisgICAgdW5z
aWduZWQgbV9vcmlnaW5hbFNpemUgeyAwIH07CisKKyNlbHNlCiAgICAgRnJlZUNlbGwqIGhlYWQo
KSBjb25zdCB7IHJldHVybiBGcmVlQ2VsbDo6ZGVzY3JhbWJsZShtX3NjcmFtYmxlZEhlYWQsIG1f
c2VjcmV0KTsgfQotICAgIAorCiAgICAgdWludHB0cl90IG1fc2NyYW1ibGVkSGVhZCB7IDAgfTsK
ICAgICB1aW50cHRyX3QgbV9zZWNyZXQgeyAwIH07Ci0gICAgY2hhciogbV9wYXlsb2FkRW5kIHsg
bnVsbHB0ciB9OworI2VuZGlmCisKKyAgICB1bmlvbiB7CisgICAgICAgIGNoYXIqIG1fcGF5bG9h
ZEVuZCB7IG51bGxwdHIgfTsKKyNpZiBFTkFCTEUoQklUTUFQX0ZSRUVMSVNUKQorICAgICAgICBB
dG9tKiBtX2N1cnJlbnRNYXJrZWRCbG9ja1Jvd0FkZHJlc3M7CisjZW5kaWYKKyAgICB9OwogICAg
IHVuc2lnbmVkIG1fcmVtYWluaW5nIHsgMCB9OwotICAgIHVuc2lnbmVkIG1fb3JpZ2luYWxTaXpl
IHsgMCB9OwogICAgIHVuc2lnbmVkIG1fY2VsbFNpemUgeyAwIH07CisKKyNpZiBFTkFCTEUoQklU
TUFQX0ZSRUVMSVNUKQorICAgIEF0b21zQml0bWFwIG1fYml0bWFwOworI2Vsc2UKKyAgICB1bnNp
Z25lZCBtX29yaWdpbmFsU2l6ZSB7IDAgfTsKKyNlbmRpZgorCisjaWYgQVNTRVJUX0VOQUJMRUQK
KyAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBtX21hcmtlZEJsb2NrIHsgbnVsbHB0ciB9OworI2Vu
ZGlmCisKKyAgICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CiB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0SW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0ZyZWVMaXN0SW5saW5l
cy5oCShyZXZpc2lvbiAyNjMxODEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9GcmVl
TGlzdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw3ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgIkZyZWVMaXN0LmgiCi0jaW5jbHVkZSAiTWFya2VkQmxvY2suaCIKKyNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNDAsMTMgKzQw
LDQ2IEBAIEFMV0FZU19JTkxJTkUgSGVhcENlbGwqIEZyZWVMaXN0OjphbGxvY2EKICAgICAgICAg
bV9yZW1haW5pbmcgPSByZW1haW5pbmc7CiAgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8SGVh
cENlbGwqPihtX3BheWxvYWRFbmQgLSByZW1haW5pbmcgLSBjZWxsU2l6ZSk7CiAgICAgfQotICAg
IAorCisjaWYgRU5BQkxFKEJJVE1BUF9GUkVFTElTVCkKKyAgICBBdG9tc0JpdG1hcDo6V29yZCBy
b3dCaXRtYXAgPSBtX2N1cnJlbnRSb3dCaXRtYXA7CisgICAgZG8geworICAgICAgICBpZiAocm93
Qml0bWFwKSB7CisgICAgICAgICAgICBjb25zdGV4cHIgQXRvbXNCaXRtYXA6OldvcmQgb25lID0g
MTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGF0b21JbmRleEluUm93ID0gY3R6KHJvd0JpdG1hcCk7
CisgICAgICAgICAgICBhdXRvKiBjZWxsID0gYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4oJm1fY3Vy
cmVudE1hcmtlZEJsb2NrUm93QWRkcmVzc1thdG9tSW5kZXhJblJvd10pOworICAgICAgICAgICAg
cm93Qml0bWFwICY9IH4ob25lIDw8IGF0b21JbmRleEluUm93KTsKKyAgICAgICAgICAgIG1fY3Vy
cmVudFJvd0JpdG1hcCA9IHJvd0JpdG1hcDsKKyAgICAgICAgICAgIHJldHVybiBjZWxsOworICAg
ICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgcm93SW5kZXggPSBtX2N1cnJlbnRSb3dJbmRleDsK
KyAgICAgICAgYXV0byogcm93QWRkcmVzcyA9IG1fY3VycmVudE1hcmtlZEJsb2NrUm93QWRkcmVz
czsKKyAgICAgICAgd2hpbGUgKHJvd0luZGV4KSB7CisgICAgICAgICAgICAvLyBXZSBsb2FkIGJl
Zm9yZSBkZWNyZW1lbnRpbmcgcm93SW5kZXggYmVjYXVzZSBiaXRtYXBSb3dzKCkgcG9pbnRzCisg
ICAgICAgICAgICAvLyB0byAxIHdvcmQgYmVmb3JlIG1fYml0bWFwLiBTZWUgY29tbWVudHMgYWJv
dXQgb2Zmc2V0T2ZCaXRtYXBSb3dzKCkKKyAgICAgICAgICAgIC8vIGZvciB3aHkgd2UgZG8gdGhp
cy4KKyAgICAgICAgICAgIHJvd0JpdG1hcCA9IGJpdG1hcFJvd3MoKVtyb3dJbmRleC0tXTsKKyAg
ICAgICAgICAgIHJvd0FkZHJlc3MgLT0gYXRvbXNQZXJSb3c7CisgICAgICAgICAgICBpZiAocm93
Qml0bWFwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIG1fY3Vy
cmVudE1hcmtlZEJsb2NrUm93QWRkcmVzcyA9IHJvd0FkZHJlc3M7CisgICAgICAgIG1fY3VycmVu
dFJvd0luZGV4ID0gcm93SW5kZXg7CisgICAgfSB3aGlsZSAocm93Qml0bWFwKTsKKworICAgIG1f
Y3VycmVudFJvd0JpdG1hcCA9IHJvd0JpdG1hcDsKKyAgICBBU1NFUlQoYml0bWFwSXNFbXB0eSgp
KTsKKyAgICByZXR1cm4gc2xvd1BhdGgoKTsKKworI2Vsc2UgLy8gIUVOQUJMRShCSVRNQVBfRlJF
RUxJU1QpCiAgICAgRnJlZUNlbGwqIHJlc3VsdCA9IGhlYWQoKTsKICAgICBpZiAoVU5MSUtFTFko
IXJlc3VsdCkpCiAgICAgICAgIHJldHVybiBzbG93UGF0aCgpOwogICAgIAogICAgIG1fc2NyYW1i
bGVkSGVhZCA9IHJlc3VsdC0+c2NyYW1ibGVkTmV4dDsKICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PEhlYXBDZWxsKj4ocmVzdWx0KTsKKyNlbmRpZiAvLyAhRU5BQkxFKEJJVE1BUF9GUkVFTElTVCkK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KQEAgLTU2LDYgKzg5LDMzIEBAIHZvaWQgRnJl
ZUxpc3Q6OmZvckVhY2goY29uc3QgRnVuYyYgZnVuYykKICAgICAgICAgZm9yICh1bnNpZ25lZCBy
ZW1haW5pbmcgPSBtX3JlbWFpbmluZzsgcmVtYWluaW5nOyByZW1haW5pbmcgLT0gbV9jZWxsU2l6
ZSkKICAgICAgICAgICAgIGZ1bmMoYml0d2lzZV9jYXN0PEhlYXBDZWxsKj4obV9wYXlsb2FkRW5k
IC0gcmVtYWluaW5nKSk7CiAgICAgfSBlbHNlIHsKKyNpZiBFTkFCTEUoQklUTUFQX0ZSRUVMSVNU
KQorICAgICAgICBpZiAoYml0bWFwSXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIEF0b21zQml0bWFwOjpXb3JkIHJvd0JpdG1hcCA9IG1fY3VycmVudFJvd0JpdG1hcDsK
KyAgICAgICAgdW5zaWduZWQgcm93SW5kZXggPSBtX2N1cnJlbnRSb3dJbmRleDsKKyAgICAgICAg
QXRvbSogY3VycmVudE1hcmtlZEJsb2NrUm93QWRkcmVzcyA9IG1fY3VycmVudE1hcmtlZEJsb2Nr
Um93QWRkcmVzczsKKyAgICAgICAgZG8geworICAgICAgICAgICAgd2hpbGUgKHJvd0JpdG1hcCkg
eworICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBBdG9tc0JpdG1hcDo6V29yZCBvbmUgPSAxOwor
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGF0b21JbmRleEluUm93ID0gY3R6KHJvd0JpdG1hcCk7
CisgICAgICAgICAgICAgICAgYXV0byogY2VsbCA9IGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KCZj
dXJyZW50TWFya2VkQmxvY2tSb3dBZGRyZXNzW2F0b21JbmRleEluUm93XSk7CisgICAgICAgICAg
ICAgICAgcm93Qml0bWFwICY9IH4ob25lIDw8IGF0b21JbmRleEluUm93KTsKKyAgICAgICAgICAg
ICAgICBmdW5jKGNlbGwpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3aGlsZSAocm93
SW5kZXgpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBsb2FkIGJlZm9yZSBkZWNyZW1lbnRpbmcg
cm93SW5kZXggYmVjYXVzZSBiaXRtYXBSb3dzKCkgcG9pbnRzCisgICAgICAgICAgICAgICAgLy8g
dG8gMSB3b3JkIGJlZm9yZSBtX2JpdG1hcC4gU2VlIGNvbW1lbnRzIGFib3V0IG9mZnNldE9mQml0
bWFwUm93cygpCisgICAgICAgICAgICAgICAgLy8gZm9yIHdoeSB3ZSBkbyB0aGlzLgorICAgICAg
ICAgICAgICAgIHJvd0JpdG1hcCA9IGJpdG1hcFJvd3MoKVtyb3dJbmRleC0tXTsKKyAgICAgICAg
ICAgICAgICBjdXJyZW50TWFya2VkQmxvY2tSb3dBZGRyZXNzIC09IGF0b21zUGVyUm93OworICAg
ICAgICAgICAgICAgIGlmIChyb3dCaXRtYXApCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChyb3dCaXRtYXApOworI2Vsc2UKICAgICAg
ICAgZm9yIChGcmVlQ2VsbCogY2VsbCA9IGhlYWQoKTsgY2VsbDspIHsKICAgICAgICAgICAgIC8v
IFdlIGNhbiB1c2UgdGhpcyB0byBvdmVyd3JpdGUgZnJlZSBvYmplY3RzIGJlZm9yZSBkZXN0cm95
aW5nIHRoZSBmcmVlIGxpc3QuIFNvLCB3ZSBuZWVkCiAgICAgICAgICAgICAvLyB0byBnZXQgbmV4
dCBiZWZvcmUgcHJvY2VlZGluZyBmdXJ0aGVyLgpAQCAtNjMsOCArMTIzLDggQEAgdm9pZCBGcmVl
TGlzdDo6Zm9yRWFjaChjb25zdCBGdW5jJiBmdW5jKQogICAgICAgICAgICAgZnVuYyhiaXR3aXNl
X2Nhc3Q8SGVhcENlbGwqPihjZWxsKSk7CiAgICAgICAgICAgICBjZWxsID0gbmV4dDsKICAgICAg
ICAgfQorI2VuZGlmCiAgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0xvY2FsQWxsb2NhdG9yLmNwcAkocmV2aXNpb24g
MjYzMTgxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTG9jYWxBbGxvY2F0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
OC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxOC0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjcyLDcgKzI3Miw3IEBAIGJvb2wgTG9jYWxBbGxvY2F0b3I6
OmlzRnJlZUxpc3RlZENlbGwoY28KICAgICAvLyBpZiB3ZSBrbm93IHRoYXQgdGhlIGJsb2NrIG93
bmluZyB0aGUgb2JqZWN0IGlzIGZyZWUtbGlzdGVkLCB0aGVuIGl0J3MgaW1wb3NzaWJsZSBmb3Ig
YW55CiAgICAgLy8gb2JqZWN0cyB0byBiZSBpbiB0aGUgZGVhZC1idXQtbm90LWRlc3RydWN0ZWQg
c3RhdGUuCiAgICAgLy8gRklYTUU6IEdldCByaWQgb2YgdGhpcyBhYm9taW5hdGlvbi4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MTY1NQotICAgIHJldHVybiBtX2Zy
ZWVMaXN0LmNvbnRhaW5zKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHRhcmdldCkpOworICAgIHJl
dHVybiBtX2ZyZWVMaXN0LmNvbnRhaW5zKGJpdHdpc2VfY2FzdDxIZWFwQ2VsbCo+KHRhcmdldCks
IG1fY3VycmVudEJsb2NrKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDI2MzE4MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRl
biAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChw
bWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKQEAgLTg0LDYgKzg0LDgg
QEAgcHVibGljOgogICAgIHN0YXRpY19hc3NlcnQoIShNYXJrZWRCbG9jazo6YXRvbVNpemUgJiAo
TWFya2VkQmxvY2s6OmF0b21TaXplIC0gMSkpLCAiTWFya2VkQmxvY2s6OmF0b21TaXplIG11c3Qg
YmUgYSBwb3dlciBvZiB0d28uIik7CiAgICAgc3RhdGljX2Fzc2VydCghKE1hcmtlZEJsb2NrOjpi
bG9ja1NpemUgJiAoTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSAtIDEpKSwgIk1hcmtlZEJsb2NrOjpi
bG9ja1NpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4iKTsKICAgICAKKyAgICB1c2luZyBBdG9t
c0JpdG1hcCA9IEJpdG1hcDxhdG9tc1BlckJsb2NrPjsKKwogICAgIHN0cnVjdCBWb2lkRnVuY3Rv
ciB7CiAgICAgICAgIHR5cGVkZWYgdm9pZCBSZXR1cm5UeXBlOwogICAgICAgICB2b2lkIHJldHVy
blZhbHVlKCkgeyB9CkBAIC0yMDMsNiArMjA1LDcgQEAgcHVibGljOgogICAgICAgICAKICAgICAg
ICAgdm9pZCogc3RhcnQoKSBjb25zdCB7IHJldHVybiAmbV9ibG9jay0+YXRvbXMoKVswXTsgfQog
ICAgICAgICB2b2lkKiBlbmQoKSBjb25zdCB7IHJldHVybiAmbV9ibG9jay0+YXRvbXMoKVttX2Vu
ZEF0b21dOyB9CisgICAgICAgIHZvaWQqIGF0b21BdChzaXplX3QgaSkgY29uc3QgeyByZXR1cm4g
Jm1fYmxvY2stPmF0b21zKClbaV07IH0KICAgICAgICAgYm9vbCBjb250YWlucyh2b2lkKiBwKSBj
b25zdCB7IHJldHVybiBzdGFydCgpIDw9IHAgJiYgcCA8IGVuZCgpOyB9CiAKICAgICAgICAgdm9p
ZCBkdW1wU3RhdGUoUHJpbnRTdHJlYW0mKTsKQEAgLTI5NCw4ICsyOTcsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIEhlYXBWZXJzaW9uIG1fbWFya2luZ1ZlcnNpb247CiAgICAgICAgIEhlYXBWZXJzaW9u
IG1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uOwogCi0gICAgICAgIEJpdG1hcDxhdG9tc1BlckJsb2Nr
PiBtX21hcmtzOwotICAgICAgICBCaXRtYXA8YXRvbXNQZXJCbG9jaz4gbV9uZXdseUFsbG9jYXRl
ZDsKKyAgICAgICAgQXRvbXNCaXRtYXAgbV9tYXJrczsKKyAgICAgICAgQXRvbXNCaXRtYXAgbV9u
ZXdseUFsbG9jYXRlZDsKICAgICB9OwogICAgIAogcHJpdmF0ZTogICAgCkBAIC0zMzYsNyArMzM5
LDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNOZXdseUFsbG9jYXRlZChjb25zdCB2b2lkKik7CiAg
ICAgdm9pZCBzZXROZXdseUFsbG9jYXRlZChjb25zdCB2b2lkKik7CiAgICAgdm9pZCBjbGVhck5l
d2x5QWxsb2NhdGVkKGNvbnN0IHZvaWQqKTsKLSAgICBjb25zdCBCaXRtYXA8YXRvbXNQZXJCbG9j
az4mIG5ld2x5QWxsb2NhdGVkKCkgY29uc3Q7CisgICAgY29uc3QgQXRvbXNCaXRtYXAmIG5ld2x5
QWxsb2NhdGVkKCkgY29uc3Q7CiAgICAgCiAgICAgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0ZWRW
ZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gZm9vdGVyKCkubV9uZXdseUFsbG9jYXRlZFZlcnNpb247
IH0KICAgICAKQEAgLTM3NCw3ICszNzcsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc01hcmtlZFJh
dyhjb25zdCB2b2lkKiBwKTsKICAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbigpIGNvbnN0
IHsgcmV0dXJuIGZvb3RlcigpLm1fbWFya2luZ1ZlcnNpb247IH0KICAgICAKLSAgICBjb25zdCBC
aXRtYXA8YXRvbXNQZXJCbG9jaz4mIG1hcmtzKCkgY29uc3Q7CisgICAgY29uc3QgQXRvbXNCaXRt
YXAmIG1hcmtzKCkgY29uc3Q7CiAgICAgCiAgICAgQ291bnRpbmdMb2NrJiBsb2NrKCkgeyByZXR1
cm4gZm9vdGVyKCkubV9sb2NrOyB9CiAgICAgCkBAIC0zOTksNiArNDAyLDggQEAgcHJpdmF0ZToK
ICAgICAKICAgICBpbmxpbmUgYm9vbCBtYXJrc0NvbnZleUxpdmVuZXNzRHVyaW5nTWFya2luZyhI
ZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbik7CiAgICAgaW5saW5lIGJvb2wgbWFya3NDb252ZXlM
aXZlbmVzc0R1cmluZ01hcmtpbmcoSGVhcFZlcnNpb24gbXlNYXJraW5nVmVyc2lvbiwgSGVhcFZl
cnNpb24gbWFya2luZ1ZlcnNpb24pOworCisgICAgZnJpZW5kIGNsYXNzIEZyZWVMaXN0OwogfTsK
IAogaW5saW5lIE1hcmtlZEJsb2NrOjpGb290ZXImIE1hcmtlZEJsb2NrOjpmb290ZXIoKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgJ
KHJldmlzaW9uIDI2MzE4MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJs
b2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDMsNiArMzAzLDY2IEBAIHZvaWQgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2UKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAorI2lmIEVOQUJMRShCSVRNQVBfRlJFRUxJU1QpCisgICAgQXRvbXNCaXRtYXAgbG9jYWxGcmVl
QXRvbXM7CisgICAgQXRvbXNCaXRtYXAmIGZyZWVBdG9tcyA9IGZyZWVMaXN0ID8gZnJlZUxpc3Qt
PmF0b21zQml0bWFwKCkgOiBsb2NhbEZyZWVBdG9tczsKKyAgICBzaXplX3QgY291bnQgPSAwOwor
CisgICAgYXV0byBoYW5kbGVEZWFkQ2VsbCA9IFsmXSAoc2l6ZV90IGkpIHsKKyAgICAgICAgSGVh
cENlbGwqIGNlbGwgPSByZWludGVycHJldF9jYXN0X3B0cjxIZWFwQ2VsbCo+KGF0b21BdChpKSk7
CisKKyAgICAgICAgaWYgKGRlc3RydWN0aW9uTW9kZSAhPSBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMp
CisgICAgICAgICAgICBkZXN0cm95KGNlbGwpOworCisgICAgICAgIGlmIChzd2VlcE1vZGUgPT0g
U3dlZXBUb0ZyZWVMaXN0KSB7CisgICAgICAgICAgICBpZiAoc2NyaWJibGVNb2RlID09IFNjcmli
YmxlKQorICAgICAgICAgICAgICAgIHNjcmliYmxlKGNlbGwsIGNlbGxTaXplKTsKKyAgICAgICAg
ICAgICsrY291bnQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgYm9vbCBpc0VtcHR5ID0gdHJ1
ZTsKKworICAgIEF0b21zQml0bWFwIGNlbGxMb2NhdGlvbnM7CisgICAgY2VsbExvY2F0aW9ucy5z
ZXRFYWNoTnRoQml0KG1fYXRvbXNQZXJDZWxsLCAwLCBtX2VuZEF0b20pOworCisgICAgaWYgKGVt
cHR5TW9kZSA9PSBOb3RFbXB0eSkgeworICAgICAgICBpZiAobWFya3NNb2RlID09IE1hcmtzTm90
U3RhbGUpIHsKKyAgICAgICAgICAgIGZyZWVBdG9tcyA9IGZvb3Rlci5tX21hcmtzOworICAgICAg
ICAgICAgaWYgKG5ld2x5QWxsb2NhdGVkTW9kZSA9PSBIYXNOZXdseUFsbG9jYXRlZCkKKyAgICAg
ICAgICAgICAgICBmcmVlQXRvbXMgfD0gZm9vdGVyLm1fbmV3bHlBbGxvY2F0ZWQ7CisgICAgICAg
IH0gZWxzZSBpZiAobmV3bHlBbGxvY2F0ZWRNb2RlID09IEhhc05ld2x5QWxsb2NhdGVkKQorICAg
ICAgICAgICAgZnJlZUF0b21zID0gZm9vdGVyLm1fbmV3bHlBbGxvY2F0ZWQ7CisgICAgICAgIC8v
IEF0IHRoaXMgcG9pbnQsIGEgc2V0IGJpdCBpbiBmcmVlQXRvbXMgcmVwcmVzZW50cyBsaXZlIGNl
bGxzLgorICAgICAgICBpc0VtcHR5ID0gZnJlZUF0b21zLmlzRW1wdHkoKTsKKworICAgICAgICAv
LyBJbnZlcnQgdGhlIGJpdHMgYXQgZWFjaCBjZWxsIGxvY2F0aW9uIHNvIHRoYXQgdGhlIG9uZXMg
Zm9yIGxpdmUgY2VsbHMKKyAgICAgICAgLy8gYXJlIGNsZWFyZWQsIGFuZCB0aGUgb25lcyBmb3Ig
ZGVhZCBjZWxscyBhcmUgc2V0LgorICAgICAgICBmcmVlQXRvbXMgXj0gY2VsbExvY2F0aW9uczsK
KyAgICB9IGVsc2UKKyAgICAgICAgZnJlZUF0b21zID0gY2VsbExvY2F0aW9uczsgLy8gYWxsIGNl
bGxzIGFyZSBmcmVlLgorICAgIAorICAgIC8vIFdlIG9ubHkgd2FudCB0byBkaXNjYXJkIHRoZSBu
ZXdseUFsbG9jYXRlZCBiaXRzIGlmIHdlJ3JlIGNyZWF0aW5nIGEgRnJlZUxpc3QsCisgICAgLy8g
b3RoZXJ3aXNlIHdlIHdvdWxkIGxvc2UgaW5mb3JtYXRpb24gb24gd2hhdCdzIGN1cnJlbnRseSBh
bGl2ZS4KKyAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVlTGlzdCAmJiBuZXdseUFsbG9j
YXRlZE1vZGUgPT0gSGFzTmV3bHlBbGxvY2F0ZWQpCisgICAgICAgIGZvb3Rlci5tX25ld2x5QWxs
b2NhdGVkVmVyc2lvbiA9IE1hcmtlZFNwYWNlOjpudWxsVmVyc2lvbjsKKworICAgIGlmIChzcGFj
ZSgpLT5pc01hcmtpbmcoKSkKKyAgICAgICAgZm9vdGVyLm1fbG9jay51bmxvY2soKTsKKworICAg
IGlmIChkZXN0cnVjdGlvbk1vZGUgIT0gQmxvY2tIYXNOb0Rlc3RydWN0b3JzKQorICAgICAgICBm
cmVlQXRvbXMuZm9yRWFjaFNldEJpdChoYW5kbGVEZWFkQ2VsbCk7CisKKyAgICBpZiAoc3dlZXBN
b2RlID09IFN3ZWVwVG9GcmVlTGlzdCkgeworICAgICAgICBmcmVlTGlzdC0+aW5pdGlhbGl6ZUF0
b21zQml0bWFwKHRoaXMsIGZyZWVBdG9tcywgY291bnQgKiBjZWxsU2l6ZSk7CisgICAgICAgIHNl
dElzRnJlZUxpc3RlZCgpOworICAgIH0gZWxzZSBpZiAoaXNFbXB0eSkKKyAgICAgICAgbV9kaXJl
Y3RvcnktPnNldElzRW1wdHkoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzLCB0cnVlKTsKKyAgICBp
ZiAoZmFsc2UpCisgICAgICAgIGRhdGFMb2coIlNsb3dseSBzd2VwdCBibG9jayAiLCBSYXdQb2lu
dGVyKCZibG9jayksICIgd2l0aCBjZWxsIHNpemUgIiwgY2VsbFNpemUsICIgYW5kIGF0dHJpYnV0
ZXMgIiwgbV9hdHRyaWJ1dGVzLCAiOiAiLCBwb2ludGVyRHVtcChmcmVlTGlzdCksICJcbiIpOwor
CisjZWxzZSAvLyBub3QgRU5BQkxFKEJJVE1BUF9GUkVFTElTVCkKKwogICAgIC8vIFRoaXMgcHJv
ZHVjZXMgYSBmcmVlIGxpc3QgdGhhdCBpcyBvcmRlcmVkIGluIHJldmVyc2UgdGhyb3VnaCB0aGUg
YmxvY2suCiAgICAgLy8gVGhpcyBpcyBmaW5lLCBzaW5jZSB0aGUgYWxsb2NhdGlvbiBjb2RlIG1h
a2VzIG5vIGFzc3VtcHRpb25zIGFib3V0IHRoZQogICAgIC8vIG9yZGVyIG9mIHRoZSBmcmVlIGxp
c3QuCkBAIC0zNjEsNiArNDIxLDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFs
aXplZFN3ZQogICAgICAgICBtX2RpcmVjdG9yeS0+c2V0SXNFbXB0eShOb0xvY2tpbmdOZWNlc3Nh
cnksIHRoaXMsIHRydWUpOwogICAgIGlmIChmYWxzZSkKICAgICAgICAgZGF0YUxvZygiU2xvd2x5
IHN3ZXB0IGJsb2NrICIsIFJhd1BvaW50ZXIoJmJsb2NrKSwgIiB3aXRoIGNlbGwgc2l6ZSAiLCBj
ZWxsU2l6ZSwgIiBhbmQgYXR0cmlidXRlcyAiLCBtX2F0dHJpYnV0ZXMsICI6ICIsIHBvaW50ZXJE
dW1wKGZyZWVMaXN0KSwgIlxuIik7CisjZW5kaWYgLy8gRU5BQkxFKEJJVE1BUF9GUkVFTElTVCkK
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRGVzdHJveUZ1bmM+CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhlbHBlcnMuY3BwCShyZXZpc2lvbiAyNjMxODEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUwMyw3ICs1MDMsNyBAQCB2b2lkIEFzc2VtYmx5SGVscGVyczo6ZW1pdFJhbmRv
bVRodW5rKFZNCiB9CiAjZW5kaWYKIAotdm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0
ZVdpdGhOb25OdWxsQWxsb2NhdG9yKEdQUlJlZyByZXN1bHRHUFIsIGNvbnN0IEpJVEFsbG9jYXRv
ciYgYWxsb2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVt
cExpc3QmIHNsb3dQYXRoKQordm9pZCBBc3NlbWJseUhlbHBlcnM6OmVtaXRBbGxvY2F0ZVdpdGhO
b25OdWxsQWxsb2NhdG9yKEdQUlJlZyByZXN1bHRHUFIsIGNvbnN0IEpJVEFsbG9jYXRvciYgYWxs
b2NhdG9yLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3Qm
IHNsb3dQYXRoLCBPcHRpb25hbDxHUFJSZWc+IG9wdGlvbmFsU2NyYXRjaEdQUjIsIE9wdGlvbmFs
PEdQUlJlZz4gb3B0aW9uYWxTY3JhdGNoR1BSMykKIHsKICAgICBpZiAoT3B0aW9uczo6Zm9yY2VH
Q1Nsb3dQYXRocygpKSB7CiAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqdW1wKCkpOwpAQCAtNTE2
LDcgKzUxNiw3IEBAIHZvaWQgQXNzZW1ibHlIZWxwZXJzOjplbWl0QWxsb2NhdGVXaXRoTm8KICAg
ICAvLyAtIFdlICpjYW4qIHVzZSBSZWdpc3RlclNldDo6bWFjcm9TY3JhdGNoUmVnaXN0ZXJzIG9u
IEFSTS4KIAogICAgIEp1bXAgcG9wUGF0aDsKLSAgICBKdW1wIGRvbmU7CisgICAgSnVtcExpc3Qg
ZG9uZTsKICAgICAKICAgICBpZiAoYWxsb2NhdG9yLmlzQ29uc3RhbnQoKSkKICAgICAgICAgbW92
ZShUcnVzdGVkSW1tUHRyKGFsbG9jYXRvci5hbGxvY2F0b3IoKS5sb2NhbEFsbG9jYXRvcigpKSwg
YWxsb2NhdG9yR1BSKTsKQEAgLTUzNCwxMCArNTM0LDEyNCBAQCB2b2lkIEFzc2VtYmx5SGVscGVy
czo6ZW1pdEFsbG9jYXRlV2l0aE5vCiAgICAgQWRkcmVzcyBwYXlsb2FkRW5kQWRkciA9IEFkZHJl
c3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJl
ZUxpc3Q6Om9mZnNldE9mUGF5bG9hZEVuZCgpKTsKICAgICBhZGRQdHIocGF5bG9hZEVuZEFkZHIs
IHJlc3VsdEdQUik7CiAKLSAgICBkb25lID0ganVtcCgpOworICAgIGRvbmUuYXBwZW5kKGp1bXAo
KSk7CiAgICAgICAgIAorI2lmIEVOQUJMRShCSVRNQVBfRlJFRUxJU1QpCisgICAgQVNTRVJUKHJl
c3VsdEdQUiAhPSBzY3JhdGNoR1BSKTsKKworICAgIGF1dG8gcm93SW5kZXhHUFIgPSByZXN1bHRH
UFI7CisgICAgYXV0byByb3dCaXRtYXBHUFIgPSBzY3JhdGNoR1BSOworCisgICAgR1BSUmVnIHNj
cmF0Y2hHUFIyID0gb3B0aW9uYWxTY3JhdGNoR1BSMiA/IG9wdGlvbmFsU2NyYXRjaEdQUjIudmFs
dWUoKSA6IHNjcmF0Y2hSZWdpc3RlcigpOworICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSByZXN1
bHRHUFIpOworICAgIEFTU0VSVChzY3JhdGNoR1BSMiAhPSBzY3JhdGNoR1BSKTsKKworICAgIGF1
dG8gcm93QWRkcmVzc0dQUiA9IHNjcmF0Y2hHUFIyOworICAgIGF1dG8gY2xlYXJCaXQ2NFNjcmF0
Y2hHUFIgPSBzY3JhdGNoR1BSMjsKKworICAgIGJvb2wgY2FuUHJlbG9hZFJvd0FkZHJlc3NHUFIg
PSBmYWxzZTsKKyAgICBpZiAob3B0aW9uYWxTY3JhdGNoR1BSMykgeworICAgICAgICBjbGVhckJp
dDY0U2NyYXRjaEdQUiA9IG9wdGlvbmFsU2NyYXRjaEdQUjMudmFsdWUoKTsKKyAgICAgICAgY2Fu
UHJlbG9hZFJvd0FkZHJlc3NHUFIgPSB0cnVlOworICAgIH0gZWxzZSBpZiAoaXNYODZfNjQoKSkg
eworICAgICAgICAvLyB4ODZfNjQncyBjbGVhckJpdDY0KCkgZG9lcyBhY3R1YWxseSBuZWVkIHRv
IHVzZSBjbGVhckJpdDY0U2NyYXRjaEdQUi4KKyAgICAgICAgLy8gU28sIHdlIGNhbiBwcmVsb2Fk
IHRoZSByb3cgYWRkcmVzcyBpbnRvIGl0LgorICAgICAgICBjbGVhckJpdDY0U2NyYXRjaEdQUiA9
IEludmFsaWRHUFJSZWc7CisgICAgICAgIGNhblByZWxvYWRSb3dBZGRyZXNzR1BSID0gdHJ1ZTsK
KyNpZiBDUFUoQVJNNjQpCisgICAgfSBlbHNlIGlmIChpc0FSTTY0KCkpIHsKKyAgICAgICAgLy8g
QVJNNjQncyBmYXN0IHBhdGggZG9lcyBhY3R1YWxseSBuZWVkIHRvIHVzZSB0aGUgbWVtb3J5VGVt
cFJlZ2lzdGVyLgorICAgICAgICAvLyBTbywgd2UgY2FuIHVzZSB0aGF0IGZvciB0aGUgY2xlYXJC
aXQ2NFNjcmF0Y2hHUFIgYW5kIGFsbG93IHRoZQorICAgICAgICAvLyByb3cgYWRkcmVzcyB0byBi
ZSBwcmVsb2FkZWQgaW4gc2NyYXRjaEdQUjIuCisgICAgICAgIGNsZWFyQml0NjRTY3JhdGNoR1BS
ID0gZ2V0Q2FjaGVkTWVtb3J5VGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCk7CisgICAgICAg
IGNhblByZWxvYWRSb3dBZGRyZXNzR1BSID0gdHJ1ZTsKKyNlbmRpZgorICAgIH0KKyAgICBBU1NF
UlQoY2xlYXJCaXQ2NFNjcmF0Y2hHUFIgIT0gcmVzdWx0R1BSKTsKKyAgICBBU1NFUlQoY2xlYXJC
aXQ2NFNjcmF0Y2hHUFIgIT0gc2NyYXRjaEdQUik7CisgICAgaWYgKGNhblByZWxvYWRSb3dBZGRy
ZXNzR1BSKQorICAgICAgICBBU1NFUlQoY2xlYXJCaXQ2NFNjcmF0Y2hHUFIgIT0gc2NyYXRjaEdQ
UjIpOworCisgICAgLy8gVGhlIGNvZGUgYmVsb3cgZm9yIHJvd0JpdG1hcEdQUiByZWxpZXMgb24g
dGhpcy4KKyAgICBzdGF0aWNfYXNzZXJ0KHNpemVvZihGcmVlTGlzdDo6QXRvbXNCaXRtYXA6Oldv
cmQpID09IHNpemVvZih1aW50NjRfdCkpOworCisgICAgLy8gQ2hlY2sgZm9yIG1pZGRsZSBwYXRo
OiBoYXZlIGFub3RoZXIgcm93IHRvIHZpc2l0PworICAgIExhYmVsIGNoZWNrRm9yTW9yZVJvd3Mg
PSBsYWJlbCgpOworCisgICAgbG9hZDMyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9j
YXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mQ3VycmVudFJvd0lu
ZGV4KCkpLCByb3dJbmRleEdQUik7CisKKyAgICBpZiAoIWNhblByZWxvYWRSb3dBZGRyZXNzR1BS
KQorICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6
b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mQ3VycmVudE1hcmtlZEJsb2Nr
Um93QWRkcmVzcygpKSwgcm93QWRkcmVzc0dQUik7CisKKyAgICBzbG93UGF0aC5hcHBlbmQoYnJh
bmNoVGVzdFB0cihaZXJvLCByb3dJbmRleEdQUikpOworCisgICAgLy8gTWlkZGxlIHBhdGg6IHRo
ZXJlIGlzIGFub3RoZXIgcm93IGxlZnQgdG8gdmlzaXQuCisgICAgSnVtcCBmb3VuZE5vbkVtcHR5
Um93OworICAgIExhYmVsIGNoZWNrTmV4dFJvdyA9IGxhYmVsKCk7CisgICAgeworICAgICAgICAv
LyBMb2FkIHRoZSBuZXh0IHJvdyBiaXRtYXAgYW5kIHBvaW50IG1fY3VycmVudE1hcmtlZEJsb2Nr
Um93QWRkcmVzcyB0byB0aGUgbmV4dCByb3cuCisKKyAgICAgICAgLy8gTm90ZTogb2Zmc2V0T2ZC
aXRtYXBSb3dzKCkgcG9pbnRzIHRvIDEgd29yZCBiZWZvcmUgbV9iaXRtYXAuIFdlIGRvIHRoaXMK
KyAgICAgICAgLy8gZGVsaWJlcmF0ZWx5IGJlY2F1c2UgaXQgYWxsb3dzIHVzIHRvIHNjaGVkdWxl
IGluc3RydWN0aW9ucyBiZXR0ZXIgYW5kCisgICAgICAgIC8vIGRvIHRoaXMgbG9hZCBiZWZvcmUg
dGhlIGRlY3JlbWVudCBiZWxvdy4KKyAgICAgICAgbG9hZDY0KEJhc2VJbmRleChhbGxvY2F0b3JH
UFIsIHJvd0luZGV4R1BSLCBUaW1lc0VpZ2h0LCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVl
TGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mQml0bWFwUm93cygpKSwgcm93Qml0bWFwR1BSKTsK
KworICAgICAgICBzdWI2NChUcnVzdGVkSW1tMzIoMSksIHJvd0luZGV4R1BSKTsKKyAgICAgICAg
c3ViUHRyKFRydXN0ZWRJbW0zMihGcmVlTGlzdDo6YXRvbXNSb3dCeXRlcyksIHJvd0FkZHJlc3NH
UFIpOworCisgICAgICAgIGZvdW5kTm9uRW1wdHlSb3cgPSBicmFuY2hUZXN0NjQoTm9uWmVybywg
cm93Qml0bWFwR1BSKTsKKyAgICAgICAgYnJhbmNoVGVzdFB0cihOb25aZXJvLCByb3dJbmRleEdQ
UikubGlua1RvKGNoZWNrTmV4dFJvdywgdGhpcyk7CisgICAgfQorCisgICAgLy8gU2xvdyBwYXRo
OiBubyBtb3JlIHJvd3MuCisgICAgLy8gQm90aCByb3dJbmRleEdQUiBhbmQgcm93Qml0bWFwR1BS
IHNob3VsZCBiZSBudWxsIGhlcmUuCisgICAgc3RvcmUzMihyb3dJbmRleEdQUiwgQWRkcmVzcyhh
bGxvY2F0b3JHUFIsIExvY2FsQWxsb2NhdG9yOjpvZmZzZXRPZkZyZWVMaXN0KCkgKyBGcmVlTGlz
dDo6b2Zmc2V0T2ZDdXJyZW50Um93SW5kZXgoKSkpOworICAgIHN0b3JlNjQocm93Qml0bWFwR1BS
LCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3Qo
KSArIEZyZWVMaXN0OjpvZmZzZXRPZkN1cnJlbnRSb3dCaXRtYXAoKSkpOworICAgIHNsb3dQYXRo
LmFwcGVuZChqdW1wKCkpOworCisgICAgLy8gVHJhbnNpdGlvbiBmcm9tIG1pZGRsZSBwYXRoIGJh
Y2sgdG8gZmFzdCBwYXRoIHRvIGFsbG9jYXRlLgorICAgIGZvdW5kTm9uRW1wdHlSb3cubGluayh0
aGlzKTsKKyAgICBzdG9yZVB0cihyb3dBZGRyZXNzR1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwg
TG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZkN1
cnJlbnRNYXJrZWRCbG9ja1Jvd0FkZHJlc3MoKSkpOworICAgIHN0b3JlMzIocm93SW5kZXhHUFIs
IEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgp
ICsgRnJlZUxpc3Q6Om9mZnNldE9mQ3VycmVudFJvd0luZGV4KCkpKTsKKworICAgIEp1bXAgYWxs
b2NhdGVGcm9tQ3VycmVudFJvdyA9IGp1bXAoKTsKKwogICAgIHBvcFBhdGgubGluayh0aGlzKTsK
LSAgICAgICAgCisKKyAgICAvLyBDaGVjayBmb3IgZmFzdCBwYXRoOiBoYXZlIGF2YWlsYWJsZSBi
aXQgaW4gbV9jdXJyZW50Um93Qml0bWFwPworICAgIGxvYWQ2NChBZGRyZXNzKGFsbG9jYXRvckdQ
UiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRP
ZkN1cnJlbnRSb3dCaXRtYXAoKSksIHJvd0JpdG1hcEdQUik7CisKKyAgICBpZiAoY2FuUHJlbG9h
ZFJvd0FkZHJlc3NHUFIpIHsKKyAgICAgICAgLy8gUHJlbG9hZCB0aGUgcm93IGFkZHJlc3MgbmVl
ZGVkIG9uIHRoZSBmYXN0IGFuZCBtaWRkbGUgcGF0aC4KKyAgICAgICAgbG9hZFB0cihBZGRyZXNz
KGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVM
aXN0OjpvZmZzZXRPZkN1cnJlbnRNYXJrZWRCbG9ja1Jvd0FkZHJlc3MoKSksIHJvd0FkZHJlc3NH
UFIpOworICAgIH0KKworICAgIGJyYW5jaFRlc3Q2NChaZXJvLCByb3dCaXRtYXBHUFIpLmxpbmtU
byhjaGVja0Zvck1vcmVSb3dzLCB0aGlzKTsKKworICAgIC8vIEZhc3QgcGF0aDogd2UgaGF2ZSBh
IGJpdCB0byB1c2UuCisgICAgYWxsb2NhdGVGcm9tQ3VycmVudFJvdy5saW5rKHRoaXMpOworICAg
IHsKKyAgICAgICAgLy8gUmVtb3ZlIHRoaXMgYml0IGZyb20gbV9jdXJyZW50Um93Qml0bWFwLgor
ICAgICAgICBhdXRvIGF0b21JbmRleEluUm93R1BSID0gcmVzdWx0R1BSOworICAgICAgICBjb3Vu
dFRyYWlsaW5nWmVyb3M2NFdpdGhvdXROdWxsQ2hlY2socm93Qml0bWFwR1BSLCBhdG9tSW5kZXhJ
blJvd0dQUik7CisgICAgICAgIGNsZWFyQml0NjQoYXRvbUluZGV4SW5Sb3dHUFIsIHJvd0JpdG1h
cEdQUiwgY2xlYXJCaXQ2NFNjcmF0Y2hHUFIpOworCisgICAgICAgIGlmICghY2FuUHJlbG9hZFJv
d0FkZHJlc3NHUFIpCisgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBM
b2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mQ3Vy
cmVudE1hcmtlZEJsb2NrUm93QWRkcmVzcygpKSwgcm93QWRkcmVzc0dQUik7CisKKyAgICAgICAg
c3RvcmU2NChyb3dCaXRtYXBHUFIsIEFkZHJlc3MoYWxsb2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRv
cjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6Om9mZnNldE9mQ3VycmVudFJvd0JpdG1h
cCgpKSk7CisKKyAgICAgICAgLy8gQ29tcHV0ZSBhdG9tIGFkZHJlc3Mgb2YgdGhpcyBiaXQuCisg
ICAgICAgIEFTU0VSVChyZXN1bHRHUFIgPT0gYXRvbUluZGV4SW5Sb3dHUFIpOworICAgICAgICBz
aGlmdEFuZEFkZChyb3dBZGRyZXNzR1BSLCByZXN1bHRHUFIsIEZyZWVMaXN0OjphdG9tU2l6ZVNo
aWZ0LCByZXN1bHRHUFIpOworICAgIH0KKworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0ob3B0aW9u
YWxTY3JhdGNoR1BSMik7CisgICAgVU5VU0VEX1BBUkFNKG9wdGlvbmFsU2NyYXRjaEdQUjMpOwor
CisgICAgcG9wUGF0aC5saW5rKHRoaXMpOworCiAgICAgbG9hZFB0cihBZGRyZXNzKGFsbG9jYXRv
ckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9mRnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZz
ZXRPZlNjcmFtYmxlZEhlYWQoKSksIHJlc3VsdEdQUik7CiAgICAgeG9yUHRyKEFkZHJlc3MoYWxs
b2NhdG9yR1BSLCBMb2NhbEFsbG9jYXRvcjo6b2Zmc2V0T2ZGcmVlTGlzdCgpICsgRnJlZUxpc3Q6
Om9mZnNldE9mU2VjcmV0KCkpLCByZXN1bHRHUFIpOwogICAgIHNsb3dQYXRoLmFwcGVuZChicmFu
Y2hUZXN0UHRyKFplcm8sIHJlc3VsdEdQUikpOwpAQCAtNTQ2LDcgKzY2MCw4IEBAIHZvaWQgQXNz
ZW1ibHlIZWxwZXJzOjplbWl0QWxsb2NhdGVXaXRoTm8KICAgICAvLyBpdCdzIHN0aWxsIG9uIHRo
ZSBHQydzIGZyZWUgbGlzdC4KICAgICBsb2FkUHRyKEFkZHJlc3MocmVzdWx0R1BSLCBGcmVlQ2Vs
bDo6b2Zmc2V0T2ZTY3JhbWJsZWROZXh0KCkpLCBzY3JhdGNoR1BSKTsKICAgICBzdG9yZVB0cihz
Y3JhdGNoR1BSLCBBZGRyZXNzKGFsbG9jYXRvckdQUiwgTG9jYWxBbGxvY2F0b3I6Om9mZnNldE9m
RnJlZUxpc3QoKSArIEZyZWVMaXN0OjpvZmZzZXRPZlNjcmFtYmxlZEhlYWQoKSkpOwotICAgICAg
ICAKKyNlbmRpZgorCiAgICAgZG9uZS5saW5rKHRoaXMpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHJldmlzaW9uIDI2MzE4MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJUYWdSZWdpc3RlcnNNb2RlLmgiCiAjaW5j
bHVkZSAiVHlwZW9mVHlwZS5oIgogI2luY2x1ZGUgIlZNLmgiCisjaW5jbHVkZSA8d3RmL09wdGlv
bmFsLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xOTUxLDggKzE5NTIsOCBAQCBwdWJsaWM6
CiAgICAgLy8gdGhhdCBhbGxvY2F0b3IgaXMgbm9uLW51bGw7IGFsbG9jYXRvciBjYW4gYmUgbnVs
bCBhcyBhIHNpZ25hbCB0aGF0IHdlIGRvbid0IGtub3cgd2hhdCB0aGUKICAgICAvLyB2YWx1ZSBv
ZiBhbGxvY2F0b3JHUFIgaXMuIEFkZGl0aW9uYWxseSwgaWYgdGhlIGFsbG9jYXRvciBpcyBub3Qg
bnVsbCwgdGhlbiB0aGVyZSBpcyBubyBuZWVkCiAgICAgLy8gdG8gcG9wdWxhdGUgYWxsb2NhdG9y
R1BSIC0gdGhpcyBjb2RlIHdpbGwgaWdub3JlIHRoZSBjb250ZW50cyBvZiBhbGxvY2F0b3JHUFIu
Ci0gICAgdm9pZCBlbWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcihHUFJSZWcgcmVzdWx0
R1BSLCBjb25zdCBKSVRBbGxvY2F0b3ImIGFsbG9jYXRvciwgR1BSUmVnIGFsbG9jYXRvckdQUiwg
R1BSUmVnIHNjcmF0Y2hHUFIsIEp1bXBMaXN0JiBzbG93UGF0aCk7Ci0gICAgCisgICAgdm9pZCBl
bWl0QWxsb2NhdGVXaXRoTm9uTnVsbEFsbG9jYXRvcihHUFJSZWcgcmVzdWx0R1BSLCBjb25zdCBK
SVRBbGxvY2F0b3ImLCBHUFJSZWcgYWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVt
cExpc3QmIHNsb3dQYXRoLCBPcHRpb25hbDxHUFJSZWc+IHNjcmF0Y2hHUFIyID0geyB9LCBPcHRp
b25hbDxHUFJSZWc+IHNjcmF0Y2hHUFIzID0geyB9KTsKKwogICAgIHZvaWQgZW1pdEFsbG9jYXRl
KEdQUlJlZyByZXN1bHRHUFIsIGNvbnN0IEpJVEFsbG9jYXRvciYgYWxsb2NhdG9yLCBHUFJSZWcg
YWxsb2NhdG9yR1BSLCBHUFJSZWcgc2NyYXRjaEdQUiwgSnVtcExpc3QmIHNsb3dQYXRoKTsKICAg
ICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTdHJ1Y3R1cmVUeXBlPgpJbmRleDogU291cmNlL1dU
Ri9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9u
IDI2MzE4MSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjcgQEAKKzIwMjAtMDYtMTcgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgorCisg
ICAgICAgIFJlcGxhY2UgSlNDOjpGcmVlTGlzdCBsaW5rZWQgbGlzdCB3aXRoIGEgQml0bWFwLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjEzMDcxCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgMS4gVXNlIGNv
dW50T2ZCaXRzPD4gdGVtcGxhdGUgdG8gY29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJpdHMuCisgICAg
ICAgIDIuIEludHJvZHVjZSBsb2cyKCkgYW5kIGxvZzJDb25zdGV4cHIoKSB1dGlsaXR5IGZ1bmN0
aW9ucy4KKyAgICAgICAgMy4gTWFrZSBCaXRtYXA8Pjo6Zm9yRWFjaFNldEJpdCgpIGEgbGl0dGxl
IGJpdCBtb3JlIGVmZmljaWVudDogd2UgZG9uJ3QgbmVlZCB0bworICAgICAgICAgICBrZWVwIGl0
ZXJhdGluZyBpZiB0aGUgYml0bWFwIHdvcmQgaXMgYWxyZWFkeSBlbXB0eSBvZiBiaXRzLgorCisg
ICAgICAgICogd3RmL0JpdG1hcC5oOgorICAgICAgICAoV1RGOjpXb3JkVHlwZT46OmZvckVhY2hT
ZXRCaXQgY29uc3QpOgorICAgICAgICAqIHd0Zi9NYXRoRXh0cmFzLmg6CisgICAgICAgIChXVEY6
OmNsekNvbnN0ZXhwcik6CisgICAgICAgIChXVEY6OmNseik6CisgICAgICAgIChXVEY6OmN0ekNv
bnN0ZXhwcik6CisgICAgICAgIChXVEY6OmN0eik6CisgICAgICAgIChXVEY6OmdldE1TQlNldCk6
CisgICAgICAgIChXVEY6OmdldE1TQlNldENvbnN0ZXhwcik6CisgICAgICAgIChXVEY6OmxvZzIp
OgorICAgICAgICAoV1RGOjpsb2cyQ29uc3RleHByKToKKwogMjAyMC0wNi0xNyAgRGF2aWQgS2ls
emVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJlcGxhY2UgT3B0aW9uU2V0VHJh
aXRzL09wdGlvblNldFZhbHVlcyB3aXRoIEVudW1UcmFpdHMvRW51bVZhbHVlcwpJbmRleDogU291
cmNlL1dURi93dGYvQml0bWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0bWFw
LmgJKHJldmlzaW9uIDI2MzE4MSkKKysrIFNvdXJjZS9XVEYvd3RmL0JpdG1hcC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzAsOSArMTMwLDE1IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIGhhc2go
KSBjb25zdDsKIAorICAgIC8vIExvdyBsZXZlbCBpbnRlcmZhY2UuCisgICAgdXNpbmcgV29yZCA9
IFdvcmRUeXBlOworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgYml0c0luV29yZCA9IGNv
dW50T2ZCaXRzPFdvcmRUeXBlPjsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG51bWJl
ck9mV29yZHMgPSAoYml0bWFwU2l6ZSArIGJpdHNJbldvcmQgLSAxKSAvIGJpdHNJbldvcmQ7Cisg
ICAgV29yZFR5cGUgd29yZEF0KHNpemVfdCB3b3JkSW5kZXgpIGNvbnN0IHsgcmV0dXJuIGJpdHNb
d29yZEluZGV4XTsgfQorCiBwcml2YXRlOgotICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQg
d29yZFNpemUgPSBzaXplb2YoV29yZFR5cGUpICogODsKLSAgICBzdGF0aWMgY29uc3RleHByIHVu
c2lnbmVkIHdvcmRzID0gKGJpdG1hcFNpemUgKyB3b3JkU2l6ZSAtIDEpIC8gd29yZFNpemU7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB3b3JkU2l6ZSA9IGJpdHNJbldvcmQ7CisgICAg
c3RhdGljIGNvbnN0ZXhwciB1bnNpZ25lZCB3b3JkcyA9IG51bWJlck9mV29yZHM7CiAKICAgICAv
LyB0aGUgbGl0ZXJhbCAnMScgaXMgb2YgdHlwZSBzaWduZWQgaW50LiAgV2Ugd2FudCB0byB1c2Ug
YW4gdW5zaWduZWQKICAgICAvLyB2ZXJzaW9uIG9mIHRoZSBjb3JyZWN0IHNpemUgd2hlbiBkb2lu
ZyB0aGUgY2FsY3VsYXRpb25zIGJlY2F1c2UgaWYKQEAgLTM3NywxNCArMzgzLDE0IEBAIGlubGlu
ZSB2b2lkIEJpdG1hcDxiaXRtYXBTaXplLCBXb3JkVHlwZT4KIHsKICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHdvcmRzOyArK2kpIHsKICAgICAgICAgV29yZFR5cGUgd29yZCA9IGJpdHNbaV07
Ci0gICAgICAgIGlmICghd29yZCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBzaXpl
X3QgYmFzZSA9IGkgKiB3b3JkU2l6ZTsKLSAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB3
b3JkU2l6ZTsgKytqKSB7CisgICAgICAgIHNpemVfdCBqID0gMDsKKyAgICAgICAgZm9yICg7IHdv
cmQ7ICsraikgewogICAgICAgICAgICAgaWYgKHdvcmQgJiAxKQogICAgICAgICAgICAgICAgIGZ1
bmMoYmFzZSArIGopOwogICAgICAgICAgICAgd29yZCA+Pj0gMTsKICAgICAgICAgfQorICAgICAg
ICBBU1NFUlQoaiA8PSB3b3JkU2l6ZSk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9NYXRoRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5o
CShyZXZpc2lvbiAyNjMxODEpCisrKyBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTU5Myw3ICs1OTMsNyBAQCB2b2lkIHNodWZmbGVWZWN0b3IoVmVjdG9yVHlw
ZSYgdmVjdG9yLCBjCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KIGNvbnN0ZXhwciB1bnNpZ25lZCBj
bHpDb25zdGV4cHIoVCB2YWx1ZSkKIHsKLSAgICBjb25zdGV4cHIgdW5zaWduZWQgYml0U2l6ZSA9
IHNpemVvZihUKSAqIENIQVJfQklUOworICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRTaXplID0g
Y291bnRPZkJpdHM8VD47CiAKICAgICB1c2luZyBVVCA9IHR5cGVuYW1lIHN0ZDo6bWFrZV91bnNp
Z25lZDxUPjo6dHlwZTsKICAgICBVVCB1VmFsdWUgPSB2YWx1ZTsKQEAgLTYxMCwxMyArNjEwLDEz
IEBAIGNvbnN0ZXhwciB1bnNpZ25lZCBjbHpDb25zdGV4cHIoVCB2YWx1ZSkKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CiBpbmxpbmUgdW5zaWduZWQgY2x6KFQgdmFsdWUpCiB7Ci0gICAgY29uc3RleHBy
IHVuc2lnbmVkIGJpdFNpemUgPSBzaXplb2YoVCkgKiBDSEFSX0JJVDsKKyAgICBjb25zdGV4cHIg
dW5zaWduZWQgYml0U2l6ZSA9IGNvdW50T2ZCaXRzPFQ+OwogCiAgICAgdXNpbmcgVVQgPSB0eXBl
bmFtZSBzdGQ6Om1ha2VfdW5zaWduZWQ8VD46OnR5cGU7CiAgICAgVVQgdVZhbHVlID0gdmFsdWU7
CiAKICNpZiBDT01QSUxFUihHQ0NfQ09NUEFUSUJMRSkKLSAgICBjb25zdGV4cHIgdW5zaWduZWQg
Yml0U2l6ZTY0ID0gc2l6ZW9mKHVpbnQ2NF90KSAqIENIQVJfQklUOworICAgIGNvbnN0ZXhwciB1
bnNpZ25lZCBiaXRTaXplNjQgPSBjb3VudE9mQml0czx1aW50NjRfdD47CiAgICAgaWYgKHVWYWx1
ZSkKICAgICAgICAgcmV0dXJuIF9fYnVpbHRpbl9jbHpsbCh1VmFsdWUpIC0gKGJpdFNpemU2NCAt
IGJpdFNpemUpOwogICAgIHJldHVybiBiaXRTaXplOwpAQCAtNjM4LDcgKzYzOCw3IEBAIGlubGlu
ZSB1bnNpZ25lZCBjbHooVCB2YWx1ZSkKIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogY29uc3RleHBy
IHVuc2lnbmVkIGN0ekNvbnN0ZXhwcihUIHZhbHVlKQogewotICAgIGNvbnN0ZXhwciB1bnNpZ25l
ZCBiaXRTaXplID0gc2l6ZW9mKFQpICogQ0hBUl9CSVQ7CisgICAgY29uc3RleHByIHVuc2lnbmVk
IGJpdFNpemUgPSBjb3VudE9mQml0czxUPjsKIAogICAgIHVzaW5nIFVUID0gdHlwZW5hbWUgc3Rk
OjptYWtlX3Vuc2lnbmVkPFQ+Ojp0eXBlOwogICAgIFVUIHVWYWx1ZSA9IHZhbHVlOwpAQCAtNjU3
LDcgKzY1Nyw3IEBAIGNvbnN0ZXhwciB1bnNpZ25lZCBjdHpDb25zdGV4cHIoVCB2YWx1ZSkKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CiBpbmxpbmUgdW5zaWduZWQgY3R6KFQgdmFsdWUpCiB7Ci0gICAg
Y29uc3RleHByIHVuc2lnbmVkIGJpdFNpemUgPSBzaXplb2YoVCkgKiBDSEFSX0JJVDsKKyAgICBj
b25zdGV4cHIgdW5zaWduZWQgYml0U2l6ZSA9IGNvdW50T2ZCaXRzPFQ+OwogCiAgICAgdXNpbmcg
VVQgPSB0eXBlbmFtZSBzdGQ6Om1ha2VfdW5zaWduZWQ8VD46OnR5cGU7CiAgICAgVVQgdVZhbHVl
ID0gdmFsdWU7CkBAIC02OTUsNyArNjk1LDcgQEAgY29uc3RleHByIHVuc2lnbmVkIGdldExTQlNl
dENvbnN0ZXhwcihUIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIGlubGluZSB1bnNpZ25lZCBnZXRN
U0JTZXQoVCB0KQogewotICAgIGNvbnN0ZXhwciB1bnNpZ25lZCBiaXRTaXplID0gc2l6ZW9mKFQp
ICogQ0hBUl9CSVQ7CisgICAgY29uc3RleHByIHVuc2lnbmVkIGJpdFNpemUgPSBjb3VudE9mQml0
czxUPjsKICAgICBBU1NFUlQodCk7CiAgICAgcmV0dXJuIGJpdFNpemUgLSAxIC0gY2x6KHQpOwog
fQpAQCAtNzAzLDExICs3MDMsMTQgQEAgaW5saW5lIHVuc2lnbmVkIGdldE1TQlNldChUIHQpCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgogY29uc3RleHByIHVuc2lnbmVkIGdldE1TQlNldENvbnN0ZXhw
cihUIHQpCiB7Ci0gICAgY29uc3RleHByIHVuc2lnbmVkIGJpdFNpemUgPSBzaXplb2YoVCkgKiBD
SEFSX0JJVDsKKyAgICBjb25zdGV4cHIgdW5zaWduZWQgYml0U2l6ZSA9IGNvdW50T2ZCaXRzPFQ+
OwogICAgIEFTU0VSVF9VTkRFUl9DT05TVEVYUFJfQ09OVEVYVCh0KTsKICAgICByZXR1cm4gYml0
U2l6ZSAtIDEgLSBjbHpDb25zdGV4cHIodCk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHVu
c2lnbmVkIGxvZzIoVCB2YWx1ZSkgeyByZXR1cm4gZ2V0TVNCU2V0KHZhbHVlKTsgfQordGVtcGxh
dGU8dHlwZW5hbWUgVD4gY29uc3RleHByIHVuc2lnbmVkIGxvZzJDb25zdGV4cHIoVCB2YWx1ZSkg
eyByZXR1cm4gZ2V0TVNCU2V0Q29uc3RleHByKHZhbHVlKTsgfQorCiB9IC8vIG5hbWVzcGFjZSBX
VEYKIAogdXNpbmcgV1RGOjpzaHVmZmxlVmVjdG9yOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>