<?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>201862</bug_id>
          
          <creation_ts>2019-09-16 22:57:56 -0700</creation_ts>
          <short_desc>[FTW] Correct ImageBufferData and clear operations</short_desc>
          <delta_ts>2019-09-18 21:54:29 -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>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>fujii</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1571437</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-16 22:57:56 -0700</bug_when>
    <thetext>The implementation of ImageBufferDataDirect2D did not properly handle the case of a &apos;getData&apos; request for less than the size of the full bitmap.

The implementation of &apos;Clear&apos; was not correct when the size of the region to be cleared is less than the size of the render target.

This patch corrects both problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571438</commentid>
    <comment_count>1</comment_count>
      <attachid>378941</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-16 23:04:44 -0700</bug_when>
    <thetext>Created attachment 378941
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571476</commentid>
    <comment_count>2</comment_count>
      <attachid>378941</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-09-17 01:25:58 -0700</bug_when>
    <thetext>Comment on attachment 378941
Patch

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

&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:122
&gt; +        HRESULT hr = d2dDeviceContext-&gt;CreateBitmap(rect.size(), nullptr, bytesPerRowInData, bitmapProperties2, &amp;cpuBitmap);

If you copy only the desired rect instead of whole rect, you need to keep the previous rect and check it with current rect.
https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp?rev=249839#L113
- if (bitmapBufferSync == BitmapBufferSync::BufferOutOfSync || data.size() != numBytes.unsafeGet()) {
+ if (bitmapBufferSync == BitmapBufferSync::BufferOutOfSync || rect != m_savedRect) {

Checking only data size is not sufficient because 2x3 == 3x2.
I don&apos;t think it is no so bad idea copying the whole buffer every time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571507</commentid>
    <comment_count>3</comment_count>
      <attachid>378941</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-09-17 05:31:13 -0700</bug_when>
    <thetext>Comment on attachment 378941
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:122
&gt;&gt; +        HRESULT hr = d2dDeviceContext-&gt;CreateBitmap(rect.size(), nullptr, bytesPerRowInData, bitmapProperties2, &amp;cpuBitmap);
&gt; 
&gt; If you copy only the desired rect instead of whole rect, you need to keep the previous rect and check it with current rect.
&gt; https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp?rev=249839#L113
&gt; - if (bitmapBufferSync == BitmapBufferSync::BufferOutOfSync || data.size() != numBytes.unsafeGet()) {
&gt; + if (bitmapBufferSync == BitmapBufferSync::BufferOutOfSync || rect != m_savedRect) {
&gt; 
&gt; Checking only data size is not sufficient because 2x3 == 3x2.
&gt; I don&apos;t think it is no so bad idea copying the whole buffer every time.

Remove the variable size if it becomes unused.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571513</commentid>
    <comment_count>4</comment_count>
      <attachid>378941</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-09-17 06:22:19 -0700</bug_when>
    <thetext>Comment on attachment 378941
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:122
&gt;&gt;&gt; +        HRESULT hr = d2dDeviceContext-&gt;CreateBitmap(rect.size(), nullptr, bytesPerRowInData, bitmapProperties2, &amp;cpuBitmap);
&gt;&gt; 
&gt;&gt; If you copy only the desired rect instead of whole rect, you need to keep the previous rect and check it with current rect.
&gt;&gt; https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp?rev=249839#L113
&gt;&gt; - if (bitmapBufferSync == BitmapBufferSync::BufferOutOfSync || data.size() != numBytes.unsafeGet()) {
&gt;&gt; + if (bitmapBufferSync == BitmapBufferSync::BufferOutOfSync || rect != m_savedRect) {
&gt;&gt; 
&gt;&gt; Checking only data size is not sufficient because 2x3 == 3x2.
&gt;&gt; I don&apos;t think it is no so bad idea copying the whole buffer every time.
&gt; 
&gt; Remove the variable size if it becomes unused.

By removing BitmapBufferSync::BufferOutOfSync, the condition can be simplified:
  if (rect != m_savedRect) {

Then, markBufferOutOfSync should be changed:
https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp?rev=249839#L149
- void markBufferOutOfSync() { bitmapBufferSync = BitmapBufferSync::BufferOutOfSync; }
+ void markBufferOutOfSync() { m_savedRect.setSize({ });  }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571555</commentid>
    <comment_count>5</comment_count>
      <attachid>378941</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-17 09:08:05 -0700</bug_when>
    <thetext>Comment on attachment 378941
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:122
&gt;&gt;&gt;&gt; +        HRESULT hr = d2dDeviceContext-&gt;CreateBitmap(rect.size(), nullptr, bytesPerRowInData, bitmapProperties2, &amp;cpuBitmap);
&gt;&gt;&gt; 
&gt;&gt;&gt; If you copy only the desired rect instead of whole rect, you need to keep the previous rect and check it with current rect.
&gt;&gt;&gt; https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp?rev=249839#L113
&gt;&gt;&gt; - if (bitmapBufferSync == BitmapBufferSync::BufferOutOfSync || data.size() != numBytes.unsafeGet()) {
&gt;&gt;&gt; + if (bitmapBufferSync == BitmapBufferSync::BufferOutOfSync || rect != m_savedRect) {
&gt;&gt;&gt; 
&gt;&gt;&gt; Checking only data size is not sufficient because 2x3 == 3x2.
&gt;&gt;&gt; I don&apos;t think it is no so bad idea copying the whole buffer every time.
&gt;&gt; 
&gt;&gt; Remove the variable size if it becomes unused.
&gt; 
&gt; By removing BitmapBufferSync::BufferOutOfSync, the condition can be simplified:
&gt;   if (rect != m_savedRect) {
&gt; 
&gt; Then, markBufferOutOfSync should be changed:
&gt; https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp?rev=249839#L149
&gt; - void markBufferOutOfSync() { bitmapBufferSync = BitmapBufferSync::BufferOutOfSync; }
&gt; + void markBufferOutOfSync() { m_savedRect.setSize({ });  }

I think your idea about the backing buffer is correct. We should maintain an in-memory version of the GPU bitmap, and always copy the entire buffer to memory, not just the bit being queried.

Then, the read/write operations need to be adjusted to make sure we only read the relevant portion of the in-memory data to the ImageBuffer.getData caller, and only updated the relevant portions of the backing buffer during calls to ImageBuffer.putData.

I don&apos;t think I agree with the idea to remove the sync state flags, because I am trying to avoid GPU read-backs in cases where we have not uploaded to the GPU (or modified the GPU version of the image). This is common when a chain of filter operations are performed on the memory representation of an image.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571823</commentid>
    <comment_count>6</comment_count>
      <attachid>379021</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-17 22:35:15 -0700</bug_when>
    <thetext>Created attachment 379021
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571829</commentid>
    <comment_count>7</comment_count>
      <attachid>379021</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-09-17 23:43:07 -0700</bug_when>
    <thetext>Comment on attachment 379021
Patch

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

&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:89
&gt; +    unsigned srcStride = sourceSize.width() * 4;

width of sourceRect is not srcStride. copyRectFromSourceToDest should take sourceBufferSize.

&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:125
&gt; +    return copyRectFromSourceToDest(rect, data.data(), rect.size(), IntPoint(), result-&gt;data());

The first argument &apos;rect&apos; is a desired rect, not a data canvans size. You need to pass data canvas size.

&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:272
&gt;  {

ImageBufferData::putData needs to take BitmapBufferSync::BufferOutOfSync into account.
In case of BitmapBufferSync::BufferOutOfSync and partial putData, putData need to call readDataFromBitmapIfNeeded before copying data.

&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:326
&gt; +    } else if (!copyRectFromSourceToData(sourceRect, source))

ImageBufferData::putData needs to convert if byteFormat doens&apos;t match with sourceFormat.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571831</commentid>
    <comment_count>8</comment_count>
      <attachid>379021</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-09-18 00:23:29 -0700</bug_when>
    <thetext>Comment on attachment 379021
Patch

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

&gt; Source/WebCore/ChangeLog:16
&gt; +        This patch corrects all three problems.

DRT and WKTR patches aren&apos;t landed yet.
Please lant them if you have.

&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:106
&gt; +        }

Use memcpy. Call memcpy sourceSize.height() times.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1571832</commentid>
    <comment_count>9</comment_count>
      <attachid>379021</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-09-18 00:32:00 -0700</bug_when>
    <thetext>Comment on attachment 379021
Patch

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

&gt; Source/WebCore/platform/graphics/win/Direct2DOperations.cpp:1172
&gt; +        save(platformContext);

I think this is very bad. This ends up to stack mismatch.
If you need at least one render state should be pushed, You should push a render state in PlatformContextDirect2D ctor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572036</commentid>
    <comment_count>10</comment_count>
      <attachid>379021</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-18 12:52:38 -0700</bug_when>
    <thetext>Comment on attachment 379021
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:16
&gt;&gt; +        This patch corrects all three problems.
&gt; 
&gt; DRT and WKTR patches aren&apos;t landed yet.
&gt; Please lant them if you have.

These don&apos;t exist yet. I&apos;ve been running tests manually (in MiniBrowser).

&gt;&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:89
&gt;&gt; +    unsigned srcStride = sourceSize.width() * 4;
&gt; 
&gt; width of sourceRect is not srcStride. copyRectFromSourceToDest should take sourceBufferSize.

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:106
&gt;&gt; +        }
&gt; 
&gt; Use memcpy. Call memcpy sourceSize.height() times.

Will do.

&gt;&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:125
&gt;&gt; +    return copyRectFromSourceToDest(rect, data.data(), rect.size(), IntPoint(), result-&gt;data());
&gt; 
&gt; The first argument &apos;rect&apos; is a desired rect, not a data canvans size. You need to pass data canvas size.

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:272
&gt;&gt;  {
&gt; 
&gt; ImageBufferData::putData needs to take BitmapBufferSync::BufferOutOfSync into account.
&gt; In case of BitmapBufferSync::BufferOutOfSync and partial putData, putData need to call readDataFromBitmapIfNeeded before copying data.

Oh! Good point.

&gt;&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:326
&gt;&gt; +    } else if (!copyRectFromSourceToData(sourceRect, source))
&gt; 
&gt; ImageBufferData::putData needs to convert if byteFormat doens&apos;t match with sourceFormat.

Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572040</commentid>
    <comment_count>11</comment_count>
      <attachid>379062</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-18 13:03:13 -0700</bug_when>
    <thetext>Created attachment 379062
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572159</commentid>
    <comment_count>12</comment_count>
      <attachid>379087</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-18 17:01:59 -0700</bug_when>
    <thetext>Created attachment 379087
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572160</commentid>
    <comment_count>13</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-18 17:02:40 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #9)
&gt; Comment on attachment 379021 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=379021&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/win/Direct2DOperations.cpp:1172
&gt; &gt; +        save(platformContext);
&gt; 
&gt; I think this is very bad. This ends up to stack mismatch.
&gt; If you need at least one render state should be pushed, You should push a
&gt; render state in PlatformContextDirect2D ctor.

Sorry -- I forgot to address this. I&apos;ve removed this from the patch, and uploaded it. I added some assertions to save/restore to help identify where these might get out of sync.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572213</commentid>
    <comment_count>14</comment_count>
      <attachid>379087</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-09-18 19:47:28 -0700</bug_when>
    <thetext>Comment on attachment 379087
Patch

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

&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:84
&gt; +    if (sourceRect.width() &gt; destBufferSize.width() || sourceRect.height() &gt; destBufferSize.height())

This is not a right condition. It should be:
sourceRect.maxX() + destBufferPosition.x()  &gt; destBufferSize.width()

However, I think it&apos;s easy to understand to use IntRect::contains.

if (!IntRect({ }, destBufferSize).contains(IntRect(destBufferPosition, sourceRect.size())))
    return false;
if (!IntRect({ }, sourceBufferSize).contains(sourceRect))
    return false;

&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:113
&gt; +    if (sourceRect.width() &gt; destBufferSize.width() || sourceRect.height() &gt; destBufferSize.height())

Ditto

&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:431
&gt; +        copyRectFromSourceToDestAndSetPremultiplication&lt;AlphaPremultiplication::Premultiplied&gt;(sourceRect, sourceRect.size(), source.data(), backingStoreSize, data.data(), destBufferPosition);

You specify sourceFormat instead of desiredFormat for the template argument.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572227</commentid>
    <comment_count>15</comment_count>
      <attachid>379087</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-18 20:38:59 -0700</bug_when>
    <thetext>Comment on attachment 379087
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:84
&gt;&gt; +    if (sourceRect.width() &gt; destBufferSize.width() || sourceRect.height() &gt; destBufferSize.height())
&gt; 
&gt; This is not a right condition. It should be:
&gt; sourceRect.maxX() + destBufferPosition.x()  &gt; destBufferSize.width()
&gt; 
&gt; However, I think it&apos;s easy to understand to use IntRect::contains.
&gt; 
&gt; if (!IntRect({ }, destBufferSize).contains(IntRect(destBufferPosition, sourceRect.size())))
&gt;     return false;
&gt; if (!IntRect({ }, sourceBufferSize).contains(sourceRect))
&gt;     return false;

Yes, this looks better. Done!

&gt;&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:113
&gt;&gt; +    if (sourceRect.width() &gt; destBufferSize.width() || sourceRect.height() &gt; destBufferSize.height())
&gt; 
&gt; Ditto

Okay. Also: I wish there was an easy way to consolidate these two templates.

&gt;&gt; Source/WebCore/platform/graphics/win/ImageBufferDataDirect2D.cpp:431
&gt;&gt; +        copyRectFromSourceToDestAndSetPremultiplication&lt;AlphaPremultiplication::Premultiplied&gt;(sourceRect, sourceRect.size(), source.data(), backingStoreSize, data.data(), destBufferPosition);
&gt; 
&gt; You specify sourceFormat instead of desiredFormat for the template argument.

Oh, no! I mixed these two up. I&apos;ll fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572233</commentid>
    <comment_count>16</comment_count>
      <attachid>379100</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-18 20:58:36 -0700</bug_when>
    <thetext>Created attachment 379100
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572249</commentid>
    <comment_count>17</comment_count>
      <attachid>379100</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-09-18 21:20:05 -0700</bug_when>
    <thetext>Comment on attachment 379100
Patch

Looks good to me.

There is a question in my mind.
Converting strait alpha to premultiplied alpha is no problem, but lossy.
However, Converting premultiplied alpha to strait alpha make me feel bad because it is lossy.
But, it seems that Cairo port is also doing premultiplied alpha → strait alpha conversion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572257</commentid>
    <comment_count>18</comment_count>
      <attachid>379100</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-18 21:53:56 -0700</bug_when>
    <thetext>Comment on attachment 379100
Patch

Clearing flags on attachment: 379100

Committed r250085: &lt;https://trac.webkit.org/changeset/250085&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572258</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-18 21:53:57 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1572259</commentid>
    <comment_count>20</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-09-18 21:54:29 -0700</bug_when>
    <thetext>&lt;rdar://problem/55506453&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378941</attachid>
            <date>2019-09-16 23:04:44 -0700</date>
            <delta_ts>2019-09-17 22:35:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201862-20190916230439.patch</filename>
            <type>text/plain</type>
            <size>4754</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTk0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE5LTA5LTE2ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtGVFddIENvcnJlY3QgSW1h
Z2VCdWZmZXJEYXRhIGFuZCBjbGVhciBvcGVyYXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDE4NjIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGNvcnJlY3RzIHNldmVyYWwgcHJv
YmxlbXMgaW4gdGhlIGNhbnZhcyBpbXBsZW1lbnRhdGlvbjoKKyAgICAgICAgMS4gVGhlIGltcGxl
bWVudGF0aW9uIG9mIEltYWdlQnVmZmVyRGF0YURpcmVjdDJEIGRpZCBub3QgcHJvcGVybHkgaGFu
ZGxlIHRoZSBjYXNlIG9mIGEKKyAgICAgICAgICAgJ2dldERhdGEnIHJlcXVlc3QgZm9yIGxlc3Mg
dGhhbiB0aGUgc2l6ZSBvZiB0aGUgZnVsbCBiaXRtYXAuCisgICAgICAgIDIuIFRoZSBpbXBsZW1l
bnRhdGlvbiBvZiAnQ2xlYXInIHdhcyBub3QgY29ycmVjdCB3aGVuIHRoZSBzaXplIG9mIHRoZSBy
ZWdpb24gdG8gYmUKKyAgICAgICAgICAgY2xlYXJlZCBpcyBsZXNzIHRoYW4gdGhlIHNpemUgb2Yg
dGhlIHJlbmRlciB0YXJnZXQuCisgICAgICAgIDMuICdlbmREcmF3JyBmYWlscyBpZiBhbnkgY2xp
cCByZWdpb25zIGFyZSBhY3RpdmUgYXQgdGhlIGVuZCBvZiB0aGUgb3BlcmF0aW9uLiBUaGUKKyAg
ICAgICAgICAgc3RhY2sgbmVlZHMgdG8gYmUgdW53b3VuZCB3aGVuIGVuZERyYXcgaXMgY2FsbGVk
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggY29ycmVjdHMgYm90aCBwcm9ibGVtcy4KKworICAgICAg
ICBUZXN0ZWQgYnkgY2FudmFzIExheW91dFRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEaXJl
Y3QyRDo6Y2xlYXJSZWN0KTogQ29ycmVjdCBwYXJ0aWFsIHJlbmRlciB0YXJnZXQgY2FzZS4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhIGNvbnN0KTogQ29y
cmVjdCBwYXJ0aWFsICdnZXREYXRhJyBjYXNlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRDo6ZW5kRHJhdyk6IENvcnJlY3QgZmFpbHVyZXMgY2F1c2VkIGJ5
CisgICAgICAgIGRhbmdsaW5nIGNsaXAgcmVnaW9ucyB3aGVuICdlbmREcmF3JyBpcyBjYWxsZWQu
CisKIDIwMTktMDktMTYgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+
CiAKICAgICAgICAgW1dpbkNhaXJvXVtjdXJsXSBEb24ndCBjb21waWxlIHVudXNlZCBDZXJ0aWZp
Y2F0ZUNGV2luLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0RpcmVjdDJET3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI0OTky
MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJh
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NjcsOSArNjY3LDEyIEBAIHZvaWQgY2xlYXJS
ZWN0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJgogICAgICAgICBpZiAoIXJlY3RUb0NsZWFyLmlu
dGVyc2VjdHMocmVuZGVyVGFyZ2V0UmVjdCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAg
ICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwogICAgICAgICByZWN0VG9D
bGVhci5pbnRlcnNlY3QocmVuZGVyVGFyZ2V0UmVjdCk7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+
RmlsbFJlY3RhbmdsZShyZWN0VG9DbGVhciwgcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENvbG9y
KENvbG9yKEQyRDE6OkNvbG9yRigwLCAwLCAwLCAwKSkpLmdldCgpKTsKKworICAgICAgICBwbGF0
Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7CisgICAgICAgIHJlbmRlclRhcmdldC0+
UHVzaEF4aXNBbGlnbmVkQ2xpcChyZWN0VG9DbGVhciwgRDJEMV9BTlRJQUxJQVNfTU9ERV9QRVJf
UFJJTUlUSVZFKTsKKyAgICAgICAgcmVuZGVyVGFyZ2V0LT5DbGVhcihEMkQxOjpDb2xvckYoMCwg
MCwgMCwgMCkpOworICAgICAgICByZW5kZXJUYXJnZXQtPlBvcEF4aXNBbGlnbmVkQ2xpcCgpOwog
ICAgIH0pOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAJKHJldmlz
aW9uIDI0OTkyMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFn
ZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOSw3ICsxMTksNyBA
QCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0CiAgICAgICAgIC8vIENv
cHkgR1BVIGRhdGEgZnJvbSB0aGUgSUQyRDFCaXRtYXAgdG8gYSBDUFUtYmFja2VkIElEMkQxQml0
bWFwMQogICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXAxPiBjcHVCaXRtYXA7CiAgICAgICAgIEQy
RDFfQklUTUFQX1BST1BFUlRJRVMxIGJpdG1hcFByb3BlcnRpZXMyID0gRDJEMTo6Qml0bWFwUHJv
cGVydGllczEoRDJEMV9CSVRNQVBfT1BUSU9OU19DUFVfUkVBRCB8IEQyRDFfQklUTUFQX09QVElP
TlNfQ0FOTk9UX0RSQVcsIERpcmVjdDJEOjpwaXhlbEZvcm1hdCgpKTsKLSAgICAgICAgSFJFU1VM
VCBociA9IGQyZERldmljZUNvbnRleHQtPkNyZWF0ZUJpdG1hcChzaXplLCBudWxscHRyLCBieXRl
c1BlclJvd0luRGF0YSwgYml0bWFwUHJvcGVydGllczIsICZjcHVCaXRtYXApOworICAgICAgICBI
UkVTVUxUIGhyID0gZDJkRGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFwKHJlY3Quc2l6ZSgpLCBu
dWxscHRyLCBieXRlc1BlclJvd0luRGF0YSwgYml0bWFwUHJvcGVydGllczIsICZjcHVCaXRtYXAp
OwogICAgICAgICBpZiAoIVNVQ0NFRURFRChocikpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIApAQCAtMTM1LDcgKzEzNSw3IEBAIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gSW1hZ2VC
dWZmZXJEYXQKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAgIGlmIChtYXBw
ZWREYXRhLmJpdHMpIHsKLSAgICAgICAgICAgIGlmICghZW5zdXJlQmFja2luZ1N0b3JlKGJpdG1h
cC0+R2V0UGl4ZWxTaXplKCkpKQorICAgICAgICAgICAgaWYgKCFlbnN1cmVCYWNraW5nU3RvcmUo
cmVjdC5zaXplKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgICAg
ICAgICAvLyBTb2Z0d2FyZSBmaWx0ZXJzIGV4cGVjdCBSR0JBIGJ5dGVzLiBXZSBuZWVkIHRvIHN3
aXp6bGUgZnJvbSBEaXJlY3QyRCdzIEJHUkEgdG8gYmUgY29tcGF0aWJsZS4KQEAgLTE1NSw2ICsx
NTUsNyBAQCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0CiAgICAgICAg
IGNvbnRleHQtPmJlZ2luRHJhdygpOwogICAgIH0KIAorICAgIFJFTEVBU0VfQVNTRVJUKHJlc3Vs
dC0+Ynl0ZUxlbmd0aCgpID09IGRhdGEuc2l6ZSgpKTsKICAgICByZXN1bHQtPnNldFJhbmdlKGRh
dGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgMCk7CiAKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVj
dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNDk5MjMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsNiArMjUzLDEwIEBAIHZvaWQgUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQ6OmJlZ2luRHJhdygKIHZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OmVu
ZERyYXcoKQogewogICAgIEFTU0VSVChtX3JlbmRlclRhcmdldCk7CisKKyAgICB3aGlsZSAoIW1f
cmVuZGVyU3RhdGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmVzdG9yZSgpOworCiAgICAgRDJEMV9U
QUcgZmlyc3QsIHNlY29uZDsKICAgICBIUkVTVUxUIGhyID0gbV9yZW5kZXJUYXJnZXQtPkVuZERy
YXcoJmZpcnN0LCAmc2Vjb25kKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379021</attachid>
            <date>2019-09-17 22:35:15 -0700</date>
            <delta_ts>2019-09-18 13:03:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201862-20190917223511.patch</filename>
            <type>text/plain</type>
            <size>18269</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTk0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDE5LTA5LTE2ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtGVFddIENvcnJlY3QgSW1h
Z2VCdWZmZXJEYXRhIGFuZCBjbGVhciBvcGVyYXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDE4NjIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGNvcnJlY3RzIHNldmVyYWwgcHJv
YmxlbXMgaW4gdGhlIGNhbnZhcyBpbXBsZW1lbnRhdGlvbjoKKyAgICAgICAgMS4gVGhlIGltcGxl
bWVudGF0aW9uIG9mIEltYWdlQnVmZmVyRGF0YURpcmVjdDJEIGRpZCBub3QgcHJvcGVybHkgaGFu
ZGxlIHRoZSBjYXNlIG9mIGEKKyAgICAgICAgICAgJ2dldERhdGEnIHJlcXVlc3QgZm9yIGxlc3Mg
dGhhbiB0aGUgc2l6ZSBvZiB0aGUgZnVsbCBiaXRtYXAuCisgICAgICAgIDIuIFRoZSBpbXBsZW1l
bnRhdGlvbiBvZiAnQ2xlYXInIHdhcyBub3QgY29ycmVjdCB3aGVuIHRoZSBzaXplIG9mIHRoZSBy
ZWdpb24gdG8gYmUKKyAgICAgICAgICAgY2xlYXJlZCBpcyBsZXNzIHRoYW4gdGhlIHNpemUgb2Yg
dGhlIHJlbmRlciB0YXJnZXQuCisgICAgICAgIDMuICdlbmREcmF3JyBmYWlscyBpZiBhbnkgY2xp
cCByZWdpb25zIGFyZSBhY3RpdmUgYXQgdGhlIGVuZCBvZiB0aGUgb3BlcmF0aW9uLiBUaGUKKyAg
ICAgICAgICAgc3RhY2sgbmVlZHMgdG8gYmUgdW53b3VuZCB3aGVuIGVuZERyYXcgaXMgY2FsbGVk
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggY29ycmVjdHMgYWxsIHRocmVlIHByb2JsZW1zLgorCisg
ICAgICAgIFRlc3RlZCBieSBjYW52YXMgTGF5b3V0VGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRpcmVjdDJEOjpjbGVhclJlY3QpOiBDb3JyZWN0IHBhcnRpYWwgcmVuZGVyIHRhcmdldCBjYXNl
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3Qy
RC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEgY29uc3Qp
OiBDb3JyZWN0IHBhcnRpYWwgYnVmZmVyIGNhc2UuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckRhdGE6OnB1dERhdGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
RGF0YTo6cmVhZERhdGFGcm9tQml0bWFwSWZOZWVkZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmNvcHlSZWN0RnJvbVNvdXJjZVRvRGVzdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJEYXRhOjpjb3B5UmVjdEZyb21Tb3VyY2VUb0RhdGEpOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OmVuZERyYXcpOiBDb3Jy
ZWN0IGZhaWx1cmVzIGNhdXNlZCBieQorICAgICAgICBkYW5nbGluZyBjbGlwIHJlZ2lvbnMgd2hl
biAnZW5kRHJhdycgaXMgY2FsbGVkLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQ6OmZsdXNoKTogRG9uJ3QgY2FsbCBwb3N0LWRyYXcgb2JzZXJ2ZXI7CisgICAgICAg
IHRoaXMgaXMgYWxyZWFkeSBoYW5kbGVkIGluIHRoZSBkcmF3IG9wZXJhdGlvbnMsIGFuZCBlbmRE
cmF3LgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnJlc3RvcmUp
OiBSZWNvZ25pemUgdGhhdCB0aGUgY2xpcAorICAgICAgICBhbmQgdHJhbnNwYXJlbmN5IHN0YWNr
IG1pZ2h0IGJlIGVtcHR5IHdoZW4gcmVzdG9yZSBpcyBjYWxsZWQuCisKIDIwMTktMDktMTYgIEZ1
amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW1dpbkNh
aXJvXVtjdXJsXSBEb24ndCBjb21waWxlIHVudXNlZCBDZXJ0aWZpY2F0ZUNGV2luLmNwcApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0RpcmVjdDJET3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI0OTkyMykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NjcsOSArNjY3LDEyIEBAIHZvaWQgY2xlYXJSZWN0KFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJgogICAgICAgICBpZiAoIXJlY3RUb0NsZWFyLmludGVyc2VjdHMocmVuZGVyVGFy
Z2V0UmVjdCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0
LnNldFRhZ3MoMSwgX19MSU5FX18pOwogICAgICAgICByZWN0VG9DbGVhci5pbnRlcnNlY3QocmVu
ZGVyVGFyZ2V0UmVjdCk7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+RmlsbFJlY3RhbmdsZShyZWN0
VG9DbGVhciwgcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENvbG9yKENvbG9yKEQyRDE6OkNvbG9y
RigwLCAwLCAwLCAwKSkpLmdldCgpKTsKKworICAgICAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFn
cygxLCBfX0xJTkVfXyk7CisgICAgICAgIHJlbmRlclRhcmdldC0+UHVzaEF4aXNBbGlnbmVkQ2xp
cChyZWN0VG9DbGVhciwgRDJEMV9BTlRJQUxJQVNfTU9ERV9QRVJfUFJJTUlUSVZFKTsKKyAgICAg
ICAgcmVuZGVyVGFyZ2V0LT5DbGVhcihEMkQxOjpDb2xvckYoMCwgMCwgMCwgMCkpOworICAgICAg
ICByZW5kZXJUYXJnZXQtPlBvcEF4aXNBbGlnbmVkQ2xpcCgpOwogICAgIH0pOwogfQogCkBAIC05
OTEsNyArOTk0LDYgQEAgdm9pZCBmbHVzaChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdAog
ICAgIEFTU0VSVChwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwogICAgIEQyRDFfVEFH
IGZpcnN0LCBzZWNvbmQ7CiAgICAgSFJFU1VMVCBociA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJU
YXJnZXQoKS0+Rmx1c2goJmZpcnN0LCAmc2Vjb25kKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQubm90
aWZ5UG9zdERyYXdPYnNlcnZlcigpOwogCiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhy
KSk7CiB9CkBAIC0xMTY2LDkgKzExNjgsOCBAQCB2b2lkIGNsaXBQYXRoKFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJiBwCiAKIHZvaWQgY2xpcFBhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBs
YXRmb3JtQ29udGV4dCwgSUQyRDFHZW9tZXRyeSogcGF0aCkKIHsKLSAgICBBU1NFUlQocGxhdGZv
cm1Db250ZXh0Lmhhc1NhdmVkU3RhdGUoKSk7Ci0gICAgaWYgKCFwbGF0Zm9ybUNvbnRleHQuaGFz
U2F2ZWRTdGF0ZSgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKHBsYXRmb3JtQ29udGV4dC5t
X3JlbmRlclN0YXRlcy5pc0VtcHR5KCkpCisgICAgICAgIHNhdmUocGxhdGZvcm1Db250ZXh0KTsK
IAogICAgIENPTVB0cjxJRDJEMUxheWVyPiBjbGlwTGF5ZXI7CiAgICAgSFJFU1VMVCBociA9IHBs
YXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+Q3JlYXRlTGF5ZXIoJmNsaXBMYXllcik7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRh
RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI0OTkyMykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJl
Y3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc5LDg1ICs3OSw2NCBAQCB2b2lkIHN3aXp6bGVB
bmRQcmVtdWx0aXBseShjb25zdCB1aW50OF90CiAgICAgfQogfQogCi1ib29sIEltYWdlQnVmZmVy
RGF0YTo6ZW5zdXJlQmFja2luZ1N0b3JlKGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0CitzdGF0
aWMgYm9vbCBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rlc3QoY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgdWludDhfdCogc291cmNlLCBjb25zdCBJbnRTaXplJiBkZXN0QnVmZmVyU2l6ZSwg
Y29uc3QgSW50UG9pbnQmIGRlc3RCdWZmZXJQb3NpdGlvbiwgdWludDhfdCogZGVzdCkKIHsKLSAg
ICBpZiAoc2l6ZSA9PSBiYWNraW5nU3RvcmVTaXplICYmICFkYXRhLmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgYXV0byBzb3VyY2VTaXplID0gc291cmNlUmVjdC5zaXplKCk7
CiAKLSAgICBhdXRvIG51bUJ5dGVzID0gc2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsK
LSAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQorICAgIGlmIChzb3VyY2VTaXplLndp
ZHRoKCkgPiBkZXN0QnVmZmVyU2l6ZS53aWR0aCgpIHx8IHNvdXJjZVNpemUuaGVpZ2h0KCkgPiBk
ZXN0QnVmZmVyU2l6ZS5oZWlnaHQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYmFj
a2luZ1N0b3JlU2l6ZSA9IHNpemU7Ci0gICAgZGF0YS5yZXNpemVUb0ZpdChudW1CeXRlcy51bnNh
ZmVHZXQoKSk7Ci0gICAgcmV0dXJuIGRhdGEuY2FwYWNpdHkoKSA9PSBudW1CeXRlcy51bnNhZmVH
ZXQoKTsKLX0KLQotUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6Omdl
dERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0LCBjb25zdCBJbnRSZWN0
JiByZWN0LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIC8qIGFjY2VsZXJhdGVSZW5kZXJpbmcg
Ki8sIGZsb2F0IC8qIHJlc29sdXRpb25TY2FsZSAqLykgY29uc3QKLXsKLSAgICBhdXRvIG51bUJ5
dGVzID0gcmVjdC5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKLSAgICBpZiAobnVtQnl0ZXMu
aGFzT3ZlcmZsb3dlZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB1bnNpZ25lZCBz
cmNTdHJpZGUgPSBzb3VyY2VTaXplLndpZHRoKCkgKiA0OworICAgIHVuc2lnbmVkIGRlc3RTdHJp
ZGUgPSBkZXN0QnVmZmVyU2l6ZS53aWR0aCgpICogNDsKIAotICAgIGF1dG8gcmVzdWx0ID0gVWlu
dDhDbGFtcGVkQXJyYXk6OnRyeUNyZWF0ZVVuaW5pdGlhbGl6ZWQobnVtQnl0ZXMudW5zYWZlR2V0
KCkpOwotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB1bnNp
Z25lZCBzcmNSb3dPZmZzZXQgPSBzb3VyY2VSZWN0LmxvY2F0aW9uKCkueCgpOworICAgIHVuc2ln
bmVkIGRlc3RSb3dPZmZzZXQgPSBkZXN0QnVmZmVyUG9zaXRpb24ueCgpOwogCi0gICAgaWYgKCFi
aXRtYXApCi0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgY29uc3QgdWludDhfdCogc3JjUm93
cyA9IHNvdXJjZSArIHNyY1N0cmlkZSAqIHNvdXJjZVJlY3QubG9jYXRpb24oKS55KCk7CisgICAg
dWludDhfdCogZGVzdFJvd3MgPSBkZXN0ICsgZGVzdFN0cmlkZSAqIGRlc3RCdWZmZXJQb3NpdGlv
bi55KCk7CiAKLSAgICBhdXRvIGJ5dGVzUGVyUm93SW5EYXRhID0gcmVjdC53aWR0aCgpICogNDsK
LSAgICBhdXRvIGhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgYXV0byB3aWR0aCA9IHJlY3Qu
d2lkdGgoKTsKLQotICAgIGlmIChiaXRtYXBCdWZmZXJTeW5jID09IEJpdG1hcEJ1ZmZlclN5bmM6
OkJ1ZmZlck91dE9mU3luYyB8fCBkYXRhLnNpemUoKSAhPSBudW1CeXRlcy51bnNhZmVHZXQoKSkg
ewotICAgICAgICBjb250ZXh0LT5lbmREcmF3KCk7Ci0KLSAgICAgICAgQ09NUHRyPElEMkQxRGV2
aWNlQ29udGV4dD4gZDJkRGV2aWNlQ29udGV4dChRdWVyeSwgcGxhdGZvcm1Db250ZXh0LT5yZW5k
ZXJUYXJnZXQoKSk7Ci0gICAgICAgIEFTU0VSVCghIWQyZERldmljZUNvbnRleHQpOwotCi0gICAg
ICAgIC8vIENvcHkgR1BVIGRhdGEgZnJvbSB0aGUgSUQyRDFCaXRtYXAgdG8gYSBDUFUtYmFja2Vk
IElEMkQxQml0bWFwMQotICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXAxPiBjcHVCaXRtYXA7Ci0g
ICAgICAgIEQyRDFfQklUTUFQX1BST1BFUlRJRVMxIGJpdG1hcFByb3BlcnRpZXMyID0gRDJEMTo6
Qml0bWFwUHJvcGVydGllczEoRDJEMV9CSVRNQVBfT1BUSU9OU19DUFVfUkVBRCB8IEQyRDFfQklU
TUFQX09QVElPTlNfQ0FOTk9UX0RSQVcsIERpcmVjdDJEOjpwaXhlbEZvcm1hdCgpKTsKLSAgICAg
ICAgSFJFU1VMVCBociA9IGQyZERldmljZUNvbnRleHQtPkNyZWF0ZUJpdG1hcChzaXplLCBudWxs
cHRyLCBieXRlc1BlclJvd0luRGF0YSwgYml0bWFwUHJvcGVydGllczIsICZjcHVCaXRtYXApOwot
ICAgICAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICBmb3IgKHVuc2lnbmVkIHkgPSAwOyB5IDwgc291cmNlU2l6ZS5oZWlnaHQoKTsgKyt5KSB7
CisgICAgICAgIGNvbnN0IHVpbnQzMl90KiBzcmNSb3cgPSByZWludGVycHJldF9jYXN0PGNvbnN0
IHVpbnQzMl90Kj4oc3JjUm93cyArIHNyY1N0cmlkZSAqIHkpOworICAgICAgICB1aW50MzJfdCog
ZGVzdFJvdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIGRlc3RTdHJp
ZGUgKiB5KTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIHggPSAwOyB4IDwgc291cmNlU2l6ZS53
aWR0aCgpOyArK3gpIHsKKyAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90KiBzcmNQaXhlbCA9IHNy
Y1JvdyArIHNyY1Jvd09mZnNldCArIHg7CisgICAgICAgICAgICB1aW50MzJfdCogZGVzdFBpeGVs
ID0gZGVzdFJvdyArIGRlc3RSb3dPZmZzZXQgKyB4OworICAgICAgICAgICAgKmRlc3RQaXhlbCA9
ICpzcmNQaXhlbDsKKyAgICAgICAgfQorICAgIH0KIAotICAgICAgICBhdXRvIHRhcmdldFBvcyA9
IEQyRDE6OlBvaW50MlUoKTsKLSAgICAgICAgRDJEMV9SRUNUX1UgZGF0YVJlY3QgPSByZWN0Owot
ICAgICAgICBociA9IGNwdUJpdG1hcC0+Q29weUZyb21CaXRtYXAoJnRhcmdldFBvcywgYml0bWFw
LmdldCgpLCAmZGF0YVJlY3QpOwotICAgICAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgICAgICBEMkQx
X01BUFBFRF9SRUNUIG1hcHBlZERhdGE7Ci0gICAgICAgIGhyID0gY3B1Qml0bWFwLT5NYXAoRDJE
MV9NQVBfT1BUSU9OU19SRUFELCAmbWFwcGVkRGF0YSk7Ci0gICAgICAgIGlmICghU1VDQ0VFREVE
KGhyKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworYm9vbCBJbWFnZUJ1ZmZlckRhdGE6
OmNvcHlSZWN0RnJvbURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiYgcmVzdWx0KSBjb25zdAoreworICAgIGF1dG8gcmF3Qml0bWFwU2l6ZSA9IGJpdG1h
cC0+R2V0U2l6ZSgpOworICAgIEludFNpemUgcGl4ZWxTaXplID0gYml0bWFwLT5HZXRQaXhlbFNp
emUoKTsKIAotICAgICAgICBpZiAobWFwcGVkRGF0YS5iaXRzKSB7Ci0gICAgICAgICAgICBpZiAo
IWVuc3VyZUJhY2tpbmdTdG9yZShiaXRtYXAtPkdldFBpeGVsU2l6ZSgpKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICAgICAgLy8gU29mdHdhcmUgZmlsdGVycyBl
eHBlY3QgUkdCQSBieXRlcy4gV2UgbmVlZCB0byBzd2l6emxlIGZyb20gRGlyZWN0MkQncyBCR1JB
IHRvIGJlIGNvbXBhdGlibGUuCi0gICAgICAgICAgICBpZiAoZGVzaXJlZEZvcm1hdCA9PSBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICAgICAgc3dp
enpsZUFuZFByZW11bHRpcGx5PEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZD4obWFwcGVkRGF0YS5iaXRzLCBoZWlnaHQsIHdpZHRoLCBtYXBwZWREYXRhLnBpdGNoLCBieXRl
c1BlclJvd0luRGF0YSwgZGF0YS5kYXRhKCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIHN3aXp6bGVBbmRQcmVtdWx0aXBseTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkPihtYXBwZWREYXRhLmJpdHMsIGhlaWdodCwgd2lkdGgsIG1hcHBlZERhdGEucGl0
Y2gsIGJ5dGVzUGVyUm93SW5EYXRhLCBkYXRhLmRhdGEoKSk7CisgICAgZmxvYXQgc2NhbGVGYWN0
b3IgPSBwaXhlbFNpemUud2lkdGgoKSAvIHJhd0JpdG1hcFNpemUud2lkdGg7CiAKLSAgICAgICAg
ICAgIGJ5dGVGb3JtYXQgPSBkZXNpcmVkRm9ybWF0OworICAgIEludFJlY3Qgc2NhbGVkUmVjdCA9
IHJlY3Q7CisgICAgc2NhbGVkUmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7CiAKLSAgICAgICAgICAg
IGJpdG1hcEJ1ZmZlclN5bmMgPSBCaXRtYXBCdWZmZXJTeW5jOjpJblN5bmM7Ci0gICAgICAgIH0K
KyAgICBpZiAoIUludFJlY3QoSW50UG9pbnQoKSwgcGl4ZWxTaXplKS5jb250YWlucyhzY2FsZWRS
ZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGhyID0gY3B1Qml0bWFwLT5V
bm1hcCgpOwotICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisgICAgcmV0dXJuIGNvcHlS
ZWN0RnJvbVNvdXJjZVRvRGVzdChyZWN0LCBkYXRhLmRhdGEoKSwgcmVjdC5zaXplKCksIEludFBv
aW50KCksIHJlc3VsdC0+ZGF0YSgpKTsKK30KIAotICAgICAgICBjb250ZXh0LT5iZWdpbkRyYXco
KTsKLSAgICB9Citib29sIEltYWdlQnVmZmVyRGF0YTo6ZW5zdXJlQmFja2luZ1N0b3JlKGNvbnN0
IEludFNpemUmIHNpemUpIGNvbnN0Cit7CisgICAgaWYgKHNpemUgPT0gYmFja2luZ1N0b3JlU2l6
ZSAmJiAhZGF0YS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cnVlOwogCi0gICAgcmVzdWx0
LT5zZXRSYW5nZShkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCksIDApOworICAgIGF1dG8gbnVtQnl0
ZXMgPSBzaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OworICAgIGlmIChudW1CeXRlcy5o
YXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiByZXN1
bHQ7CisgICAgYmFja2luZ1N0b3JlU2l6ZSA9IHNpemU7CisgICAgZGF0YS5yZXNpemVUb0ZpdChu
dW1CeXRlcy51bnNhZmVHZXQoKSk7CisgICAgcmV0dXJuIGRhdGEuY2FwYWNpdHkoKSA9PSBudW1C
eXRlcy51bnNhZmVHZXQoKTsKIH0KIAogLy8gU3dpenpsZSB0aGUgcmVkIGFuZCBibHVlIGJ5dGVz
IG9mIHRoZSBwaXhlbHMgaW4gYSBidWZmZXIKQEAgLTE5MCw2ICsxNjksMTA1IEBAIHZvaWQgaW5Q
bGFjZVN3aXp6bGUodWludDhfdCogYnl0ZURhdGEsIHUKICAgICB9CiB9CiAKK1JlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzaXJlZEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYg
c2l6ZSwgYm9vbCAvKiBhY2NlbGVyYXRlUmVuZGVyaW5nICovLCBmbG9hdCAvKiByZXNvbHV0aW9u
U2NhbGUgKi8pIGNvbnN0Cit7CisgICAgYXV0byBudW1CeXRlcyA9IHJlY3QuYXJlYTxSZWNvcmRP
dmVyZmxvdz4oKSAqIDQ7CisgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5
Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKG51bUJ5dGVzLnVuc2FmZUdldCgpKTsKKyAgICBpZiAo
IXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIWJpdG1hcCkKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGlmICghcmVhZERhdGFGcm9tQml0bWFwSWZOZWVk
ZWQoZGVzaXJlZEZvcm1hdCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBy
YXdCaXRtYXBTaXplID0gYml0bWFwLT5HZXRTaXplKCk7CisgICAgSW50U2l6ZSBiaXRtYXBTaXpl
KGNsYW1wVG88aW50PihyYXdCaXRtYXBTaXplLndpZHRoKSwgY2xhbXBUbzxpbnQ+KHJhd0JpdG1h
cFNpemUuaGVpZ2h0KSk7CisKKyAgICBpZiAocmVjdC5sb2NhdGlvbigpID09IEludFBvaW50KCkg
JiYgcmVjdC5zaXplKCkgPT0gYml0bWFwU2l6ZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChu
dW1CeXRlcy51bnNhZmVHZXQoKSA9PSBkYXRhLnNpemUoKSk7CisgICAgICAgIHJlc3VsdC0+c2V0
UmFuZ2UoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAwKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBPbmx5IHdhbnQgcGFydCBvZiB0aGUgYml0bWFwLgorICAgICAgICBpZiAoIWNvcHlSZWN0
RnJvbURhdGEocmVjdCwgcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIGlmIChieXRlRm9ybWF0ICE9IGRlc2lyZWRGb3JtYXQpIHsKKyAgICAgICAgLy8g
SW4tbWVtb3J5IGRhdGEgZG9lcyBub3QgbWF0Y2ggZGVzaXJlZCBmb3JtYXQuIE5lZWQgdG8gc3dp
enpsZSB0aGUgcmVzdWx0cy4KKyAgICAgICAgaWYgKGRlc2lyZWRGb3JtYXQgPT0gQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQorICAgICAgICAgICAgaW5QbGFjZVN3aXp6
bGU8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihyZXN1bHQtPmRhdGEo
KSwgcmVzdWx0LT5sZW5ndGgoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGluUGxhY2VT
d2l6emxlPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQ+KHJlc3VsdC0+ZGF0
YSgpLCByZXN1bHQtPmxlbmd0aCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Citib29sIEltYWdlQnVmZmVyRGF0YTo6cmVhZERhdGFGcm9tQml0bWFwSWZOZWVkZWQoQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0KSBjb25zdAoreworICAgIGlmIChiaXRtYXBC
dWZmZXJTeW5jICE9IEJpdG1hcEJ1ZmZlclN5bmM6OkJ1ZmZlck91dE9mU3luYykKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBJbnRTaXplIHBpeGVsU2l6ZSA9IGJpdG1hcC0+R2V0UGl4ZWxT
aXplKCk7CisKKyAgICBhdXRvIG51bUJ5dGVzID0gcGl4ZWxTaXplLmFyZWE8UmVjb3JkT3ZlcmZs
b3c+KCkgKiA0OworICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGNvbnRleHQtPmVuZERyYXcoKTsKKworICAgIENPTVB0cjxJRDJE
MURldmljZUNvbnRleHQ+IGQyZERldmljZUNvbnRleHQoUXVlcnksIHBsYXRmb3JtQ29udGV4dC0+
cmVuZGVyVGFyZ2V0KCkpOworICAgIEFTU0VSVCghIWQyZERldmljZUNvbnRleHQpOworCisgICAg
YXV0byBieXRlc1BlclJvd0luRGF0YSA9IHBpeGVsU2l6ZS53aWR0aCgpICogNDsKKworICAgIC8v
IENvcHkgR1BVIGRhdGEgZnJvbSB0aGUgSUQyRDFCaXRtYXAgdG8gYSBDUFUtYmFja2VkIElEMkQx
Qml0bWFwMQorICAgIENPTVB0cjxJRDJEMUJpdG1hcDE+IGNwdUJpdG1hcDsKKyAgICBEMkQxX0JJ
VE1BUF9QUk9QRVJUSUVTMSBiaXRtYXBQcm9wZXJ0aWVzMiA9IEQyRDE6OkJpdG1hcFByb3BlcnRp
ZXMxKEQyRDFfQklUTUFQX09QVElPTlNfQ1BVX1JFQUQgfCBEMkQxX0JJVE1BUF9PUFRJT05TX0NB
Tk5PVF9EUkFXLCBEaXJlY3QyRDo6cGl4ZWxGb3JtYXQoKSk7CisgICAgSFJFU1VMVCBociA9IGQy
ZERldmljZUNvbnRleHQtPkNyZWF0ZUJpdG1hcChwaXhlbFNpemUsIG51bGxwdHIsIGJ5dGVzUGVy
Um93SW5EYXRhLCBiaXRtYXBQcm9wZXJ0aWVzMiwgJmNwdUJpdG1hcCk7CisgICAgaWYgKCFTVUND
RUVERUQoaHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHRhcmdldFBvcyA9
IEQyRDE6OlBvaW50MlUoKTsKKyAgICBEMkQxX1JFQ1RfVSBkYXRhUmVjdCA9IEQyRDE6OlJlY3RV
KDAsIDAsIHBpeGVsU2l6ZS53aWR0aCgpLCBwaXhlbFNpemUuaGVpZ2h0KCkpOworICAgIGhyID0g
Y3B1Qml0bWFwLT5Db3B5RnJvbUJpdG1hcCgmdGFyZ2V0UG9zLCBiaXRtYXAuZ2V0KCksICZkYXRh
UmVjdCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBEMkQxX01BUFBFRF9SRUNUIG1hcHBlZERhdGE7CisgICAgaHIgPSBjcHVCaXRtYXAtPk1h
cChEMkQxX01BUF9PUFRJT05TX1JFQUQsICZtYXBwZWREYXRhKTsKKyAgICBpZiAoIVNVQ0NFRURF
RChocikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbWFwcGVkRGF0YS5iaXRz
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWVuc3VyZUJhY2tpbmdTdG9yZShw
aXhlbFNpemUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBTb2Z0d2FyZSBmaWx0
ZXJzIGV4cGVjdCBSR0JBIGJ5dGVzLiBXZSBuZWVkIHRvIHN3aXp6bGUgZnJvbSBEaXJlY3QyRCdz
IEJHUkEgdG8gYmUgY29tcGF0aWJsZS4KKyAgICBpZiAoZGVzaXJlZEZvcm1hdCA9PSBBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKQorICAgICAgICBzd2l6emxlQW5kUHJlbXVs
dGlwbHk8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZD4obWFwcGVkRGF0YS5i
aXRzLCBwaXhlbFNpemUuaGVpZ2h0KCksIHBpeGVsU2l6ZS53aWR0aCgpLCBtYXBwZWREYXRhLnBp
dGNoLCBieXRlc1BlclJvd0luRGF0YSwgZGF0YS5kYXRhKCkpOworICAgIGVsc2UKKyAgICAgICAg
c3dpenpsZUFuZFByZW11bHRpcGx5PEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlw
bGllZD4obWFwcGVkRGF0YS5iaXRzLCBwaXhlbFNpemUuaGVpZ2h0KCksIHBpeGVsU2l6ZS53aWR0
aCgpLCBtYXBwZWREYXRhLnBpdGNoLCBieXRlc1BlclJvd0luRGF0YSwgZGF0YS5kYXRhKCkpOwor
CisgICAgYnl0ZUZvcm1hdCA9IGRlc2lyZWRGb3JtYXQ7CisKKyAgICBiaXRtYXBCdWZmZXJTeW5j
ID0gQml0bWFwQnVmZmVyU3luYzo6SW5TeW5jOworCisgICAgaHIgPSBjcHVCaXRtYXAtPlVubWFw
KCk7CisgICAgQVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAgY29udGV4dC0+YmVnaW5EcmF3
KCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERh
dGEoY29uc3QgVWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlv
biBzb3VyY2VGb3JtYXQsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmIHNp
emUsIGJvb2wgLyogYWNjZWxlcmF0ZVJlbmRlcmluZyAqLywgZmxvYXQgcmVzb2x1dGlvblNjYWxl
KQogewogICAgIEFTU0VSVChzb3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKQEAgLTIyOSwyMiArMzA3
LDM4IEBAIHZvaWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQKICAgICAgICAg
cmV0dXJuOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIGF1dG8gcGl4ZWxTaXplID0gYml0
bWFwLT5HZXRQaXhlbFNpemUoKTsKLSAgICBBU1NFUlQocGl4ZWxTaXplLndpZHRoID49IHNvdXJj
ZVNpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKHBpeGVsU2l6ZS53aWR0aCA+PSBzaXplLndpZHRo
KCkpOwotICAgIEFTU0VSVChwaXhlbFNpemUuaGVpZ2h0ID49IHNvdXJjZVNpemUuaGVpZ2h0KCkp
OwotICAgIEFTU0VSVChwaXhlbFNpemUuaGVpZ2h0ID49IHNpemUuaGVpZ2h0KCkpOworICAgIGlm
IChiaXRtYXApIHsKKyAgICAgICAgYXV0byBwaXhlbFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6
ZSgpOworICAgICAgICBBU1NFUlQocGl4ZWxTaXplLndpZHRoID49IHNvdXJjZVNpemUud2lkdGgo
KSk7CisgICAgICAgIEFTU0VSVChwaXhlbFNpemUud2lkdGggPj0gc2l6ZS53aWR0aCgpKTsKKyAg
ICAgICAgQVNTRVJUKHBpeGVsU2l6ZS5oZWlnaHQgPj0gc291cmNlU2l6ZS5oZWlnaHQoKSk7Cisg
ICAgICAgIEFTU0VSVChwaXhlbFNpemUuaGVpZ2h0ID49IHNpemUuaGVpZ2h0KCkpOworICAgIH0K
ICNlbmRpZgogCiAgICAgaWYgKCFlbnN1cmVCYWNraW5nU3RvcmUoc2l6ZSkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIG1lbWNweShkYXRhLmRhdGEoKSwgc291cmNlLmRhdGEoKSwgc291cmNlLmxl
bmd0aCgpKTsKKyAgICBpZiAoc291cmNlU2l6ZSA9PSBzaXplKSB7CisgICAgICAgIG1lbWNweShk
YXRhLmRhdGEoKSwgc291cmNlLmRhdGEoKSwgc291cmNlLmxlbmd0aCgpKTsKKworICAgICAgICBi
eXRlRm9ybWF0ID0gc291cmNlRm9ybWF0OworICAgIH0gZWxzZSBpZiAoIWNvcHlSZWN0RnJvbVNv
dXJjZVRvRGF0YShzb3VyY2VSZWN0LCBzb3VyY2UpKQorICAgICAgICByZXR1cm47CiAKLSAgICBi
eXRlRm9ybWF0ID0gc291cmNlRm9ybWF0OwogICAgIGJpdG1hcEJ1ZmZlclN5bmMgPSBCaXRtYXBC
dWZmZXJTeW5jOjpCaXRtYXBPdXRPZlN5bmM7CiB9CiAKK2Jvb2wgSW1hZ2VCdWZmZXJEYXRhOjpj
b3B5UmVjdEZyb21Tb3VyY2VUb0RhdGEoY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3Qg
VWludDhDbGFtcGVkQXJyYXkmIHNvdXJjZSkKK3sKKyAgICBJbnRTaXplIHBpeGVsU2l6ZSA9IGJp
dG1hcC0+R2V0UGl4ZWxTaXplKCk7CisgICAgaWYgKCFJbnRSZWN0KEludFBvaW50KCksIHBpeGVs
U2l6ZSkuY29udGFpbnMoc291cmNlUmVjdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rlc3QoSW50UmVjdChJbnRQb2ludCgpLCBzb3Vy
Y2VSZWN0LnNpemUoKSksIHNvdXJjZS5kYXRhKCksIHNvdXJjZVJlY3Quc2l6ZSgpLCBzb3VyY2VS
ZWN0LmxvY2F0aW9uKCksIGRhdGEuZGF0YSgpKTsKK30KKworCiB2b2lkIEltYWdlQnVmZmVyRGF0
YTo6bG9hZERhdGFUb0JpdG1hcElmTmVlZGVkKCkKIHsKICAgICBpZiAoYml0bWFwQnVmZmVyU3lu
YyAhPSBCaXRtYXBCdWZmZXJTeW5jOjpCaXRtYXBPdXRPZlN5bmMgfHwgZGF0YS5pc0VtcHR5KCkp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJE
YXRhRGlyZWN0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaAkocmV2aXNpb24gMjQ5OTIzKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVj
dDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDkgQEAgc3RydWN0IEltYWdlQnVmZmVy
RGF0YSB7CiAKICAgICBib29sIGVuc3VyZUJhY2tpbmdTdG9yZShjb25zdCBJbnRTaXplJikgY29u
c3Q7CiAgICAgdm9pZCBsb2FkRGF0YVRvQml0bWFwSWZOZWVkZWQoKTsKKyAgICBib29sIHJlYWRE
YXRhRnJvbUJpdG1hcElmTmVlZGVkKEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1h
dCkgY29uc3Q7CisgICAgYm9vbCBjb3B5UmVjdEZyb21EYXRhKGNvbnN0IEludFJlY3QmLCBSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+JikgY29uc3Q7CisgICAgYm9vbCBjb3B5UmVjdEZyb21Tb3Vy
Y2VUb0RhdGEoY29uc3QgSW50UmVjdCYsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5Jik7CiAgICAg
dm9pZCBtYXJrQnVmZmVyT3V0T2ZTeW5jKCkgeyBiaXRtYXBCdWZmZXJTeW5jID0gQml0bWFwQnVm
ZmVyU3luYzo6QnVmZmVyT3V0T2ZTeW5jOyB9CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcAkocmV2aXNp
b24gMjQ5OTIzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhE
aXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMSw4ICs0MDEsNiBAQCB2b2lkIFBhdGg6
OmFkZEJlemllckN1cnZlVG8oY29uc3QgRmxvYXRQCiAKIHZvaWQgUGF0aDo6YWRkQXJjVG8oY29u
c3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyLCBmbG9hdCByYWRpdXMpCiB7
Ci0gICAgQVNTRVJUKG1fYWN0aXZlUGF0aC5nZXQoKSk7Ci0KICAgICBGbG9hdFBvaW50IHAwID0g
Y3VycmVudFBvaW50KCk7CiAKICAgICBpZiAocDEgPT0gcDAgfHwgcDEgPT0gcDIgfHwgV1RGOjph
cmVFc3NlbnRpYWxseUVxdWFsKHJhZGl1cywgMC4wZikpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI0OTkyMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUzLDE0ICs1MywyMCBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpyZXN0
b3JlKCkKIHsKICAgICBBU1NFUlQobV9yZW5kZXJUYXJnZXQpOwogCi0gICAgYXV0byByZXN0b3Jl
U3RhdGUgPSBtX3JlbmRlclN0YXRlcy50YWtlTGFzdCgpOwotICAgIG1fcmVuZGVyVGFyZ2V0LT5S
ZXN0b3JlRHJhd2luZ1N0YXRlKHJlc3RvcmVTdGF0ZS5tX2RyYXdpbmdTdGF0ZUJsb2NrLmdldCgp
KTsKKyAgICAvLyBDYW4ndCByZXN0b3JlIGlmIHdlIG5ldmVyIGNhbGxlZCBzYXZlLgorICAgIGlm
IChtX3N0YXRlU3RhY2suc2l6ZSgpID09IDEpCisgICAgICAgIHJldHVybjsKIAotICAgIGZvciAo
YXV0byBjbGlwVHlwZSA9IHJlc3RvcmVTdGF0ZS5tX2NsaXBzLnJiZWdpbigpOyBjbGlwVHlwZSAh
PSByZXN0b3JlU3RhdGUubV9jbGlwcy5yZW5kKCk7ICsrY2xpcFR5cGUpIHsKLSAgICAgICAgaWYg
KCpjbGlwVHlwZSA9PSBBeGlzQWxpZ25lZENsaXApCi0gICAgICAgICAgICBtX3JlbmRlclRhcmdl
dC0+UG9wQXhpc0FsaWduZWRDbGlwKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fcmVu
ZGVyVGFyZ2V0LT5Qb3BMYXllcigpOworICAgIGlmICghbV9yZW5kZXJTdGF0ZXMuaXNFbXB0eSgp
KSB7CisgICAgICAgIGF1dG8gcmVzdG9yZVN0YXRlID0gbV9yZW5kZXJTdGF0ZXMudGFrZUxhc3Qo
KTsKKyAgICAgICAgbV9yZW5kZXJUYXJnZXQtPlJlc3RvcmVEcmF3aW5nU3RhdGUocmVzdG9yZVN0
YXRlLm1fZHJhd2luZ1N0YXRlQmxvY2suZ2V0KCkpOworCisgICAgICAgIGZvciAoYXV0byBjbGlw
VHlwZSA9IHJlc3RvcmVTdGF0ZS5tX2NsaXBzLnJiZWdpbigpOyBjbGlwVHlwZSAhPSByZXN0b3Jl
U3RhdGUubV9jbGlwcy5yZW5kKCk7ICsrY2xpcFR5cGUpIHsKKyAgICAgICAgICAgIGlmICgqY2xp
cFR5cGUgPT0gQXhpc0FsaWduZWRDbGlwKQorICAgICAgICAgICAgICAgIG1fcmVuZGVyVGFyZ2V0
LT5Qb3BBeGlzQWxpZ25lZENsaXAoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBtX3JlbmRlclRhcmdldC0+UG9wTGF5ZXIoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIG1f
c3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7CkBAIC0yNTMsNiArMjU5LDEwIEBAIHZvaWQgUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQ6OmJlZ2luRHJhdygKIHZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQ6OmVuZERyYXcoKQogewogICAgIEFTU0VSVChtX3JlbmRlclRhcmdldCk7CisKKyAgICB3aGls
ZSAoIW1fcmVuZGVyU3RhdGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmVzdG9yZSgpOworCiAgICAg
RDJEMV9UQUcgZmlyc3QsIHNlY29uZDsKICAgICBIUkVTVUxUIGhyID0gbV9yZW5kZXJUYXJnZXQt
PkVuZERyYXcoJmZpcnN0LCAmc2Vjb25kKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379062</attachid>
            <date>2019-09-18 13:03:13 -0700</date>
            <delta_ts>2019-09-18 17:01:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201862-20190918130311.patch</filename>
            <type>text/plain</type>
            <size>22632</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTk0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDE5LTA5LTE2ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtGVFddIENvcnJlY3QgSW1h
Z2VCdWZmZXJEYXRhIGFuZCBjbGVhciBvcGVyYXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDE4NjIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGNvcnJlY3RzIHNldmVyYWwgcHJv
YmxlbXMgaW4gdGhlIGNhbnZhcyBpbXBsZW1lbnRhdGlvbjoKKyAgICAgICAgMS4gVGhlIGltcGxl
bWVudGF0aW9uIG9mIEltYWdlQnVmZmVyRGF0YURpcmVjdDJEIGRpZCBub3QgcHJvcGVybHkgaGFu
ZGxlIHRoZSBjYXNlIG9mIGEKKyAgICAgICAgICAgJ2dldERhdGEnIHJlcXVlc3QgZm9yIGxlc3Mg
dGhhbiB0aGUgc2l6ZSBvZiB0aGUgZnVsbCBiaXRtYXAuCisgICAgICAgIDIuIFRoZSBpbXBsZW1l
bnRhdGlvbiBvZiAnQ2xlYXInIHdhcyBub3QgY29ycmVjdCB3aGVuIHRoZSBzaXplIG9mIHRoZSBy
ZWdpb24gdG8gYmUKKyAgICAgICAgICAgY2xlYXJlZCBpcyBsZXNzIHRoYW4gdGhlIHNpemUgb2Yg
dGhlIHJlbmRlciB0YXJnZXQuCisgICAgICAgIDMuICdlbmREcmF3JyBmYWlscyBpZiBhbnkgY2xp
cCByZWdpb25zIGFyZSBhY3RpdmUgYXQgdGhlIGVuZCBvZiB0aGUgb3BlcmF0aW9uLiBUaGUKKyAg
ICAgICAgICAgc3RhY2sgbmVlZHMgdG8gYmUgdW53b3VuZCB3aGVuIGVuZERyYXcgaXMgY2FsbGVk
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggY29ycmVjdHMgYWxsIHRocmVlIHByb2JsZW1zLgorCisg
ICAgICAgIFRlc3RlZCBieSBjYW52YXMgTGF5b3V0VGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRpcmVjdDJEOjpjbGVhclJlY3QpOiBDb3JyZWN0IHBhcnRpYWwgcmVuZGVyIHRhcmdldCBjYXNl
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3Qy
RC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEgY29uc3Qp
OiBDb3JyZWN0IHBhcnRpYWwgYnVmZmVyIGNhc2UuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckRhdGE6OnB1dERhdGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
RGF0YTo6cmVhZERhdGFGcm9tQml0bWFwSWZOZWVkZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmNvcHlSZWN0RnJvbVNvdXJjZVRvRGVzdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJEYXRhOjpjb3B5UmVjdEZyb21Tb3VyY2VUb0RhdGEpOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OmVuZERyYXcpOiBDb3Jy
ZWN0IGZhaWx1cmVzIGNhdXNlZCBieQorICAgICAgICBkYW5nbGluZyBjbGlwIHJlZ2lvbnMgd2hl
biAnZW5kRHJhdycgaXMgY2FsbGVkLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQ6OmZsdXNoKTogRG9uJ3QgY2FsbCBwb3N0LWRyYXcgb2JzZXJ2ZXI7CisgICAgICAg
IHRoaXMgaXMgYWxyZWFkeSBoYW5kbGVkIGluIHRoZSBkcmF3IG9wZXJhdGlvbnMsIGFuZCBlbmRE
cmF3LgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnJlc3RvcmUp
OiBSZWNvZ25pemUgdGhhdCB0aGUgY2xpcAorICAgICAgICBhbmQgdHJhbnNwYXJlbmN5IHN0YWNr
IG1pZ2h0IGJlIGVtcHR5IHdoZW4gcmVzdG9yZSBpcyBjYWxsZWQuCisKIDIwMTktMDktMTYgIEZ1
amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW1dpbkNh
aXJvXVtjdXJsXSBEb24ndCBjb21waWxlIHVudXNlZCBDZXJ0aWZpY2F0ZUNGV2luLmNwcApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0RpcmVjdDJET3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI0OTkyMykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NjcsOSArNjY3LDEyIEBAIHZvaWQgY2xlYXJSZWN0KFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJgogICAgICAgICBpZiAoIXJlY3RUb0NsZWFyLmludGVyc2VjdHMocmVuZGVyVGFy
Z2V0UmVjdCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0
LnNldFRhZ3MoMSwgX19MSU5FX18pOwogICAgICAgICByZWN0VG9DbGVhci5pbnRlcnNlY3QocmVu
ZGVyVGFyZ2V0UmVjdCk7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+RmlsbFJlY3RhbmdsZShyZWN0
VG9DbGVhciwgcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENvbG9yKENvbG9yKEQyRDE6OkNvbG9y
RigwLCAwLCAwLCAwKSkpLmdldCgpKTsKKworICAgICAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFn
cygxLCBfX0xJTkVfXyk7CisgICAgICAgIHJlbmRlclRhcmdldC0+UHVzaEF4aXNBbGlnbmVkQ2xp
cChyZWN0VG9DbGVhciwgRDJEMV9BTlRJQUxJQVNfTU9ERV9QRVJfUFJJTUlUSVZFKTsKKyAgICAg
ICAgcmVuZGVyVGFyZ2V0LT5DbGVhcihEMkQxOjpDb2xvckYoMCwgMCwgMCwgMCkpOworICAgICAg
ICByZW5kZXJUYXJnZXQtPlBvcEF4aXNBbGlnbmVkQ2xpcCgpOwogICAgIH0pOwogfQogCkBAIC05
OTEsNyArOTk0LDYgQEAgdm9pZCBmbHVzaChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdAog
ICAgIEFTU0VSVChwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwogICAgIEQyRDFfVEFH
IGZpcnN0LCBzZWNvbmQ7CiAgICAgSFJFU1VMVCBociA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJU
YXJnZXQoKS0+Rmx1c2goJmZpcnN0LCAmc2Vjb25kKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQubm90
aWZ5UG9zdERyYXdPYnNlcnZlcigpOwogCiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhy
KSk7CiB9CkBAIC0xMTY2LDkgKzExNjgsOCBAQCB2b2lkIGNsaXBQYXRoKFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJiBwCiAKIHZvaWQgY2xpcFBhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBs
YXRmb3JtQ29udGV4dCwgSUQyRDFHZW9tZXRyeSogcGF0aCkKIHsKLSAgICBBU1NFUlQocGxhdGZv
cm1Db250ZXh0Lmhhc1NhdmVkU3RhdGUoKSk7Ci0gICAgaWYgKCFwbGF0Zm9ybUNvbnRleHQuaGFz
U2F2ZWRTdGF0ZSgpKQotICAgICAgICByZXR1cm47CisgICAgaWYgKHBsYXRmb3JtQ29udGV4dC5t
X3JlbmRlclN0YXRlcy5pc0VtcHR5KCkpCisgICAgICAgIHNhdmUocGxhdGZvcm1Db250ZXh0KTsK
IAogICAgIENPTVB0cjxJRDJEMUxheWVyPiBjbGlwTGF5ZXI7CiAgICAgSFJFU1VMVCBociA9IHBs
YXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKS0+Q3JlYXRlTGF5ZXIoJmNsaXBMYXllcik7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRh
RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI0OTkyMykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJl
Y3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03OSw4NSArNzksMTE0IEBAIHZvaWQgc3dpenps
ZUFuZFByZW11bHRpcGx5KGNvbnN0IHVpbnQ4X3QKICAgICB9CiB9CiAKLWJvb2wgSW1hZ2VCdWZm
ZXJEYXRhOjplbnN1cmVCYWNraW5nU3RvcmUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QKK3N0
YXRpYyBib29sIGNvcHlSZWN0RnJvbVNvdXJjZVRvRGVzdChjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zdCBJbnRTaXplJiBzb3VyY2VCdWZmZXJTaXplLCBjb25zdCB1aW50OF90KiBzb3Vy
Y2UsIGNvbnN0IEludFNpemUmIGRlc3RCdWZmZXJTaXplLCB1aW50OF90KiBkZXN0LCBjb25zdCBJ
bnRQb2ludCYgZGVzdEJ1ZmZlclBvc2l0aW9uKQogewotICAgIGlmIChzaXplID09IGJhY2tpbmdT
dG9yZVNpemUgJiYgIWRhdGEuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBp
ZiAoc291cmNlUmVjdC53aWR0aCgpID4gZGVzdEJ1ZmZlclNpemUud2lkdGgoKSB8fCBzb3VyY2VS
ZWN0LmhlaWdodCgpID4gZGVzdEJ1ZmZlclNpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGF1dG8gbnVtQnl0ZXMgPSBzaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkg
KiA0OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCisgICAgaWYgKHNvdXJjZVJl
Y3Qud2lkdGgoKSA+IHNvdXJjZUJ1ZmZlclNpemUud2lkdGgoKSB8fCBzb3VyY2VSZWN0LmhlaWdo
dCgpID4gc291cmNlQnVmZmVyU2l6ZS5oZWlnaHQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgYmFja2luZ1N0b3JlU2l6ZSA9IHNpemU7Ci0gICAgZGF0YS5yZXNpemVUb0ZpdChudW1C
eXRlcy51bnNhZmVHZXQoKSk7Ci0gICAgcmV0dXJuIGRhdGEuY2FwYWNpdHkoKSA9PSBudW1CeXRl
cy51bnNhZmVHZXQoKTsKKyAgICB1bnNpZ25lZCBzcmNTdHJpZGUgPSBzb3VyY2VCdWZmZXJTaXpl
LndpZHRoKCkgKiA0OworICAgIHVuc2lnbmVkIGRlc3RTdHJpZGUgPSBkZXN0QnVmZmVyU2l6ZS53
aWR0aCgpICogNDsKKworICAgIHVuc2lnbmVkIHNyY1Jvd09mZnNldCA9IHNvdXJjZVJlY3QubG9j
YXRpb24oKS54KCkgKiA0OworICAgIHVuc2lnbmVkIGRlc3RSb3dPZmZzZXQgPSBkZXN0QnVmZmVy
UG9zaXRpb24ueCgpICogNDsKKworICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2Ug
KyBzcmNTdHJpZGUgKiBzb3VyY2VSZWN0LmxvY2F0aW9uKCkueSgpOworICAgIHVpbnQ4X3QqIGRl
c3RSb3dzID0gZGVzdCArIGRlc3RTdHJpZGUgKiBkZXN0QnVmZmVyUG9zaXRpb24ueSgpOworCisg
ICAgY29uc3QgdW5zaWduZWQgYnl0ZXNQZXJSb3cgPSBzb3VyY2VSZWN0LndpZHRoKCkgKiA0Owor
ICAgIGZvciAodW5zaWduZWQgeSA9IDA7IHkgPCBzb3VyY2VSZWN0LmhlaWdodCgpOyArK3kpIHsK
KyAgICAgICAgY29uc3QgdWludDhfdCogc3JjUm93ID0gc3JjUm93cyArIHNyY1N0cmlkZSAqIHkg
KyBzcmNSb3dPZmZzZXQ7CisgICAgICAgIHVpbnQ4X3QqIGRlc3RSb3cgPSBkZXN0Um93cyArIGRl
c3RTdHJpZGUgKiB5ICsgZGVzdFJvd09mZnNldDsKKyAgICAgICAgbWVtY3B5KGRlc3RSb3csIHNy
Y1JvdywgYnl0ZXNQZXJSb3cpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwogfQogCi1SZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IElu
dFNpemUmIHNpemUsIGJvb2wgLyogYWNjZWxlcmF0ZVJlbmRlcmluZyAqLywgZmxvYXQgLyogcmVz
b2x1dGlvblNjYWxlICovKSBjb25zdAorLy8gTm90ZTogQXNzdW1lcyB0aGF0IGJ5dGVzIGFyZSBh
bHJlYWR5IGluIFJHQkEgZm9ybWF0Cit0ZW1wbGF0ZSA8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBk
ZXNpcmVkRm9ybWF0PgorYm9vbCBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rlc3RBbmRTZXRQcmVtdWx0
aXBsaWNhdGlvbihjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRTaXplJiBzb3Vy
Y2VCdWZmZXJTaXplLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIGRlc3RC
dWZmZXJTaXplLCB1aW50OF90KiBkZXN0LCBjb25zdCBJbnRQb2ludCYgZGVzdEJ1ZmZlclBvc2l0
aW9uKQogewotICAgIGF1dG8gbnVtQnl0ZXMgPSByZWN0LmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkg
KiA0OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIGlmIChzb3VyY2VSZWN0LndpZHRoKCkgPiBkZXN0QnVmZmVyU2l6ZS53aWR0
aCgpIHx8IHNvdXJjZVJlY3QuaGVpZ2h0KCkgPiBkZXN0QnVmZmVyU2l6ZS5oZWlnaHQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJh
eTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChudW1CeXRlcy51bnNhZmVHZXQoKSk7Ci0gICAgaWYg
KCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmIChzb3VyY2VSZWN0Lndp
ZHRoKCkgPiBzb3VyY2VCdWZmZXJTaXplLndpZHRoKCkgfHwgc291cmNlUmVjdC5oZWlnaHQoKSA+
IHNvdXJjZUJ1ZmZlclNpemUuaGVpZ2h0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAg
IGlmICghYml0bWFwKQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIHVuc2lnbmVkIHNyY1N0
cmlkZSA9IHNvdXJjZUJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7CisgICAgdW5zaWduZWQgZGVzdFN0
cmlkZSA9IGRlc3RCdWZmZXJTaXplLndpZHRoKCkgKiA0OwogCi0gICAgYXV0byBieXRlc1BlclJv
d0luRGF0YSA9IHJlY3Qud2lkdGgoKSAqIDQ7Ci0gICAgYXV0byBoZWlnaHQgPSByZWN0LmhlaWdo
dCgpOwotICAgIGF1dG8gd2lkdGggPSByZWN0LndpZHRoKCk7Ci0KLSAgICBpZiAoYml0bWFwQnVm
ZmVyU3luYyA9PSBCaXRtYXBCdWZmZXJTeW5jOjpCdWZmZXJPdXRPZlN5bmMgfHwgZGF0YS5zaXpl
KCkgIT0gbnVtQnl0ZXMudW5zYWZlR2V0KCkpIHsKLSAgICAgICAgY29udGV4dC0+ZW5kRHJhdygp
OwotCi0gICAgICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IGQyZERldmljZUNvbnRleHQo
UXVlcnksIHBsYXRmb3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0KCkpOwotICAgICAgICBBU1NFUlQo
ISFkMmREZXZpY2VDb250ZXh0KTsKLQotICAgICAgICAvLyBDb3B5IEdQVSBkYXRhIGZyb20gdGhl
IElEMkQxQml0bWFwIHRvIGEgQ1BVLWJhY2tlZCBJRDJEMUJpdG1hcDEKLSAgICAgICAgQ09NUHRy
PElEMkQxQml0bWFwMT4gY3B1Qml0bWFwOwotICAgICAgICBEMkQxX0JJVE1BUF9QUk9QRVJUSUVT
MSBiaXRtYXBQcm9wZXJ0aWVzMiA9IEQyRDE6OkJpdG1hcFByb3BlcnRpZXMxKEQyRDFfQklUTUFQ
X09QVElPTlNfQ1BVX1JFQUQgfCBEMkQxX0JJVE1BUF9PUFRJT05TX0NBTk5PVF9EUkFXLCBEaXJl
Y3QyRDo6cGl4ZWxGb3JtYXQoKSk7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBkMmREZXZpY2VDb250
ZXh0LT5DcmVhdGVCaXRtYXAoc2l6ZSwgbnVsbHB0ciwgYnl0ZXNQZXJSb3dJbkRhdGEsIGJpdG1h
cFByb3BlcnRpZXMyLCAmY3B1Qml0bWFwKTsKLSAgICAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgdW5zaWduZWQgc3JjUm93T2Zmc2V0ID0g
c291cmNlUmVjdC5sb2NhdGlvbigpLngoKSAqIDQ7CisgICAgdW5zaWduZWQgZGVzdFJvd09mZnNl
dCA9IGRlc3RCdWZmZXJQb3NpdGlvbi54KCkgKiA0OwogCi0gICAgICAgIGF1dG8gdGFyZ2V0UG9z
ID0gRDJEMTo6UG9pbnQyVSgpOwotICAgICAgICBEMkQxX1JFQ1RfVSBkYXRhUmVjdCA9IHJlY3Q7
Ci0gICAgICAgIGhyID0gY3B1Qml0bWFwLT5Db3B5RnJvbUJpdG1hcCgmdGFyZ2V0UG9zLCBiaXRt
YXAuZ2V0KCksICZkYXRhUmVjdCk7Ci0gICAgICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3Vy
Y2UgKyBzcmNTdHJpZGUgKiBzb3VyY2VSZWN0LmxvY2F0aW9uKCkueSgpOworICAgIHVpbnQ4X3Qq
IGRlc3RSb3dzID0gZGVzdCArIGRlc3RTdHJpZGUgKiBkZXN0QnVmZmVyUG9zaXRpb24ueSgpOwog
Ci0gICAgICAgIEQyRDFfTUFQUEVEX1JFQ1QgbWFwcGVkRGF0YTsKLSAgICAgICAgaHIgPSBjcHVC
aXRtYXAtPk1hcChEMkQxX01BUF9PUFRJT05TX1JFQUQsICZtYXBwZWREYXRhKTsKLSAgICAgICAg
aWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgY29u
c3QgdW5zaWduZWQgYnl0ZXNQZXJSb3cgPSBzb3VyY2VSZWN0LndpZHRoKCkgKiA0OworICAgIGZv
ciAodW5zaWduZWQgeSA9IDA7IHkgPCBzb3VyY2VSZWN0LmhlaWdodCgpOyArK3kpIHsKKyAgICAg
ICAgY29uc3QgdWludDhfdCogc3JjUm93ID0gc3JjUm93cyArIHNyY1N0cmlkZSAqIHkgKyBzcmNS
b3dPZmZzZXQ7CisgICAgICAgIHVpbnQ4X3QqIGRlc3RSb3cgPSBkZXN0Um93cyArIGRlc3RTdHJp
ZGUgKiB5ICsgZGVzdFJvd09mZnNldDsKKworICAgICAgICBmb3IgKHNpemVfdCB4ID0gMDsgeCA8
IHNvdXJjZVJlY3Qud2lkdGgoKTsgKyt4KSB7CisgICAgICAgICAgICB1bnNpZ25lZCBwb3MgPSB4
ICogNDsKKworICAgICAgICAgICAgdW5zaWduZWQgcmVkID0gc3JjUm93W3hdOworICAgICAgICAg
ICAgdW5zaWduZWQgZ3JlZW4gPSBzcmNSb3dbeCArIDFdOworICAgICAgICAgICAgdW5zaWduZWQg
Ymx1ZSA9IHNyY1Jvd1t4ICsgMl07CisgICAgICAgICAgICB1bnNpZ25lZCBhbHBoYSA9IHNyY1Jv
d1t4ICsgM107CisKKyAgICAgICAgICAgIGlmIChkZXNpcmVkRm9ybWF0ID09IEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYWxwaGEg
IT0gMjU1KSB7CisgICAgICAgICAgICAgICAgICAgIHJlZCA9IChyZWQgKiBhbHBoYSArIDI1NCkg
LyAyNTU7CisgICAgICAgICAgICAgICAgICAgIGdyZWVuID0gKGdyZWVuICogYWxwaGEgKyAyNTQp
IC8gMjU1OworICAgICAgICAgICAgICAgICAgICBibHVlID0gKGJsdWUgKiBhbHBoYSArIDI1NCkg
LyAyNTU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBpZiAoYWxwaGEgJiYgYWxwaGEgIT0gMjU1KSB7CisgICAgICAgICAgICAgICAgICAg
IHJlZCA9IHJlZCAqIDI1NSAvIGFscGhhOworICAgICAgICAgICAgICAgICAgICBncmVlbiA9IGdy
ZWVuICogMjU1IC8gYWxwaGE7CisgICAgICAgICAgICAgICAgICAgIGJsdWUgPSBibHVlICogMjU1
IC8gYWxwaGE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogCi0gICAgICAgIGlm
IChtYXBwZWREYXRhLmJpdHMpIHsKLSAgICAgICAgICAgIGlmICghZW5zdXJlQmFja2luZ1N0b3Jl
KGJpdG1hcC0+R2V0UGl4ZWxTaXplKCkpKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgICAgICAgICAvLyBTb2Z0d2FyZSBmaWx0ZXJzIGV4cGVjdCBSR0JBIGJ5dGVzLiBX
ZSBuZWVkIHRvIHN3aXp6bGUgZnJvbSBEaXJlY3QyRCdzIEJHUkEgdG8gYmUgY29tcGF0aWJsZS4K
LSAgICAgICAgICAgIGlmIChkZXNpcmVkRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlVucHJlbXVsdGlwbGllZCkKLSAgICAgICAgICAgICAgICBzd2l6emxlQW5kUHJlbXVsdGlwbHk8
QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihtYXBwZWREYXRhLmJpdHMs
IGhlaWdodCwgd2lkdGgsIG1hcHBlZERhdGEucGl0Y2gsIGJ5dGVzUGVyUm93SW5EYXRhLCBkYXRh
LmRhdGEoKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3dpenpsZUFuZFBy
ZW11bHRpcGx5PEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQ+KG1hcHBlZERh
dGEuYml0cywgaGVpZ2h0LCB3aWR0aCwgbWFwcGVkRGF0YS5waXRjaCwgYnl0ZXNQZXJSb3dJbkRh
dGEsIGRhdGEuZGF0YSgpKTsKKyAgICAgICAgICAgIHVpbnQzMl90KiBwaXhlbCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93KSArIHg7CisgICAgICAgICAgICAqcGl4ZWwgPSAo
YWxwaGEgPDwgMjQpIHwgcmVkICA8PCAxNiB8IGdyZWVuICA8PCA4IHwgYmx1ZTsKKyAgICAgICAg
fQorICAgIH0KIAotICAgICAgICAgICAgYnl0ZUZvcm1hdCA9IGRlc2lyZWRGb3JtYXQ7CisgICAg
cmV0dXJuIHRydWU7Cit9CiAKLSAgICAgICAgICAgIGJpdG1hcEJ1ZmZlclN5bmMgPSBCaXRtYXBC
dWZmZXJTeW5jOjpJblN5bmM7Ci0gICAgICAgIH0KK2Jvb2wgSW1hZ2VCdWZmZXJEYXRhOjpjb3B5
UmVjdEZyb21EYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIFJlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4mIHJlc3VsdCkgY29uc3QKK3sKKyAgICBhdXRvIHJhd0JpdG1hcFNpemUgPSBiaXRtYXAtPkdl
dFNpemUoKTsKIAotICAgICAgICBociA9IGNwdUJpdG1hcC0+VW5tYXAoKTsKLSAgICAgICAgQVNT
RVJUKFNVQ0NFRURFRChocikpOworICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gYmFja2luZ1N0b3Jl
U2l6ZS53aWR0aCgpIC8gcmF3Qml0bWFwU2l6ZS53aWR0aDsKIAotICAgICAgICBjb250ZXh0LT5i
ZWdpbkRyYXcoKTsKLSAgICB9CisgICAgSW50UmVjdCBzY2FsZWRSZWN0ID0gcmVjdDsKKyAgICBz
Y2FsZWRSZWN0LnNjYWxlKHNjYWxlRmFjdG9yKTsKIAotICAgIHJlc3VsdC0+c2V0UmFuZ2UoZGF0
YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAwKTsKKyAgICBpZiAoIUludFJlY3QoSW50UG9pbnQoKSwg
YmFja2luZ1N0b3JlU2l6ZSkuY29udGFpbnMoc2NhbGVkUmVjdCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIGNvcHlSZWN0RnJvbVNvdXJj
ZVRvRGVzdChzY2FsZWRSZWN0LCBiYWNraW5nU3RvcmVTaXplLCBkYXRhLmRhdGEoKSwgcmVjdC5z
aXplKCksIHJlc3VsdC0+ZGF0YSgpLCBJbnRQb2ludCgpKTsKK30KKworYm9vbCBJbWFnZUJ1ZmZl
ckRhdGE6OmVuc3VyZUJhY2tpbmdTdG9yZShjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAorewor
ICAgIGlmIChzaXplID09IGJhY2tpbmdTdG9yZVNpemUgJiYgIWRhdGEuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGF1dG8gbnVtQnl0ZXMgPSBzaXplLmFyZWE8UmVjb3Jk
T3ZlcmZsb3c+KCkgKiA0OworICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGJhY2tpbmdTdG9yZVNpemUgPSBzaXplOworICAgIGRh
dGEucmVzaXplVG9GaXQobnVtQnl0ZXMudW5zYWZlR2V0KCkpOworICAgIHJldHVybiBkYXRhLmNh
cGFjaXR5KCkgPT0gbnVtQnl0ZXMudW5zYWZlR2V0KCk7CiB9CiAKIC8vIFN3aXp6bGUgdGhlIHJl
ZCBhbmQgYmx1ZSBieXRlcyBvZiB0aGUgcGl4ZWxzIGluIGEgYnVmZmVyCkBAIC0xOTAsNiArMjE5
LDEzOCBAQCB2b2lkIGluUGxhY2VTd2l6emxlKHVpbnQ4X3QqIGJ5dGVEYXRhLCB1CiAgICAgfQog
fQogCisvLyBOb3RlOiBBc3N1bWVzIHRoYXQgYnl0ZXMgYXJlIGFscmVhZHkgaW4gUkdCQSBmb3Jt
YXQKK3RlbXBsYXRlIDxBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQ+Cit2b2lk
IGluUGxhY2VDaGFuZ2VQcmVtdWx0aXBsaWNhdGlvbih1aW50OF90KiBieXRlRGF0YSwgdW5zaWdu
ZWQgYnl0ZUNvdW50KQoreworICAgIHNpemVfdCBwaXhlbENvdW50ID0gYnl0ZUNvdW50IC8gNDsK
KworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGl4ZWxDb3VudDsgKytpKSB7CisgICAgICAg
IHVuc2lnbmVkIHggPSBwaXhlbENvdW50ICogNDsKKworICAgICAgICB1bnNpZ25lZCByZWQgPSBi
eXRlRGF0YVt4XTsKKyAgICAgICAgdW5zaWduZWQgZ3JlZW4gPSBieXRlRGF0YVt4ICsgMV07Cisg
ICAgICAgIHVuc2lnbmVkIGJsdWUgPSBieXRlRGF0YVt4ICsgMl07CisgICAgICAgIHVuc2lnbmVk
IGFscGhhID0gYnl0ZURhdGFbeCArIDNdOworCisgICAgICAgIGlmIChkZXNpcmVkRm9ybWF0ID09
IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpIHsKKyAgICAgICAgICAgIGlm
IChhbHBoYSAhPSAyNTUpIHsKKyAgICAgICAgICAgICAgICByZWQgPSAocmVkICogYWxwaGEgKyAy
NTQpIC8gMjU1OworICAgICAgICAgICAgICAgIGdyZWVuID0gKGdyZWVuICogYWxwaGEgKyAyNTQp
IC8gMjU1OworICAgICAgICAgICAgICAgIGJsdWUgPSAoYmx1ZSAqIGFscGhhICsgMjU0KSAvIDI1
NTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChhbHBo
YSAmJiBhbHBoYSAhPSAyNTUpIHsKKyAgICAgICAgICAgICAgICByZWQgPSByZWQgKiAyNTUgLyBh
bHBoYTsKKyAgICAgICAgICAgICAgICBncmVlbiA9IGdyZWVuICogMjU1IC8gYWxwaGE7CisgICAg
ICAgICAgICAgICAgYmx1ZSA9IGJsdWUgKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIHVpbnQzMl90KiBwaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWlu
dDMyX3QqPihieXRlRGF0YSkgKyBpOworICAgICAgICAqcGl4ZWwgPSAoYWxwaGEgPDwgMjQpIHwg
cmVkICA8PCAxNiB8IGdyZWVuICA8PCA4IHwgYmx1ZTsKKyAgICB9Cit9CisKK1JlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzaXJlZEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYg
c2l6ZSwgYm9vbCAvKiBhY2NlbGVyYXRlUmVuZGVyaW5nICovLCBmbG9hdCAvKiByZXNvbHV0aW9u
U2NhbGUgKi8pIGNvbnN0Cit7CisgICAgYXV0byBudW1CeXRlcyA9IHJlY3QuYXJlYTxSZWNvcmRP
dmVyZmxvdz4oKSAqIDQ7CisgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5
Ojp0cnlDcmVhdGVVbmluaXRpYWxpemVkKG51bUJ5dGVzLnVuc2FmZUdldCgpKTsKKyAgICBpZiAo
IXJlc3VsdCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIWJpdG1hcCkKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGlmICghcmVhZERhdGFGcm9tQml0bWFwSWZOZWVk
ZWQoZGVzaXJlZEZvcm1hdCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBy
YXdCaXRtYXBTaXplID0gYml0bWFwLT5HZXRTaXplKCk7CisgICAgSW50U2l6ZSBiaXRtYXBTaXpl
KGNsYW1wVG88aW50PihyYXdCaXRtYXBTaXplLndpZHRoKSwgY2xhbXBUbzxpbnQ+KHJhd0JpdG1h
cFNpemUuaGVpZ2h0KSk7CisKKyAgICBpZiAocmVjdC5sb2NhdGlvbigpID09IEludFBvaW50KCkg
JiYgcmVjdC5zaXplKCkgPT0gYml0bWFwU2l6ZSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChu
dW1CeXRlcy51bnNhZmVHZXQoKSA9PSBkYXRhLnNpemUoKSk7CisgICAgICAgIHJlc3VsdC0+c2V0
UmFuZ2UoZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpLCAwKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICAvLyBPbmx5IHdhbnQgcGFydCBvZiB0aGUgYml0bWFwLgorICAgICAgICBpZiAoIWNvcHlSZWN0
RnJvbURhdGEocmVjdCwgcmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIGlmIChieXRlRm9ybWF0ICE9IGRlc2lyZWRGb3JtYXQpIHsKKyAgICAgICAgLy8g
SW4tbWVtb3J5IGRhdGEgZG9lcyBub3QgbWF0Y2ggZGVzaXJlZCBmb3JtYXQuIE5lZWQgdG8gc3dp
enpsZSB0aGUgcmVzdWx0cy4KKyAgICAgICAgaWYgKGRlc2lyZWRGb3JtYXQgPT0gQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQorICAgICAgICAgICAgaW5QbGFjZUNoYW5n
ZVByZW11bHRpcGxpY2F0aW9uPEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGll
ZD4ocmVzdWx0LT5kYXRhKCksIHJlc3VsdC0+bGVuZ3RoKCkpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBpblBsYWNlQ2hhbmdlUHJlbXVsdGlwbGljYXRpb248QWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZD4ocmVzdWx0LT5kYXRhKCksIHJlc3VsdC0+bGVuZ3RoKCkpOwor
ICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgSW1hZ2VCdWZmZXJEYXRhOjpy
ZWFkRGF0YUZyb21CaXRtYXBJZk5lZWRlZChBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRG
b3JtYXQpIGNvbnN0Cit7CisgICAgaWYgKGJpdG1hcEJ1ZmZlclN5bmMgIT0gQml0bWFwQnVmZmVy
U3luYzo6QnVmZmVyT3V0T2ZTeW5jKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIEludFNp
emUgcGl4ZWxTaXplID0gYml0bWFwLT5HZXRQaXhlbFNpemUoKTsKKworICAgIGF1dG8gbnVtQnl0
ZXMgPSBwaXhlbFNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7CisgICAgaWYgKG51bUJ5
dGVzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29udGV4
dC0+ZW5kRHJhdygpOworCisgICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gZDJkRGV2aWNl
Q29udGV4dChRdWVyeSwgcGxhdGZvcm1Db250ZXh0LT5yZW5kZXJUYXJnZXQoKSk7CisgICAgQVNT
RVJUKCEhZDJkRGV2aWNlQ29udGV4dCk7CisKKyAgICBhdXRvIGJ5dGVzUGVyUm93SW5EYXRhID0g
cGl4ZWxTaXplLndpZHRoKCkgKiA0OworCisgICAgLy8gQ29weSBHUFUgZGF0YSBmcm9tIHRoZSBJ
RDJEMUJpdG1hcCB0byBhIENQVS1iYWNrZWQgSUQyRDFCaXRtYXAxCisgICAgQ09NUHRyPElEMkQx
Qml0bWFwMT4gY3B1Qml0bWFwOworICAgIEQyRDFfQklUTUFQX1BST1BFUlRJRVMxIGJpdG1hcFBy
b3BlcnRpZXMyID0gRDJEMTo6Qml0bWFwUHJvcGVydGllczEoRDJEMV9CSVRNQVBfT1BUSU9OU19D
UFVfUkVBRCB8IEQyRDFfQklUTUFQX09QVElPTlNfQ0FOTk9UX0RSQVcsIERpcmVjdDJEOjpwaXhl
bEZvcm1hdCgpKTsKKyAgICBIUkVTVUxUIGhyID0gZDJkRGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0
bWFwKHBpeGVsU2l6ZSwgbnVsbHB0ciwgYnl0ZXNQZXJSb3dJbkRhdGEsIGJpdG1hcFByb3BlcnRp
ZXMyLCAmY3B1Qml0bWFwKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGF1dG8gdGFyZ2V0UG9zID0gRDJEMTo6UG9pbnQyVSgpOworICAgIEQy
RDFfUkVDVF9VIGRhdGFSZWN0ID0gRDJEMTo6UmVjdFUoMCwgMCwgcGl4ZWxTaXplLndpZHRoKCks
IHBpeGVsU2l6ZS5oZWlnaHQoKSk7CisgICAgaHIgPSBjcHVCaXRtYXAtPkNvcHlGcm9tQml0bWFw
KCZ0YXJnZXRQb3MsIGJpdG1hcC5nZXQoKSwgJmRhdGFSZWN0KTsKKyAgICBpZiAoIVNVQ0NFRURF
RChocikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEQyRDFfTUFQUEVEX1JFQ1QgbWFw
cGVkRGF0YTsKKyAgICBociA9IGNwdUJpdG1hcC0+TWFwKEQyRDFfTUFQX09QVElPTlNfUkVBRCwg
Jm1hcHBlZERhdGEpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgaWYgKCFtYXBwZWREYXRhLmJpdHMpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmICghZW5zdXJlQmFja2luZ1N0b3JlKHBpeGVsU2l6ZSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIFNvZnR3YXJlIGZpbHRlcnMgZXhwZWN0IFJHQkEgYnl0ZXMuIFdl
IG5lZWQgdG8gc3dpenpsZSBmcm9tIERpcmVjdDJEJ3MgQkdSQSB0byBiZSBjb21wYXRpYmxlLgor
ICAgIGlmIChkZXNpcmVkRm9ybWF0ID09IEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRp
cGxpZWQpCisgICAgICAgIHN3aXp6bGVBbmRQcmVtdWx0aXBseTxBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkPihtYXBwZWREYXRhLmJpdHMsIHBpeGVsU2l6ZS5oZWlnaHQoKSwg
cGl4ZWxTaXplLndpZHRoKCksIG1hcHBlZERhdGEucGl0Y2gsIGJ5dGVzUGVyUm93SW5EYXRhLCBk
YXRhLmRhdGEoKSk7CisgICAgZWxzZQorICAgICAgICBzd2l6emxlQW5kUHJlbXVsdGlwbHk8QWxw
aGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihtYXBwZWREYXRhLmJpdHMsIHBp
eGVsU2l6ZS5oZWlnaHQoKSwgcGl4ZWxTaXplLndpZHRoKCksIG1hcHBlZERhdGEucGl0Y2gsIGJ5
dGVzUGVyUm93SW5EYXRhLCBkYXRhLmRhdGEoKSk7CisKKyAgICBieXRlRm9ybWF0ID0gZGVzaXJl
ZEZvcm1hdDsKKworICAgIGJpdG1hcEJ1ZmZlclN5bmMgPSBCaXRtYXBCdWZmZXJTeW5jOjpJblN5
bmM7CisKKyAgICBociA9IGNwdUJpdG1hcC0+VW5tYXAoKTsKKyAgICBBU1NFUlQoU1VDQ0VFREVE
KGhyKSk7CisKKyAgICBjb250ZXh0LT5iZWdpbkRyYXcoKTsKKworICAgIHJldHVybiB0cnVlOwor
fQorCiB2b2lkIEltYWdlQnVmZmVyRGF0YTo6cHV0RGF0YShjb25zdCBVaW50OENsYW1wZWRBcnJh
eSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9uIHNvdXJjZUZvcm1hdCwgY29uc3QgSW50
U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9p
bnQmIGRlc3RQb2ludCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCAvKiBhY2NlbGVyYXRlUmVu
ZGVyaW5nICovLCBmbG9hdCByZXNvbHV0aW9uU2NhbGUpCiB7CiAgICAgQVNTRVJUKHNvdXJjZVJl
Y3Qud2lkdGgoKSA+IDApOwpAQCAtMjI5LDIyICszOTAsNTAgQEAgdm9pZCBJbWFnZUJ1ZmZlckRh
dGE6OnB1dERhdGEoY29uc3QgVWludAogICAgICAgICByZXR1cm47CiAKICNpZiAhQVNTRVJUX0RJ
U0FCTEVECi0gICAgYXV0byBwaXhlbFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOwotICAg
IEFTU0VSVChwaXhlbFNpemUud2lkdGggPj0gc291cmNlU2l6ZS53aWR0aCgpKTsKLSAgICBBU1NF
UlQocGl4ZWxTaXplLndpZHRoID49IHNpemUud2lkdGgoKSk7Ci0gICAgQVNTRVJUKHBpeGVsU2l6
ZS5oZWlnaHQgPj0gc291cmNlU2l6ZS5oZWlnaHQoKSk7Ci0gICAgQVNTRVJUKHBpeGVsU2l6ZS5o
ZWlnaHQgPj0gc2l6ZS5oZWlnaHQoKSk7CisgICAgaWYgKGJpdG1hcCkgeworICAgICAgICBhdXRv
IHBpeGVsU2l6ZSA9IGJpdG1hcC0+R2V0UGl4ZWxTaXplKCk7CisgICAgICAgIEFTU0VSVChwaXhl
bFNpemUud2lkdGggPj0gc291cmNlU2l6ZS53aWR0aCgpKTsKKyAgICAgICAgQVNTRVJUKHBpeGVs
U2l6ZS53aWR0aCA+PSBzaXplLndpZHRoKCkpOworICAgICAgICBBU1NFUlQocGl4ZWxTaXplLmhl
aWdodCA+PSBzb3VyY2VTaXplLmhlaWdodCgpKTsKKyAgICAgICAgQVNTRVJUKHBpeGVsU2l6ZS5o
ZWlnaHQgPj0gc2l6ZS5oZWlnaHQoKSk7CisgICAgfQogI2VuZGlmCiAKICAgICBpZiAoIWVuc3Vy
ZUJhY2tpbmdTdG9yZShzaXplKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbWVtY3B5KGRhdGEu
ZGF0YSgpLCBzb3VyY2UuZGF0YSgpLCBzb3VyY2UubGVuZ3RoKCkpOworICAgIGlmIChzb3VyY2VT
aXplID09IHNpemUpIHsKKyAgICAgICAgbWVtY3B5KGRhdGEuZGF0YSgpLCBzb3VyY2UuZGF0YSgp
LCBzb3VyY2UubGVuZ3RoKCkpOworICAgICAgICBieXRlRm9ybWF0ID0gc291cmNlRm9ybWF0Owor
ICAgIH0gZWxzZSB7CisgICAgICAgIHJlYWREYXRhRnJvbUJpdG1hcElmTmVlZGVkKGJ5dGVGb3Jt
YXQpOworICAgICAgICBpZiAoIWNvcHlSZWN0RnJvbVNvdXJjZVRvRGF0YShzb3VyY2VSZWN0LCBz
b3VyY2UsIHNvdXJjZUZvcm1hdCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQogCi0gICAg
Ynl0ZUZvcm1hdCA9IHNvdXJjZUZvcm1hdDsKICAgICBiaXRtYXBCdWZmZXJTeW5jID0gQml0bWFw
QnVmZmVyU3luYzo6Qml0bWFwT3V0T2ZTeW5jOwogfQogCitib29sIEltYWdlQnVmZmVyRGF0YTo6
Y29weVJlY3RGcm9tU291cmNlVG9EYXRhKGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0
IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3VyY2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNl
Rm9ybWF0KQoreworICAgIEludFNpemUgcGl4ZWxTaXplID0gYml0bWFwLT5HZXRQaXhlbFNpemUo
KTsKKworICAgIEludFJlY3Qgc291cmNlUmVjdFRvQ29weSA9IHNvdXJjZVJlY3Q7CisgICAgaWYg
KCFJbnRSZWN0KEludFBvaW50KCksIHBpeGVsU2l6ZSkuY29udGFpbnMoc291cmNlUmVjdCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZGVzdEJ1ZmZlclBvc2l0aW9uID0gc291
cmNlUmVjdC5sb2NhdGlvbigpOworCisgICAgaWYgKHNvdXJjZUZvcm1hdCA9PSBieXRlRm9ybWF0
KQorICAgICAgICByZXR1cm4gY29weVJlY3RGcm9tU291cmNlVG9EZXN0KHNvdXJjZVJlY3QsIHNv
dXJjZVJlY3Quc2l6ZSgpLCBzb3VyY2UuZGF0YSgpLCBiYWNraW5nU3RvcmVTaXplLCBkYXRhLmRh
dGEoKSwgZGVzdEJ1ZmZlclBvc2l0aW9uKTsKKworICAgIGlmIChieXRlRm9ybWF0ID09IEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkKKyAgICAgICAgY29weVJlY3RGcm9t
U291cmNlVG9EZXN0QW5kU2V0UHJlbXVsdGlwbGljYXRpb248QWxwaGFQcmVtdWx0aXBsaWNhdGlv
bjo6UHJlbXVsdGlwbGllZD4oc291cmNlUmVjdCwgc291cmNlUmVjdC5zaXplKCksIHNvdXJjZS5k
YXRhKCksIGJhY2tpbmdTdG9yZVNpemUsIGRhdGEuZGF0YSgpLCBkZXN0QnVmZmVyUG9zaXRpb24p
OworICAgIGVsc2UKKyAgICAgICAgY29weVJlY3RGcm9tU291cmNlVG9EZXN0QW5kU2V0UHJlbXVs
dGlwbGljYXRpb248QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihzb3Vy
Y2VSZWN0LCBzb3VyY2VSZWN0LnNpemUoKSwgc291cmNlLmRhdGEoKSwgYmFja2luZ1N0b3JlU2l6
ZSwgZGF0YS5kYXRhKCksIGRlc3RCdWZmZXJQb3NpdGlvbik7Cit9CisKKwogdm9pZCBJbWFnZUJ1
ZmZlckRhdGE6OmxvYWREYXRhVG9CaXRtYXBJZk5lZWRlZCgpCiB7CiAgICAgaWYgKGJpdG1hcEJ1
ZmZlclN5bmMgIT0gQml0bWFwQnVmZmVyU3luYzo6Qml0bWFwT3V0T2ZTeW5jIHx8IGRhdGEuaXNF
bXB0eSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdl
QnVmZmVyRGF0YURpcmVjdDJELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmgJKHJldmlzaW9uIDI0OTky
MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRh
dGFEaXJlY3QyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSw5IEBAIHN0cnVjdCBJbWFn
ZUJ1ZmZlckRhdGEgewogCiAgICAgYm9vbCBlbnN1cmVCYWNraW5nU3RvcmUoY29uc3QgSW50U2l6
ZSYpIGNvbnN0OwogICAgIHZvaWQgbG9hZERhdGFUb0JpdG1hcElmTmVlZGVkKCk7CisgICAgYm9v
bCByZWFkRGF0YUZyb21CaXRtYXBJZk5lZWRlZChBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2ly
ZWRGb3JtYXQpIGNvbnN0OworICAgIGJvb2wgY29weVJlY3RGcm9tRGF0YShjb25zdCBJbnRSZWN0
JiwgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiYpIGNvbnN0OworICAgIGJvb2wgY29weVJlY3RG
cm9tU291cmNlVG9EYXRhKGNvbnN0IEludFJlY3QmLCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYs
IEFscGhhUHJlbXVsdGlwbGljYXRpb24pOwogICAgIHZvaWQgbWFya0J1ZmZlck91dE9mU3luYygp
IHsgYml0bWFwQnVmZmVyU3luYyA9IEJpdG1hcEJ1ZmZlclN5bmM6OkJ1ZmZlck91dE9mU3luYzsg
fQogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhE
aXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI0OTkyMykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MDEsOCArNDAxLDYgQEAgdm9pZCBQYXRoOjphZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEZs
b2F0UAogCiB2b2lkIFBhdGg6OmFkZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBG
bG9hdFBvaW50JiBwMiwgZmxvYXQgcmFkaXVzKQogewotICAgIEFTU0VSVChtX2FjdGl2ZVBhdGgu
Z2V0KCkpOwotCiAgICAgRmxvYXRQb2ludCBwMCA9IGN1cnJlbnRQb2ludCgpOwogCiAgICAgaWYg
KHAxID09IHAwIHx8IHAxID09IHAyIHx8IFdURjo6YXJlRXNzZW50aWFsbHlFcXVhbChyYWRpdXMs
IDAuMGYpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRm
b3JtQ29udGV4dERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAy
NDk5MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywxNCArNTMsMjAgQEAgdm9p
ZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6cmVzdG9yZSgpCiB7CiAgICAgQVNTRVJUKG1fcmVu
ZGVyVGFyZ2V0KTsKIAotICAgIGF1dG8gcmVzdG9yZVN0YXRlID0gbV9yZW5kZXJTdGF0ZXMudGFr
ZUxhc3QoKTsKLSAgICBtX3JlbmRlclRhcmdldC0+UmVzdG9yZURyYXdpbmdTdGF0ZShyZXN0b3Jl
U3RhdGUubV9kcmF3aW5nU3RhdGVCbG9jay5nZXQoKSk7CisgICAgLy8gQ2FuJ3QgcmVzdG9yZSBp
ZiB3ZSBuZXZlciBjYWxsZWQgc2F2ZS4KKyAgICBpZiAobV9zdGF0ZVN0YWNrLnNpemUoKSA9PSAx
KQorICAgICAgICByZXR1cm47CiAKLSAgICBmb3IgKGF1dG8gY2xpcFR5cGUgPSByZXN0b3JlU3Rh
dGUubV9jbGlwcy5yYmVnaW4oKTsgY2xpcFR5cGUgIT0gcmVzdG9yZVN0YXRlLm1fY2xpcHMucmVu
ZCgpOyArK2NsaXBUeXBlKSB7Ci0gICAgICAgIGlmICgqY2xpcFR5cGUgPT0gQXhpc0FsaWduZWRD
bGlwKQotICAgICAgICAgICAgbV9yZW5kZXJUYXJnZXQtPlBvcEF4aXNBbGlnbmVkQ2xpcCgpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3JlbmRlclRhcmdldC0+UG9wTGF5ZXIoKTsKKyAg
ICBpZiAoIW1fcmVuZGVyU3RhdGVzLmlzRW1wdHkoKSkgeworICAgICAgICBhdXRvIHJlc3RvcmVT
dGF0ZSA9IG1fcmVuZGVyU3RhdGVzLnRha2VMYXN0KCk7CisgICAgICAgIG1fcmVuZGVyVGFyZ2V0
LT5SZXN0b3JlRHJhd2luZ1N0YXRlKHJlc3RvcmVTdGF0ZS5tX2RyYXdpbmdTdGF0ZUJsb2NrLmdl
dCgpKTsKKworICAgICAgICBmb3IgKGF1dG8gY2xpcFR5cGUgPSByZXN0b3JlU3RhdGUubV9jbGlw
cy5yYmVnaW4oKTsgY2xpcFR5cGUgIT0gcmVzdG9yZVN0YXRlLm1fY2xpcHMucmVuZCgpOyArK2Ns
aXBUeXBlKSB7CisgICAgICAgICAgICBpZiAoKmNsaXBUeXBlID09IEF4aXNBbGlnbmVkQ2xpcCkK
KyAgICAgICAgICAgICAgICBtX3JlbmRlclRhcmdldC0+UG9wQXhpc0FsaWduZWRDbGlwKCk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9yZW5kZXJUYXJnZXQtPlBvcExheWVy
KCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBtX3N0YXRlU3RhY2sucmVtb3ZlTGFzdCgpOwpA
QCAtMjUzLDYgKzI1OSwxMCBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpiZWdpbkRy
YXcoCiB2b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjplbmREcmF3KCkKIHsKICAgICBBU1NF
UlQobV9yZW5kZXJUYXJnZXQpOworCisgICAgd2hpbGUgKCFtX3JlbmRlclN0YXRlcy5pc0VtcHR5
KCkpCisgICAgICAgIHJlc3RvcmUoKTsKKwogICAgIEQyRDFfVEFHIGZpcnN0LCBzZWNvbmQ7CiAg
ICAgSFJFU1VMVCBociA9IG1fcmVuZGVyVGFyZ2V0LT5FbmREcmF3KCZmaXJzdCwgJnNlY29uZCk7
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379087</attachid>
            <date>2019-09-18 17:01:59 -0700</date>
            <delta_ts>2019-09-18 20:58:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201862-20190918170156.patch</filename>
            <type>text/plain</type>
            <size>23685</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTk0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDE5LTA5LTE2ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtGVFddIENvcnJlY3QgSW1h
Z2VCdWZmZXJEYXRhIGFuZCBjbGVhciBvcGVyYXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDE4NjIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGNvcnJlY3RzIHNldmVyYWwgcHJv
YmxlbXMgaW4gdGhlIGNhbnZhcyBpbXBsZW1lbnRhdGlvbjoKKyAgICAgICAgMS4gVGhlIGltcGxl
bWVudGF0aW9uIG9mIEltYWdlQnVmZmVyRGF0YURpcmVjdDJEIGRpZCBub3QgcHJvcGVybHkgaGFu
ZGxlIHRoZSBjYXNlIG9mIGEKKyAgICAgICAgICAgJ2dldERhdGEnIHJlcXVlc3QgZm9yIGxlc3Mg
dGhhbiB0aGUgc2l6ZSBvZiB0aGUgZnVsbCBiaXRtYXAuCisgICAgICAgIDIuIFRoZSBpbXBsZW1l
bnRhdGlvbiBvZiAnQ2xlYXInIHdhcyBub3QgY29ycmVjdCB3aGVuIHRoZSBzaXplIG9mIHRoZSBy
ZWdpb24gdG8gYmUKKyAgICAgICAgICAgY2xlYXJlZCBpcyBsZXNzIHRoYW4gdGhlIHNpemUgb2Yg
dGhlIHJlbmRlciB0YXJnZXQuCisgICAgICAgIDMuICdlbmREcmF3JyBmYWlscyBpZiBhbnkgY2xp
cCByZWdpb25zIGFyZSBhY3RpdmUgYXQgdGhlIGVuZCBvZiB0aGUgb3BlcmF0aW9uLiBUaGUKKyAg
ICAgICAgICAgc3RhY2sgbmVlZHMgdG8gYmUgdW53b3VuZCB3aGVuIGVuZERyYXcgaXMgY2FsbGVk
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggY29ycmVjdHMgYWxsIHRocmVlIHByb2JsZW1zLgorCisg
ICAgICAgIFRlc3RlZCBieSBjYW52YXMgTGF5b3V0VGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRpcmVjdDJEOjpjbGVhclJlY3QpOiBDb3JyZWN0IHBhcnRpYWwgcmVuZGVyIHRhcmdldCBjYXNl
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3Qy
RC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEgY29uc3Qp
OiBDb3JyZWN0IHBhcnRpYWwgYnVmZmVyIGNhc2UuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckRhdGE6OnB1dERhdGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
RGF0YTo6cmVhZERhdGFGcm9tQml0bWFwSWZOZWVkZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmNvcHlSZWN0RnJvbVNvdXJjZVRvRGVzdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJEYXRhOjpjb3B5UmVjdEZyb21Tb3VyY2VUb0RhdGEpOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OmVuZERyYXcpOiBDb3Jy
ZWN0IGZhaWx1cmVzIGNhdXNlZCBieQorICAgICAgICBkYW5nbGluZyBjbGlwIHJlZ2lvbnMgd2hl
biAnZW5kRHJhdycgaXMgY2FsbGVkLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQ6OmZsdXNoKTogRG9uJ3QgY2FsbCBwb3N0LWRyYXcgb2JzZXJ2ZXI7CisgICAgICAg
IHRoaXMgaXMgYWxyZWFkeSBoYW5kbGVkIGluIHRoZSBkcmF3IG9wZXJhdGlvbnMsIGFuZCBlbmRE
cmF3LgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnJlc3RvcmUp
OiBSZWNvZ25pemUgdGhhdCB0aGUgY2xpcAorICAgICAgICBhbmQgdHJhbnNwYXJlbmN5IHN0YWNr
IG1pZ2h0IGJlIGVtcHR5IHdoZW4gcmVzdG9yZSBpcyBjYWxsZWQuCisKIDIwMTktMDktMTYgIEZ1
amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW1dpbkNh
aXJvXVtjdXJsXSBEb24ndCBjb21waWxlIHVudXNlZCBDZXJ0aWZpY2F0ZUNGV2luLmNwcApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0RpcmVjdDJET3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI0OTkyMykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NjcsOSArNjY3LDEyIEBAIHZvaWQgY2xlYXJSZWN0KFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJgogICAgICAgICBpZiAoIXJlY3RUb0NsZWFyLmludGVyc2VjdHMocmVuZGVyVGFy
Z2V0UmVjdCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0
LnNldFRhZ3MoMSwgX19MSU5FX18pOwogICAgICAgICByZWN0VG9DbGVhci5pbnRlcnNlY3QocmVu
ZGVyVGFyZ2V0UmVjdCk7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+RmlsbFJlY3RhbmdsZShyZWN0
VG9DbGVhciwgcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENvbG9yKENvbG9yKEQyRDE6OkNvbG9y
RigwLCAwLCAwLCAwKSkpLmdldCgpKTsKKworICAgICAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFn
cygxLCBfX0xJTkVfXyk7CisgICAgICAgIHJlbmRlclRhcmdldC0+UHVzaEF4aXNBbGlnbmVkQ2xp
cChyZWN0VG9DbGVhciwgRDJEMV9BTlRJQUxJQVNfTU9ERV9QRVJfUFJJTUlUSVZFKTsKKyAgICAg
ICAgcmVuZGVyVGFyZ2V0LT5DbGVhcihEMkQxOjpDb2xvckYoMCwgMCwgMCwgMCkpOworICAgICAg
ICByZW5kZXJUYXJnZXQtPlBvcEF4aXNBbGlnbmVkQ2xpcCgpOwogICAgIH0pOwogfQogCkBAIC02
NzksNyArNjgyLDcgQEAgdm9pZCBkcmF3R2x5cGhzKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJgog
ICAgIGF1dG8gcmVuZGVyVGFyZ2V0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwog
ICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQucGxhdGZvcm1E
YXRhKCk7CiAKLSAgICBwbGF0Zm9ybUNvbnRleHQuc2F2ZSgpOworICAgIFBsYXRmb3JtQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihwbGF0Zm9ybUNvbnRleHQpOwogCiAgICAgRDJEMV9NQVRS
SVhfM1gyX0YgbWF0cml4OwogICAgIHJlbmRlclRhcmdldC0+R2V0VHJhbnNmb3JtKCZtYXRyaXgp
OwpAQCAtNzM3LDcgKzc0MCw3IEBAIHZvaWQgZHJhd0dseXBocyhQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCYKICAgICAvLyBpZiAoaGFzU2ltcGxlU2hhZG93KQogICAgIC8vICAgICBncmFwaGljc0Nv
bnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOwog
Ci0gICAgcGxhdGZvcm1Db250ZXh0LnJlc3RvcmUoKTsKKyAgICBzdGF0ZVNhdmVyLnJlc3RvcmUo
KTsKICAgICBwbGF0Zm9ybUNvbnRleHQubm90aWZ5UG9zdERyYXdPYnNlcnZlcigpOwogfQogCkBA
IC05OTEsNyArOTk0LDYgQEAgdm9pZCBmbHVzaChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxh
dAogICAgIEFTU0VSVChwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwogICAgIEQyRDFf
VEFHIGZpcnN0LCBzZWNvbmQ7CiAgICAgSFJFU1VMVCBociA9IHBsYXRmb3JtQ29udGV4dC5yZW5k
ZXJUYXJnZXQoKS0+Rmx1c2goJmZpcnN0LCAmc2Vjb25kKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQu
bm90aWZ5UG9zdERyYXdPYnNlcnZlcigpOwogCiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVE
KGhyKSk7CiB9CkBAIC0xMTY2LDEzICsxMTY4LDggQEAgdm9pZCBjbGlwUGF0aChQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCYgcAogCiB2b2lkIGNsaXBQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
JiBwbGF0Zm9ybUNvbnRleHQsIElEMkQxR2VvbWV0cnkqIHBhdGgpCiB7Ci0gICAgQVNTRVJUKHBs
YXRmb3JtQ29udGV4dC5oYXNTYXZlZFN0YXRlKCkpOwotICAgIGlmICghcGxhdGZvcm1Db250ZXh0
Lmhhc1NhdmVkU3RhdGUoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgQ09NUHRyPElEMkQxTGF5
ZXI+IGNsaXBMYXllcjsKICAgICBIUkVTVUxUIGhyID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRh
cmdldCgpLT5DcmVhdGVMYXllcigmY2xpcExheWVyKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhy
KSk7CiAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3Qy
RC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcAkocmV2aXNpb24gMjQ5OTIzKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTc5LDg1ICs3OSwxMTQgQEAgdm9pZCBzd2l6emxlQW5kUHJl
bXVsdGlwbHkoY29uc3QgdWludDhfdAogICAgIH0KIH0KIAotYm9vbCBJbWFnZUJ1ZmZlckRhdGE6
OmVuc3VyZUJhY2tpbmdTdG9yZShjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAorc3RhdGljIGJv
b2wgY29weVJlY3RGcm9tU291cmNlVG9EZXN0KGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFNpemUmIHNvdXJjZUJ1ZmZlclNpemUsIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgY29u
c3QgSW50U2l6ZSYgZGVzdEJ1ZmZlclNpemUsIHVpbnQ4X3QqIGRlc3QsIGNvbnN0IEludFBvaW50
JiBkZXN0QnVmZmVyUG9zaXRpb24pCiB7Ci0gICAgaWYgKHNpemUgPT0gYmFja2luZ1N0b3JlU2l6
ZSAmJiAhZGF0YS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChzb3Vy
Y2VSZWN0LndpZHRoKCkgPiBkZXN0QnVmZmVyU2l6ZS53aWR0aCgpIHx8IHNvdXJjZVJlY3QuaGVp
Z2h0KCkgPiBkZXN0QnVmZmVyU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgYXV0byBudW1CeXRlcyA9IHNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0g
ICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKKyAgICBpZiAoc291cmNlUmVjdC53aWR0
aCgpID4gc291cmNlQnVmZmVyU2l6ZS53aWR0aCgpIHx8IHNvdXJjZVJlY3QuaGVpZ2h0KCkgPiBz
b3VyY2VCdWZmZXJTaXplLmhlaWdodCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBi
YWNraW5nU3RvcmVTaXplID0gc2l6ZTsKLSAgICBkYXRhLnJlc2l6ZVRvRml0KG51bUJ5dGVzLnVu
c2FmZUdldCgpKTsKLSAgICByZXR1cm4gZGF0YS5jYXBhY2l0eSgpID09IG51bUJ5dGVzLnVuc2Fm
ZUdldCgpOworICAgIHVuc2lnbmVkIHNyY1N0cmlkZSA9IHNvdXJjZUJ1ZmZlclNpemUud2lkdGgo
KSAqIDQ7CisgICAgdW5zaWduZWQgZGVzdFN0cmlkZSA9IGRlc3RCdWZmZXJTaXplLndpZHRoKCkg
KiA0OworCisgICAgdW5zaWduZWQgc3JjUm93T2Zmc2V0ID0gc291cmNlUmVjdC5sb2NhdGlvbigp
LngoKSAqIDQ7CisgICAgdW5zaWduZWQgZGVzdFJvd09mZnNldCA9IGRlc3RCdWZmZXJQb3NpdGlv
bi54KCkgKiA0OworCisgICAgY29uc3QgdWludDhfdCogc3JjUm93cyA9IHNvdXJjZSArIHNyY1N0
cmlkZSAqIHNvdXJjZVJlY3QubG9jYXRpb24oKS55KCk7CisgICAgdWludDhfdCogZGVzdFJvd3Mg
PSBkZXN0ICsgZGVzdFN0cmlkZSAqIGRlc3RCdWZmZXJQb3NpdGlvbi55KCk7CisKKyAgICBjb25z
dCB1bnNpZ25lZCBieXRlc1BlclJvdyA9IHNvdXJjZVJlY3Qud2lkdGgoKSAqIDQ7CisgICAgZm9y
ICh1bnNpZ25lZCB5ID0gMDsgeSA8IHNvdXJjZVJlY3QuaGVpZ2h0KCk7ICsreSkgeworICAgICAg
ICBjb25zdCB1aW50OF90KiBzcmNSb3cgPSBzcmNSb3dzICsgc3JjU3RyaWRlICogeSArIHNyY1Jv
d09mZnNldDsKKyAgICAgICAgdWludDhfdCogZGVzdFJvdyA9IGRlc3RSb3dzICsgZGVzdFN0cmlk
ZSAqIHkgKyBkZXN0Um93T2Zmc2V0OworICAgICAgICBtZW1jcHkoZGVzdFJvdywgc3JjUm93LCBi
eXRlc1BlclJvdyk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7CiB9CiAKLVJlZlB0cjxVaW50
OENsYW1wZWRBcnJheT4gSW1hZ2VCdWZmZXJEYXRhOjpnZXREYXRhKEFscGhhUHJlbXVsdGlwbGlj
YXRpb24gZGVzaXJlZEZvcm1hdCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYg
c2l6ZSwgYm9vbCAvKiBhY2NlbGVyYXRlUmVuZGVyaW5nICovLCBmbG9hdCAvKiByZXNvbHV0aW9u
U2NhbGUgKi8pIGNvbnN0CisvLyBOb3RlOiBBc3N1bWVzIHRoYXQgYnl0ZXMgYXJlIGFscmVhZHkg
aW4gUkdCQSBmb3JtYXQKK3RlbXBsYXRlIDxBbHBoYVByZW11bHRpcGxpY2F0aW9uIGRlc2lyZWRG
b3JtYXQ+Citib29sIGNvcHlSZWN0RnJvbVNvdXJjZVRvRGVzdEFuZFNldFByZW11bHRpcGxpY2F0
aW9uKGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFNpemUmIHNvdXJjZUJ1ZmZl
clNpemUsIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgZGVzdEJ1ZmZlclNp
emUsIHVpbnQ4X3QqIGRlc3QsIGNvbnN0IEludFBvaW50JiBkZXN0QnVmZmVyUG9zaXRpb24pCiB7
Ci0gICAgYXV0byBudW1CeXRlcyA9IHJlY3QuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0g
ICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgaWYgKHNvdXJjZVJlY3Qud2lkdGgoKSA+IGRlc3RCdWZmZXJTaXplLndpZHRoKCkgfHwg
c291cmNlUmVjdC5oZWlnaHQoKSA+IGRlc3RCdWZmZXJTaXplLmhlaWdodCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBhdXRvIHJlc3VsdCA9IFVpbnQ4Q2xhbXBlZEFycmF5Ojp0cnlD
cmVhdGVVbmluaXRpYWxpemVkKG51bUJ5dGVzLnVuc2FmZUdldCgpKTsKLSAgICBpZiAoIXJlc3Vs
dCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKHNvdXJjZVJlY3Qud2lkdGgoKSA+
IHNvdXJjZUJ1ZmZlclNpemUud2lkdGgoKSB8fCBzb3VyY2VSZWN0LmhlaWdodCgpID4gc291cmNl
QnVmZmVyU2l6ZS5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKCFi
aXRtYXApCi0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgdW5zaWduZWQgc3JjU3RyaWRlID0g
c291cmNlQnVmZmVyU2l6ZS53aWR0aCgpICogNDsKKyAgICB1bnNpZ25lZCBkZXN0U3RyaWRlID0g
ZGVzdEJ1ZmZlclNpemUud2lkdGgoKSAqIDQ7CiAKLSAgICBhdXRvIGJ5dGVzUGVyUm93SW5EYXRh
ID0gcmVjdC53aWR0aCgpICogNDsKLSAgICBhdXRvIGhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7Ci0g
ICAgYXV0byB3aWR0aCA9IHJlY3Qud2lkdGgoKTsKLQotICAgIGlmIChiaXRtYXBCdWZmZXJTeW5j
ID09IEJpdG1hcEJ1ZmZlclN5bmM6OkJ1ZmZlck91dE9mU3luYyB8fCBkYXRhLnNpemUoKSAhPSBu
dW1CeXRlcy51bnNhZmVHZXQoKSkgewotICAgICAgICBjb250ZXh0LT5lbmREcmF3KCk7Ci0KLSAg
ICAgICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gZDJkRGV2aWNlQ29udGV4dChRdWVyeSwg
cGxhdGZvcm1Db250ZXh0LT5yZW5kZXJUYXJnZXQoKSk7Ci0gICAgICAgIEFTU0VSVCghIWQyZERl
dmljZUNvbnRleHQpOwotCi0gICAgICAgIC8vIENvcHkgR1BVIGRhdGEgZnJvbSB0aGUgSUQyRDFC
aXRtYXAgdG8gYSBDUFUtYmFja2VkIElEMkQxQml0bWFwMQotICAgICAgICBDT01QdHI8SUQyRDFC
aXRtYXAxPiBjcHVCaXRtYXA7Ci0gICAgICAgIEQyRDFfQklUTUFQX1BST1BFUlRJRVMxIGJpdG1h
cFByb3BlcnRpZXMyID0gRDJEMTo6Qml0bWFwUHJvcGVydGllczEoRDJEMV9CSVRNQVBfT1BUSU9O
U19DUFVfUkVBRCB8IEQyRDFfQklUTUFQX09QVElPTlNfQ0FOTk9UX0RSQVcsIERpcmVjdDJEOjpw
aXhlbEZvcm1hdCgpKTsKLSAgICAgICAgSFJFU1VMVCBociA9IGQyZERldmljZUNvbnRleHQtPkNy
ZWF0ZUJpdG1hcChzaXplLCBudWxscHRyLCBieXRlc1BlclJvd0luRGF0YSwgYml0bWFwUHJvcGVy
dGllczIsICZjcHVCaXRtYXApOwotICAgICAgICBpZiAoIVNVQ0NFRURFRChocikpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB1bnNpZ25lZCBzcmNSb3dPZmZzZXQgPSBzb3VyY2VS
ZWN0LmxvY2F0aW9uKCkueCgpICogNDsKKyAgICB1bnNpZ25lZCBkZXN0Um93T2Zmc2V0ID0gZGVz
dEJ1ZmZlclBvc2l0aW9uLngoKSAqIDQ7CiAKLSAgICAgICAgYXV0byB0YXJnZXRQb3MgPSBEMkQx
OjpQb2ludDJVKCk7Ci0gICAgICAgIEQyRDFfUkVDVF9VIGRhdGFSZWN0ID0gcmVjdDsKLSAgICAg
ICAgaHIgPSBjcHVCaXRtYXAtPkNvcHlGcm9tQml0bWFwKCZ0YXJnZXRQb3MsIGJpdG1hcC5nZXQo
KSwgJmRhdGFSZWN0KTsKLSAgICAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQotICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgY29uc3QgdWludDhfdCogc3JjUm93cyA9IHNvdXJjZSArIHNy
Y1N0cmlkZSAqIHNvdXJjZVJlY3QubG9jYXRpb24oKS55KCk7CisgICAgdWludDhfdCogZGVzdFJv
d3MgPSBkZXN0ICsgZGVzdFN0cmlkZSAqIGRlc3RCdWZmZXJQb3NpdGlvbi55KCk7CiAKLSAgICAg
ICAgRDJEMV9NQVBQRURfUkVDVCBtYXBwZWREYXRhOwotICAgICAgICBociA9IGNwdUJpdG1hcC0+
TWFwKEQyRDFfTUFQX09QVElPTlNfUkVBRCwgJm1hcHBlZERhdGEpOwotICAgICAgICBpZiAoIVNV
Q0NFRURFRChocikpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBjb25zdCB1bnNp
Z25lZCBieXRlc1BlclJvdyA9IHNvdXJjZVJlY3Qud2lkdGgoKSAqIDQ7CisgICAgZm9yICh1bnNp
Z25lZCB5ID0gMDsgeSA8IHNvdXJjZVJlY3QuaGVpZ2h0KCk7ICsreSkgeworICAgICAgICBjb25z
dCB1aW50OF90KiBzcmNSb3cgPSBzcmNSb3dzICsgc3JjU3RyaWRlICogeSArIHNyY1Jvd09mZnNl
dDsKKyAgICAgICAgdWludDhfdCogZGVzdFJvdyA9IGRlc3RSb3dzICsgZGVzdFN0cmlkZSAqIHkg
KyBkZXN0Um93T2Zmc2V0OworCisgICAgICAgIGZvciAoc2l6ZV90IHggPSAwOyB4IDwgc291cmNl
UmVjdC53aWR0aCgpOyArK3gpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHBvcyA9IHggKiA0Owor
CisgICAgICAgICAgICB1bnNpZ25lZCByZWQgPSBzcmNSb3dbeF07CisgICAgICAgICAgICB1bnNp
Z25lZCBncmVlbiA9IHNyY1Jvd1t4ICsgMV07CisgICAgICAgICAgICB1bnNpZ25lZCBibHVlID0g
c3JjUm93W3ggKyAyXTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGFscGhhID0gc3JjUm93W3ggKyAz
XTsKKworICAgICAgICAgICAgaWYgKGRlc2lyZWRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNh
dGlvbjo6UHJlbXVsdGlwbGllZCkgeworICAgICAgICAgICAgICAgIGlmIChhbHBoYSAhPSAyNTUp
IHsKKyAgICAgICAgICAgICAgICAgICAgcmVkID0gKHJlZCAqIGFscGhhICsgMjU0KSAvIDI1NTsK
KyAgICAgICAgICAgICAgICAgICAgZ3JlZW4gPSAoZ3JlZW4gKiBhbHBoYSArIDI1NCkgLyAyNTU7
CisgICAgICAgICAgICAgICAgICAgIGJsdWUgPSAoYmx1ZSAqIGFscGhhICsgMjU0KSAvIDI1NTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IGlmIChhbHBoYSAmJiBhbHBoYSAhPSAyNTUpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVkID0g
cmVkICogMjU1IC8gYWxwaGE7CisgICAgICAgICAgICAgICAgICAgIGdyZWVuID0gZ3JlZW4gKiAy
NTUgLyBhbHBoYTsKKyAgICAgICAgICAgICAgICAgICAgYmx1ZSA9IGJsdWUgKiAyNTUgLyBhbHBo
YTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1hcHBl
ZERhdGEuYml0cykgewotICAgICAgICAgICAgaWYgKCFlbnN1cmVCYWNraW5nU3RvcmUoYml0bWFw
LT5HZXRQaXhlbFNpemUoKSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICAgICAgICAgIC8vIFNvZnR3YXJlIGZpbHRlcnMgZXhwZWN0IFJHQkEgYnl0ZXMuIFdlIG5lZWQg
dG8gc3dpenpsZSBmcm9tIERpcmVjdDJEJ3MgQkdSQSB0byBiZSBjb21wYXRpYmxlLgotICAgICAg
ICAgICAgaWYgKGRlc2lyZWRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkKQotICAgICAgICAgICAgICAgIHN3aXp6bGVBbmRQcmVtdWx0aXBseTxBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQ+KG1hcHBlZERhdGEuYml0cywgaGVpZ2h0
LCB3aWR0aCwgbWFwcGVkRGF0YS5waXRjaCwgYnl0ZXNQZXJSb3dJbkRhdGEsIGRhdGEuZGF0YSgp
KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzd2l6emxlQW5kUHJlbXVsdGlw
bHk8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZD4obWFwcGVkRGF0YS5iaXRz
LCBoZWlnaHQsIHdpZHRoLCBtYXBwZWREYXRhLnBpdGNoLCBieXRlc1BlclJvd0luRGF0YSwgZGF0
YS5kYXRhKCkpOworICAgICAgICAgICAgdWludDMyX3QqIHBpeGVsID0gcmVpbnRlcnByZXRfY2Fz
dDx1aW50MzJfdCo+KGRlc3RSb3cpICsgeDsKKyAgICAgICAgICAgICpwaXhlbCA9IChhbHBoYSA8
PCAyNCkgfCByZWQgIDw8IDE2IHwgZ3JlZW4gIDw8IDggfCBibHVlOworICAgICAgICB9CisgICAg
fQogCi0gICAgICAgICAgICBieXRlRm9ybWF0ID0gZGVzaXJlZEZvcm1hdDsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KIAotICAgICAgICAgICAgYml0bWFwQnVmZmVyU3luYyA9IEJpdG1hcEJ1ZmZlclN5
bmM6OkluU3luYzsKLSAgICAgICAgfQorYm9vbCBJbWFnZUJ1ZmZlckRhdGE6OmNvcHlSZWN0RnJv
bURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiYgcmVz
dWx0KSBjb25zdAoreworICAgIGF1dG8gcmF3Qml0bWFwU2l6ZSA9IGJpdG1hcC0+R2V0U2l6ZSgp
OwogCi0gICAgICAgIGhyID0gY3B1Qml0bWFwLT5Vbm1hcCgpOwotICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKGhyKSk7CisgICAgZmxvYXQgc2NhbGVGYWN0b3IgPSBiYWNraW5nU3RvcmVTaXplLndp
ZHRoKCkgLyByYXdCaXRtYXBTaXplLndpZHRoOwogCi0gICAgICAgIGNvbnRleHQtPmJlZ2luRHJh
dygpOwotICAgIH0KKyAgICBJbnRSZWN0IHNjYWxlZFJlY3QgPSByZWN0OworICAgIHNjYWxlZFJl
Y3Quc2NhbGUoc2NhbGVGYWN0b3IpOwogCi0gICAgcmVzdWx0LT5zZXRSYW5nZShkYXRhLmRhdGEo
KSwgZGF0YS5zaXplKCksIDApOworICAgIGlmICghSW50UmVjdChJbnRQb2ludCgpLCBiYWNraW5n
U3RvcmVTaXplKS5jb250YWlucyhzY2FsZWRSZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gY29weVJlY3RGcm9tU291cmNlVG9EZXN0
KHNjYWxlZFJlY3QsIGJhY2tpbmdTdG9yZVNpemUsIGRhdGEuZGF0YSgpLCByZWN0LnNpemUoKSwg
cmVzdWx0LT5kYXRhKCksIEludFBvaW50KCkpOworfQorCitib29sIEltYWdlQnVmZmVyRGF0YTo6
ZW5zdXJlQmFja2luZ1N0b3JlKGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0Cit7CisgICAgaWYg
KHNpemUgPT0gYmFja2luZ1N0b3JlU2l6ZSAmJiAhZGF0YS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgYXV0byBudW1CeXRlcyA9IHNpemUuYXJlYTxSZWNvcmRPdmVyZmxv
dz4oKSAqIDQ7CisgICAgaWYgKG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgYmFja2luZ1N0b3JlU2l6ZSA9IHNpemU7CisgICAgZGF0YS5yZXNp
emVUb0ZpdChudW1CeXRlcy51bnNhZmVHZXQoKSk7CisgICAgcmV0dXJuIGRhdGEuY2FwYWNpdHko
KSA9PSBudW1CeXRlcy51bnNhZmVHZXQoKTsKIH0KIAogLy8gU3dpenpsZSB0aGUgcmVkIGFuZCBi
bHVlIGJ5dGVzIG9mIHRoZSBwaXhlbHMgaW4gYSBidWZmZXIKQEAgLTE5MCw2ICsyMTksMTM4IEBA
IHZvaWQgaW5QbGFjZVN3aXp6bGUodWludDhfdCogYnl0ZURhdGEsIHUKICAgICB9CiB9CiAKKy8v
IE5vdGU6IEFzc3VtZXMgdGhhdCBieXRlcyBhcmUgYWxyZWFkeSBpbiBSR0JBIGZvcm1hdAordGVt
cGxhdGUgPEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1hdD4KK3ZvaWQgaW5QbGFj
ZUNoYW5nZVByZW11bHRpcGxpY2F0aW9uKHVpbnQ4X3QqIGJ5dGVEYXRhLCB1bnNpZ25lZCBieXRl
Q291bnQpCit7CisgICAgc2l6ZV90IHBpeGVsQ291bnQgPSBieXRlQ291bnQgLyA0OworCisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwaXhlbENvdW50OyArK2kpIHsKKyAgICAgICAgdW5zaWdu
ZWQgeCA9IHBpeGVsQ291bnQgKiA0OworCisgICAgICAgIHVuc2lnbmVkIHJlZCA9IGJ5dGVEYXRh
W3hdOworICAgICAgICB1bnNpZ25lZCBncmVlbiA9IGJ5dGVEYXRhW3ggKyAxXTsKKyAgICAgICAg
dW5zaWduZWQgYmx1ZSA9IGJ5dGVEYXRhW3ggKyAyXTsKKyAgICAgICAgdW5zaWduZWQgYWxwaGEg
PSBieXRlRGF0YVt4ICsgM107CisKKyAgICAgICAgaWYgKGRlc2lyZWRGb3JtYXQgPT0gQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkgeworICAgICAgICAgICAgaWYgKGFscGhh
ICE9IDI1NSkgeworICAgICAgICAgICAgICAgIHJlZCA9IChyZWQgKiBhbHBoYSArIDI1NCkgLyAy
NTU7CisgICAgICAgICAgICAgICAgZ3JlZW4gPSAoZ3JlZW4gKiBhbHBoYSArIDI1NCkgLyAyNTU7
CisgICAgICAgICAgICAgICAgYmx1ZSA9IChibHVlICogYWxwaGEgKyAyNTQpIC8gMjU1OworICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGFscGhhICYmIGFs
cGhhICE9IDI1NSkgeworICAgICAgICAgICAgICAgIHJlZCA9IHJlZCAqIDI1NSAvIGFscGhhOwor
ICAgICAgICAgICAgICAgIGdyZWVuID0gZ3JlZW4gKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgICAg
ICAgICBibHVlID0gYmx1ZSAqIDI1NSAvIGFscGhhOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgdWludDMyX3QqIHBpeGVsID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+
KGJ5dGVEYXRhKSArIGk7CisgICAgICAgICpwaXhlbCA9IChhbHBoYSA8PCAyNCkgfCByZWQgIDw8
IDE2IHwgZ3JlZW4gIDw8IDggfCBibHVlOworICAgIH0KK30KKworUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBk
ZXNpcmVkRm9ybWF0LCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiBzaXplLCBi
b29sIC8qIGFjY2VsZXJhdGVSZW5kZXJpbmcgKi8sIGZsb2F0IC8qIHJlc29sdXRpb25TY2FsZSAq
LykgY29uc3QKK3sKKyAgICBhdXRvIG51bUJ5dGVzID0gcmVjdC5hcmVhPFJlY29yZE92ZXJmbG93
PigpICogNDsKKyAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIGF1dG8gcmVzdWx0ID0gVWludDhDbGFtcGVkQXJyYXk6OnRyeUNy
ZWF0ZVVuaW5pdGlhbGl6ZWQobnVtQnl0ZXMudW5zYWZlR2V0KCkpOworICAgIGlmICghcmVzdWx0
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmICghYml0bWFwKQorICAgICAgICBy
ZXR1cm4gcmVzdWx0OworCisgICAgaWYgKCFyZWFkRGF0YUZyb21CaXRtYXBJZk5lZWRlZChkZXNp
cmVkRm9ybWF0KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHJhd0JpdG1h
cFNpemUgPSBiaXRtYXAtPkdldFNpemUoKTsKKyAgICBJbnRTaXplIGJpdG1hcFNpemUoY2xhbXBU
bzxpbnQ+KHJhd0JpdG1hcFNpemUud2lkdGgpLCBjbGFtcFRvPGludD4ocmF3Qml0bWFwU2l6ZS5o
ZWlnaHQpKTsKKworICAgIGlmIChyZWN0LmxvY2F0aW9uKCkgPT0gSW50UG9pbnQoKSAmJiByZWN0
LnNpemUoKSA9PSBiaXRtYXBTaXplKSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bUJ5dGVz
LnVuc2FmZUdldCgpID09IGRhdGEuc2l6ZSgpKTsKKyAgICAgICAgcmVzdWx0LT5zZXRSYW5nZShk
YXRhLmRhdGEoKSwgZGF0YS5zaXplKCksIDApOworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIE9u
bHkgd2FudCBwYXJ0IG9mIHRoZSBiaXRtYXAuCisgICAgICAgIGlmICghY29weVJlY3RGcm9tRGF0
YShyZWN0LCByZXN1bHQpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisg
ICAgaWYgKGJ5dGVGb3JtYXQgIT0gZGVzaXJlZEZvcm1hdCkgeworICAgICAgICAvLyBJbi1tZW1v
cnkgZGF0YSBkb2VzIG5vdCBtYXRjaCBkZXNpcmVkIGZvcm1hdC4gTmVlZCB0byBzd2l6emxlIHRo
ZSByZXN1bHRzLgorICAgICAgICBpZiAoZGVzaXJlZEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCisgICAgICAgICAgICBpblBsYWNlQ2hhbmdlUHJlbXVs
dGlwbGljYXRpb248QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkPihyZXN1
bHQtPmRhdGEoKSwgcmVzdWx0LT5sZW5ndGgoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGluUGxhY2VDaGFuZ2VQcmVtdWx0aXBsaWNhdGlvbjxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkPihyZXN1bHQtPmRhdGEoKSwgcmVzdWx0LT5sZW5ndGgoKSk7CisgICAgfQor
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBJbWFnZUJ1ZmZlckRhdGE6OnJlYWREYXRh
RnJvbUJpdG1hcElmTmVlZGVkKEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1hdCkg
Y29uc3QKK3sKKyAgICBpZiAoYml0bWFwQnVmZmVyU3luYyAhPSBCaXRtYXBCdWZmZXJTeW5jOjpC
dWZmZXJPdXRPZlN5bmMpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgSW50U2l6ZSBwaXhl
bFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOworCisgICAgYXV0byBudW1CeXRlcyA9IHBp
eGVsU2l6ZS5hcmVhPFJlY29yZE92ZXJmbG93PigpICogNDsKKyAgICBpZiAobnVtQnl0ZXMuaGFz
T3ZlcmZsb3dlZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb250ZXh0LT5lbmRE
cmF3KCk7CisKKyAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBkMmREZXZpY2VDb250ZXh0
KFF1ZXJ5LCBwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpKTsKKyAgICBBU1NFUlQoISFk
MmREZXZpY2VDb250ZXh0KTsKKworICAgIGF1dG8gYnl0ZXNQZXJSb3dJbkRhdGEgPSBwaXhlbFNp
emUud2lkdGgoKSAqIDQ7CisKKyAgICAvLyBDb3B5IEdQVSBkYXRhIGZyb20gdGhlIElEMkQxQml0
bWFwIHRvIGEgQ1BVLWJhY2tlZCBJRDJEMUJpdG1hcDEKKyAgICBDT01QdHI8SUQyRDFCaXRtYXAx
PiBjcHVCaXRtYXA7CisgICAgRDJEMV9CSVRNQVBfUFJPUEVSVElFUzEgYml0bWFwUHJvcGVydGll
czIgPSBEMkQxOjpCaXRtYXBQcm9wZXJ0aWVzMShEMkQxX0JJVE1BUF9PUFRJT05TX0NQVV9SRUFE
IHwgRDJEMV9CSVRNQVBfT1BUSU9OU19DQU5OT1RfRFJBVywgRGlyZWN0MkQ6OnBpeGVsRm9ybWF0
KCkpOworICAgIEhSRVNVTFQgaHIgPSBkMmREZXZpY2VDb250ZXh0LT5DcmVhdGVCaXRtYXAocGl4
ZWxTaXplLCBudWxscHRyLCBieXRlc1BlclJvd0luRGF0YSwgYml0bWFwUHJvcGVydGllczIsICZj
cHVCaXRtYXApOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgYXV0byB0YXJnZXRQb3MgPSBEMkQxOjpQb2ludDJVKCk7CisgICAgRDJEMV9SRUNU
X1UgZGF0YVJlY3QgPSBEMkQxOjpSZWN0VSgwLCAwLCBwaXhlbFNpemUud2lkdGgoKSwgcGl4ZWxT
aXplLmhlaWdodCgpKTsKKyAgICBociA9IGNwdUJpdG1hcC0+Q29weUZyb21CaXRtYXAoJnRhcmdl
dFBvcywgYml0bWFwLmdldCgpLCAmZGF0YVJlY3QpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgRDJEMV9NQVBQRURfUkVDVCBtYXBwZWREYXRh
OworICAgIGhyID0gY3B1Qml0bWFwLT5NYXAoRDJEMV9NQVBfT1BUSU9OU19SRUFELCAmbWFwcGVk
RGF0YSk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBpZiAoIW1hcHBlZERhdGEuYml0cykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKCFlbnN1cmVCYWNraW5nU3RvcmUocGl4ZWxTaXplKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gU29mdHdhcmUgZmlsdGVycyBleHBlY3QgUkdCQSBieXRlcy4gV2UgbmVlZCB0
byBzd2l6emxlIGZyb20gRGlyZWN0MkQncyBCR1JBIHRvIGJlIGNvbXBhdGlibGUuCisgICAgaWYg
KGRlc2lyZWRGb3JtYXQgPT0gQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCkK
KyAgICAgICAgc3dpenpsZUFuZFByZW11bHRpcGx5PEFscGhhUHJlbXVsdGlwbGljYXRpb246OlBy
ZW11bHRpcGxpZWQ+KG1hcHBlZERhdGEuYml0cywgcGl4ZWxTaXplLmhlaWdodCgpLCBwaXhlbFNp
emUud2lkdGgoKSwgbWFwcGVkRGF0YS5waXRjaCwgYnl0ZXNQZXJSb3dJbkRhdGEsIGRhdGEuZGF0
YSgpKTsKKyAgICBlbHNlCisgICAgICAgIHN3aXp6bGVBbmRQcmVtdWx0aXBseTxBbHBoYVByZW11
bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQ+KG1hcHBlZERhdGEuYml0cywgcGl4ZWxTaXpl
LmhlaWdodCgpLCBwaXhlbFNpemUud2lkdGgoKSwgbWFwcGVkRGF0YS5waXRjaCwgYnl0ZXNQZXJS
b3dJbkRhdGEsIGRhdGEuZGF0YSgpKTsKKworICAgIGJ5dGVGb3JtYXQgPSBkZXNpcmVkRm9ybWF0
OworCisgICAgYml0bWFwQnVmZmVyU3luYyA9IEJpdG1hcEJ1ZmZlclN5bmM6OkluU3luYzsKKwor
ICAgIGhyID0gY3B1Qml0bWFwLT5Vbm1hcCgpOworICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsK
KworICAgIGNvbnRleHQtPmJlZ2luRHJhdygpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKIHZv
aWQgSW1hZ2VCdWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiBzb3Vy
Y2UsIEFscGhhUHJlbXVsdGlwbGljYXRpb24gc291cmNlRm9ybWF0LCBjb25zdCBJbnRTaXplJiBz
b3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVz
dFBvaW50LCBjb25zdCBJbnRTaXplJiBzaXplLCBib29sIC8qIGFjY2VsZXJhdGVSZW5kZXJpbmcg
Ki8sIGZsb2F0IHJlc29sdXRpb25TY2FsZSkKIHsKICAgICBBU1NFUlQoc291cmNlUmVjdC53aWR0
aCgpID4gMCk7CkBAIC0yMjksMjIgKzM5MCw1MCBAQCB2b2lkIEltYWdlQnVmZmVyRGF0YTo6cHV0
RGF0YShjb25zdCBVaW50CiAgICAgICAgIHJldHVybjsKIAogI2lmICFBU1NFUlRfRElTQUJMRUQK
LSAgICBhdXRvIHBpeGVsU2l6ZSA9IGJpdG1hcC0+R2V0UGl4ZWxTaXplKCk7Ci0gICAgQVNTRVJU
KHBpeGVsU2l6ZS53aWR0aCA+PSBzb3VyY2VTaXplLndpZHRoKCkpOwotICAgIEFTU0VSVChwaXhl
bFNpemUud2lkdGggPj0gc2l6ZS53aWR0aCgpKTsKLSAgICBBU1NFUlQocGl4ZWxTaXplLmhlaWdo
dCA+PSBzb3VyY2VTaXplLmhlaWdodCgpKTsKLSAgICBBU1NFUlQocGl4ZWxTaXplLmhlaWdodCA+
PSBzaXplLmhlaWdodCgpKTsKKyAgICBpZiAoYml0bWFwKSB7CisgICAgICAgIGF1dG8gcGl4ZWxT
aXplID0gYml0bWFwLT5HZXRQaXhlbFNpemUoKTsKKyAgICAgICAgQVNTRVJUKHBpeGVsU2l6ZS53
aWR0aCA+PSBzb3VyY2VTaXplLndpZHRoKCkpOworICAgICAgICBBU1NFUlQocGl4ZWxTaXplLndp
ZHRoID49IHNpemUud2lkdGgoKSk7CisgICAgICAgIEFTU0VSVChwaXhlbFNpemUuaGVpZ2h0ID49
IHNvdXJjZVNpemUuaGVpZ2h0KCkpOworICAgICAgICBBU1NFUlQocGl4ZWxTaXplLmhlaWdodCA+
PSBzaXplLmhlaWdodCgpKTsKKyAgICB9CiAjZW5kaWYKIAogICAgIGlmICghZW5zdXJlQmFja2lu
Z1N0b3JlKHNpemUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBtZW1jcHkoZGF0YS5kYXRhKCks
IHNvdXJjZS5kYXRhKCksIHNvdXJjZS5sZW5ndGgoKSk7CisgICAgaWYgKHNvdXJjZVNpemUgPT0g
c2l6ZSkgeworICAgICAgICBtZW1jcHkoZGF0YS5kYXRhKCksIHNvdXJjZS5kYXRhKCksIHNvdXJj
ZS5sZW5ndGgoKSk7CisgICAgICAgIGJ5dGVGb3JtYXQgPSBzb3VyY2VGb3JtYXQ7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgcmVhZERhdGFGcm9tQml0bWFwSWZOZWVkZWQoYnl0ZUZvcm1hdCk7Cisg
ICAgICAgIGlmICghY29weVJlY3RGcm9tU291cmNlVG9EYXRhKHNvdXJjZVJlY3QsIHNvdXJjZSwg
c291cmNlRm9ybWF0KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICBieXRlRm9y
bWF0ID0gc291cmNlRm9ybWF0OwogICAgIGJpdG1hcEJ1ZmZlclN5bmMgPSBCaXRtYXBCdWZmZXJT
eW5jOjpCaXRtYXBPdXRPZlN5bmM7CiB9CiAKK2Jvb2wgSW1hZ2VCdWZmZXJEYXRhOjpjb3B5UmVj
dEZyb21Tb3VyY2VUb0RhdGEoY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgVWludDhD
bGFtcGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQp
Cit7CisgICAgSW50U2l6ZSBwaXhlbFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOworCisg
ICAgSW50UmVjdCBzb3VyY2VSZWN0VG9Db3B5ID0gc291cmNlUmVjdDsKKyAgICBpZiAoIUludFJl
Y3QoSW50UG9pbnQoKSwgcGl4ZWxTaXplKS5jb250YWlucyhzb3VyY2VSZWN0KSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgYXV0byBkZXN0QnVmZmVyUG9zaXRpb24gPSBzb3VyY2VSZWN0
LmxvY2F0aW9uKCk7CisKKyAgICBpZiAoc291cmNlRm9ybWF0ID09IGJ5dGVGb3JtYXQpCisgICAg
ICAgIHJldHVybiBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rlc3Qoc291cmNlUmVjdCwgc291cmNlUmVj
dC5zaXplKCksIHNvdXJjZS5kYXRhKCksIGJhY2tpbmdTdG9yZVNpemUsIGRhdGEuZGF0YSgpLCBk
ZXN0QnVmZmVyUG9zaXRpb24pOworCisgICAgaWYgKGJ5dGVGb3JtYXQgPT0gQWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkKQorICAgICAgICBjb3B5UmVjdEZyb21Tb3VyY2VU
b0Rlc3RBbmRTZXRQcmVtdWx0aXBsaWNhdGlvbjxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkPihzb3VyY2VSZWN0LCBzb3VyY2VSZWN0LnNpemUoKSwgc291cmNlLmRhdGEoKSwg
YmFja2luZ1N0b3JlU2l6ZSwgZGF0YS5kYXRhKCksIGRlc3RCdWZmZXJQb3NpdGlvbik7CisgICAg
ZWxzZQorICAgICAgICBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rlc3RBbmRTZXRQcmVtdWx0aXBsaWNh
dGlvbjxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQ+KHNvdXJjZVJlY3Qs
IHNvdXJjZVJlY3Quc2l6ZSgpLCBzb3VyY2UuZGF0YSgpLCBiYWNraW5nU3RvcmVTaXplLCBkYXRh
LmRhdGEoKSwgZGVzdEJ1ZmZlclBvc2l0aW9uKTsKK30KKworCiB2b2lkIEltYWdlQnVmZmVyRGF0
YTo6bG9hZERhdGFUb0JpdG1hcElmTmVlZGVkKCkKIHsKICAgICBpZiAoYml0bWFwQnVmZmVyU3lu
YyAhPSBCaXRtYXBCdWZmZXJTeW5jOjpCaXRtYXBPdXRPZlN5bmMgfHwgZGF0YS5pc0VtcHR5KCkp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJE
YXRhRGlyZWN0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaAkocmV2aXNpb24gMjQ5OTIzKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVj
dDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDkgQEAgc3RydWN0IEltYWdlQnVmZmVy
RGF0YSB7CiAKICAgICBib29sIGVuc3VyZUJhY2tpbmdTdG9yZShjb25zdCBJbnRTaXplJikgY29u
c3Q7CiAgICAgdm9pZCBsb2FkRGF0YVRvQml0bWFwSWZOZWVkZWQoKTsKKyAgICBib29sIHJlYWRE
YXRhRnJvbUJpdG1hcElmTmVlZGVkKEFscGhhUHJlbXVsdGlwbGljYXRpb24gZGVzaXJlZEZvcm1h
dCkgY29uc3Q7CisgICAgYm9vbCBjb3B5UmVjdEZyb21EYXRhKGNvbnN0IEludFJlY3QmLCBSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+JikgY29uc3Q7CisgICAgYm9vbCBjb3B5UmVjdEZyb21Tb3Vy
Y2VUb0RhdGEoY29uc3QgSW50UmVjdCYsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFycmF5JiwgQWxwaGFQ
cmVtdWx0aXBsaWNhdGlvbik7CiAgICAgdm9pZCBtYXJrQnVmZmVyT3V0T2ZTeW5jKCkgeyBiaXRt
YXBCdWZmZXJTeW5jID0gQml0bWFwQnVmZmVyU3luYzo6QnVmZmVyT3V0T2ZTeW5jOyB9CiB9Owog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJE
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
UGF0aERpcmVjdDJELmNwcAkocmV2aXNpb24gMjQ5OTIzKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
MSw4ICs0MDEsNiBAQCB2b2lkIFBhdGg6OmFkZEJlemllckN1cnZlVG8oY29uc3QgRmxvYXRQCiAK
IHZvaWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9p
bnQmIHAyLCBmbG9hdCByYWRpdXMpCiB7Ci0gICAgQVNTRVJUKG1fYWN0aXZlUGF0aC5nZXQoKSk7
Ci0KICAgICBGbG9hdFBvaW50IHAwID0gY3VycmVudFBvaW50KCk7CiAKICAgICBpZiAocDEgPT0g
cDAgfHwgcDEgPT0gcDIgfHwgV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHJhZGl1cywgMC4wZikp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI0OTkyMykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDE0ICs1MywyMyBAQCB2b2lkIFBsYXRm
b3JtQ29udGV4dERpcmVjdDJEOjpyZXN0b3JlKCkKIHsKICAgICBBU1NFUlQobV9yZW5kZXJUYXJn
ZXQpOwogCi0gICAgYXV0byByZXN0b3JlU3RhdGUgPSBtX3JlbmRlclN0YXRlcy50YWtlTGFzdCgp
OwotICAgIG1fcmVuZGVyVGFyZ2V0LT5SZXN0b3JlRHJhd2luZ1N0YXRlKHJlc3RvcmVTdGF0ZS5t
X2RyYXdpbmdTdGF0ZUJsb2NrLmdldCgpKTsKKyAgICAvLyBUaGVyZSBzaG91bGQgYWx3YXlzIGJl
IGF0IGxlYXN0IG9uZSBtYW51YWxseSBzYXZlZCBzdGF0ZSBpZiBhIHJlc3RvcmUgaXMgYmVpbmcg
Y2FsbGVkLgorICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6ZSgpID4gMSk7CiAKLSAgICBmb3Ig
KGF1dG8gY2xpcFR5cGUgPSByZXN0b3JlU3RhdGUubV9jbGlwcy5yYmVnaW4oKTsgY2xpcFR5cGUg
IT0gcmVzdG9yZVN0YXRlLm1fY2xpcHMucmVuZCgpOyArK2NsaXBUeXBlKSB7Ci0gICAgICAgIGlm
ICgqY2xpcFR5cGUgPT0gQXhpc0FsaWduZWRDbGlwKQotICAgICAgICAgICAgbV9yZW5kZXJUYXJn
ZXQtPlBvcEF4aXNBbGlnbmVkQ2xpcCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3Jl
bmRlclRhcmdldC0+UG9wTGF5ZXIoKTsKKyAgICAvLyBDYW4ndCByZXN0b3JlIGlmIHdlIG5ldmVy
IGNhbGxlZCBzYXZlLgorICAgIGlmIChtX3N0YXRlU3RhY2suc2l6ZSgpID09IDEpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghbV9yZW5kZXJTdGF0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAg
IGF1dG8gcmVzdG9yZVN0YXRlID0gbV9yZW5kZXJTdGF0ZXMudGFrZUxhc3QoKTsKKyAgICAgICAg
bV9yZW5kZXJUYXJnZXQtPlJlc3RvcmVEcmF3aW5nU3RhdGUocmVzdG9yZVN0YXRlLm1fZHJhd2lu
Z1N0YXRlQmxvY2suZ2V0KCkpOworCisgICAgICAgIGZvciAoYXV0byBjbGlwVHlwZSA9IHJlc3Rv
cmVTdGF0ZS5tX2NsaXBzLnJiZWdpbigpOyBjbGlwVHlwZSAhPSByZXN0b3JlU3RhdGUubV9jbGlw
cy5yZW5kKCk7ICsrY2xpcFR5cGUpIHsKKyAgICAgICAgICAgIGlmICgqY2xpcFR5cGUgPT0gQXhp
c0FsaWduZWRDbGlwKQorICAgICAgICAgICAgICAgIG1fcmVuZGVyVGFyZ2V0LT5Qb3BBeGlzQWxp
Z25lZENsaXAoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3JlbmRlclRh
cmdldC0+UG9wTGF5ZXIoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIG1fc3RhdGVTdGFjay5y
ZW1vdmVMYXN0KCk7CkBAIC03Miw2ICs4MSw3IEBAIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjp+
UGxhdGZvcm1Db250ZXgKIAogdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2F2ZSgpCiB7
CisgICAgQVNTRVJUKG1fc3RhdGVTdGFjay5zaXplKCkgPj0gMSk7IC8vIFRoZXJlIHNob3VsZCBh
bHdheXMgYmUgb25lIHN0YXRlIG9uIHRoZSBzdGFjay4KICAgICBBU1NFUlQobV9yZW5kZXJUYXJn
ZXQpOwogCiAgICAgbV9zdGF0ZVN0YWNrLmFwcGVuZChTdGF0ZSgpKTsKQEAgLTI1Myw2ICsyNjMs
MTIgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6YmVnaW5EcmF3KAogdm9pZCBQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRDo6ZW5kRHJhdygpCiB7CiAgICAgQVNTRVJUKG1fcmVuZGVyVGFy
Z2V0KTsKKworICAgIHdoaWxlICghbV9yZW5kZXJTdGF0ZXMuaXNFbXB0eSgpKQorICAgICAgICBy
ZXN0b3JlKCk7CisKKyAgICBBU1NFUlQobV9zdGF0ZVN0YWNrLnNpemUoKSA+PSAxKTsKKwogICAg
IEQyRDFfVEFHIGZpcnN0LCBzZWNvbmQ7CiAgICAgSFJFU1VMVCBociA9IG1fcmVuZGVyVGFyZ2V0
LT5FbmREcmF3KCZmaXJzdCwgJnNlY29uZCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379100</attachid>
            <date>2019-09-18 20:58:36 -0700</date>
            <delta_ts>2019-09-18 21:53:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201862-20190918205832.patch</filename>
            <type>text/plain</type>
            <size>23583</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0OTk0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM4IEBACisyMDE5LTA5LTE2ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtGVFddIENvcnJlY3QgSW1h
Z2VCdWZmZXJEYXRhIGFuZCBjbGVhciBvcGVyYXRpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDE4NjIKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGNvcnJlY3RzIHNldmVyYWwgcHJv
YmxlbXMgaW4gdGhlIGNhbnZhcyBpbXBsZW1lbnRhdGlvbjoKKyAgICAgICAgMS4gVGhlIGltcGxl
bWVudGF0aW9uIG9mIEltYWdlQnVmZmVyRGF0YURpcmVjdDJEIGRpZCBub3QgcHJvcGVybHkgaGFu
ZGxlIHRoZSBjYXNlIG9mIGEKKyAgICAgICAgICAgJ2dldERhdGEnIHJlcXVlc3QgZm9yIGxlc3Mg
dGhhbiB0aGUgc2l6ZSBvZiB0aGUgZnVsbCBiaXRtYXAuCisgICAgICAgIDIuIFRoZSBpbXBsZW1l
bnRhdGlvbiBvZiAnQ2xlYXInIHdhcyBub3QgY29ycmVjdCB3aGVuIHRoZSBzaXplIG9mIHRoZSBy
ZWdpb24gdG8gYmUKKyAgICAgICAgICAgY2xlYXJlZCBpcyBsZXNzIHRoYW4gdGhlIHNpemUgb2Yg
dGhlIHJlbmRlciB0YXJnZXQuCisgICAgICAgIDMuICdlbmREcmF3JyBmYWlscyBpZiBhbnkgY2xp
cCByZWdpb25zIGFyZSBhY3RpdmUgYXQgdGhlIGVuZCBvZiB0aGUgb3BlcmF0aW9uLiBUaGUKKyAg
ICAgICAgICAgc3RhY2sgbmVlZHMgdG8gYmUgdW53b3VuZCB3aGVuIGVuZERyYXcgaXMgY2FsbGVk
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggY29ycmVjdHMgYWxsIHRocmVlIHByb2JsZW1zLgorCisg
ICAgICAgIFRlc3RlZCBieSBjYW52YXMgTGF5b3V0VGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRpcmVjdDJEOjpjbGVhclJlY3QpOiBDb3JyZWN0IHBhcnRpYWwgcmVuZGVyIHRhcmdldCBjYXNl
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3Qy
RC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRhdGE6OmdldERhdGEgY29uc3Qp
OiBDb3JyZWN0IHBhcnRpYWwgYnVmZmVyIGNhc2UuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlckRhdGE6OnB1dERhdGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
RGF0YTo6cmVhZERhdGFGcm9tQml0bWFwSWZOZWVkZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OmNvcHlSZWN0RnJvbVNvdXJjZVRvRGVzdCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
SW1hZ2VCdWZmZXJEYXRhOjpjb3B5UmVjdEZyb21Tb3VyY2VUb0RhdGEpOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OmVuZERyYXcpOiBDb3Jy
ZWN0IGZhaWx1cmVzIGNhdXNlZCBieQorICAgICAgICBkYW5nbGluZyBjbGlwIHJlZ2lvbnMgd2hl
biAnZW5kRHJhdycgaXMgY2FsbGVkLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQ6OmZsdXNoKTogRG9uJ3QgY2FsbCBwb3N0LWRyYXcgb2JzZXJ2ZXI7CisgICAgICAg
IHRoaXMgaXMgYWxyZWFkeSBoYW5kbGVkIGluIHRoZSBkcmF3IG9wZXJhdGlvbnMsIGFuZCBlbmRE
cmF3LgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnJlc3RvcmUp
OiBSZWNvZ25pemUgdGhhdCB0aGUgY2xpcAorICAgICAgICBhbmQgdHJhbnNwYXJlbmN5IHN0YWNr
IG1pZ2h0IGJlIGVtcHR5IHdoZW4gcmVzdG9yZSBpcyBjYWxsZWQuCisKIDIwMTktMDktMTYgIEZ1
amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW1dpbkNh
aXJvXVtjdXJsXSBEb24ndCBjb21waWxlIHVudXNlZCBDZXJ0aWZpY2F0ZUNGV2luLmNwcApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0RpcmVjdDJET3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDI0OTkyMykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02NjcsOSArNjY3LDEyIEBAIHZvaWQgY2xlYXJSZWN0KFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJgogICAgICAgICBpZiAoIXJlY3RUb0NsZWFyLmludGVyc2VjdHMocmVuZGVyVGFy
Z2V0UmVjdCkpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0
LnNldFRhZ3MoMSwgX19MSU5FX18pOwogICAgICAgICByZWN0VG9DbGVhci5pbnRlcnNlY3QocmVu
ZGVyVGFyZ2V0UmVjdCk7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+RmlsbFJlY3RhbmdsZShyZWN0
VG9DbGVhciwgcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENvbG9yKENvbG9yKEQyRDE6OkNvbG9y
RigwLCAwLCAwLCAwKSkpLmdldCgpKTsKKworICAgICAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFn
cygxLCBfX0xJTkVfXyk7CisgICAgICAgIHJlbmRlclRhcmdldC0+UHVzaEF4aXNBbGlnbmVkQ2xp
cChyZWN0VG9DbGVhciwgRDJEMV9BTlRJQUxJQVNfTU9ERV9QRVJfUFJJTUlUSVZFKTsKKyAgICAg
ICAgcmVuZGVyVGFyZ2V0LT5DbGVhcihEMkQxOjpDb2xvckYoMCwgMCwgMCwgMCkpOworICAgICAg
ICByZW5kZXJUYXJnZXQtPlBvcEF4aXNBbGlnbmVkQ2xpcCgpOwogICAgIH0pOwogfQogCkBAIC02
NzksNyArNjgyLDcgQEAgdm9pZCBkcmF3R2x5cGhzKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJgog
ICAgIGF1dG8gcmVuZGVyVGFyZ2V0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwog
ICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQucGxhdGZvcm1E
YXRhKCk7CiAKLSAgICBwbGF0Zm9ybUNvbnRleHQuc2F2ZSgpOworICAgIFBsYXRmb3JtQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihwbGF0Zm9ybUNvbnRleHQpOwogCiAgICAgRDJEMV9NQVRS
SVhfM1gyX0YgbWF0cml4OwogICAgIHJlbmRlclRhcmdldC0+R2V0VHJhbnNmb3JtKCZtYXRyaXgp
OwpAQCAtNzM3LDcgKzc0MCw3IEBAIHZvaWQgZHJhd0dseXBocyhQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCYKICAgICAvLyBpZiAoaGFzU2ltcGxlU2hhZG93KQogICAgIC8vICAgICBncmFwaGljc0Nv
bnRleHQuc2V0U2hhZG93KHNoYWRvd09mZnNldCwgc2hhZG93Qmx1ciwgc2hhZG93Q29sb3IpOwog
Ci0gICAgcGxhdGZvcm1Db250ZXh0LnJlc3RvcmUoKTsKKyAgICBzdGF0ZVNhdmVyLnJlc3RvcmUo
KTsKICAgICBwbGF0Zm9ybUNvbnRleHQubm90aWZ5UG9zdERyYXdPYnNlcnZlcigpOwogfQogCkBA
IC05OTEsNyArOTk0LDYgQEAgdm9pZCBmbHVzaChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxh
dAogICAgIEFTU0VSVChwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCkpOwogICAgIEQyRDFf
VEFHIGZpcnN0LCBzZWNvbmQ7CiAgICAgSFJFU1VMVCBociA9IHBsYXRmb3JtQ29udGV4dC5yZW5k
ZXJUYXJnZXQoKS0+Rmx1c2goJmZpcnN0LCAmc2Vjb25kKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQu
bm90aWZ5UG9zdERyYXdPYnNlcnZlcigpOwogCiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVE
KGhyKSk7CiB9CkBAIC0xMTY2LDEzICsxMTY4LDggQEAgdm9pZCBjbGlwUGF0aChQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCYgcAogCiB2b2lkIGNsaXBQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
JiBwbGF0Zm9ybUNvbnRleHQsIElEMkQxR2VvbWV0cnkqIHBhdGgpCiB7Ci0gICAgQVNTRVJUKHBs
YXRmb3JtQ29udGV4dC5oYXNTYXZlZFN0YXRlKCkpOwotICAgIGlmICghcGxhdGZvcm1Db250ZXh0
Lmhhc1NhdmVkU3RhdGUoKSkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgQ09NUHRyPElEMkQxTGF5
ZXI+IGNsaXBMYXllcjsKICAgICBIUkVTVUxUIGhyID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRh
cmdldCgpLT5DcmVhdGVMYXllcigmY2xpcExheWVyKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhy
KSk7CiAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3Qy
RC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcAkocmV2aXNpb24gMjQ5OTIzKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTc5LDg1ICs3OSwxMTQgQEAgdm9pZCBzd2l6emxlQW5kUHJl
bXVsdGlwbHkoY29uc3QgdWludDhfdAogICAgIH0KIH0KIAotYm9vbCBJbWFnZUJ1ZmZlckRhdGE6
OmVuc3VyZUJhY2tpbmdTdG9yZShjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdAorc3RhdGljIGJv
b2wgY29weVJlY3RGcm9tU291cmNlVG9EZXN0KGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNv
bnN0IEludFNpemUmIHNvdXJjZUJ1ZmZlclNpemUsIGNvbnN0IHVpbnQ4X3QqIHNvdXJjZSwgY29u
c3QgSW50U2l6ZSYgZGVzdEJ1ZmZlclNpemUsIHVpbnQ4X3QqIGRlc3QsIGNvbnN0IEludFBvaW50
JiBkZXN0QnVmZmVyUG9zaXRpb24pCiB7Ci0gICAgaWYgKHNpemUgPT0gYmFja2luZ1N0b3JlU2l6
ZSAmJiAhZGF0YS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICghSW50
UmVjdCh7IH0sIGRlc3RCdWZmZXJTaXplKS5jb250YWlucyhJbnRSZWN0KGRlc3RCdWZmZXJQb3Np
dGlvbiwgc291cmNlUmVjdC5zaXplKCkpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
YXV0byBudW1CeXRlcyA9IHNpemUuYXJlYTxSZWNvcmRPdmVyZmxvdz4oKSAqIDQ7Ci0gICAgaWYg
KG51bUJ5dGVzLmhhc092ZXJmbG93ZWQoKSkKKyAgICBpZiAoIUludFJlY3QoeyB9LCBzb3VyY2VC
dWZmZXJTaXplKS5jb250YWlucyhzb3VyY2VSZWN0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
Ci0gICAgYmFja2luZ1N0b3JlU2l6ZSA9IHNpemU7Ci0gICAgZGF0YS5yZXNpemVUb0ZpdChudW1C
eXRlcy51bnNhZmVHZXQoKSk7Ci0gICAgcmV0dXJuIGRhdGEuY2FwYWNpdHkoKSA9PSBudW1CeXRl
cy51bnNhZmVHZXQoKTsKKyAgICB1bnNpZ25lZCBzcmNTdHJpZGUgPSBzb3VyY2VCdWZmZXJTaXpl
LndpZHRoKCkgKiA0OworICAgIHVuc2lnbmVkIGRlc3RTdHJpZGUgPSBkZXN0QnVmZmVyU2l6ZS53
aWR0aCgpICogNDsKKworICAgIHVuc2lnbmVkIHNyY1Jvd09mZnNldCA9IHNvdXJjZVJlY3QubG9j
YXRpb24oKS54KCkgKiA0OworICAgIHVuc2lnbmVkIGRlc3RSb3dPZmZzZXQgPSBkZXN0QnVmZmVy
UG9zaXRpb24ueCgpICogNDsKKworICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1Jvd3MgPSBzb3VyY2Ug
KyBzcmNTdHJpZGUgKiBzb3VyY2VSZWN0LmxvY2F0aW9uKCkueSgpOworICAgIHVpbnQ4X3QqIGRl
c3RSb3dzID0gZGVzdCArIGRlc3RTdHJpZGUgKiBkZXN0QnVmZmVyUG9zaXRpb24ueSgpOworCisg
ICAgY29uc3QgdW5zaWduZWQgYnl0ZXNQZXJSb3cgPSBzb3VyY2VSZWN0LndpZHRoKCkgKiA0Owor
ICAgIGZvciAodW5zaWduZWQgeSA9IDA7IHkgPCBzb3VyY2VSZWN0LmhlaWdodCgpOyArK3kpIHsK
KyAgICAgICAgY29uc3QgdWludDhfdCogc3JjUm93ID0gc3JjUm93cyArIHNyY1N0cmlkZSAqIHkg
KyBzcmNSb3dPZmZzZXQ7CisgICAgICAgIHVpbnQ4X3QqIGRlc3RSb3cgPSBkZXN0Um93cyArIGRl
c3RTdHJpZGUgKiB5ICsgZGVzdFJvd09mZnNldDsKKyAgICAgICAgbWVtY3B5KGRlc3RSb3csIHNy
Y1JvdywgYnl0ZXNQZXJSb3cpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOwogfQogCi1SZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IElu
dFNpemUmIHNpemUsIGJvb2wgLyogYWNjZWxlcmF0ZVJlbmRlcmluZyAqLywgZmxvYXQgLyogcmVz
b2x1dGlvblNjYWxlICovKSBjb25zdAorLy8gTm90ZTogQXNzdW1lcyB0aGF0IGJ5dGVzIGFyZSBh
bHJlYWR5IGluIFJHQkEgZm9ybWF0Cit0ZW1wbGF0ZSA8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBk
ZXNpcmVkRm9ybWF0PgorYm9vbCBjb3B5UmVjdEZyb21Tb3VyY2VUb0Rlc3RBbmRTZXRQcmVtdWx0
aXBsaWNhdGlvbihjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRTaXplJiBzb3Vy
Y2VCdWZmZXJTaXplLCBjb25zdCB1aW50OF90KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIGRlc3RC
dWZmZXJTaXplLCB1aW50OF90KiBkZXN0LCBjb25zdCBJbnRQb2ludCYgZGVzdEJ1ZmZlclBvc2l0
aW9uKQogewotICAgIGF1dG8gbnVtQnl0ZXMgPSByZWN0LmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkg
KiA0OwotICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIGlmICghSW50UmVjdCh7IH0sIGRlc3RCdWZmZXJTaXplKS5jb250YWlucyhJ
bnRSZWN0KGRlc3RCdWZmZXJQb3NpdGlvbiwgc291cmNlUmVjdC5zaXplKCkpKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1wZWRBcnJheTo6dHJ5
Q3JlYXRlVW5pbml0aWFsaXplZChudW1CeXRlcy51bnNhZmVHZXQoKSk7Ci0gICAgaWYgKCFyZXN1
bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICghSW50UmVjdCh7IH0sIHNvdXJj
ZUJ1ZmZlclNpemUpLmNvbnRhaW5zKHNvdXJjZVJlY3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBpZiAoIWJpdG1hcCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB1bnNpZ25l
ZCBzcmNTdHJpZGUgPSBzb3VyY2VCdWZmZXJTaXplLndpZHRoKCkgKiA0OworICAgIHVuc2lnbmVk
IGRlc3RTdHJpZGUgPSBkZXN0QnVmZmVyU2l6ZS53aWR0aCgpICogNDsKIAotICAgIGF1dG8gYnl0
ZXNQZXJSb3dJbkRhdGEgPSByZWN0LndpZHRoKCkgKiA0OwotICAgIGF1dG8gaGVpZ2h0ID0gcmVj
dC5oZWlnaHQoKTsKLSAgICBhdXRvIHdpZHRoID0gcmVjdC53aWR0aCgpOwotCi0gICAgaWYgKGJp
dG1hcEJ1ZmZlclN5bmMgPT0gQml0bWFwQnVmZmVyU3luYzo6QnVmZmVyT3V0T2ZTeW5jIHx8IGRh
dGEuc2l6ZSgpICE9IG51bUJ5dGVzLnVuc2FmZUdldCgpKSB7Ci0gICAgICAgIGNvbnRleHQtPmVu
ZERyYXcoKTsKLQotICAgICAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBkMmREZXZpY2VD
b250ZXh0KFF1ZXJ5LCBwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpKTsKLSAgICAgICAg
QVNTRVJUKCEhZDJkRGV2aWNlQ29udGV4dCk7Ci0KLSAgICAgICAgLy8gQ29weSBHUFUgZGF0YSBm
cm9tIHRoZSBJRDJEMUJpdG1hcCB0byBhIENQVS1iYWNrZWQgSUQyRDFCaXRtYXAxCi0gICAgICAg
IENPTVB0cjxJRDJEMUJpdG1hcDE+IGNwdUJpdG1hcDsKLSAgICAgICAgRDJEMV9CSVRNQVBfUFJP
UEVSVElFUzEgYml0bWFwUHJvcGVydGllczIgPSBEMkQxOjpCaXRtYXBQcm9wZXJ0aWVzMShEMkQx
X0JJVE1BUF9PUFRJT05TX0NQVV9SRUFEIHwgRDJEMV9CSVRNQVBfT1BUSU9OU19DQU5OT1RfRFJB
VywgRGlyZWN0MkQ6OnBpeGVsRm9ybWF0KCkpOwotICAgICAgICBIUkVTVUxUIGhyID0gZDJkRGV2
aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFwKHNpemUsIG51bGxwdHIsIGJ5dGVzUGVyUm93SW5EYXRh
LCBiaXRtYXBQcm9wZXJ0aWVzMiwgJmNwdUJpdG1hcCk7Ci0gICAgICAgIGlmICghU1VDQ0VFREVE
KGhyKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHVuc2lnbmVkIHNyY1Jvd09m
ZnNldCA9IHNvdXJjZVJlY3QubG9jYXRpb24oKS54KCkgKiA0OworICAgIHVuc2lnbmVkIGRlc3RS
b3dPZmZzZXQgPSBkZXN0QnVmZmVyUG9zaXRpb24ueCgpICogNDsKIAotICAgICAgICBhdXRvIHRh
cmdldFBvcyA9IEQyRDE6OlBvaW50MlUoKTsKLSAgICAgICAgRDJEMV9SRUNUX1UgZGF0YVJlY3Qg
PSByZWN0OwotICAgICAgICBociA9IGNwdUJpdG1hcC0+Q29weUZyb21CaXRtYXAoJnRhcmdldFBv
cywgYml0bWFwLmdldCgpLCAmZGF0YVJlY3QpOwotICAgICAgICBpZiAoIVNVQ0NFRURFRChocikp
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBjb25zdCB1aW50OF90KiBzcmNSb3dz
ID0gc291cmNlICsgc3JjU3RyaWRlICogc291cmNlUmVjdC5sb2NhdGlvbigpLnkoKTsKKyAgICB1
aW50OF90KiBkZXN0Um93cyA9IGRlc3QgKyBkZXN0U3RyaWRlICogZGVzdEJ1ZmZlclBvc2l0aW9u
LnkoKTsKIAotICAgICAgICBEMkQxX01BUFBFRF9SRUNUIG1hcHBlZERhdGE7Ci0gICAgICAgIGhy
ID0gY3B1Qml0bWFwLT5NYXAoRDJEMV9NQVBfT1BUSU9OU19SRUFELCAmbWFwcGVkRGF0YSk7Ci0g
ICAgICAgIGlmICghU1VDQ0VFREVEKGhyKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIGNvbnN0IHVuc2lnbmVkIGJ5dGVzUGVyUm93ID0gc291cmNlUmVjdC53aWR0aCgpICogNDsK
KyAgICBmb3IgKHVuc2lnbmVkIHkgPSAwOyB5IDwgc291cmNlUmVjdC5oZWlnaHQoKTsgKyt5KSB7
CisgICAgICAgIGNvbnN0IHVpbnQ4X3QqIHNyY1JvdyA9IHNyY1Jvd3MgKyBzcmNTdHJpZGUgKiB5
ICsgc3JjUm93T2Zmc2V0OworICAgICAgICB1aW50OF90KiBkZXN0Um93ID0gZGVzdFJvd3MgKyBk
ZXN0U3RyaWRlICogeSArIGRlc3RSb3dPZmZzZXQ7CisKKyAgICAgICAgZm9yIChzaXplX3QgeCA9
IDA7IHggPCBzb3VyY2VSZWN0LndpZHRoKCk7ICsreCkgeworICAgICAgICAgICAgdW5zaWduZWQg
cG9zID0geCAqIDQ7CisKKyAgICAgICAgICAgIHVuc2lnbmVkIHJlZCA9IHNyY1Jvd1t4XTsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGdyZWVuID0gc3JjUm93W3ggKyAxXTsKKyAgICAgICAgICAgIHVu
c2lnbmVkIGJsdWUgPSBzcmNSb3dbeCArIDJdOworICAgICAgICAgICAgdW5zaWduZWQgYWxwaGEg
PSBzcmNSb3dbeCArIDNdOworCisgICAgICAgICAgICBpZiAoZGVzaXJlZEZvcm1hdCA9PSBBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSB7CisgICAgICAgICAgICAgICAgaWYg
KGFscGhhICE9IDI1NSkgeworICAgICAgICAgICAgICAgICAgICByZWQgPSAocmVkICogYWxwaGEg
KyAyNTQpIC8gMjU1OworICAgICAgICAgICAgICAgICAgICBncmVlbiA9IChncmVlbiAqIGFscGhh
ICsgMjU0KSAvIDI1NTsKKyAgICAgICAgICAgICAgICAgICAgYmx1ZSA9IChibHVlICogYWxwaGEg
KyAyNTQpIC8gMjU1OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGFscGhhICYmIGFscGhhICE9IDI1NSkgeworICAgICAgICAgICAg
ICAgICAgICByZWQgPSByZWQgKiAyNTUgLyBhbHBoYTsKKyAgICAgICAgICAgICAgICAgICAgZ3Jl
ZW4gPSBncmVlbiAqIDI1NSAvIGFscGhhOworICAgICAgICAgICAgICAgICAgICBibHVlID0gYmx1
ZSAqIDI1NSAvIGFscGhhOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KIAotICAg
ICAgICBpZiAobWFwcGVkRGF0YS5iaXRzKSB7Ci0gICAgICAgICAgICBpZiAoIWVuc3VyZUJhY2tp
bmdTdG9yZShiaXRtYXAtPkdldFBpeGVsU2l6ZSgpKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgICAgICAgICAgLy8gU29mdHdhcmUgZmlsdGVycyBleHBlY3QgUkdCQSBi
eXRlcy4gV2UgbmVlZCB0byBzd2l6emxlIGZyb20gRGlyZWN0MkQncyBCR1JBIHRvIGJlIGNvbXBh
dGlibGUuCi0gICAgICAgICAgICBpZiAoZGVzaXJlZEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxp
Y2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCi0gICAgICAgICAgICAgICAgc3dpenpsZUFuZFByZW11
bHRpcGx5PEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZD4obWFwcGVkRGF0
YS5iaXRzLCBoZWlnaHQsIHdpZHRoLCBtYXBwZWREYXRhLnBpdGNoLCBieXRlc1BlclJvd0luRGF0
YSwgZGF0YS5kYXRhKCkpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN3aXp6
bGVBbmRQcmVtdWx0aXBseTxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkPiht
YXBwZWREYXRhLmJpdHMsIGhlaWdodCwgd2lkdGgsIG1hcHBlZERhdGEucGl0Y2gsIGJ5dGVzUGVy
Um93SW5EYXRhLCBkYXRhLmRhdGEoKSk7CisgICAgICAgICAgICB1aW50MzJfdCogcGl4ZWwgPSBy
ZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvdykgKyB4OworICAgICAgICAgICAgKnBp
eGVsID0gKGFscGhhIDw8IDI0KSB8IHJlZCAgPDwgMTYgfCBncmVlbiAgPDwgOCB8IGJsdWU7Cisg
ICAgICAgIH0KKyAgICB9CiAKLSAgICAgICAgICAgIGJ5dGVGb3JtYXQgPSBkZXNpcmVkRm9ybWF0
OworICAgIHJldHVybiB0cnVlOworfQogCi0gICAgICAgICAgICBiaXRtYXBCdWZmZXJTeW5jID0g
Qml0bWFwQnVmZmVyU3luYzo6SW5TeW5jOwotICAgICAgICB9Citib29sIEltYWdlQnVmZmVyRGF0
YTo6Y29weVJlY3RGcm9tRGF0YShjb25zdCBJbnRSZWN0JiByZWN0LCBSZWZQdHI8VWludDhDbGFt
cGVkQXJyYXk+JiByZXN1bHQpIGNvbnN0Cit7CisgICAgYXV0byByYXdCaXRtYXBTaXplID0gYml0
bWFwLT5HZXRTaXplKCk7CiAKLSAgICAgICAgaHIgPSBjcHVCaXRtYXAtPlVubWFwKCk7Ci0gICAg
ICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICBmbG9hdCBzY2FsZUZhY3RvciA9IGJhY2tp
bmdTdG9yZVNpemUud2lkdGgoKSAvIHJhd0JpdG1hcFNpemUud2lkdGg7CiAKLSAgICAgICAgY29u
dGV4dC0+YmVnaW5EcmF3KCk7Ci0gICAgfQorICAgIEludFJlY3Qgc2NhbGVkUmVjdCA9IHJlY3Q7
CisgICAgc2NhbGVkUmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7CiAKLSAgICByZXN1bHQtPnNldFJh
bmdlKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgMCk7CisgICAgaWYgKCFJbnRSZWN0KEludFBv
aW50KCksIGJhY2tpbmdTdG9yZVNpemUpLmNvbnRhaW5zKHNjYWxlZFJlY3QpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBjb3B5UmVjdEZy
b21Tb3VyY2VUb0Rlc3Qoc2NhbGVkUmVjdCwgYmFja2luZ1N0b3JlU2l6ZSwgZGF0YS5kYXRhKCks
IHJlY3Quc2l6ZSgpLCByZXN1bHQtPmRhdGEoKSwgSW50UG9pbnQoKSk7Cit9CisKK2Jvb2wgSW1h
Z2VCdWZmZXJEYXRhOjplbnN1cmVCYWNraW5nU3RvcmUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29u
c3QKK3sKKyAgICBpZiAoc2l6ZSA9PSBiYWNraW5nU3RvcmVTaXplICYmICFkYXRhLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBhdXRvIG51bUJ5dGVzID0gc2l6ZS5hcmVh
PFJlY29yZE92ZXJmbG93PigpICogNDsKKyAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBiYWNraW5nU3RvcmVTaXplID0gc2l6ZTsK
KyAgICBkYXRhLnJlc2l6ZVRvRml0KG51bUJ5dGVzLnVuc2FmZUdldCgpKTsKKyAgICByZXR1cm4g
ZGF0YS5jYXBhY2l0eSgpID09IG51bUJ5dGVzLnVuc2FmZUdldCgpOwogfQogCiAvLyBTd2l6emxl
IHRoZSByZWQgYW5kIGJsdWUgYnl0ZXMgb2YgdGhlIHBpeGVscyBpbiBhIGJ1ZmZlcgpAQCAtMTkw
LDYgKzIxOSwxMzggQEAgdm9pZCBpblBsYWNlU3dpenpsZSh1aW50OF90KiBieXRlRGF0YSwgdQog
ICAgIH0KIH0KIAorLy8gTm90ZTogQXNzdW1lcyB0aGF0IGJ5dGVzIGFyZSBhbHJlYWR5IGluIFJH
QkEgZm9ybWF0Cit0ZW1wbGF0ZSA8QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBkZXNpcmVkRm9ybWF0
Pgordm9pZCBpblBsYWNlQ2hhbmdlUHJlbXVsdGlwbGljYXRpb24odWludDhfdCogYnl0ZURhdGEs
IHVuc2lnbmVkIGJ5dGVDb3VudCkKK3sKKyAgICBzaXplX3QgcGl4ZWxDb3VudCA9IGJ5dGVDb3Vu
dCAvIDQ7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBpeGVsQ291bnQ7ICsraSkgewor
ICAgICAgICB1bnNpZ25lZCB4ID0gcGl4ZWxDb3VudCAqIDQ7CisKKyAgICAgICAgdW5zaWduZWQg
cmVkID0gYnl0ZURhdGFbeF07CisgICAgICAgIHVuc2lnbmVkIGdyZWVuID0gYnl0ZURhdGFbeCAr
IDFdOworICAgICAgICB1bnNpZ25lZCBibHVlID0gYnl0ZURhdGFbeCArIDJdOworICAgICAgICB1
bnNpZ25lZCBhbHBoYSA9IGJ5dGVEYXRhW3ggKyAzXTsKKworICAgICAgICBpZiAoZGVzaXJlZEZv
cm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVtdWx0aXBsaWVkKSB7CisgICAgICAg
ICAgICBpZiAoYWxwaGEgIT0gMjU1KSB7CisgICAgICAgICAgICAgICAgcmVkID0gKHJlZCAqIGFs
cGhhICsgMjU0KSAvIDI1NTsKKyAgICAgICAgICAgICAgICBncmVlbiA9IChncmVlbiAqIGFscGhh
ICsgMjU0KSAvIDI1NTsKKyAgICAgICAgICAgICAgICBibHVlID0gKGJsdWUgKiBhbHBoYSArIDI1
NCkgLyAyNTU7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBp
ZiAoYWxwaGEgJiYgYWxwaGEgIT0gMjU1KSB7CisgICAgICAgICAgICAgICAgcmVkID0gcmVkICog
MjU1IC8gYWxwaGE7CisgICAgICAgICAgICAgICAgZ3JlZW4gPSBncmVlbiAqIDI1NSAvIGFscGhh
OworICAgICAgICAgICAgICAgIGJsdWUgPSBibHVlICogMjU1IC8gYWxwaGE7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICB1aW50MzJfdCogcGl4ZWwgPSByZWludGVycHJldF9j
YXN0PHVpbnQzMl90Kj4oYnl0ZURhdGEpICsgaTsKKyAgICAgICAgKnBpeGVsID0gKGFscGhhIDw8
IDI0KSB8IHJlZCAgPDwgMTYgfCBncmVlbiAgPDwgOCB8IGJsdWU7CisgICAgfQorfQorCitSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IEltYWdlQnVmZmVyRGF0YTo6Z2V0RGF0YShBbHBoYVByZW11
bHRpcGxpY2F0aW9uIGRlc2lyZWRGb3JtYXQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IElu
dFNpemUmIHNpemUsIGJvb2wgLyogYWNjZWxlcmF0ZVJlbmRlcmluZyAqLywgZmxvYXQgLyogcmVz
b2x1dGlvblNjYWxlICovKSBjb25zdAoreworICAgIGF1dG8gbnVtQnl0ZXMgPSByZWN0LmFyZWE8
UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OworICAgIGlmIChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byByZXN1bHQgPSBVaW50OENsYW1w
ZWRBcnJheTo6dHJ5Q3JlYXRlVW5pbml0aWFsaXplZChudW1CeXRlcy51bnNhZmVHZXQoKSk7Cisg
ICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKCFiaXRt
YXApCisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBpZiAoIXJlYWREYXRhRnJvbUJpdG1h
cElmTmVlZGVkKGRlc2lyZWRGb3JtYXQpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGF1dG8gcmF3Qml0bWFwU2l6ZSA9IGJpdG1hcC0+R2V0U2l6ZSgpOworICAgIEludFNpemUgYml0
bWFwU2l6ZShjbGFtcFRvPGludD4ocmF3Qml0bWFwU2l6ZS53aWR0aCksIGNsYW1wVG88aW50Pihy
YXdCaXRtYXBTaXplLmhlaWdodCkpOworCisgICAgaWYgKHJlY3QubG9jYXRpb24oKSA9PSBJbnRQ
b2ludCgpICYmIHJlY3Quc2l6ZSgpID09IGJpdG1hcFNpemUpIHsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQobnVtQnl0ZXMudW5zYWZlR2V0KCkgPT0gZGF0YS5zaXplKCkpOworICAgICAgICByZXN1
bHQtPnNldFJhbmdlKGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSwgMCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgLy8gT25seSB3YW50IHBhcnQgb2YgdGhlIGJpdG1hcC4KKyAgICAgICAgaWYgKCFj
b3B5UmVjdEZyb21EYXRhKHJlY3QsIHJlc3VsdCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisKKyAgICBpZiAoYnl0ZUZvcm1hdCAhPSBkZXNpcmVkRm9ybWF0KSB7CisgICAg
ICAgIC8vIEluLW1lbW9yeSBkYXRhIGRvZXMgbm90IG1hdGNoIGRlc2lyZWQgZm9ybWF0LiBOZWVk
IHRvIHN3aXp6bGUgdGhlIHJlc3VsdHMuCisgICAgICAgIGlmIChkZXNpcmVkRm9ybWF0ID09IEFs
cGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCkKKyAgICAgICAgICAgIGluUGxh
Y2VDaGFuZ2VQcmVtdWx0aXBsaWNhdGlvbjxBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11
bHRpcGxpZWQ+KHJlc3VsdC0+ZGF0YSgpLCByZXN1bHQtPmxlbmd0aCgpKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgaW5QbGFjZUNoYW5nZVByZW11bHRpcGxpY2F0aW9uPEFscGhhUHJlbXVs
dGlwbGljYXRpb246OlByZW11bHRpcGxpZWQ+KHJlc3VsdC0+ZGF0YSgpLCByZXN1bHQtPmxlbmd0
aCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29sIEltYWdlQnVmZmVy
RGF0YTo6cmVhZERhdGFGcm9tQml0bWFwSWZOZWVkZWQoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBk
ZXNpcmVkRm9ybWF0KSBjb25zdAoreworICAgIGlmIChiaXRtYXBCdWZmZXJTeW5jICE9IEJpdG1h
cEJ1ZmZlclN5bmM6OkJ1ZmZlck91dE9mU3luYykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBJbnRTaXplIHBpeGVsU2l6ZSA9IGJpdG1hcC0+R2V0UGl4ZWxTaXplKCk7CisKKyAgICBhdXRv
IG51bUJ5dGVzID0gcGl4ZWxTaXplLmFyZWE8UmVjb3JkT3ZlcmZsb3c+KCkgKiA0OworICAgIGlm
IChudW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGNvbnRleHQtPmVuZERyYXcoKTsKKworICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IGQy
ZERldmljZUNvbnRleHQoUXVlcnksIHBsYXRmb3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0KCkpOwor
ICAgIEFTU0VSVCghIWQyZERldmljZUNvbnRleHQpOworCisgICAgYXV0byBieXRlc1BlclJvd0lu
RGF0YSA9IHBpeGVsU2l6ZS53aWR0aCgpICogNDsKKworICAgIC8vIENvcHkgR1BVIGRhdGEgZnJv
bSB0aGUgSUQyRDFCaXRtYXAgdG8gYSBDUFUtYmFja2VkIElEMkQxQml0bWFwMQorICAgIENPTVB0
cjxJRDJEMUJpdG1hcDE+IGNwdUJpdG1hcDsKKyAgICBEMkQxX0JJVE1BUF9QUk9QRVJUSUVTMSBi
aXRtYXBQcm9wZXJ0aWVzMiA9IEQyRDE6OkJpdG1hcFByb3BlcnRpZXMxKEQyRDFfQklUTUFQX09Q
VElPTlNfQ1BVX1JFQUQgfCBEMkQxX0JJVE1BUF9PUFRJT05TX0NBTk5PVF9EUkFXLCBEaXJlY3Qy
RDo6cGl4ZWxGb3JtYXQoKSk7CisgICAgSFJFU1VMVCBociA9IGQyZERldmljZUNvbnRleHQtPkNy
ZWF0ZUJpdG1hcChwaXhlbFNpemUsIG51bGxwdHIsIGJ5dGVzUGVyUm93SW5EYXRhLCBiaXRtYXBQ
cm9wZXJ0aWVzMiwgJmNwdUJpdG1hcCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIHRhcmdldFBvcyA9IEQyRDE6OlBvaW50MlUoKTsK
KyAgICBEMkQxX1JFQ1RfVSBkYXRhUmVjdCA9IEQyRDE6OlJlY3RVKDAsIDAsIHBpeGVsU2l6ZS53
aWR0aCgpLCBwaXhlbFNpemUuaGVpZ2h0KCkpOworICAgIGhyID0gY3B1Qml0bWFwLT5Db3B5RnJv
bUJpdG1hcCgmdGFyZ2V0UG9zLCBiaXRtYXAuZ2V0KCksICZkYXRhUmVjdCk7CisgICAgaWYgKCFT
VUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBEMkQxX01BUFBFRF9S
RUNUIG1hcHBlZERhdGE7CisgICAgaHIgPSBjcHVCaXRtYXAtPk1hcChEMkQxX01BUF9PUFRJT05T
X1JFQUQsICZtYXBwZWREYXRhKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmICghbWFwcGVkRGF0YS5iaXRzKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoIWVuc3VyZUJhY2tpbmdTdG9yZShwaXhlbFNpemUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBTb2Z0d2FyZSBmaWx0ZXJzIGV4cGVjdCBSR0JBIGJ5
dGVzLiBXZSBuZWVkIHRvIHN3aXp6bGUgZnJvbSBEaXJlY3QyRCdzIEJHUkEgdG8gYmUgY29tcGF0
aWJsZS4KKyAgICBpZiAoZGVzaXJlZEZvcm1hdCA9PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQ
cmVtdWx0aXBsaWVkKQorICAgICAgICBzd2l6emxlQW5kUHJlbXVsdGlwbHk8QWxwaGFQcmVtdWx0
aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZD4obWFwcGVkRGF0YS5iaXRzLCBwaXhlbFNpemUuaGVp
Z2h0KCksIHBpeGVsU2l6ZS53aWR0aCgpLCBtYXBwZWREYXRhLnBpdGNoLCBieXRlc1BlclJvd0lu
RGF0YSwgZGF0YS5kYXRhKCkpOworICAgIGVsc2UKKyAgICAgICAgc3dpenpsZUFuZFByZW11bHRp
cGx5PEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZD4obWFwcGVkRGF0YS5i
aXRzLCBwaXhlbFNpemUuaGVpZ2h0KCksIHBpeGVsU2l6ZS53aWR0aCgpLCBtYXBwZWREYXRhLnBp
dGNoLCBieXRlc1BlclJvd0luRGF0YSwgZGF0YS5kYXRhKCkpOworCisgICAgYnl0ZUZvcm1hdCA9
IGRlc2lyZWRGb3JtYXQ7CisKKyAgICBiaXRtYXBCdWZmZXJTeW5jID0gQml0bWFwQnVmZmVyU3lu
Yzo6SW5TeW5jOworCisgICAgaHIgPSBjcHVCaXRtYXAtPlVubWFwKCk7CisgICAgQVNTRVJUKFNV
Q0NFRURFRChocikpOworCisgICAgY29udGV4dC0+YmVnaW5EcmF3KCk7CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwogdm9pZCBJbWFnZUJ1ZmZlckRhdGE6OnB1dERhdGEoY29uc3QgVWludDhDbGFt
cGVkQXJyYXkmIHNvdXJjZSwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBzb3VyY2VGb3JtYXQsIGNv
bnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0
IEludFBvaW50JiBkZXN0UG9pbnQsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wgLyogYWNjZWxl
cmF0ZVJlbmRlcmluZyAqLywgZmxvYXQgcmVzb2x1dGlvblNjYWxlKQogewogICAgIEFTU0VSVChz
b3VyY2VSZWN0LndpZHRoKCkgPiAwKTsKQEAgLTIyOSwyMiArMzkwLDQ5IEBAIHZvaWQgSW1hZ2VC
dWZmZXJEYXRhOjpwdXREYXRhKGNvbnN0IFVpbnQKICAgICAgICAgcmV0dXJuOwogCiAjaWYgIUFT
U0VSVF9ESVNBQkxFRAotICAgIGF1dG8gcGl4ZWxTaXplID0gYml0bWFwLT5HZXRQaXhlbFNpemUo
KTsKLSAgICBBU1NFUlQocGl4ZWxTaXplLndpZHRoID49IHNvdXJjZVNpemUud2lkdGgoKSk7Ci0g
ICAgQVNTRVJUKHBpeGVsU2l6ZS53aWR0aCA+PSBzaXplLndpZHRoKCkpOwotICAgIEFTU0VSVChw
aXhlbFNpemUuaGVpZ2h0ID49IHNvdXJjZVNpemUuaGVpZ2h0KCkpOwotICAgIEFTU0VSVChwaXhl
bFNpemUuaGVpZ2h0ID49IHNpemUuaGVpZ2h0KCkpOworICAgIGlmIChiaXRtYXApIHsKKyAgICAg
ICAgYXV0byBwaXhlbFNpemUgPSBiaXRtYXAtPkdldFBpeGVsU2l6ZSgpOworICAgICAgICBBU1NF
UlQocGl4ZWxTaXplLndpZHRoID49IHNvdXJjZVNpemUud2lkdGgoKSk7CisgICAgICAgIEFTU0VS
VChwaXhlbFNpemUud2lkdGggPj0gc2l6ZS53aWR0aCgpKTsKKyAgICAgICAgQVNTRVJUKHBpeGVs
U2l6ZS5oZWlnaHQgPj0gc291cmNlU2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIEFTU0VSVChwaXhl
bFNpemUuaGVpZ2h0ID49IHNpemUuaGVpZ2h0KCkpOworICAgIH0KICNlbmRpZgogCiAgICAgaWYg
KCFlbnN1cmVCYWNraW5nU3RvcmUoc2l6ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1lbWNw
eShkYXRhLmRhdGEoKSwgc291cmNlLmRhdGEoKSwgc291cmNlLmxlbmd0aCgpKTsKKyAgICBpZiAo
c291cmNlU2l6ZSA9PSBzaXplKSB7CisgICAgICAgIG1lbWNweShkYXRhLmRhdGEoKSwgc291cmNl
LmRhdGEoKSwgc291cmNlLmxlbmd0aCgpKTsKKyAgICAgICAgYnl0ZUZvcm1hdCA9IHNvdXJjZUZv
cm1hdDsKKyAgICB9IGVsc2UgeworICAgICAgICByZWFkRGF0YUZyb21CaXRtYXBJZk5lZWRlZChi
eXRlRm9ybWF0KTsKKyAgICAgICAgaWYgKCFjb3B5UmVjdEZyb21Tb3VyY2VUb0RhdGEoc291cmNl
UmVjdCwgc291cmNlLCBzb3VyY2VGb3JtYXQpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
IAotICAgIGJ5dGVGb3JtYXQgPSBzb3VyY2VGb3JtYXQ7CiAgICAgYml0bWFwQnVmZmVyU3luYyA9
IEJpdG1hcEJ1ZmZlclN5bmM6OkJpdG1hcE91dE9mU3luYzsKIH0KIAorYm9vbCBJbWFnZUJ1ZmZl
ckRhdGE6OmNvcHlSZWN0RnJvbVNvdXJjZVRvRGF0YShjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0
LCBjb25zdCBVaW50OENsYW1wZWRBcnJheSYgc291cmNlLCBBbHBoYVByZW11bHRpcGxpY2F0aW9u
IHNvdXJjZUZvcm1hdCkKK3sKKyAgICBJbnRTaXplIHBpeGVsU2l6ZSA9IGJpdG1hcC0+R2V0UGl4
ZWxTaXplKCk7CisKKyAgICBJbnRSZWN0IHNvdXJjZVJlY3RUb0NvcHkgPSBzb3VyY2VSZWN0Owor
ICAgIGlmICghSW50UmVjdChJbnRQb2ludCgpLCBwaXhlbFNpemUpLmNvbnRhaW5zKHNvdXJjZVJl
Y3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGRlc3RCdWZmZXJQb3NpdGlv
biA9IHNvdXJjZVJlY3QubG9jYXRpb24oKTsKKworICAgIGlmIChzb3VyY2VGb3JtYXQgPT0gYnl0
ZUZvcm1hdCkKKyAgICAgICAgcmV0dXJuIGNvcHlSZWN0RnJvbVNvdXJjZVRvRGVzdChzb3VyY2VS
ZWN0LCBzb3VyY2VSZWN0LnNpemUoKSwgc291cmNlLmRhdGEoKSwgYmFja2luZ1N0b3JlU2l6ZSwg
ZGF0YS5kYXRhKCksIGRlc3RCdWZmZXJQb3NpdGlvbik7CisKKyAgICBpZiAoYnl0ZUZvcm1hdCA9
PSBBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQpCisgICAgICAgIGNvcHlS
ZWN0RnJvbVNvdXJjZVRvRGVzdEFuZFNldFByZW11bHRpcGxpY2F0aW9uPEFscGhhUHJlbXVsdGlw
bGljYXRpb246OlVucHJlbXVsdGlwbGllZD4oc291cmNlUmVjdCwgc291cmNlUmVjdC5zaXplKCks
IHNvdXJjZS5kYXRhKCksIGJhY2tpbmdTdG9yZVNpemUsIGRhdGEuZGF0YSgpLCBkZXN0QnVmZmVy
UG9zaXRpb24pOworICAgIGVsc2UKKyAgICAgICAgY29weVJlY3RGcm9tU291cmNlVG9EZXN0QW5k
U2V0UHJlbXVsdGlwbGljYXRpb248QWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGll
ZD4oc291cmNlUmVjdCwgc291cmNlUmVjdC5zaXplKCksIHNvdXJjZS5kYXRhKCksIGJhY2tpbmdT
dG9yZVNpemUsIGRhdGEuZGF0YSgpLCBkZXN0QnVmZmVyUG9zaXRpb24pOworfQorCiB2b2lkIElt
YWdlQnVmZmVyRGF0YTo6bG9hZERhdGFUb0JpdG1hcElmTmVlZGVkKCkKIHsKICAgICBpZiAoYml0
bWFwQnVmZmVyU3luYyAhPSBCaXRtYXBCdWZmZXJTeW5jOjpCaXRtYXBPdXRPZlN5bmMgfHwgZGF0
YS5pc0VtcHR5KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
SW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuaAkocmV2aXNpb24g
MjQ5OTIzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVm
ZmVyRGF0YURpcmVjdDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDkgQEAgc3RydWN0
IEltYWdlQnVmZmVyRGF0YSB7CiAKICAgICBib29sIGVuc3VyZUJhY2tpbmdTdG9yZShjb25zdCBJ
bnRTaXplJikgY29uc3Q7CiAgICAgdm9pZCBsb2FkRGF0YVRvQml0bWFwSWZOZWVkZWQoKTsKKyAg
ICBib29sIHJlYWREYXRhRnJvbUJpdG1hcElmTmVlZGVkKEFscGhhUHJlbXVsdGlwbGljYXRpb24g
ZGVzaXJlZEZvcm1hdCkgY29uc3Q7CisgICAgYm9vbCBjb3B5UmVjdEZyb21EYXRhKGNvbnN0IElu
dFJlY3QmLCBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+JikgY29uc3Q7CisgICAgYm9vbCBjb3B5
UmVjdEZyb21Tb3VyY2VUb0RhdGEoY29uc3QgSW50UmVjdCYsIGNvbnN0IFVpbnQ4Q2xhbXBlZEFy
cmF5JiwgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbik7CiAgICAgdm9pZCBtYXJrQnVmZmVyT3V0T2ZT
eW5jKCkgeyBiaXRtYXBCdWZmZXJTeW5jID0gQml0bWFwQnVmZmVyU3luYzo6QnVmZmVyT3V0T2ZT
eW5jOyB9CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
UGF0aERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcAkocmV2aXNpb24gMjQ5OTIzKQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQwMSw4ICs0MDEsNiBAQCB2b2lkIFBhdGg6OmFkZEJlemllckN1cnZlVG8oY29u
c3QgRmxvYXRQCiAKIHZvaWQgUGF0aDo6YWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYgcDEsIGNv
bnN0IEZsb2F0UG9pbnQmIHAyLCBmbG9hdCByYWRpdXMpCiB7Ci0gICAgQVNTRVJUKG1fYWN0aXZl
UGF0aC5nZXQoKSk7Ci0KICAgICBGbG9hdFBvaW50IHAwID0gY3VycmVudFBvaW50KCk7CiAKICAg
ICBpZiAocDEgPT0gcDAgfHwgcDEgPT0gcDIgfHwgV1RGOjphcmVFc3NlbnRpYWxseUVxdWFsKHJh
ZGl1cywgMC4wZikpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5jcHAJKHJldmlz
aW9uIDI0OTkyMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0
Zm9ybUNvbnRleHREaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDE0ICs1MywyMyBA
QCB2b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpyZXN0b3JlKCkKIHsKICAgICBBU1NFUlQo
bV9yZW5kZXJUYXJnZXQpOwogCi0gICAgYXV0byByZXN0b3JlU3RhdGUgPSBtX3JlbmRlclN0YXRl
cy50YWtlTGFzdCgpOwotICAgIG1fcmVuZGVyVGFyZ2V0LT5SZXN0b3JlRHJhd2luZ1N0YXRlKHJl
c3RvcmVTdGF0ZS5tX2RyYXdpbmdTdGF0ZUJsb2NrLmdldCgpKTsKKyAgICAvLyBUaGVyZSBzaG91
bGQgYWx3YXlzIGJlIGF0IGxlYXN0IG9uZSBtYW51YWxseSBzYXZlZCBzdGF0ZSBpZiBhIHJlc3Rv
cmUgaXMgYmVpbmcgY2FsbGVkLgorICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6ZSgpID4gMSk7
CiAKLSAgICBmb3IgKGF1dG8gY2xpcFR5cGUgPSByZXN0b3JlU3RhdGUubV9jbGlwcy5yYmVnaW4o
KTsgY2xpcFR5cGUgIT0gcmVzdG9yZVN0YXRlLm1fY2xpcHMucmVuZCgpOyArK2NsaXBUeXBlKSB7
Ci0gICAgICAgIGlmICgqY2xpcFR5cGUgPT0gQXhpc0FsaWduZWRDbGlwKQotICAgICAgICAgICAg
bV9yZW5kZXJUYXJnZXQtPlBvcEF4aXNBbGlnbmVkQ2xpcCgpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBtX3JlbmRlclRhcmdldC0+UG9wTGF5ZXIoKTsKKyAgICAvLyBDYW4ndCByZXN0b3Jl
IGlmIHdlIG5ldmVyIGNhbGxlZCBzYXZlLgorICAgIGlmIChtX3N0YXRlU3RhY2suc2l6ZSgpID09
IDEpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghbV9yZW5kZXJTdGF0ZXMuaXNFbXB0eSgp
KSB7CisgICAgICAgIGF1dG8gcmVzdG9yZVN0YXRlID0gbV9yZW5kZXJTdGF0ZXMudGFrZUxhc3Qo
KTsKKyAgICAgICAgbV9yZW5kZXJUYXJnZXQtPlJlc3RvcmVEcmF3aW5nU3RhdGUocmVzdG9yZVN0
YXRlLm1fZHJhd2luZ1N0YXRlQmxvY2suZ2V0KCkpOworCisgICAgICAgIGZvciAoYXV0byBjbGlw
VHlwZSA9IHJlc3RvcmVTdGF0ZS5tX2NsaXBzLnJiZWdpbigpOyBjbGlwVHlwZSAhPSByZXN0b3Jl
U3RhdGUubV9jbGlwcy5yZW5kKCk7ICsrY2xpcFR5cGUpIHsKKyAgICAgICAgICAgIGlmICgqY2xp
cFR5cGUgPT0gQXhpc0FsaWduZWRDbGlwKQorICAgICAgICAgICAgICAgIG1fcmVuZGVyVGFyZ2V0
LT5Qb3BBeGlzQWxpZ25lZENsaXAoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBtX3JlbmRlclRhcmdldC0+UG9wTGF5ZXIoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIG1f
c3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7CkBAIC03Miw2ICs4MSw3IEBAIFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEOjp+UGxhdGZvcm1Db250ZXgKIAogdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RDo6c2F2ZSgpCiB7CisgICAgQVNTRVJUKG1fc3RhdGVTdGFjay5zaXplKCkgPj0gMSk7IC8vIFRo
ZXJlIHNob3VsZCBhbHdheXMgYmUgb25lIHN0YXRlIG9uIHRoZSBzdGFjay4KICAgICBBU1NFUlQo
bV9yZW5kZXJUYXJnZXQpOwogCiAgICAgbV9zdGF0ZVN0YWNrLmFwcGVuZChTdGF0ZSgpKTsKQEAg
LTI1Myw2ICsyNjMsMTIgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6YmVnaW5EcmF3
KAogdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6ZW5kRHJhdygpCiB7CiAgICAgQVNTRVJU
KG1fcmVuZGVyVGFyZ2V0KTsKKworICAgIHdoaWxlICghbV9yZW5kZXJTdGF0ZXMuaXNFbXB0eSgp
KQorICAgICAgICByZXN0b3JlKCk7CisKKyAgICBBU1NFUlQobV9zdGF0ZVN0YWNrLnNpemUoKSA+
PSAxKTsKKwogICAgIEQyRDFfVEFHIGZpcnN0LCBzZWNvbmQ7CiAgICAgSFJFU1VMVCBociA9IG1f
cmVuZGVyVGFyZ2V0LT5FbmREcmF3KCZmaXJzdCwgJnNlY29uZCk7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>