<?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>200498</bug_id>
          
          <creation_ts>2019-08-07 00:50:26 -0700</creation_ts>
          <short_desc>Remove the dead code of ScalableImageDecoder for scaling</short_desc>
          <delta_ts>2019-08-22 02:14:18 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=179921</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>200962</blocked>
    
    <blocked>200163</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Fujii Hironori">fujii</reporter>
          <assigned_to name="Fujii Hironori">fujii</assigned_to>
          <cc>annulen</cc>
    
    <cc>dbates</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>loic.yhuel</cc>
    
    <cc>ross.kirsling</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1559076</commentid>
    <comment_count>0</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-08-07 00:50:26 -0700</bug_when>
    <thetext>Remove the dead code of ScalableImageDecoder for scaling

member variables m_maxNumPixels, m_scaled, m_scaledColumns and m_scaledRows are unused.

See Also: Bug 179921</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559079</commentid>
    <comment_count>1</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-08-07 01:58:26 -0700</bug_when>
    <thetext>This feature was added by
Bug 28308 – allow down-sampling images during decoding</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559103</commentid>
    <comment_count>2</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-08-07 06:36:10 -0700</bug_when>
    <thetext>Annulen, are you using down scaling feature of ScalableImageDecoder?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559111</commentid>
    <comment_count>3</comment_count>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2019-08-07 07:30:06 -0700</bug_when>
    <thetext>Qt port had support for IMAGE_DECODER_DOWN_SAMPLING, but after its removal in r225091 it seems that these variables are not used anywhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559410</commentid>
    <comment_count>4</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-08-07 18:29:28 -0700</bug_when>
    <thetext>Got it.
JPEGImageDecoder::outputScanlines doesn&apos;t support the case out_color_space is BGRA and m_scaled is true.
It difficult to maintain dead code. Let&apos;s remove it.
If someone want to resurrect this feature, they should add a unit test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563020</commentid>
    <comment_count>5</comment_count>
      <attachid>376761</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-08-20 03:30:55 -0700</bug_when>
    <thetext>Created attachment 376761
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563098</commentid>
    <comment_count>6</comment_count>
      <attachid>376761</attachid>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2019-08-20 09:43:52 -0700</bug_when>
    <thetext>Comment on attachment 376761
Patch

r=me, but after these changes ScalableImageDecoder is not a meaningful name of the class anymore</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563118</commentid>
    <comment_count>7</comment_count>
      <attachid>376761</attachid>
    <who name="Loïc Yhuel">loic.yhuel</who>
    <bug_when>2019-08-20 10:16:29 -0700</bug_when>
    <thetext>Comment on attachment 376761
Patch

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

&gt; Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:565
&gt; +        if (sourceY &lt; 0)

This cannot happen, output_scanline is unsigned (JDIMENSION).

&gt; Source/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp:471
&gt; +    if (rowIndex &gt;= size().height())

I think this cannot happen now, the decoder will not give us a row outside the image height.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563375</commentid>
    <comment_count>8</comment_count>
      <attachid>376761</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-08-20 20:12:31 -0700</bug_when>
    <thetext>Comment on attachment 376761
Patch

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

Thank you for the review.

&gt;&gt; Source/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:565
&gt;&gt; +        if (sourceY &lt; 0)
&gt; 
&gt; This cannot happen, output_scanline is unsigned (JDIMENSION).

Will fix.

&gt;&gt; Source/WebCore/platform/image-decoders/png/PNGImageDecoder.cpp:471
&gt;&gt; +    if (rowIndex &gt;= size().height())
&gt; 
&gt; I think this cannot happen now, the decoder will not give us a row outside the image height.

See the above comment &quot;libpng may send extra rows, ignore them to make our lives easier&quot;. It seems that I should keep this checking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563376</commentid>
    <comment_count>9</comment_count>
      <attachid>376840</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-08-20 20:14:03 -0700</bug_when>
    <thetext>Created attachment 376840
Patch

* Addressed review feedbacks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563378</commentid>
    <comment_count>10</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-08-20 20:23:29 -0700</bug_when>
    <thetext>(In reply to Konstantin Tokarev from comment #6)
&gt; Comment on attachment 376761 [details]
&gt; Patch
&gt; 
&gt; r=me, but after these changes ScalableImageDecoder is not a meaningful name
&gt; of the class anymore

Agreed. Filed Bug 200962.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563684</commentid>
    <comment_count>11</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-08-21 14:29:17 -0700</bug_when>
    <thetext>Konstantin, do you have a chance to review this patch again?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563706</commentid>
    <comment_count>12</comment_count>
      <attachid>376840</attachid>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2019-08-21 14:53:26 -0700</bug_when>
    <thetext>Comment on attachment 376840
Patch

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

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp:216
&gt;      if (rowBuffer.isEmpty() || (xBegin &lt; 0) || (yBegin &lt; 0) || (xEnd &lt;= xBegin) || (yEnd &lt;= yBegin))

Condition (xBegin &lt; 0) || (yBegin &lt; 0) is always false, because xOffset and yOffset are unsigned. Also it should be possible to change types of all variables {x,y}{Begin,End} to unsigned and drop static_cast</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563899</commentid>
    <comment_count>13</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-08-21 19:22:40 -0700</bug_when>
    <thetext>Removing static_cast&lt;int&gt; reports the following compilation errors because std::min takes size_t and int.

&gt; ..\Source\WebCore\platform\image-decoders\gif\GIFImageDecoder.cpp(214,21): error: no matching function for call to &apos;min&apos;
&gt;     unsigned xEnd = std::min(frameContext-&gt;xOffset + width, size().width());
&gt;                     ^~~~~~~~
&gt; C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.21.27702\include\algorithm(4492,82): note: candidate template ignored: deduced conflicting types for parameter &apos;_Ty&apos; (&apos;unsigned long long&apos; vs. &apos;int&apos;)
&gt; _Post_equal_to_(_Right &lt; _Left ? _Right : _Left) _NODISCARD constexpr const _Ty&amp;(min)(const _Ty&amp; _Left,
&gt;                                                                                  ^
&gt; C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.21.27702\include\algorithm(4484,26): note: candidate template ignored: could not match &apos;initializer_list&lt;type-parameter-0-0&gt;&apos; against &apos;unsigned long long&apos;
&gt; _NODISCARD constexpr _Ty(min)(initializer_list&lt;_Ty&gt; _Ilist, _Pr _Pred) { // return leftmost/smallest
&gt;                          ^
&gt; C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.21.27702\include\algorithm(4478,33): note: candidate function template not viable: requires 3 arguments, but 2 were provided
&gt; _NODISCARD constexpr const _Ty&amp;(min)(const _Ty&amp; _Left, const _Ty&amp; _Right, _Pr _Pred) _NOEXCEPT_COND(
&gt;                                 ^
&gt; C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.21.27702\include\algorithm(4504,26): note: candidate function template not viable: requires single argument &apos;_Ilist&apos;, but 2 arguments were provided
&gt; _NODISCARD constexpr _Ty(min)(initializer_list&lt;_Ty&gt; _Ilist) { // return leftmost/smallest
&gt;                          ^
&gt; ..\..\Source\WebCore\platform\image-decoders\gif\GIFImageDecoder.cpp(215,21): error: no matching function for call to &apos;min&apos;
&gt;     unsigned yEnd = std::min(frameContext-&gt;yOffset + rowNumber + repeatCount, size().height());
&gt;                     ^~~~~~~~
&gt; C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.21.27702\include\algorithm(4492,82): note: candidate template ignored: deduced conflicting types for parameter &apos;_Ty&apos; (&apos;unsigned long long&apos; vs. &apos;int&apos;)
&gt; _Post_equal_to_(_Right &lt; _Left ? _Right : _Left) _NODISCARD constexpr const _Ty&amp;(min)(const _Ty&amp; _Left,
&gt;                                                                                  ^
&gt; C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.21.27702\include\algorithm(4484,26): note: candidate template ignored: could not match &apos;initializer_list&lt;type-parameter-0-0&gt;&apos; against &apos;unsigned long long&apos;
&gt; _NODISCARD constexpr _Ty(min)(initializer_list&lt;_Ty&gt; _Ilist, _Pr _Pred) { // return leftmost/smallest
&gt;                          ^
&gt; C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.21.27702\include\algorithm(4478,33): note: candidate function template not viable: requires 3 arguments, but 2 were provided
&gt; _NODISCARD constexpr const _Ty&amp;(min)(const _Ty&amp; _Left, const _Ty&amp; _Right, _Pr _Pred) _NOEXCEPT_COND(
&gt;                                 ^
&gt; C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.21.27702\include\algorithm(4504,26): note: candidate function template not viable: requires single argument &apos;_Ilist&apos;, but 2 arguments were provided
&gt; _NODISCARD constexpr _Ty(min)(initializer_list&lt;_Ty&gt; _Ilist) { // return leftmost/smallest</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563900</commentid>
    <comment_count>14</comment_count>
      <attachid>376840</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-08-21 19:26:44 -0700</bug_when>
    <thetext>Comment on attachment 376840
Patch

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

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp:216
&gt;&gt;      if (rowBuffer.isEmpty() || (xBegin &lt; 0) || (yBegin &lt; 0) || (xEnd &lt;= xBegin) || (yEnd &lt;= yBegin))
&gt; 
&gt; Condition (xBegin &lt; 0) || (yBegin &lt; 0) is always false, because xOffset and yOffset are unsigned. Also it should be possible to change types of all variables {x,y}{Begin,End} to unsigned and drop static_cast

Good catch, I will remove the (xBegin &lt; 0) || (yBegin &lt; 0).
I don&apos;t think using int for all variables {x,y}{Begin,End} is a bad idea in this case because the image size are represented as IntRect and IntSize.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563902</commentid>
    <comment_count>15</comment_count>
      <attachid>376967</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-08-21 19:28:37 -0700</bug_when>
    <thetext>Created attachment 376967
Patch

* Removed the nagative checks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563920</commentid>
    <comment_count>16</comment_count>
      <attachid>376967</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2019-08-21 20:08:16 -0700</bug_when>
    <thetext>Comment on attachment 376967
Patch

Looks sane to me. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1563999</commentid>
    <comment_count>17</comment_count>
      <attachid>376967</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-08-22 02:13:11 -0700</bug_when>
    <thetext>Comment on attachment 376967
Patch

Clearing flags on attachment: 376967

Committed r248998: &lt;https://trac.webkit.org/changeset/248998&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564000</commentid>
    <comment_count>18</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-08-22 02:13:15 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1564001</commentid>
    <comment_count>19</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-22 02:14:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/54591083&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376761</attachid>
            <date>2019-08-20 03:30:55 -0700</date>
            <delta_ts>2019-08-20 20:13:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200498-20190820193054.patch</filename>
            <type>text/plain</type>
            <size>24358</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4ODg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTk5MDEyYzI3MmI4M2Jm
NGIyMTcyZjJhOTVlZTg3MGQ2ZjQ3YmZhOS4uODlhOWRmNzhlMmY3ZDQ2OGY0NDAyOGNiNDQwYjZi
YzdjNDkyZjlkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE5LTA4LTIwICBGdWpp
aSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgorCisgICAgICAgIFJlbW92ZSB0
aGUgZGVhZCBjb2RlIG9mIFNjYWxhYmxlSW1hZ2VEZWNvZGVyIGZvciBzY2FsaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA0OTgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBwb3J0cyBhcmUgdXNp
bmcgdGhlIGRvd24gc2NhbGluZyBmZWF0dXJlIG9mCisgICAgICAgIFNjYWxhYmxlSW1hZ2VEZWNv
ZGVyIG5vdy4gUmVtb3ZlZCBpdC4KKworICAgICAgICBObyBiZWhhdmlvciBjaGFuZ2UuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY2FsYWJsZUltYWdlRGVjb2Rlcjo6cHJlcGFyZVNjYWxlRGF0
YUlmTmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjYWxhYmxlSW1hZ2VE
ZWNvZGVyOjp1cHBlckJvdW5kU2NhbGVkWCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
Y2FsYWJsZUltYWdlRGVjb2Rlcjo6bG93ZXJCb3VuZFNjYWxlZFgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U2NhbGFibGVJbWFnZURlY29kZXI6OnVwcGVyQm91bmRTY2FsZWRZKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjYWxhYmxlSW1hZ2VEZWNvZGVyOjpsb3dlckJvdW5k
U2NhbGVkWSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY2FsYWJsZUltYWdlRGVjb2Rl
cjo6c2NhbGVkWSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
U2NhbGFibGVJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjYWxhYmxlSW1hZ2VE
ZWNvZGVyOjpzY2FsZWRTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdJRklt
YWdlRGVjb2Rlcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6
OmZpbmRGaXJzdFJlcXVpcmVkRnJhbWVUb0RlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJ
bWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdl
RGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29k
ZXI6OmluaXRGcmFtZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
anBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURl
Y29kZXI6Om91dHB1dFNjYW5saW5lcyk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNv
ZGVyOjpzZXRTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9qcGVnMjAwMC9KUEVHMjAwMEltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKUEVHMjAwMEltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBO
R0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdl
RGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVj
b2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6
OnNldFNpemUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Bu
Zy9QTkdJbWFnZURlY29kZXIuaDoKKwogMjAxOS0wOC0xOSAgSmVyIE5vYmxlICA8amVyLm5vYmxl
QGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIEZpeCBtaXNzcGVsbGluZyBvZiAtcHJldmVu
dHNEaXNwbGF5U2xlZXBGb3JWaWRlb1BsYXliYWNrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rlci5j
cHAKaW5kZXggMGVhZjg2ZjhjNWFlNTM3MjcxMTUzZDJiNGRmN2UwM2VhNzQ0OTc5Mi4uMjYyOTli
NjFlODAwNGVmODRjZjEwMjVjOGVlY2VhNjBjZDFkMTU3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VE
ZWNvZGVyLmNwcApAQCAtMTUzLDQ3ICsxNTMsNiBAQCBSZWZQdHI8U2NhbGFibGVJbWFnZURlY29k
ZXI+IFNjYWxhYmxlSW1hZ2VEZWNvZGVyOjpjcmVhdGUoU2hhcmVkQnVmZmVyJiBkYXRhLCBBbAog
ICAgIHJldHVybiBudWxscHRyOwogfQogCi1uYW1lc3BhY2UgewotCi1lbnVtIE1hdGNoVHlwZSB7
Ci0gICAgRXhhY3QsCi0gICAgVXBwZXJCb3VuZCwKLSAgICBMb3dlckJvdW5kCi19OwotCi1pbmxp
bmUgdm9pZCBmaWxsU2NhbGVkVmFsdWVzKFZlY3RvcjxpbnQ+JiBzY2FsZWRWYWx1ZXMsIGRvdWJs
ZSBzY2FsZVJhdGUsIGludCBsZW5ndGgpCi17Ci0gICAgZG91YmxlIGluZmxhdGVSYXRlID0gMS4g
LyBzY2FsZVJhdGU7Ci0gICAgc2NhbGVkVmFsdWVzLnJlc2VydmVDYXBhY2l0eShzdGF0aWNfY2Fz
dDxpbnQ+KGxlbmd0aCAqIHNjYWxlUmF0ZSArIDAuNSkpOwotICAgIGZvciAoaW50IHNjYWxlZElu
ZGV4ID0gMDsgOyArK3NjYWxlZEluZGV4KSB7Ci0gICAgICAgIGludCBpbmRleCA9IHN0YXRpY19j
YXN0PGludD4oc2NhbGVkSW5kZXggKiBpbmZsYXRlUmF0ZSArIDAuNSk7Ci0gICAgICAgIGlmIChp
bmRleCA+PSBsZW5ndGgpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgc2NhbGVkVmFsdWVz
LmFwcGVuZChpbmRleCk7Ci0gICAgfQotfQotCi10ZW1wbGF0ZSA8TWF0Y2hUeXBlIHR5cGU+IGlu
dCBnZXRTY2FsZWRWYWx1ZShjb25zdCBWZWN0b3I8aW50PiYgc2NhbGVkVmFsdWVzLCBpbnQgdmFs
dWVUb01hdGNoLCBpbnQgc2VhcmNoU3RhcnQpCi17Ci0gICAgaWYgKHNjYWxlZFZhbHVlcy5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZVRvTWF0Y2g7Ci0KLSAgICBjb25zdCBpbnQqIGRh
dGFTdGFydCA9IHNjYWxlZFZhbHVlcy5kYXRhKCk7Ci0gICAgY29uc3QgaW50KiBkYXRhRW5kID0g
ZGF0YVN0YXJ0ICsgc2NhbGVkVmFsdWVzLnNpemUoKTsKLSAgICBjb25zdCBpbnQqIG1hdGNoZWQg
PSBzdGQ6Omxvd2VyX2JvdW5kKGRhdGFTdGFydCArIHNlYXJjaFN0YXJ0LCBkYXRhRW5kLCB2YWx1
ZVRvTWF0Y2gpOwotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgRXhhY3Q6Ci0gICAgICAg
IHJldHVybiBtYXRjaGVkICE9IGRhdGFFbmQgJiYgKm1hdGNoZWQgPT0gdmFsdWVUb01hdGNoID8g
bWF0Y2hlZCAtIGRhdGFTdGFydCA6IC0xOwotICAgIGNhc2UgTG93ZXJCb3VuZDoKLSAgICAgICAg
cmV0dXJuIG1hdGNoZWQgIT0gZGF0YUVuZCAmJiAqbWF0Y2hlZCA9PSB2YWx1ZVRvTWF0Y2ggPyBt
YXRjaGVkIC0gZGF0YVN0YXJ0IDogbWF0Y2hlZCAtIGRhdGFTdGFydCAtIDE7Ci0gICAgY2FzZSBV
cHBlckJvdW5kOgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBtYXRjaGVkICE9IGRhdGFF
bmQgPyBtYXRjaGVkIC0gZGF0YVN0YXJ0IDogLTE7Ci0gICAgfQotfQotCi19Ci0KIGJvb2wgU2Nh
bGFibGVJbWFnZURlY29kZXI6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KSBj
b25zdAogewogICAgIExvY2tIb2xkZXIgbG9ja0hvbGRlcihtX211dGV4KTsKQEAgLTI2NCw0OSAr
MjIzLDYgQEAgTmF0aXZlSW1hZ2VQdHIgU2NhbGFibGVJbWFnZURlY29kZXI6OmNyZWF0ZUZyYW1l
SW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2EKICAgICByZXR1cm4gYnVmZmVyLT5iYWNr
aW5nU3RvcmUoKS0+aW1hZ2UoKTsKIH0KIAotdm9pZCBTY2FsYWJsZUltYWdlRGVjb2Rlcjo6cHJl
cGFyZVNjYWxlRGF0YUlmTmVjZXNzYXJ5KCkKLXsKLSAgICBtX3NjYWxlZCA9IGZhbHNlOwotICAg
IG1fc2NhbGVkQ29sdW1ucy5jbGVhcigpOwotICAgIG1fc2NhbGVkUm93cy5jbGVhcigpOwotCi0g
ICAgaW50IHdpZHRoID0gc2l6ZSgpLndpZHRoKCk7Ci0gICAgaW50IGhlaWdodCA9IHNpemUoKS5o
ZWlnaHQoKTsKLSAgICBpbnQgbnVtUGl4ZWxzID0gaGVpZ2h0ICogd2lkdGg7Ci0gICAgaWYgKG1f
bWF4TnVtUGl4ZWxzIDw9IDAgfHwgbnVtUGl4ZWxzIDw9IG1fbWF4TnVtUGl4ZWxzKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX3NjYWxlZCA9IHRydWU7Ci0gICAgZG91YmxlIHNjYWxlID0gc3Fy
dChtX21heE51bVBpeGVscyAvIChkb3VibGUpbnVtUGl4ZWxzKTsKLSAgICBmaWxsU2NhbGVkVmFs
dWVzKG1fc2NhbGVkQ29sdW1ucywgc2NhbGUsIHdpZHRoKTsKLSAgICBmaWxsU2NhbGVkVmFsdWVz
KG1fc2NhbGVkUm93cywgc2NhbGUsIGhlaWdodCk7Ci19Ci0KLWludCBTY2FsYWJsZUltYWdlRGVj
b2Rlcjo6dXBwZXJCb3VuZFNjYWxlZFgoaW50IG9yaWdYLCBpbnQgc2VhcmNoU3RhcnQpCi17Ci0g
ICAgcmV0dXJuIGdldFNjYWxlZFZhbHVlPFVwcGVyQm91bmQ+KG1fc2NhbGVkQ29sdW1ucywgb3Jp
Z1gsIHNlYXJjaFN0YXJ0KTsKLX0KLQotaW50IFNjYWxhYmxlSW1hZ2VEZWNvZGVyOjpsb3dlckJv
dW5kU2NhbGVkWChpbnQgb3JpZ1gsIGludCBzZWFyY2hTdGFydCkKLXsKLSAgICByZXR1cm4gZ2V0
U2NhbGVkVmFsdWU8TG93ZXJCb3VuZD4obV9zY2FsZWRDb2x1bW5zLCBvcmlnWCwgc2VhcmNoU3Rh
cnQpOwotfQotCi1pbnQgU2NhbGFibGVJbWFnZURlY29kZXI6OnVwcGVyQm91bmRTY2FsZWRZKGlu
dCBvcmlnWSwgaW50IHNlYXJjaFN0YXJ0KQotewotICAgIHJldHVybiBnZXRTY2FsZWRWYWx1ZTxV
cHBlckJvdW5kPihtX3NjYWxlZFJvd3MsIG9yaWdZLCBzZWFyY2hTdGFydCk7Ci19Ci0KLWludCBT
Y2FsYWJsZUltYWdlRGVjb2Rlcjo6bG93ZXJCb3VuZFNjYWxlZFkoaW50IG9yaWdZLCBpbnQgc2Vh
cmNoU3RhcnQpCi17Ci0gICAgcmV0dXJuIGdldFNjYWxlZFZhbHVlPExvd2VyQm91bmQ+KG1fc2Nh
bGVkUm93cywgb3JpZ1ksIHNlYXJjaFN0YXJ0KTsKLX0KLQotaW50IFNjYWxhYmxlSW1hZ2VEZWNv
ZGVyOjpzY2FsZWRZKGludCBvcmlnWSwgaW50IHNlYXJjaFN0YXJ0KQotewotICAgIHJldHVybiBn
ZXRTY2FsZWRWYWx1ZTxFeGFjdD4obV9zY2FsZWRSb3dzLCBvcmlnWSwgc2VhcmNoU3RhcnQpOwot
fQotCiAjaWYgVVNFKERJUkVDVDJEKQogdm9pZCBTY2FsYWJsZUltYWdlRGVjb2Rlcjo6c2V0VGFy
Z2V0Q29udGV4dChJRDJEMVJlbmRlclRhcmdldCopCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXIu
aAppbmRleCA4ODkwYWFhM2VkNTNiOGE2ZmRlMzQ0NDA4ZjI4NTgxMmE4MjAyNGQ5Li45OTcyOWJh
MjFjOTM3YzhlOGI4N2FmMmNlNDg1YTA5MTM1N2Y1MzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNv
ZGVyLmgKQEAgLTk4LDExICs5OCw2IEBAIHB1YmxpYzoKIAogICAgIEludFNpemUgc2l6ZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGlzU2l6ZUF2YWlsYWJsZSgpID8gbV9zaXplIDogSW50U2l6
ZSgpOyB9CiAKLSAgICBJbnRTaXplIHNjYWxlZFNpemUoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fc2NhbGVkID8gSW50U2l6ZShtX3NjYWxlZENvbHVtbnMuc2l6ZSgpLCBtX3NjYWxlZFJvd3Mu
c2l6ZSgpKSA6IHNpemUoKTsKLSAgICB9Ci0KICAgICAvLyBUaGlzIHdpbGwgb25seSBkaWZmZXIg
ZnJvbSBzaXplKCkgZm9yIElDTyAod2hlcmUgZWFjaCBmcmFtZSBpcyBhCiAgICAgLy8gZGlmZmVy
ZW50IGljb24pIG9yIG90aGVyIGZvcm1hdHMgd2hlcmUgZGlmZmVyZW50IGZyYW1lcyBhcmUgZGlm
ZmVyZW50CiAgICAgLy8gc2l6ZXMuIFRoaXMgZG9lcyBOT1QgZGlmZmVyIGZyb20gc2l6ZSgpIGZv
ciBHSUYsIHNpbmNlIGRlY29kaW5nIEdJRnMKQEAgLTE5NywxOSArMTkyLDkgQEAgcHVibGljOgog
ICAgIE9wdGlvbmFsPEludFBvaW50PiBob3RTcG90KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
V1RGOjpudWxsb3B0OyB9CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIHByZXBhcmVTY2FsZURhdGFJ
Zk5lY2Vzc2FyeSgpOwotICAgIGludCB1cHBlckJvdW5kU2NhbGVkWChpbnQgb3JpZ1gsIGludCBz
ZWFyY2hTdGFydCA9IDApOwotICAgIGludCBsb3dlckJvdW5kU2NhbGVkWChpbnQgb3JpZ1gsIGlu
dCBzZWFyY2hTdGFydCA9IDApOwotICAgIGludCB1cHBlckJvdW5kU2NhbGVkWShpbnQgb3JpZ1ks
IGludCBzZWFyY2hTdGFydCA9IDApOwotICAgIGludCBsb3dlckJvdW5kU2NhbGVkWShpbnQgb3Jp
Z1ksIGludCBzZWFyY2hTdGFydCA9IDApOwotICAgIGludCBzY2FsZWRZKGludCBvcmlnWSwgaW50
IHNlYXJjaFN0YXJ0ID0gMCk7Ci0KICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7IC8v
IFRoZSBlbmNvZGVkIGRhdGEuCiAgICAgVmVjdG9yPFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUs
IDE+IG1fZnJhbWVCdWZmZXJDYWNoZTsKICAgICBtdXRhYmxlIExvY2sgbV9tdXRleDsKLSAgICBi
b29sIG1fc2NhbGVkIHsgZmFsc2UgfTsKLSAgICBWZWN0b3I8aW50PiBtX3NjYWxlZENvbHVtbnM7
Ci0gICAgVmVjdG9yPGludD4gbV9zY2FsZWRSb3dzOwogICAgIGJvb2wgbV9wcmVtdWx0aXBseUFs
cGhhOwogICAgIGJvb2wgbV9pZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZTsKICAgICBJbWFnZU9y
aWVudGF0aW9uIG1fb3JpZW50YXRpb247CkBAIC0yMjQsMTIgKzIwOSw2IEBAIHByaXZhdGU6CiAg
ICAgSW50U2l6ZSBtX3NpemU7CiAgICAgRW5jb2RlZERhdGFTdGF0dXMgbV9lbmNvZGVkRGF0YVN0
YXR1cyB7IEVuY29kZWREYXRhU3RhdHVzOjpUeXBlQXZhaWxhYmxlIH07CiAgICAgYm9vbCBtX2Rl
Y29kaW5nU2l6ZUZyb21TZXREYXRhIHsgZmFsc2UgfTsKLQotICAgIC8vIEZJWE1FOiBFdmFsdWF0
ZSB0aGUgbmVlZCBmb3IgZGVjb2RlZCBkYXRhIHNjYWxpbmcuIG1fc2NhbGVkLAotICAgIC8vIG1f
c2NhbGVkQ29sdW1ucyBhbmQgbV9zY2FsZWRSb3dzIGFyZSBtZW1iZXIgdmFyaWFibGVzIHRoYXQg
YXJlCi0gICAgLy8gYWZmZWN0ZWQgYnkgdGhpcyB2YWx1ZSwgYW5kIGFyZSBub3QgdXNlZCBhdCBh
bGwgc2luY2UgdGhlIHZhbHVlCi0gICAgLy8gaXMgbmVnYXZpdGUgKHNlZSBwcmVwYXJlU2NhbGVE
YXRhSWZOZWNlc3NhcnkoKSkuCi0gICAgc3RhdGljIGNvbnN0IGludCBtX21heE51bVBpeGVscyB7
IC0xIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29k
ZXIuY3BwCmluZGV4IDRmMzQ4N2UzMzQ3NjQwNTQ3NGNmODZiNWM2MDZkMmMxOTg4YzdjYmEuLmVj
ZDllZWUyMGZlYmVhMTI5YjNjYzYyMjA1YTg2YTUxOThkMWE0YzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZURlY29kZXIuY3BwCkBAIC01MywxMSArNTMsNyBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6c2V0
U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogICAgIGlmIChTY2FsYWJsZUltYWdlRGVjb2Rlcjo6
ZW5jb2RlZERhdGFTdGF0dXMoKSA+PSBFbmNvZGVkRGF0YVN0YXR1czo6U2l6ZUF2YWlsYWJsZSAm
JiB0aGlzLT5zaXplKCkgPT0gc2l6ZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAo
IVNjYWxhYmxlSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHNpemUpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gU2NhbGFibGVJbWFnZURlY29kZXI6OnNldFNpemUoc2l6ZSk7CiB9CiAK
IHNpemVfdCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKSBjb25zdApAQCAtMTI2LDkgKzEy
Miw2IEBAIHNpemVfdCBHSUZJbWFnZURlY29kZXI6OmZpbmRGaXJzdFJlcXVpcmVkRnJhbWVUb0Rl
Y29kZShzaXplX3QgZnJhbWVJbmRleCkKICAgICAgICAgICAgIGNvbnN0IGF1dG8qIGZyYW1lQ29u
dGV4dCA9IG1fcmVhZGVyLT5mcmFtZUNvbnRleHQoaSAtIDEpOwogICAgICAgICAgICAgQVNTRVJU
KGZyYW1lQ29udGV4dCk7CiAgICAgICAgICAgICBJbnRSZWN0IGZyYW1lUmVjdChmcmFtZUNvbnRl
eHQtPnhPZmZzZXQsIGZyYW1lQ29udGV4dC0+eU9mZnNldCwgZnJhbWVDb250ZXh0LT53aWR0aCwg
ZnJhbWVDb250ZXh0LT5oZWlnaHQpOwotICAgICAgICAgICAgLy8gV2Ugd291bGQgbmVlZCB0byBz
Y2FsZSBmcmFtZVJlY3QgYW5kIGNoZWNrIHdoZXRoZXIgaXQgZmlsbHMgdGhlIHdob2xlIHNjYWxl
ZFNpemUoKS4gQnV0Ci0gICAgICAgICAgICAvLyBjYW4gY2hlY2sgd2hldGhlciB0aGUgb3JpZ2lu
YWwgZnJhbWVSZWN0IGZpbGxzIHNpemUoKSBpbnN0ZWFkLiBJZiB0aGUgZnJhbWUgZmlsbHMgdGhl
Ci0gICAgICAgICAgICAvLyB3aG9sZSBhcmVhIHRoZW4gaXQgY2FuIGJlIGRlY29kZWQgd2l0aG91
dCBkZXBlbmRlbmNpZXMuCiAgICAgICAgICAgICBpZiAoZnJhbWVSZWN0LmNvbnRhaW5zKHsgeyB9
LCBzaXplKCkgfSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgIH0KQEAgLTIx
NiwxMCArMjA5LDEwIEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnNp
Z25lZCBmcmFtZUluZGV4LCBjb25zdCBWZWN0b3I8dW5zaWduZWQKICAgICAvLyB0aGF0IHdpZHRo
ID09IChzaXplKCkud2lkdGgoKSAtIGZyYW1lQ29udGV4dC0+eE9mZnNldCksIHNvCiAgICAgLy8g
d2UgbXVzdCBlbnN1cmUgd2UgZG9uJ3QgcnVuIG9mZiB0aGUgZW5kIG9mIGVpdGhlciB0aGUgc291
cmNlIGRhdGEgb3IgdGhlCiAgICAgLy8gcm93J3MgWC1jb29yZGluYXRlcy4KLSAgICBpbnQgeEJl
Z2luID0gdXBwZXJCb3VuZFNjYWxlZFgoZnJhbWVDb250ZXh0LT54T2Zmc2V0KTsKLSAgICBpbnQg
eUJlZ2luID0gdXBwZXJCb3VuZFNjYWxlZFkoZnJhbWVDb250ZXh0LT55T2Zmc2V0ICsgcm93TnVt
YmVyKTsKLSAgICBpbnQgeEVuZCA9IGxvd2VyQm91bmRTY2FsZWRYKHN0ZDo6bWluKHN0YXRpY19j
YXN0PGludD4oZnJhbWVDb250ZXh0LT54T2Zmc2V0ICsgd2lkdGgpLCBzaXplKCkud2lkdGgoKSkg
LSAxLCB4QmVnaW4gKyAxKSArIDE7Ci0gICAgaW50IHlFbmQgPSBsb3dlckJvdW5kU2NhbGVkWShz
dGQ6Om1pbihzdGF0aWNfY2FzdDxpbnQ+KGZyYW1lQ29udGV4dC0+eU9mZnNldCArIHJvd051bWJl
ciArIHJlcGVhdENvdW50KSwgc2l6ZSgpLmhlaWdodCgpKSAtIDEsIHlCZWdpbiArIDEpICsgMTsK
KyAgICBpbnQgeEJlZ2luID0gZnJhbWVDb250ZXh0LT54T2Zmc2V0OworICAgIGludCB5QmVnaW4g
PSBmcmFtZUNvbnRleHQtPnlPZmZzZXQgKyByb3dOdW1iZXI7CisgICAgaW50IHhFbmQgPSBzdGQ6
Om1pbihzdGF0aWNfY2FzdDxpbnQ+KGZyYW1lQ29udGV4dC0+eE9mZnNldCArIHdpZHRoKSwgc2l6
ZSgpLndpZHRoKCkpOworICAgIGludCB5RW5kID0gc3RkOjptaW4oc3RhdGljX2Nhc3Q8aW50Pihm
cmFtZUNvbnRleHQtPnlPZmZzZXQgKyByb3dOdW1iZXIgKyByZXBlYXRDb3VudCksIHNpemUoKS5o
ZWlnaHQoKSk7CiAgICAgaWYgKHJvd0J1ZmZlci5pc0VtcHR5KCkgfHwgKHhCZWdpbiA8IDApIHx8
ICh5QmVnaW4gPCAwKSB8fCAoeEVuZCA8PSB4QmVnaW4pIHx8ICh5RW5kIDw9IHlCZWdpbikpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCkBAIC0yNDQsNyArMjM3LDcgQEAgYm9vbCBHSUZJbWFnZURl
Y29kZXI6OmhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgsIGNvbnN0IFZlY3Rvcjx1
bnNpZ25lZAogICAgIGF1dG8qIGN1cnJlbnRBZGRyZXNzID0gYnVmZmVyLmJhY2tpbmdTdG9yZSgp
LT5waXhlbEF0KHhCZWdpbiwgeUJlZ2luKTsKICAgICAvLyBXcml0ZSBvbmUgcm93J3Mgd29ydGgg
b2YgZGF0YSBpbnRvIHRoZSBmcmFtZS4gIAogICAgIGZvciAoaW50IHggPSB4QmVnaW47IHggPCB4
RW5kOyArK3gpIHsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBzb3VyY2VWYWx1ZSA9IHJv
d0J1ZmZlclsobV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4KSAtIGZyYW1lQ29udGV4
dC0+eE9mZnNldF07CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgc291cmNlVmFsdWUgPSBy
b3dCdWZmZXJbeCAtIGZyYW1lQ29udGV4dC0+eE9mZnNldF07CiAgICAgICAgIGlmICgoIWZyYW1l
Q29udGV4dC0+aXNUcmFuc3BhcmVudCB8fCAoc291cmNlVmFsdWUgIT0gZnJhbWVDb250ZXh0LT50
cGl4ZWwpKSAmJiAoc291cmNlVmFsdWUgPCBjb2xvck1hcFNpemUpKSB7CiAgICAgICAgICAgICBj
b25zdCBzaXplX3QgY29sb3JJbmRleCA9IHN0YXRpY19jYXN0PHNpemVfdD4oc291cmNlVmFsdWUp
ICogMzsKICAgICAgICAgICAgIGJ1ZmZlci5iYWNraW5nU3RvcmUoKS0+c2V0UGl4ZWwoY3VycmVu
dEFkZHJlc3MsIGNvbG9yTWFwW2NvbG9ySW5kZXhdLCBjb2xvck1hcFtjb2xvckluZGV4ICsgMV0s
IGNvbG9yTWFwW2NvbG9ySW5kZXggKyAyXSwgMjU1KTsKQEAgLTI4Nyw3ICsyODAsNyBAQCBib29s
IEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNp
Z25lZCBmcmFtZUR1cmF0aW9uLAogICAgICAgICAKICAgICAgICAgLy8gVGhlIHdob2xlIGZyYW1l
IHdhcyBub24tdHJhbnNwYXJlbnQsIHNvIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgZW50aXJlCiAg
ICAgICAgIC8vIHJlc3VsdGluZyBidWZmZXIgd2FzIG5vbi10cmFuc3BhcmVudCwgYW5kIHdlIGNh
biBzZXRIYXNBbHBoYShmYWxzZSkuCi0gICAgICAgIGlmIChyZWN0LmNvbnRhaW5zKEludFJlY3Qo
SW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpCisgICAgICAgIGlmIChyZWN0LmNvbnRhaW5zKElu
dFJlY3QoSW50UG9pbnQoKSwgc2l6ZSgpKSkpCiAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxw
aGEoZmFsc2UpOwogICAgICAgICBlbHNlIGlmIChmcmFtZUluZGV4KSB7CiAgICAgICAgICAgICAv
LyBUcmlja3kgY2FzZS4gIFRoaXMgZnJhbWUgZG9lcyBub3QgaGF2ZSBhbHBoYSBvbmx5IGlmIGV2
ZXJ5d2hlcmUKQEAgLTM3NCw3ICszNjcsNyBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZy
YW1lQnVmZmVyKHVuc2lnbmVkIGZyYW1lSW5kZXgpCiAKICAgICBpZiAoIWZyYW1lSW5kZXgpIHsK
ICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgZnJhbWUsIHNvIHdlJ3JlIG5vdCByZWx5aW5n
IG9uIGFueSBwcmV2aW91cyBkYXRhLgotICAgICAgICBpZiAoIWJ1ZmZlci0+aW5pdGlhbGl6ZShz
Y2FsZWRTaXplKCksIG1fcHJlbXVsdGlwbHlBbHBoYSkpCisgICAgICAgIGlmICghYnVmZmVyLT5p
bml0aWFsaXplKHNpemUoKSwgbV9wcmVtdWx0aXBseUFscGhhKSkKICAgICAgICAgICAgIHJldHVy
biBzZXRGYWlsZWQoKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBUaGUgc3RhcnRpbmcgc3Rh
dGUgZm9yIHRoaXMgZnJhbWUgZGVwZW5kcyBvbiB0aGUgcHJldmlvdXMgZnJhbWUncwpAQCAtNDAy
LDggKzM5NSw4IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW5zaWdu
ZWQgZnJhbWVJbmRleCkKICAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gY2xlYXIgdGhlIHByZXZp
b3VzIGZyYW1lIHRvIHRyYW5zcGFyZW50LCB3aXRob3V0CiAgICAgICAgICAgICAvLyBhZmZlY3Rp
bmcgcGl4ZWxzIGluIHRoZSBpbWFnZSBvdXRzaWRlIG9mIHRoZSBmcmFtZS4KICAgICAgICAgICAg
IEludFJlY3QgcHJldlJlY3QgPSBwcmV2QnVmZmVyLT5iYWNraW5nU3RvcmUoKS0+ZnJhbWVSZWN0
KCk7Ci0gICAgICAgICAgICBjb25zdCBJbnRTaXplJiBidWZmZXJTaXplID0gc2NhbGVkU2l6ZSgp
OwotICAgICAgICAgICAgaWYgKCFmcmFtZUluZGV4IHx8IHByZXZSZWN0LmNvbnRhaW5zKEludFJl
Y3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpIHsKKyAgICAgICAgICAgIGNvbnN0IEludFNp
emUmIGJ1ZmZlclNpemUgPSBzaXplKCk7CisgICAgICAgICAgICBpZiAoIWZyYW1lSW5kZXggfHwg
cHJldlJlY3QuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKSkgewogICAgICAg
ICAgICAgICAgIC8vIENsZWFyaW5nIHRoZSBmaXJzdCBmcmFtZSwgb3IgYSBmcmFtZSB0aGUgc2l6
ZSBvZiB0aGUgd2hvbGUKICAgICAgICAgICAgICAgICAvLyBpbWFnZSwgcmVzdWx0cyBpbiBhIGNv
bXBsZXRlbHkgZW1wdHkgaW1hZ2UuCiAgICAgICAgICAgICAgICAgaWYgKCFidWZmZXItPmluaXRp
YWxpemUoYnVmZmVyU2l6ZSwgbV9wcmVtdWx0aXBseUFscGhhKSkKQEAgLTQyNCwxMSArNDE3LDcg
QEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bnNpZ25lZCBmcmFtZUlu
ZGV4KQogICAgIGlmIChmcmFtZVJlY3QubWF4WSgpID4gc2l6ZSgpLmhlaWdodCgpKQogICAgICAg
ICBmcmFtZVJlY3Quc2V0SGVpZ2h0KHNpemUoKS5oZWlnaHQoKSAtIGZyYW1lQ29udGV4dC0+eU9m
ZnNldCk7CiAKLSAgICBpbnQgbGVmdCA9IHVwcGVyQm91bmRTY2FsZWRYKGZyYW1lUmVjdC54KCkp
OwotICAgIGludCByaWdodCA9IGxvd2VyQm91bmRTY2FsZWRYKGZyYW1lUmVjdC5tYXhYKCksIGxl
ZnQpOwotICAgIGludCB0b3AgPSB1cHBlckJvdW5kU2NhbGVkWShmcmFtZVJlY3QueSgpKTsKLSAg
ICBpbnQgYm90dG9tID0gbG93ZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWN0Lm1heFkoKSwgdG9wKTsK
LSAgICBidWZmZXItPmJhY2tpbmdTdG9yZSgpLT5zZXRGcmFtZVJlY3QoSW50UmVjdChsZWZ0LCB0
b3AsIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKSk7CisgICAgYnVmZmVyLT5iYWNraW5nU3Rv
cmUoKS0+c2V0RnJhbWVSZWN0KGZyYW1lUmVjdCk7CiAKICAgICAvLyBVcGRhdGUgb3VyIHN0YXR1
cyB0byBiZSBwYXJ0aWFsbHkgY29tcGxldGUuCiAgICAgYnVmZmVyLT5zZXREZWNvZGluZ1N0YXR1
cyhEZWNvZGluZ1N0YXR1czo6UGFydGlhbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNw
cAppbmRleCAwYzA1NDliNWEzZWUwNGFmMjljYTdkNjA2MDM1ZmNmZTYxNzQ4NTI2Li43N2NkZjkx
NzkyMzE5NmU5NGI2MDFmNjgwYzU1M2JkNjliZjIyMTUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdl
RGVjb2Rlci5jcHAKQEAgLTUwMiwxNSArNTAyLDYgQEAgSlBFR0ltYWdlRGVjb2Rlcjo6SlBFR0lt
YWdlRGVjb2RlcihBbHBoYU9wdGlvbiBhbHBoYU9wdGlvbiwgR2FtbWFBbmRDb2xvclByb2ZpbGUK
IAogSlBFR0ltYWdlRGVjb2Rlcjo6fkpQRUdJbWFnZURlY29kZXIoKSA9IGRlZmF1bHQ7CiAKLWJv
b2wgSlBFR0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQotewotICAg
IGlmICghU2NhbGFibGVJbWFnZURlY29kZXI6OnNldFNpemUoc2l6ZSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHByZXBhcmVTY2FsZURhdGFJZk5lY2Vzc2FyeSgpOwotICAgIHJldHVy
biB0cnVlOwotfQotCiBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lKiBKUEVHSW1hZ2VEZWNvZGVy
OjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQogewogICAgIGlmIChpbmRleCkKQEAg
LTU1NiwxMiArNTQ3LDEyIEBAIHZvaWQgc2V0UGl4ZWwoU2NhbGFibGVJbWFnZURlY29kZXJGcmFt
ZSYgYnVmZmVyLCB1aW50MzJfdCogY3VycmVudEFkZHJlc3MsIEpTQU1QCiAgICAgfQogfQogCi10
ZW1wbGF0ZSA8Sl9DT0xPUl9TUEFDRSBjb2xvclNwYWNlLCBib29sIGlzU2NhbGVkPgordGVtcGxh
dGUgPEpfQ09MT1JfU1BBQ0UgY29sb3JTcGFjZT4KIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0
cHV0U2NhbmxpbmVzKFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUmIGJ1ZmZlcikKIHsKICAgICBK
U0FNUEFSUkFZIHNhbXBsZXMgPSBtX3JlYWRlci0+c2FtcGxlcygpOwogICAgIGpwZWdfZGVjb21w
cmVzc19zdHJ1Y3QqIGluZm8gPSBtX3JlYWRlci0+aW5mbygpOwotICAgIGludCB3aWR0aCA9IGlz
U2NhbGVkID8gbV9zY2FsZWRDb2x1bW5zLnNpemUoKSA6IGluZm8tPm91dHB1dF93aWR0aDsKKyAg
ICBpbnQgd2lkdGggPSBpbmZvLT5vdXRwdXRfd2lkdGg7CiAKICAgICB3aGlsZSAoaW5mby0+b3V0
cHV0X3NjYW5saW5lIDwgaW5mby0+b3V0cHV0X2hlaWdodCkgewogICAgICAgICAvLyBqcGVnX3Jl
YWRfc2NhbmxpbmVzIHdpbGwgaW5jcmVhc2UgdGhlIHNjYW5saW5lIGNvdW50ZXIsIHNvIHdlCkBA
IC01NzEsMjUgKzU2MiwxOCBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5l
cyhTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lJiBidWZmZXIpCiAgICAgICAgIGlmIChqcGVnX3Jl
YWRfc2NhbmxpbmVzKGluZm8sIHNhbXBsZXMsIDEpICE9IDEpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAgICAgaW50IGRlc3RZID0gc2NhbGVkWShzb3VyY2VZKTsKLSAgICAgICAg
aWYgKGRlc3RZIDwgMCkKKyAgICAgICAgaWYgKHNvdXJjZVkgPCAwKQogICAgICAgICAgICAgY29u
dGludWU7CiAKLSAgICAgICAgYXV0byogY3VycmVudEFkZHJlc3MgPSBidWZmZXIuYmFja2luZ1N0
b3JlKCktPnBpeGVsQXQoMCwgZGVzdFkpOworICAgICAgICBhdXRvKiBjdXJyZW50QWRkcmVzcyA9
IGJ1ZmZlci5iYWNraW5nU3RvcmUoKS0+cGl4ZWxBdCgwLCBzb3VyY2VZKTsKICAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCB3aWR0aDsgKyt4KSB7Ci0gICAgICAgICAgICBzZXRQaXhlbDxjb2xv
clNwYWNlPihidWZmZXIsIGN1cnJlbnRBZGRyZXNzLCBzYW1wbGVzLCBpc1NjYWxlZCA/IG1fc2Nh
bGVkQ29sdW1uc1t4XSA6IHgpOworICAgICAgICAgICAgc2V0UGl4ZWw8Y29sb3JTcGFjZT4oYnVm
ZmVyLCBjdXJyZW50QWRkcmVzcywgc2FtcGxlcywgeCk7CiAgICAgICAgICAgICArK2N1cnJlbnRB
ZGRyZXNzOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQogCi10ZW1wbGF0
ZSA8Sl9DT0xPUl9TUEFDRSBjb2xvclNwYWNlPgotYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRw
dXRTY2FubGluZXMoU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSYgYnVmZmVyKQotewotICAgIHJl
dHVybiBtX3NjYWxlZCA/IG91dHB1dFNjYW5saW5lczxjb2xvclNwYWNlLCB0cnVlPihidWZmZXIp
IDogb3V0cHV0U2NhbmxpbmVzPGNvbG9yU3BhY2UsIGZhbHNlPihidWZmZXIpOwotfQotCiBib29s
IEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcygpCiB7CiAgICAgaWYgKG1fZnJhbWVC
dWZmZXJDYWNoZS5pc0VtcHR5KCkpCkBAIC01OTgsNyArNTgyLDcgQEAgYm9vbCBKUEVHSW1hZ2VE
ZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoKQogICAgIC8vIEluaXRpYWxpemUgdGhlIGZyYW1lYnVm
ZmVyIGlmIG5lZWRlZC4KICAgICBhdXRvJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07
CiAgICAgaWYgKGJ1ZmZlci5pc0ludmFsaWQoKSkgewotICAgICAgICBpZiAoIWJ1ZmZlci5pbml0
aWFsaXplKHNjYWxlZFNpemUoKSwgbV9wcmVtdWx0aXBseUFscGhhKSkKKyAgICAgICAgaWYgKCFi
dWZmZXIuaW5pdGlhbGl6ZShzaXplKCksIG1fcHJlbXVsdGlwbHlBbHBoYSkpCiAgICAgICAgICAg
ICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgICAgIGJ1ZmZlci5zZXREZWNvZGluZ1N0YXR1cyhE
ZWNvZGluZ1N0YXR1czo6UGFydGlhbCk7CiAgICAgICAgIC8vIFRoZSBidWZmZXIgaXMgdHJhbnNw
YXJlbnQgb3V0c2lkZSB0aGUgZGVjb2RlZCBhcmVhIHdoaWxlIHRoZSBpbWFnZSBpcwpAQCAtNjA5
LDcgKzU5Myw3IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKCkKICAg
ICBqcGVnX2RlY29tcHJlc3Nfc3RydWN0KiBpbmZvID0gbV9yZWFkZXItPmluZm8oKTsKIAogI2lm
IGRlZmluZWQoVFVSQk9fSlBFR19SR0JfU1dJWlpMRSkKLSAgICBpZiAoIW1fc2NhbGVkICYmIHR1
cmJvU3dpenpsZWQoaW5mby0+b3V0X2NvbG9yX3NwYWNlKSkgeworICAgIGlmICh0dXJib1N3aXp6
bGVkKGluZm8tPm91dF9jb2xvcl9zcGFjZSkpIHsKICAgICAgICAgd2hpbGUgKGluZm8tPm91dHB1
dF9zY2FubGluZSA8IGluZm8tPm91dHB1dF9oZWlnaHQpIHsKICAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGJ1ZmZlci5iYWNr
aW5nU3RvcmUoKS0+cGl4ZWxBdCgwLCBpbmZvLT5vdXRwdXRfc2NhbmxpbmUpKTsKICAgICAgICAg
ICAgIGlmIChqcGVnX3JlYWRfc2NhbmxpbmVzKGluZm8sICZyb3csIDEpICE9IDEpCkBAIC02MjAs
NyArNjA0LDcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoKQogI2Vu
ZGlmCiAKICAgICBzd2l0Y2ggKGluZm8tPm91dF9jb2xvcl9zcGFjZSkgewotICAgIC8vIFRoZSBj
b2RlIGluc2lkZSBvdXRwdXRTY2FubGluZXM8aW50LCBib29sPiB3aWxsIGJlIGV4ZWN1dGVkCisg
ICAgLy8gVGhlIGNvZGUgaW5zaWRlIG91dHB1dFNjYW5saW5lczxpbnQ+IHdpbGwgYmUgZXhlY3V0
ZWQKICAgICAvLyBmb3IgZWFjaCBwaXhlbCwgc28gd2Ugd2FudCB0byBhdm9pZCBhbnkgZXh0cmEg
Y29tcGFyaXNvbnMgdGhlcmUuCiAgICAgLy8gVGhhdCBpcyB3aHkgd2UgdXNlIHRlbXBsYXRlIGFu
ZCB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbnMgaGVyZSBzbwogICAgIC8vIHRoZSBwcm9wZXIgY29k
ZSB3aWxsIGJlIGdlbmVyYXRlZCBhdCBjb21waWxlIHRpbWUuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVj
b2Rlci5oCmluZGV4IDY5NTIxZGNmN2IwODZiYTczYjAyM2NiZTI0Mjk5YTgyNzlmMDlkMzQuLjgy
NTIyNmRkNmI4NzY0NDA3M2Q5OGQyMjhjYzAyODllZTQzNzBlNjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0lt
YWdlRGVjb2Rlci5oCkBAIC01MiwxOSArNTIsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgICAgIC8vIFNjYWxhYmxlSW1hZ2VEZWNvZGVyCiAgICAgICAgIFN0cmluZyBmaWxlbmFtZUV4
dGVuc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJqcGciX3M7IH0KLSAgICAgICAgYm9v
bCBzZXRTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKICAgICAgICAgU2NhbGFibGVJbWFn
ZURlY29kZXJGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkgb3ZlcnJpZGU7
CiAgICAgICAgIC8vIENBVVRJT046IHNldEZhaWxlZCgpIGRlbGV0ZXMgfG1fcmVhZGVyfC4gIEJl
IGNhcmVmdWwgdG8gYXZvaWQKICAgICAgICAgLy8gYWNjZXNzaW5nIGRlbGV0ZWQgbWVtb3J5LCBl
c3BlY2lhbGx5IHdoZW4gY2FsbGluZyB0aGlzIGZyb20gaW5zaWRlCiAgICAgICAgIC8vIEpQRUdJ
bWFnZVJlYWRlciEKICAgICAgICAgYm9vbCBzZXRGYWlsZWQoKSBvdmVycmlkZTsKIAotICAgICAg
ICBib29sIHdpbGxEb3duU2FtcGxlKCkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKFNj
YWxhYmxlSW1hZ2VEZWNvZGVyOjplbmNvZGVkRGF0YVN0YXR1cygpID49IEVuY29kZWREYXRhU3Rh
dHVzOjpTaXplQXZhaWxhYmxlKTsKLSAgICAgICAgICAgIHJldHVybiBtX3NjYWxlZDsKLSAgICAg
ICAgfQotCiAgICAgICAgIGJvb2wgb3V0cHV0U2NhbmxpbmVzKCk7CiAgICAgICAgIHZvaWQganBl
Z0NvbXBsZXRlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2pwZWcyMDAwL0pQRUcyMDAwSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcyMDAwL0pQRUcyMDAwSW1hZ2VEZWNvZGVy
LmNwcAppbmRleCAzNTA0N2UxZDVkOTI4ZDA1Zjk0ZWJkMTdiYWM3ZGIzZDYzNWUwZTRkLi41MjYz
MWZiNmQxNDIzYjRlZmYwMGE2YjlmZmUyYzU2MTY1ZjRjYTJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnMjAwMC9KUEVHMjAwMEltYWdlRGVj
b2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBl
ZzIwMDAvSlBFRzIwMDBJbWFnZURlY29kZXIuY3BwCkBAIC00NzksNyArNDc5LDcgQEAgdm9pZCBK
UEVHMjAwMEltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgb25seVNpemUsIGJvb2wgYWxsRGF0YVJl
Y2VpdmVkKQogICAgIH0KIAogICAgIGF1dG8mIGJ1ZmZlciA9IG1fZnJhbWVCdWZmZXJDYWNoZVsw
XTsKLSAgICBpZiAoIWJ1ZmZlci5pbml0aWFsaXplKHNjYWxlZFNpemUoKSwgbV9wcmVtdWx0aXBs
eUFscGhhKSkgeworICAgIGlmICghYnVmZmVyLmluaXRpYWxpemUoc2l6ZSgpLCBtX3ByZW11bHRp
cGx5QWxwaGEpKSB7CiAgICAgICAgIHNldEZhaWxlZCgpOwogICAgICAgICByZXR1cm47CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5n
L1BOR0ltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAppbmRleCA2MmNiOWIyMmEwMWYyNmU5ZjJjZDQx
ZGVhMzgxYjM2MzY4OTdlZTQyLi5lNjI1OWMxMmYxNGY5NTZkZmQ0MzYyOWNiZjFhNjEwNzRjOGRi
MTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9w
bmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcApAQCAtMjQ4LDE1ICsyNDgsNiBAQCBS
ZXBldGl0aW9uQ291bnQgUE5HSW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQoKSBjb25zdAog
fQogI2VuZGlmCiAKLWJvb2wgUE5HSW1hZ2VEZWNvZGVyOjpzZXRTaXplKGNvbnN0IEludFNpemUm
IHNpemUpCi17Ci0gICAgaWYgKCFTY2FsYWJsZUltYWdlRGVjb2Rlcjo6c2V0U2l6ZShzaXplKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcHJlcGFyZVNjYWxlRGF0YUlmTmVjZXNzYXJ5
KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUqIFBO
R0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkKIHsKICNpZiBF
TkFCTEUoQVBORykKQEAgLTQzNSw3ICs0MjYsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93
QXZhaWxhYmxlKHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgcm93SW5kZXgsCiAg
ICAgYXV0byYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW21fY3VycmVudEZyYW1lXTsKICAg
ICBpZiAoYnVmZmVyLmlzSW52YWxpZCgpKSB7CiAgICAgICAgIHBuZ19zdHJ1Y3RwIHBuZyA9IG1f
cmVhZGVyLT5wbmdQdHIoKTsKLSAgICAgICAgaWYgKCFidWZmZXIuaW5pdGlhbGl6ZShzY2FsZWRT
aXplKCksIG1fcHJlbXVsdGlwbHlBbHBoYSkpIHsKKyAgICAgICAgaWYgKCFidWZmZXIuaW5pdGlh
bGl6ZShzaXplKCksIG1fcHJlbXVsdGlwbHlBbHBoYSkpIHsKICAgICAgICAgICAgIGxvbmdqbXAo
Sk1QQlVGKHBuZyksIDEpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC00Nzcs
OCArNDY4LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZ25lZCBj
aGFyKiByb3dCdWZmZXIsIHVuc2lnbmVkIHJvd0luZGV4LAogICAgIC8vIG1ha2Ugb3VyIGxpdmVz
IGVhc2llci4KICAgICBpZiAoIXJvd0J1ZmZlcikKICAgICAgICAgcmV0dXJuOwotICAgIGludCB5
ID0gIW1fc2NhbGVkID8gcm93SW5kZXggOiBzY2FsZWRZKHJvd0luZGV4KTsKLSAgICBpZiAoeSA8
IDAgfHwgeSA+PSBzY2FsZWRTaXplKCkuaGVpZ2h0KCkpCisgICAgaWYgKHJvd0luZGV4ID49IHNp
emUoKS5oZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLyogbGlicG5nIGNvbW1lbnRz
IChjb250aW51ZWQpLgpAQCAtNTE2LDggKzUwNiw4IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpy
b3dBdmFpbGFibGUodW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCByb3dJbmRleCwK
ICAgICB9CiAKICAgICAvLyBXcml0ZSB0aGUgZGVjb2RlZCByb3cgcGl4ZWxzIHRvIHRoZSBmcmFt
ZSBidWZmZXIuCi0gICAgYXV0byogYWRkcmVzcyA9IGJ1ZmZlci5iYWNraW5nU3RvcmUoKS0+cGl4
ZWxBdCgwLCB5KTsKLSAgICBpbnQgd2lkdGggPSBzY2FsZWRTaXplKCkud2lkdGgoKTsKKyAgICBh
dXRvKiBhZGRyZXNzID0gYnVmZmVyLmJhY2tpbmdTdG9yZSgpLT5waXhlbEF0KDAsIHJvd0luZGV4
KTsKKyAgICBpbnQgd2lkdGggPSBzaXplKCkud2lkdGgoKTsKICAgICB1bnNpZ25lZCBjaGFyIG5v
blRyaXZpYWxBbHBoYU1hc2sgPSAwOwogCiAgICAgcG5nX2J5dGVwIHBpeGVsID0gcm93OwpAQCAt
Nzc3LDcgKzc2Nyw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIoc2l6
ZV90IGZyYW1lSW5kZXgpCiAgICAgICAgIC8vIFdlIHdhbnQgdG8gY2xlYXIgdGhlIHByZXZpb3Vz
IGZyYW1lIHRvIHRyYW5zcGFyZW50LCB3aXRob3V0CiAgICAgICAgIC8vIGFmZmVjdGluZyBwaXhl
bHMgaW4gdGhlIGltYWdlIG91dHNpZGUgb2YgdGhlIGZyYW1lLgogICAgICAgICBJbnRSZWN0IHBy
ZXZSZWN0ID0gcHJldkJ1ZmZlci0+YmFja2luZ1N0b3JlKCktPmZyYW1lUmVjdCgpOwotICAgICAg
ICBpZiAoIWZyYW1lSW5kZXggfHwgcHJldlJlY3QuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgp
LCBzY2FsZWRTaXplKCkpKSkgeworICAgICAgICBpZiAoIWZyYW1lSW5kZXggfHwgcHJldlJlY3Qu
Y29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKSkgewogICAgICAgICAgICAgLy8g
Q2xlYXJpbmcgdGhlIGZpcnN0IGZyYW1lLCBvciBhIGZyYW1lIHRoZSBzaXplIG9mIHRoZSB3aG9s
ZQogICAgICAgICAgICAgLy8gaW1hZ2UsIHJlc3VsdHMgaW4gYSBjb21wbGV0ZWx5IGVtcHR5IGlt
YWdlLgogICAgICAgICAgICAgYnVmZmVyLmJhY2tpbmdTdG9yZSgpLT5jbGVhcigpOwpAQCAtODAx
LDExICs3OTEsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHNpemVf
dCBmcmFtZUluZGV4KQogICAgIGlmIChmcmFtZVJlY3QubWF4WSgpID4gc2l6ZSgpLmhlaWdodCgp
KQogICAgICAgICBmcmFtZVJlY3Quc2V0SGVpZ2h0KHNpemUoKS5oZWlnaHQoKSAtIG1feU9mZnNl
dCk7CiAKLSAgICBpbnQgbGVmdCA9IHVwcGVyQm91bmRTY2FsZWRYKGZyYW1lUmVjdC54KCkpOwot
ICAgIGludCByaWdodCA9IGxvd2VyQm91bmRTY2FsZWRYKGZyYW1lUmVjdC5tYXhYKCksIGxlZnQp
OwotICAgIGludCB0b3AgPSB1cHBlckJvdW5kU2NhbGVkWShmcmFtZVJlY3QueSgpKTsKLSAgICBp
bnQgYm90dG9tID0gbG93ZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWN0Lm1heFkoKSwgdG9wKTsKLSAg
ICBidWZmZXIuYmFja2luZ1N0b3JlKCktPnNldEZyYW1lUmVjdChJbnRSZWN0KGxlZnQsIHRvcCwg
cmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3ApKTsKKyAgICBidWZmZXIuYmFja2luZ1N0b3JlKCkt
PnNldEZyYW1lUmVjdChmcmFtZVJlY3QpOwogfQogCiB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6ZnJh
bWVDb21wbGV0ZSgpCkBAIC04MjYsNyArODEyLDYgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OmZy
YW1lQ29tcGxldGUoKQogICAgICAgICBpZiAobV9ibGVuZCAmJiAhaGFzQWxwaGEpCiAgICAgICAg
ICAgICBtX2JsZW5kID0gMDsKIAotICAgICAgICBBU1NFUlQoIW1fc2NhbGVkKTsKICAgICAgICAg
cG5nX2J5dGVwIHJvdyA9IGludGVybGFjZUJ1ZmZlcjsKICAgICAgICAgZm9yIChpbnQgeSA9IHJl
Y3QueSgpOyB5IDwgcmVjdC5tYXhZKCk7ICsreSwgcm93ICs9IGNvbG9yQ2hhbm5lbHMgKiBzaXpl
KCkud2lkdGgoKSkgewogICAgICAgICAgICAgcG5nX2J5dGVwIHBpeGVsID0gcm93OwpAQCAtODQz
LDcgKzgyOCw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKCkKIAogICAg
ICAgICBpZiAoIW5vblRyaXZpYWxBbHBoYSkgewogICAgICAgICAgICAgSW50UmVjdCByZWN0ID0g
YnVmZmVyLmJhY2tpbmdTdG9yZSgpLT5mcmFtZVJlY3QoKTsKLSAgICAgICAgICAgIGlmIChyZWN0
LmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpCisgICAgICAgICAg
ICBpZiAocmVjdC5jb250YWlucyhJbnRSZWN0KEludFBvaW50KCksIHNpemUoKSkpKQogICAgICAg
ICAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7CiAgICAgICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgICAgICBzaXplX3QgZnJhbWVJbmRleCA9IG1fY3VycmVudEZyYW1lOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0lt
YWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5n
L1BOR0ltYWdlRGVjb2Rlci5oCmluZGV4IDg1ZjcwNTMzNWUzMTYxYTE5MzQ0OTYwNjc0NTMyNmQ1
NmFlZmEwZGEuLjNmYmVhMmQ3ZjMzZDFkNDIxNDg5NWRjM2NjZGY0ZjYxMzBjMTVmYTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFn
ZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9w
bmcvUE5HSW1hZ2VEZWNvZGVyLmgKQEAgLTUwLDcgKzUwLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICBzaXplX3QgZnJhbWVDb3VudCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1f
ZnJhbWVDb3VudDsgfQogICAgICAgICBSZXBldGl0aW9uQ291bnQgcmVwZXRpdGlvbkNvdW50KCkg
Y29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKLSAgICAgICAgYm9vbCBzZXRTaXplKGNvbnN0IEludFNp
emUmKSBvdmVycmlkZTsKICAgICAgICAgU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSogZnJhbWVC
dWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkgb3ZlcnJpZGU7CiAgICAgICAgIC8vIENBVVRJT046
IHNldEZhaWxlZCgpIGRlbGV0ZXMgfG1fcmVhZGVyfC4gIEJlIGNhcmVmdWwgdG8gYXZvaWQKICAg
ICAgICAgLy8gYWNjZXNzaW5nIGRlbGV0ZWQgbWVtb3J5LCBlc3BlY2lhbGx5IHdoZW4gY2FsbGlu
ZyB0aGlzIGZyb20gaW5zaWRlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376840</attachid>
            <date>2019-08-20 20:14:03 -0700</date>
            <delta_ts>2019-08-21 19:28:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200498-20190821121402.patch</filename>
            <type>text/plain</type>
            <size>24332</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4ODg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTk5MDEyYzI3MmI4M2Jm
NGIyMTcyZjJhOTVlZTg3MGQ2ZjQ3YmZhOS4uODlhOWRmNzhlMmY3ZDQ2OGY0NDAyOGNiNDQwYjZi
YzdjNDkyZjlkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE5LTA4LTIwICBGdWpp
aSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgorCisgICAgICAgIFJlbW92ZSB0
aGUgZGVhZCBjb2RlIG9mIFNjYWxhYmxlSW1hZ2VEZWNvZGVyIGZvciBzY2FsaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA0OTgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBwb3J0cyBhcmUgdXNp
bmcgdGhlIGRvd24gc2NhbGluZyBmZWF0dXJlIG9mCisgICAgICAgIFNjYWxhYmxlSW1hZ2VEZWNv
ZGVyIG5vdy4gUmVtb3ZlZCBpdC4KKworICAgICAgICBObyBiZWhhdmlvciBjaGFuZ2UuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY2FsYWJsZUltYWdlRGVjb2Rlcjo6cHJlcGFyZVNjYWxlRGF0
YUlmTmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjYWxhYmxlSW1hZ2VE
ZWNvZGVyOjp1cHBlckJvdW5kU2NhbGVkWCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
Y2FsYWJsZUltYWdlRGVjb2Rlcjo6bG93ZXJCb3VuZFNjYWxlZFgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U2NhbGFibGVJbWFnZURlY29kZXI6OnVwcGVyQm91bmRTY2FsZWRZKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjYWxhYmxlSW1hZ2VEZWNvZGVyOjpsb3dlckJvdW5k
U2NhbGVkWSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY2FsYWJsZUltYWdlRGVjb2Rl
cjo6c2NhbGVkWSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
U2NhbGFibGVJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjYWxhYmxlSW1hZ2VE
ZWNvZGVyOjpzY2FsZWRTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdJRklt
YWdlRGVjb2Rlcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6
OmZpbmRGaXJzdFJlcXVpcmVkRnJhbWVUb0RlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJ
bWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdl
RGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29k
ZXI6OmluaXRGcmFtZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
anBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURl
Y29kZXI6Om91dHB1dFNjYW5saW5lcyk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNv
ZGVyOjpzZXRTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9qcGVnMjAwMC9KUEVHMjAwMEltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKUEVHMjAwMEltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBO
R0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdl
RGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVj
b2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6
OnNldFNpemUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Bu
Zy9QTkdJbWFnZURlY29kZXIuaDoKKwogMjAxOS0wOC0xOSAgSmVyIE5vYmxlICA8amVyLm5vYmxl
QGFwcGxlLmNvbT4KIAogICAgICAgICBbQ29jb2FdIEZpeCBtaXNzcGVsbGluZyBvZiAtcHJldmVu
dHNEaXNwbGF5U2xlZXBGb3JWaWRlb1BsYXliYWNrCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rlci5j
cHAKaW5kZXggMGVhZjg2ZjhjNWFlNTM3MjcxMTUzZDJiNGRmN2UwM2VhNzQ0OTc5Mi4uMjYyOTli
NjFlODAwNGVmODRjZjEwMjVjOGVlY2VhNjBjZDFkMTU3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VE
ZWNvZGVyLmNwcApAQCAtMTUzLDQ3ICsxNTMsNiBAQCBSZWZQdHI8U2NhbGFibGVJbWFnZURlY29k
ZXI+IFNjYWxhYmxlSW1hZ2VEZWNvZGVyOjpjcmVhdGUoU2hhcmVkQnVmZmVyJiBkYXRhLCBBbAog
ICAgIHJldHVybiBudWxscHRyOwogfQogCi1uYW1lc3BhY2UgewotCi1lbnVtIE1hdGNoVHlwZSB7
Ci0gICAgRXhhY3QsCi0gICAgVXBwZXJCb3VuZCwKLSAgICBMb3dlckJvdW5kCi19OwotCi1pbmxp
bmUgdm9pZCBmaWxsU2NhbGVkVmFsdWVzKFZlY3RvcjxpbnQ+JiBzY2FsZWRWYWx1ZXMsIGRvdWJs
ZSBzY2FsZVJhdGUsIGludCBsZW5ndGgpCi17Ci0gICAgZG91YmxlIGluZmxhdGVSYXRlID0gMS4g
LyBzY2FsZVJhdGU7Ci0gICAgc2NhbGVkVmFsdWVzLnJlc2VydmVDYXBhY2l0eShzdGF0aWNfY2Fz
dDxpbnQ+KGxlbmd0aCAqIHNjYWxlUmF0ZSArIDAuNSkpOwotICAgIGZvciAoaW50IHNjYWxlZElu
ZGV4ID0gMDsgOyArK3NjYWxlZEluZGV4KSB7Ci0gICAgICAgIGludCBpbmRleCA9IHN0YXRpY19j
YXN0PGludD4oc2NhbGVkSW5kZXggKiBpbmZsYXRlUmF0ZSArIDAuNSk7Ci0gICAgICAgIGlmIChp
bmRleCA+PSBsZW5ndGgpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgc2NhbGVkVmFsdWVz
LmFwcGVuZChpbmRleCk7Ci0gICAgfQotfQotCi10ZW1wbGF0ZSA8TWF0Y2hUeXBlIHR5cGU+IGlu
dCBnZXRTY2FsZWRWYWx1ZShjb25zdCBWZWN0b3I8aW50PiYgc2NhbGVkVmFsdWVzLCBpbnQgdmFs
dWVUb01hdGNoLCBpbnQgc2VhcmNoU3RhcnQpCi17Ci0gICAgaWYgKHNjYWxlZFZhbHVlcy5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZVRvTWF0Y2g7Ci0KLSAgICBjb25zdCBpbnQqIGRh
dGFTdGFydCA9IHNjYWxlZFZhbHVlcy5kYXRhKCk7Ci0gICAgY29uc3QgaW50KiBkYXRhRW5kID0g
ZGF0YVN0YXJ0ICsgc2NhbGVkVmFsdWVzLnNpemUoKTsKLSAgICBjb25zdCBpbnQqIG1hdGNoZWQg
PSBzdGQ6Omxvd2VyX2JvdW5kKGRhdGFTdGFydCArIHNlYXJjaFN0YXJ0LCBkYXRhRW5kLCB2YWx1
ZVRvTWF0Y2gpOwotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgRXhhY3Q6Ci0gICAgICAg
IHJldHVybiBtYXRjaGVkICE9IGRhdGFFbmQgJiYgKm1hdGNoZWQgPT0gdmFsdWVUb01hdGNoID8g
bWF0Y2hlZCAtIGRhdGFTdGFydCA6IC0xOwotICAgIGNhc2UgTG93ZXJCb3VuZDoKLSAgICAgICAg
cmV0dXJuIG1hdGNoZWQgIT0gZGF0YUVuZCAmJiAqbWF0Y2hlZCA9PSB2YWx1ZVRvTWF0Y2ggPyBt
YXRjaGVkIC0gZGF0YVN0YXJ0IDogbWF0Y2hlZCAtIGRhdGFTdGFydCAtIDE7Ci0gICAgY2FzZSBV
cHBlckJvdW5kOgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBtYXRjaGVkICE9IGRhdGFF
bmQgPyBtYXRjaGVkIC0gZGF0YVN0YXJ0IDogLTE7Ci0gICAgfQotfQotCi19Ci0KIGJvb2wgU2Nh
bGFibGVJbWFnZURlY29kZXI6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KSBj
b25zdAogewogICAgIExvY2tIb2xkZXIgbG9ja0hvbGRlcihtX211dGV4KTsKQEAgLTI2NCw0OSAr
MjIzLDYgQEAgTmF0aXZlSW1hZ2VQdHIgU2NhbGFibGVJbWFnZURlY29kZXI6OmNyZWF0ZUZyYW1l
SW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2EKICAgICByZXR1cm4gYnVmZmVyLT5iYWNr
aW5nU3RvcmUoKS0+aW1hZ2UoKTsKIH0KIAotdm9pZCBTY2FsYWJsZUltYWdlRGVjb2Rlcjo6cHJl
cGFyZVNjYWxlRGF0YUlmTmVjZXNzYXJ5KCkKLXsKLSAgICBtX3NjYWxlZCA9IGZhbHNlOwotICAg
IG1fc2NhbGVkQ29sdW1ucy5jbGVhcigpOwotICAgIG1fc2NhbGVkUm93cy5jbGVhcigpOwotCi0g
ICAgaW50IHdpZHRoID0gc2l6ZSgpLndpZHRoKCk7Ci0gICAgaW50IGhlaWdodCA9IHNpemUoKS5o
ZWlnaHQoKTsKLSAgICBpbnQgbnVtUGl4ZWxzID0gaGVpZ2h0ICogd2lkdGg7Ci0gICAgaWYgKG1f
bWF4TnVtUGl4ZWxzIDw9IDAgfHwgbnVtUGl4ZWxzIDw9IG1fbWF4TnVtUGl4ZWxzKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX3NjYWxlZCA9IHRydWU7Ci0gICAgZG91YmxlIHNjYWxlID0gc3Fy
dChtX21heE51bVBpeGVscyAvIChkb3VibGUpbnVtUGl4ZWxzKTsKLSAgICBmaWxsU2NhbGVkVmFs
dWVzKG1fc2NhbGVkQ29sdW1ucywgc2NhbGUsIHdpZHRoKTsKLSAgICBmaWxsU2NhbGVkVmFsdWVz
KG1fc2NhbGVkUm93cywgc2NhbGUsIGhlaWdodCk7Ci19Ci0KLWludCBTY2FsYWJsZUltYWdlRGVj
b2Rlcjo6dXBwZXJCb3VuZFNjYWxlZFgoaW50IG9yaWdYLCBpbnQgc2VhcmNoU3RhcnQpCi17Ci0g
ICAgcmV0dXJuIGdldFNjYWxlZFZhbHVlPFVwcGVyQm91bmQ+KG1fc2NhbGVkQ29sdW1ucywgb3Jp
Z1gsIHNlYXJjaFN0YXJ0KTsKLX0KLQotaW50IFNjYWxhYmxlSW1hZ2VEZWNvZGVyOjpsb3dlckJv
dW5kU2NhbGVkWChpbnQgb3JpZ1gsIGludCBzZWFyY2hTdGFydCkKLXsKLSAgICByZXR1cm4gZ2V0
U2NhbGVkVmFsdWU8TG93ZXJCb3VuZD4obV9zY2FsZWRDb2x1bW5zLCBvcmlnWCwgc2VhcmNoU3Rh
cnQpOwotfQotCi1pbnQgU2NhbGFibGVJbWFnZURlY29kZXI6OnVwcGVyQm91bmRTY2FsZWRZKGlu
dCBvcmlnWSwgaW50IHNlYXJjaFN0YXJ0KQotewotICAgIHJldHVybiBnZXRTY2FsZWRWYWx1ZTxV
cHBlckJvdW5kPihtX3NjYWxlZFJvd3MsIG9yaWdZLCBzZWFyY2hTdGFydCk7Ci19Ci0KLWludCBT
Y2FsYWJsZUltYWdlRGVjb2Rlcjo6bG93ZXJCb3VuZFNjYWxlZFkoaW50IG9yaWdZLCBpbnQgc2Vh
cmNoU3RhcnQpCi17Ci0gICAgcmV0dXJuIGdldFNjYWxlZFZhbHVlPExvd2VyQm91bmQ+KG1fc2Nh
bGVkUm93cywgb3JpZ1ksIHNlYXJjaFN0YXJ0KTsKLX0KLQotaW50IFNjYWxhYmxlSW1hZ2VEZWNv
ZGVyOjpzY2FsZWRZKGludCBvcmlnWSwgaW50IHNlYXJjaFN0YXJ0KQotewotICAgIHJldHVybiBn
ZXRTY2FsZWRWYWx1ZTxFeGFjdD4obV9zY2FsZWRSb3dzLCBvcmlnWSwgc2VhcmNoU3RhcnQpOwot
fQotCiAjaWYgVVNFKERJUkVDVDJEKQogdm9pZCBTY2FsYWJsZUltYWdlRGVjb2Rlcjo6c2V0VGFy
Z2V0Q29udGV4dChJRDJEMVJlbmRlclRhcmdldCopCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXIu
aAppbmRleCA4ODkwYWFhM2VkNTNiOGE2ZmRlMzQ0NDA4ZjI4NTgxMmE4MjAyNGQ5Li45OTcyOWJh
MjFjOTM3YzhlOGI4N2FmMmNlNDg1YTA5MTM1N2Y1MzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNv
ZGVyLmgKQEAgLTk4LDExICs5OCw2IEBAIHB1YmxpYzoKIAogICAgIEludFNpemUgc2l6ZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGlzU2l6ZUF2YWlsYWJsZSgpID8gbV9zaXplIDogSW50U2l6
ZSgpOyB9CiAKLSAgICBJbnRTaXplIHNjYWxlZFNpemUoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fc2NhbGVkID8gSW50U2l6ZShtX3NjYWxlZENvbHVtbnMuc2l6ZSgpLCBtX3NjYWxlZFJvd3Mu
c2l6ZSgpKSA6IHNpemUoKTsKLSAgICB9Ci0KICAgICAvLyBUaGlzIHdpbGwgb25seSBkaWZmZXIg
ZnJvbSBzaXplKCkgZm9yIElDTyAod2hlcmUgZWFjaCBmcmFtZSBpcyBhCiAgICAgLy8gZGlmZmVy
ZW50IGljb24pIG9yIG90aGVyIGZvcm1hdHMgd2hlcmUgZGlmZmVyZW50IGZyYW1lcyBhcmUgZGlm
ZmVyZW50CiAgICAgLy8gc2l6ZXMuIFRoaXMgZG9lcyBOT1QgZGlmZmVyIGZyb20gc2l6ZSgpIGZv
ciBHSUYsIHNpbmNlIGRlY29kaW5nIEdJRnMKQEAgLTE5NywxOSArMTkyLDkgQEAgcHVibGljOgog
ICAgIE9wdGlvbmFsPEludFBvaW50PiBob3RTcG90KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
V1RGOjpudWxsb3B0OyB9CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIHByZXBhcmVTY2FsZURhdGFJ
Zk5lY2Vzc2FyeSgpOwotICAgIGludCB1cHBlckJvdW5kU2NhbGVkWChpbnQgb3JpZ1gsIGludCBz
ZWFyY2hTdGFydCA9IDApOwotICAgIGludCBsb3dlckJvdW5kU2NhbGVkWChpbnQgb3JpZ1gsIGlu
dCBzZWFyY2hTdGFydCA9IDApOwotICAgIGludCB1cHBlckJvdW5kU2NhbGVkWShpbnQgb3JpZ1ks
IGludCBzZWFyY2hTdGFydCA9IDApOwotICAgIGludCBsb3dlckJvdW5kU2NhbGVkWShpbnQgb3Jp
Z1ksIGludCBzZWFyY2hTdGFydCA9IDApOwotICAgIGludCBzY2FsZWRZKGludCBvcmlnWSwgaW50
IHNlYXJjaFN0YXJ0ID0gMCk7Ci0KICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7IC8v
IFRoZSBlbmNvZGVkIGRhdGEuCiAgICAgVmVjdG9yPFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUs
IDE+IG1fZnJhbWVCdWZmZXJDYWNoZTsKICAgICBtdXRhYmxlIExvY2sgbV9tdXRleDsKLSAgICBi
b29sIG1fc2NhbGVkIHsgZmFsc2UgfTsKLSAgICBWZWN0b3I8aW50PiBtX3NjYWxlZENvbHVtbnM7
Ci0gICAgVmVjdG9yPGludD4gbV9zY2FsZWRSb3dzOwogICAgIGJvb2wgbV9wcmVtdWx0aXBseUFs
cGhhOwogICAgIGJvb2wgbV9pZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZTsKICAgICBJbWFnZU9y
aWVudGF0aW9uIG1fb3JpZW50YXRpb247CkBAIC0yMjQsMTIgKzIwOSw2IEBAIHByaXZhdGU6CiAg
ICAgSW50U2l6ZSBtX3NpemU7CiAgICAgRW5jb2RlZERhdGFTdGF0dXMgbV9lbmNvZGVkRGF0YVN0
YXR1cyB7IEVuY29kZWREYXRhU3RhdHVzOjpUeXBlQXZhaWxhYmxlIH07CiAgICAgYm9vbCBtX2Rl
Y29kaW5nU2l6ZUZyb21TZXREYXRhIHsgZmFsc2UgfTsKLQotICAgIC8vIEZJWE1FOiBFdmFsdWF0
ZSB0aGUgbmVlZCBmb3IgZGVjb2RlZCBkYXRhIHNjYWxpbmcuIG1fc2NhbGVkLAotICAgIC8vIG1f
c2NhbGVkQ29sdW1ucyBhbmQgbV9zY2FsZWRSb3dzIGFyZSBtZW1iZXIgdmFyaWFibGVzIHRoYXQg
YXJlCi0gICAgLy8gYWZmZWN0ZWQgYnkgdGhpcyB2YWx1ZSwgYW5kIGFyZSBub3QgdXNlZCBhdCBh
bGwgc2luY2UgdGhlIHZhbHVlCi0gICAgLy8gaXMgbmVnYXZpdGUgKHNlZSBwcmVwYXJlU2NhbGVE
YXRhSWZOZWNlc3NhcnkoKSkuCi0gICAgc3RhdGljIGNvbnN0IGludCBtX21heE51bVBpeGVscyB7
IC0xIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29k
ZXIuY3BwCmluZGV4IDRmMzQ4N2UzMzQ3NjQwNTQ3NGNmODZiNWM2MDZkMmMxOTg4YzdjYmEuLmVj
ZDllZWUyMGZlYmVhMTI5YjNjYzYyMjA1YTg2YTUxOThkMWE0YzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZURlY29kZXIuY3BwCkBAIC01MywxMSArNTMsNyBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6c2V0
U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogICAgIGlmIChTY2FsYWJsZUltYWdlRGVjb2Rlcjo6
ZW5jb2RlZERhdGFTdGF0dXMoKSA+PSBFbmNvZGVkRGF0YVN0YXR1czo6U2l6ZUF2YWlsYWJsZSAm
JiB0aGlzLT5zaXplKCkgPT0gc2l6ZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAo
IVNjYWxhYmxlSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHNpemUpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gU2NhbGFibGVJbWFnZURlY29kZXI6OnNldFNpemUoc2l6ZSk7CiB9CiAK
IHNpemVfdCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKSBjb25zdApAQCAtMTI2LDkgKzEy
Miw2IEBAIHNpemVfdCBHSUZJbWFnZURlY29kZXI6OmZpbmRGaXJzdFJlcXVpcmVkRnJhbWVUb0Rl
Y29kZShzaXplX3QgZnJhbWVJbmRleCkKICAgICAgICAgICAgIGNvbnN0IGF1dG8qIGZyYW1lQ29u
dGV4dCA9IG1fcmVhZGVyLT5mcmFtZUNvbnRleHQoaSAtIDEpOwogICAgICAgICAgICAgQVNTRVJU
KGZyYW1lQ29udGV4dCk7CiAgICAgICAgICAgICBJbnRSZWN0IGZyYW1lUmVjdChmcmFtZUNvbnRl
eHQtPnhPZmZzZXQsIGZyYW1lQ29udGV4dC0+eU9mZnNldCwgZnJhbWVDb250ZXh0LT53aWR0aCwg
ZnJhbWVDb250ZXh0LT5oZWlnaHQpOwotICAgICAgICAgICAgLy8gV2Ugd291bGQgbmVlZCB0byBz
Y2FsZSBmcmFtZVJlY3QgYW5kIGNoZWNrIHdoZXRoZXIgaXQgZmlsbHMgdGhlIHdob2xlIHNjYWxl
ZFNpemUoKS4gQnV0Ci0gICAgICAgICAgICAvLyBjYW4gY2hlY2sgd2hldGhlciB0aGUgb3JpZ2lu
YWwgZnJhbWVSZWN0IGZpbGxzIHNpemUoKSBpbnN0ZWFkLiBJZiB0aGUgZnJhbWUgZmlsbHMgdGhl
Ci0gICAgICAgICAgICAvLyB3aG9sZSBhcmVhIHRoZW4gaXQgY2FuIGJlIGRlY29kZWQgd2l0aG91
dCBkZXBlbmRlbmNpZXMuCiAgICAgICAgICAgICBpZiAoZnJhbWVSZWN0LmNvbnRhaW5zKHsgeyB9
LCBzaXplKCkgfSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgIH0KQEAgLTIx
NiwxMCArMjA5LDEwIEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnNp
Z25lZCBmcmFtZUluZGV4LCBjb25zdCBWZWN0b3I8dW5zaWduZWQKICAgICAvLyB0aGF0IHdpZHRo
ID09IChzaXplKCkud2lkdGgoKSAtIGZyYW1lQ29udGV4dC0+eE9mZnNldCksIHNvCiAgICAgLy8g
d2UgbXVzdCBlbnN1cmUgd2UgZG9uJ3QgcnVuIG9mZiB0aGUgZW5kIG9mIGVpdGhlciB0aGUgc291
cmNlIGRhdGEgb3IgdGhlCiAgICAgLy8gcm93J3MgWC1jb29yZGluYXRlcy4KLSAgICBpbnQgeEJl
Z2luID0gdXBwZXJCb3VuZFNjYWxlZFgoZnJhbWVDb250ZXh0LT54T2Zmc2V0KTsKLSAgICBpbnQg
eUJlZ2luID0gdXBwZXJCb3VuZFNjYWxlZFkoZnJhbWVDb250ZXh0LT55T2Zmc2V0ICsgcm93TnVt
YmVyKTsKLSAgICBpbnQgeEVuZCA9IGxvd2VyQm91bmRTY2FsZWRYKHN0ZDo6bWluKHN0YXRpY19j
YXN0PGludD4oZnJhbWVDb250ZXh0LT54T2Zmc2V0ICsgd2lkdGgpLCBzaXplKCkud2lkdGgoKSkg
LSAxLCB4QmVnaW4gKyAxKSArIDE7Ci0gICAgaW50IHlFbmQgPSBsb3dlckJvdW5kU2NhbGVkWShz
dGQ6Om1pbihzdGF0aWNfY2FzdDxpbnQ+KGZyYW1lQ29udGV4dC0+eU9mZnNldCArIHJvd051bWJl
ciArIHJlcGVhdENvdW50KSwgc2l6ZSgpLmhlaWdodCgpKSAtIDEsIHlCZWdpbiArIDEpICsgMTsK
KyAgICBpbnQgeEJlZ2luID0gZnJhbWVDb250ZXh0LT54T2Zmc2V0OworICAgIGludCB5QmVnaW4g
PSBmcmFtZUNvbnRleHQtPnlPZmZzZXQgKyByb3dOdW1iZXI7CisgICAgaW50IHhFbmQgPSBzdGQ6
Om1pbihzdGF0aWNfY2FzdDxpbnQ+KGZyYW1lQ29udGV4dC0+eE9mZnNldCArIHdpZHRoKSwgc2l6
ZSgpLndpZHRoKCkpOworICAgIGludCB5RW5kID0gc3RkOjptaW4oc3RhdGljX2Nhc3Q8aW50Pihm
cmFtZUNvbnRleHQtPnlPZmZzZXQgKyByb3dOdW1iZXIgKyByZXBlYXRDb3VudCksIHNpemUoKS5o
ZWlnaHQoKSk7CiAgICAgaWYgKHJvd0J1ZmZlci5pc0VtcHR5KCkgfHwgKHhCZWdpbiA8IDApIHx8
ICh5QmVnaW4gPCAwKSB8fCAoeEVuZCA8PSB4QmVnaW4pIHx8ICh5RW5kIDw9IHlCZWdpbikpCiAg
ICAgICAgIHJldHVybiB0cnVlOwogCkBAIC0yNDQsNyArMjM3LDcgQEAgYm9vbCBHSUZJbWFnZURl
Y29kZXI6OmhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgsIGNvbnN0IFZlY3Rvcjx1
bnNpZ25lZAogICAgIGF1dG8qIGN1cnJlbnRBZGRyZXNzID0gYnVmZmVyLmJhY2tpbmdTdG9yZSgp
LT5waXhlbEF0KHhCZWdpbiwgeUJlZ2luKTsKICAgICAvLyBXcml0ZSBvbmUgcm93J3Mgd29ydGgg
b2YgZGF0YSBpbnRvIHRoZSBmcmFtZS4gIAogICAgIGZvciAoaW50IHggPSB4QmVnaW47IHggPCB4
RW5kOyArK3gpIHsKLSAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBzb3VyY2VWYWx1ZSA9IHJv
d0J1ZmZlclsobV9zY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4KSAtIGZyYW1lQ29udGV4
dC0+eE9mZnNldF07CisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgc291cmNlVmFsdWUgPSBy
b3dCdWZmZXJbeCAtIGZyYW1lQ29udGV4dC0+eE9mZnNldF07CiAgICAgICAgIGlmICgoIWZyYW1l
Q29udGV4dC0+aXNUcmFuc3BhcmVudCB8fCAoc291cmNlVmFsdWUgIT0gZnJhbWVDb250ZXh0LT50
cGl4ZWwpKSAmJiAoc291cmNlVmFsdWUgPCBjb2xvck1hcFNpemUpKSB7CiAgICAgICAgICAgICBj
b25zdCBzaXplX3QgY29sb3JJbmRleCA9IHN0YXRpY19jYXN0PHNpemVfdD4oc291cmNlVmFsdWUp
ICogMzsKICAgICAgICAgICAgIGJ1ZmZlci5iYWNraW5nU3RvcmUoKS0+c2V0UGl4ZWwoY3VycmVu
dEFkZHJlc3MsIGNvbG9yTWFwW2NvbG9ySW5kZXhdLCBjb2xvck1hcFtjb2xvckluZGV4ICsgMV0s
IGNvbG9yTWFwW2NvbG9ySW5kZXggKyAyXSwgMjU1KTsKQEAgLTI4Nyw3ICsyODAsNyBAQCBib29s
IEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNp
Z25lZCBmcmFtZUR1cmF0aW9uLAogICAgICAgICAKICAgICAgICAgLy8gVGhlIHdob2xlIGZyYW1l
IHdhcyBub24tdHJhbnNwYXJlbnQsIHNvIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgZW50aXJlCiAg
ICAgICAgIC8vIHJlc3VsdGluZyBidWZmZXIgd2FzIG5vbi10cmFuc3BhcmVudCwgYW5kIHdlIGNh
biBzZXRIYXNBbHBoYShmYWxzZSkuCi0gICAgICAgIGlmIChyZWN0LmNvbnRhaW5zKEludFJlY3Qo
SW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpCisgICAgICAgIGlmIChyZWN0LmNvbnRhaW5zKElu
dFJlY3QoSW50UG9pbnQoKSwgc2l6ZSgpKSkpCiAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxw
aGEoZmFsc2UpOwogICAgICAgICBlbHNlIGlmIChmcmFtZUluZGV4KSB7CiAgICAgICAgICAgICAv
LyBUcmlja3kgY2FzZS4gIFRoaXMgZnJhbWUgZG9lcyBub3QgaGF2ZSBhbHBoYSBvbmx5IGlmIGV2
ZXJ5d2hlcmUKQEAgLTM3NCw3ICszNjcsNyBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aW5pdEZy
YW1lQnVmZmVyKHVuc2lnbmVkIGZyYW1lSW5kZXgpCiAKICAgICBpZiAoIWZyYW1lSW5kZXgpIHsK
ICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgZnJhbWUsIHNvIHdlJ3JlIG5vdCByZWx5aW5n
IG9uIGFueSBwcmV2aW91cyBkYXRhLgotICAgICAgICBpZiAoIWJ1ZmZlci0+aW5pdGlhbGl6ZShz
Y2FsZWRTaXplKCksIG1fcHJlbXVsdGlwbHlBbHBoYSkpCisgICAgICAgIGlmICghYnVmZmVyLT5p
bml0aWFsaXplKHNpemUoKSwgbV9wcmVtdWx0aXBseUFscGhhKSkKICAgICAgICAgICAgIHJldHVy
biBzZXRGYWlsZWQoKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBUaGUgc3RhcnRpbmcgc3Rh
dGUgZm9yIHRoaXMgZnJhbWUgZGVwZW5kcyBvbiB0aGUgcHJldmlvdXMgZnJhbWUncwpAQCAtNDAy
LDggKzM5NSw4IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW5zaWdu
ZWQgZnJhbWVJbmRleCkKICAgICAgICAgICAgIC8vIFdlIHdhbnQgdG8gY2xlYXIgdGhlIHByZXZp
b3VzIGZyYW1lIHRvIHRyYW5zcGFyZW50LCB3aXRob3V0CiAgICAgICAgICAgICAvLyBhZmZlY3Rp
bmcgcGl4ZWxzIGluIHRoZSBpbWFnZSBvdXRzaWRlIG9mIHRoZSBmcmFtZS4KICAgICAgICAgICAg
IEludFJlY3QgcHJldlJlY3QgPSBwcmV2QnVmZmVyLT5iYWNraW5nU3RvcmUoKS0+ZnJhbWVSZWN0
KCk7Ci0gICAgICAgICAgICBjb25zdCBJbnRTaXplJiBidWZmZXJTaXplID0gc2NhbGVkU2l6ZSgp
OwotICAgICAgICAgICAgaWYgKCFmcmFtZUluZGV4IHx8IHByZXZSZWN0LmNvbnRhaW5zKEludFJl
Y3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpIHsKKyAgICAgICAgICAgIGNvbnN0IEludFNp
emUmIGJ1ZmZlclNpemUgPSBzaXplKCk7CisgICAgICAgICAgICBpZiAoIWZyYW1lSW5kZXggfHwg
cHJldlJlY3QuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKSkgewogICAgICAg
ICAgICAgICAgIC8vIENsZWFyaW5nIHRoZSBmaXJzdCBmcmFtZSwgb3IgYSBmcmFtZSB0aGUgc2l6
ZSBvZiB0aGUgd2hvbGUKICAgICAgICAgICAgICAgICAvLyBpbWFnZSwgcmVzdWx0cyBpbiBhIGNv
bXBsZXRlbHkgZW1wdHkgaW1hZ2UuCiAgICAgICAgICAgICAgICAgaWYgKCFidWZmZXItPmluaXRp
YWxpemUoYnVmZmVyU2l6ZSwgbV9wcmVtdWx0aXBseUFscGhhKSkKQEAgLTQyNCwxMSArNDE3LDcg
QEAgYm9vbCBHSUZJbWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bnNpZ25lZCBmcmFtZUlu
ZGV4KQogICAgIGlmIChmcmFtZVJlY3QubWF4WSgpID4gc2l6ZSgpLmhlaWdodCgpKQogICAgICAg
ICBmcmFtZVJlY3Quc2V0SGVpZ2h0KHNpemUoKS5oZWlnaHQoKSAtIGZyYW1lQ29udGV4dC0+eU9m
ZnNldCk7CiAKLSAgICBpbnQgbGVmdCA9IHVwcGVyQm91bmRTY2FsZWRYKGZyYW1lUmVjdC54KCkp
OwotICAgIGludCByaWdodCA9IGxvd2VyQm91bmRTY2FsZWRYKGZyYW1lUmVjdC5tYXhYKCksIGxl
ZnQpOwotICAgIGludCB0b3AgPSB1cHBlckJvdW5kU2NhbGVkWShmcmFtZVJlY3QueSgpKTsKLSAg
ICBpbnQgYm90dG9tID0gbG93ZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWN0Lm1heFkoKSwgdG9wKTsK
LSAgICBidWZmZXItPmJhY2tpbmdTdG9yZSgpLT5zZXRGcmFtZVJlY3QoSW50UmVjdChsZWZ0LCB0
b3AsIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKSk7CisgICAgYnVmZmVyLT5iYWNraW5nU3Rv
cmUoKS0+c2V0RnJhbWVSZWN0KGZyYW1lUmVjdCk7CiAKICAgICAvLyBVcGRhdGUgb3VyIHN0YXR1
cyB0byBiZSBwYXJ0aWFsbHkgY29tcGxldGUuCiAgICAgYnVmZmVyLT5zZXREZWNvZGluZ1N0YXR1
cyhEZWNvZGluZ1N0YXR1czo6UGFydGlhbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNw
cAppbmRleCAwYzA1NDliNWEzZWUwNGFmMjljYTdkNjA2MDM1ZmNmZTYxNzQ4NTI2Li5mMzNmMjQ3
YWQ3MGNkNjEwNDRjMGM0YTQzNDIzN2U0NDMwZjAxY2M1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdl
RGVjb2Rlci5jcHAKQEAgLTUwMiwxNSArNTAyLDYgQEAgSlBFR0ltYWdlRGVjb2Rlcjo6SlBFR0lt
YWdlRGVjb2RlcihBbHBoYU9wdGlvbiBhbHBoYU9wdGlvbiwgR2FtbWFBbmRDb2xvclByb2ZpbGUK
IAogSlBFR0ltYWdlRGVjb2Rlcjo6fkpQRUdJbWFnZURlY29kZXIoKSA9IGRlZmF1bHQ7CiAKLWJv
b2wgSlBFR0ltYWdlRGVjb2Rlcjo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQotewotICAg
IGlmICghU2NhbGFibGVJbWFnZURlY29kZXI6OnNldFNpemUoc2l6ZSkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIHByZXBhcmVTY2FsZURhdGFJZk5lY2Vzc2FyeSgpOwotICAgIHJldHVy
biB0cnVlOwotfQotCiBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lKiBKUEVHSW1hZ2VEZWNvZGVy
OjpmcmFtZUJ1ZmZlckF0SW5kZXgoc2l6ZV90IGluZGV4KQogewogICAgIGlmIChpbmRleCkKQEAg
LTU1NiwxMiArNTQ3LDEyIEBAIHZvaWQgc2V0UGl4ZWwoU2NhbGFibGVJbWFnZURlY29kZXJGcmFt
ZSYgYnVmZmVyLCB1aW50MzJfdCogY3VycmVudEFkZHJlc3MsIEpTQU1QCiAgICAgfQogfQogCi10
ZW1wbGF0ZSA8Sl9DT0xPUl9TUEFDRSBjb2xvclNwYWNlLCBib29sIGlzU2NhbGVkPgordGVtcGxh
dGUgPEpfQ09MT1JfU1BBQ0UgY29sb3JTcGFjZT4KIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0
cHV0U2NhbmxpbmVzKFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUmIGJ1ZmZlcikKIHsKICAgICBK
U0FNUEFSUkFZIHNhbXBsZXMgPSBtX3JlYWRlci0+c2FtcGxlcygpOwogICAgIGpwZWdfZGVjb21w
cmVzc19zdHJ1Y3QqIGluZm8gPSBtX3JlYWRlci0+aW5mbygpOwotICAgIGludCB3aWR0aCA9IGlz
U2NhbGVkID8gbV9zY2FsZWRDb2x1bW5zLnNpemUoKSA6IGluZm8tPm91dHB1dF93aWR0aDsKKyAg
ICBpbnQgd2lkdGggPSBpbmZvLT5vdXRwdXRfd2lkdGg7CiAKICAgICB3aGlsZSAoaW5mby0+b3V0
cHV0X3NjYW5saW5lIDwgaW5mby0+b3V0cHV0X2hlaWdodCkgewogICAgICAgICAvLyBqcGVnX3Jl
YWRfc2NhbmxpbmVzIHdpbGwgaW5jcmVhc2UgdGhlIHNjYW5saW5lIGNvdW50ZXIsIHNvIHdlCkBA
IC01NzEsMjUgKzU2MiwxNSBAQCBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5l
cyhTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lJiBidWZmZXIpCiAgICAgICAgIGlmIChqcGVnX3Jl
YWRfc2NhbmxpbmVzKGluZm8sIHNhbXBsZXMsIDEpICE9IDEpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICAgICAgaW50IGRlc3RZID0gc2NhbGVkWShzb3VyY2VZKTsKLSAgICAgICAg
aWYgKGRlc3RZIDwgMCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF1dG8qIGN1
cnJlbnRBZGRyZXNzID0gYnVmZmVyLmJhY2tpbmdTdG9yZSgpLT5waXhlbEF0KDAsIGRlc3RZKTsK
KyAgICAgICAgYXV0byogY3VycmVudEFkZHJlc3MgPSBidWZmZXIuYmFja2luZ1N0b3JlKCktPnBp
eGVsQXQoMCwgc291cmNlWSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7ICsr
eCkgewotICAgICAgICAgICAgc2V0UGl4ZWw8Y29sb3JTcGFjZT4oYnVmZmVyLCBjdXJyZW50QWRk
cmVzcywgc2FtcGxlcywgaXNTY2FsZWQgPyBtX3NjYWxlZENvbHVtbnNbeF0gOiB4KTsKKyAgICAg
ICAgICAgIHNldFBpeGVsPGNvbG9yU3BhY2U+KGJ1ZmZlciwgY3VycmVudEFkZHJlc3MsIHNhbXBs
ZXMsIHgpOwogICAgICAgICAgICAgKytjdXJyZW50QWRkcmVzczsKICAgICAgICAgfQogICAgIH0K
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdGVtcGxhdGUgPEpfQ09MT1JfU1BBQ0UgY29sb3JTcGFj
ZT4KLWJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKFNjYWxhYmxlSW1hZ2VE
ZWNvZGVyRnJhbWUmIGJ1ZmZlcikKLXsKLSAgICByZXR1cm4gbV9zY2FsZWQgPyBvdXRwdXRTY2Fu
bGluZXM8Y29sb3JTcGFjZSwgdHJ1ZT4oYnVmZmVyKSA6IG91dHB1dFNjYW5saW5lczxjb2xvclNw
YWNlLCBmYWxzZT4oYnVmZmVyKTsKLX0KLQogYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRT
Y2FubGluZXMoKQogewogICAgIGlmIChtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpKQpAQCAt
NTk4LDcgKzU3OSw3IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKCkK
ICAgICAvLyBJbml0aWFsaXplIHRoZSBmcmFtZWJ1ZmZlciBpZiBuZWVkZWQuCiAgICAgYXV0byYg
YnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlWzBdOwogICAgIGlmIChidWZmZXIuaXNJbnZhbGlk
KCkpIHsKLSAgICAgICAgaWYgKCFidWZmZXIuaW5pdGlhbGl6ZShzY2FsZWRTaXplKCksIG1fcHJl
bXVsdGlwbHlBbHBoYSkpCisgICAgICAgIGlmICghYnVmZmVyLmluaXRpYWxpemUoc2l6ZSgpLCBt
X3ByZW11bHRpcGx5QWxwaGEpKQogICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAg
ICAgICBidWZmZXIuc2V0RGVjb2RpbmdTdGF0dXMoRGVjb2RpbmdTdGF0dXM6OlBhcnRpYWwpOwog
ICAgICAgICAvLyBUaGUgYnVmZmVyIGlzIHRyYW5zcGFyZW50IG91dHNpZGUgdGhlIGRlY29kZWQg
YXJlYSB3aGlsZSB0aGUgaW1hZ2UgaXMKQEAgLTYwOSw3ICs1OTAsNyBAQCBib29sIEpQRUdJbWFn
ZURlY29kZXI6Om91dHB1dFNjYW5saW5lcygpCiAgICAganBlZ19kZWNvbXByZXNzX3N0cnVjdCog
aW5mbyA9IG1fcmVhZGVyLT5pbmZvKCk7CiAKICNpZiBkZWZpbmVkKFRVUkJPX0pQRUdfUkdCX1NX
SVpaTEUpCi0gICAgaWYgKCFtX3NjYWxlZCAmJiB0dXJib1N3aXp6bGVkKGluZm8tPm91dF9jb2xv
cl9zcGFjZSkpIHsKKyAgICBpZiAodHVyYm9Td2l6emxlZChpbmZvLT5vdXRfY29sb3Jfc3BhY2Up
KSB7CiAgICAgICAgIHdoaWxlIChpbmZvLT5vdXRwdXRfc2NhbmxpbmUgPCBpbmZvLT5vdXRwdXRf
aGVpZ2h0KSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiByb3cgPSByZWludGVycHJldF9j
YXN0PHVuc2lnbmVkIGNoYXIqPihidWZmZXIuYmFja2luZ1N0b3JlKCktPnBpeGVsQXQoMCwgaW5m
by0+b3V0cHV0X3NjYW5saW5lKSk7CiAgICAgICAgICAgICBpZiAoanBlZ19yZWFkX3NjYW5saW5l
cyhpbmZvLCAmcm93LCAxKSAhPSAxKQpAQCAtNjIwLDcgKzYwMSw3IEBAIGJvb2wgSlBFR0ltYWdl
RGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKCkKICNlbmRpZgogCiAgICAgc3dpdGNoIChpbmZvLT5v
dXRfY29sb3Jfc3BhY2UpIHsKLSAgICAvLyBUaGUgY29kZSBpbnNpZGUgb3V0cHV0U2NhbmxpbmVz
PGludCwgYm9vbD4gd2lsbCBiZSBleGVjdXRlZAorICAgIC8vIFRoZSBjb2RlIGluc2lkZSBvdXRw
dXRTY2FubGluZXM8aW50PiB3aWxsIGJlIGV4ZWN1dGVkCiAgICAgLy8gZm9yIGVhY2ggcGl4ZWws
IHNvIHdlIHdhbnQgdG8gYXZvaWQgYW55IGV4dHJhIGNvbXBhcmlzb25zIHRoZXJlLgogICAgIC8v
IFRoYXQgaXMgd2h5IHdlIHVzZSB0ZW1wbGF0ZSBhbmQgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb25z
IGhlcmUgc28KICAgICAvLyB0aGUgcHJvcGVyIGNvZGUgd2lsbCBiZSBnZW5lcmF0ZWQgYXQgY29t
cGlsZSB0aW1lLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAppbmRleCA2OTUyMWRjZjdiMDg2
YmE3M2IwMjNjYmUyNDI5OWE4Mjc5ZjA5ZDM0Li44MjUyMjZkZDZiODc2NDQwNzNkOThkMjI4Y2Mw
Mjg5ZWU0MzcwZTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaApAQCAtNTIsMTkgKzUy
LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICAvLyBTY2FsYWJsZUltYWdlRGVj
b2RlcgogICAgICAgICBTdHJpbmcgZmlsZW5hbWVFeHRlbnNpb24oKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiAianBnIl9zOyB9Ci0gICAgICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJikg
b3ZlcnJpZGU7CiAgICAgICAgIFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUqIGZyYW1lQnVmZmVy
QXRJbmRleChzaXplX3QgaW5kZXgpIG92ZXJyaWRlOwogICAgICAgICAvLyBDQVVUSU9OOiBzZXRG
YWlsZWQoKSBkZWxldGVzIHxtX3JlYWRlcnwuICBCZSBjYXJlZnVsIHRvIGF2b2lkCiAgICAgICAg
IC8vIGFjY2Vzc2luZyBkZWxldGVkIG1lbW9yeSwgZXNwZWNpYWxseSB3aGVuIGNhbGxpbmcgdGhp
cyBmcm9tIGluc2lkZQogICAgICAgICAvLyBKUEVHSW1hZ2VSZWFkZXIhCiAgICAgICAgIGJvb2wg
c2V0RmFpbGVkKCkgb3ZlcnJpZGU7CiAKLSAgICAgICAgYm9vbCB3aWxsRG93blNhbXBsZSgpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChTY2FsYWJsZUltYWdlRGVjb2Rlcjo6ZW5jb2Rl
ZERhdGFTdGF0dXMoKSA+PSBFbmNvZGVkRGF0YVN0YXR1czo6U2l6ZUF2YWlsYWJsZSk7Ci0gICAg
ICAgICAgICByZXR1cm4gbV9zY2FsZWQ7Ci0gICAgICAgIH0KLQogICAgICAgICBib29sIG91dHB1
dFNjYW5saW5lcygpOwogICAgICAgICB2b2lkIGpwZWdDb21wbGV0ZSgpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnMjAwMC9KUEVHMjAw
MEltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9qcGVnMjAwMC9KUEVHMjAwMEltYWdlRGVjb2Rlci5jcHAKaW5kZXggMzUwNDdlMWQ1ZDkyOGQw
NWY5NGViZDE3YmFjN2RiM2Q2MzVlMGU0ZC4uNTI2MzFmYjZkMTQyM2I0ZWZmMDBhNmI5ZmZlMmM1
NjE2NWY0Y2EyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvanBlZzIwMDAvSlBFRzIwMDBJbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcyMDAwL0pQRUcyMDAwSW1hZ2VEZWNvZGVy
LmNwcApAQCAtNDc5LDcgKzQ3OSw3IEBAIHZvaWQgSlBFRzIwMDBJbWFnZURlY29kZXI6OmRlY29k
ZShib29sIG9ubHlTaXplLCBib29sIGFsbERhdGFSZWNlaXZlZCkKICAgICB9CiAKICAgICBhdXRv
JiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVyQ2FjaGVbMF07Ci0gICAgaWYgKCFidWZmZXIuaW5pdGlh
bGl6ZShzY2FsZWRTaXplKCksIG1fcHJlbXVsdGlwbHlBbHBoYSkpIHsKKyAgICBpZiAoIWJ1ZmZl
ci5pbml0aWFsaXplKHNpemUoKSwgbV9wcmVtdWx0aXBseUFscGhhKSkgewogICAgICAgICBzZXRG
YWlsZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5j
cHAKaW5kZXggNjJjYjliMjJhMDFmMjZlOWYyY2Q0MWRlYTM4MWIzNjM2ODk3ZWU0Mi4uZTYyNTlj
MTJmMTRmOTU2ZGZkNDM2MjljYmYxYTYxMDc0YzhkYjE5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVj
b2Rlci5jcHAKQEAgLTI0OCwxNSArMjQ4LDYgQEAgUmVwZXRpdGlvbkNvdW50IFBOR0ltYWdlRGVj
b2Rlcjo6cmVwZXRpdGlvbkNvdW50KCkgY29uc3QKIH0KICNlbmRpZgogCi1ib29sIFBOR0ltYWdl
RGVjb2Rlcjo6c2V0U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIGlmICghU2NhbGFi
bGVJbWFnZURlY29kZXI6OnNldFNpemUoc2l6ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHByZXBhcmVTY2FsZURhdGFJZk5lY2Vzc2FyeSgpOwotICAgIHJldHVybiB0cnVlOwotfQot
CiBTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lKiBQTkdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVy
QXRJbmRleChzaXplX3QgaW5kZXgpCiB7CiAjaWYgRU5BQkxFKEFQTkcpCkBAIC00MzUsNyArNDI2
LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1bnNpZ25lZCBjaGFyKiBy
b3dCdWZmZXIsIHVuc2lnbmVkIHJvd0luZGV4LAogICAgIGF1dG8mIGJ1ZmZlciA9IG1fZnJhbWVC
dWZmZXJDYWNoZVttX2N1cnJlbnRGcmFtZV07CiAgICAgaWYgKGJ1ZmZlci5pc0ludmFsaWQoKSkg
ewogICAgICAgICBwbmdfc3RydWN0cCBwbmcgPSBtX3JlYWRlci0+cG5nUHRyKCk7Ci0gICAgICAg
IGlmICghYnVmZmVyLmluaXRpYWxpemUoc2NhbGVkU2l6ZSgpLCBtX3ByZW11bHRpcGx5QWxwaGEp
KSB7CisgICAgICAgIGlmICghYnVmZmVyLmluaXRpYWxpemUoc2l6ZSgpLCBtX3ByZW11bHRpcGx5
QWxwaGEpKSB7CiAgICAgICAgICAgICBsb25nam1wKEpNUEJVRihwbmcpLCAxKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNDc3LDggKzQ2OCw3IEBAIHZvaWQgUE5HSW1hZ2VE
ZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCBy
b3dJbmRleCwKICAgICAvLyBtYWtlIG91ciBsaXZlcyBlYXNpZXIuCiAgICAgaWYgKCFyb3dCdWZm
ZXIpCiAgICAgICAgIHJldHVybjsKLSAgICBpbnQgeSA9ICFtX3NjYWxlZCA/IHJvd0luZGV4IDog
c2NhbGVkWShyb3dJbmRleCk7Ci0gICAgaWYgKHkgPCAwIHx8IHkgPj0gc2NhbGVkU2l6ZSgpLmhl
aWdodCgpKQorICAgIGlmIChyb3dJbmRleCA+PSBzaXplKCkuaGVpZ2h0KCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8qIGxpYnBuZyBjb21tZW50cyAoY29udGludWVkKS4KQEAgLTUxNiw4ICs1
MDYsOCBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnbmVkIGNoYXIq
IHJvd0J1ZmZlciwgdW5zaWduZWQgcm93SW5kZXgsCiAgICAgfQogCiAgICAgLy8gV3JpdGUgdGhl
IGRlY29kZWQgcm93IHBpeGVscyB0byB0aGUgZnJhbWUgYnVmZmVyLgotICAgIGF1dG8qIGFkZHJl
c3MgPSBidWZmZXIuYmFja2luZ1N0b3JlKCktPnBpeGVsQXQoMCwgeSk7Ci0gICAgaW50IHdpZHRo
ID0gc2NhbGVkU2l6ZSgpLndpZHRoKCk7CisgICAgYXV0byogYWRkcmVzcyA9IGJ1ZmZlci5iYWNr
aW5nU3RvcmUoKS0+cGl4ZWxBdCgwLCByb3dJbmRleCk7CisgICAgaW50IHdpZHRoID0gc2l6ZSgp
LndpZHRoKCk7CiAgICAgdW5zaWduZWQgY2hhciBub25Ucml2aWFsQWxwaGFNYXNrID0gMDsKIAog
ICAgIHBuZ19ieXRlcCBwaXhlbCA9IHJvdzsKQEAgLTc3Nyw3ICs3NjcsNyBAQCB2b2lkIFBOR0lt
YWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKHNpemVfdCBmcmFtZUluZGV4KQogICAgICAgICAv
LyBXZSB3YW50IHRvIGNsZWFyIHRoZSBwcmV2aW91cyBmcmFtZSB0byB0cmFuc3BhcmVudCwgd2l0
aG91dAogICAgICAgICAvLyBhZmZlY3RpbmcgcGl4ZWxzIGluIHRoZSBpbWFnZSBvdXRzaWRlIG9m
IHRoZSBmcmFtZS4KICAgICAgICAgSW50UmVjdCBwcmV2UmVjdCA9IHByZXZCdWZmZXItPmJhY2tp
bmdTdG9yZSgpLT5mcmFtZVJlY3QoKTsKLSAgICAgICAgaWYgKCFmcmFtZUluZGV4IHx8IHByZXZS
ZWN0LmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpIHsKKyAgICAg
ICAgaWYgKCFmcmFtZUluZGV4IHx8IHByZXZSZWN0LmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQo
KSwgc2l6ZSgpKSkpIHsKICAgICAgICAgICAgIC8vIENsZWFyaW5nIHRoZSBmaXJzdCBmcmFtZSwg
b3IgYSBmcmFtZSB0aGUgc2l6ZSBvZiB0aGUgd2hvbGUKICAgICAgICAgICAgIC8vIGltYWdlLCBy
ZXN1bHRzIGluIGEgY29tcGxldGVseSBlbXB0eSBpbWFnZS4KICAgICAgICAgICAgIGJ1ZmZlci5i
YWNraW5nU3RvcmUoKS0+Y2xlYXIoKTsKQEAgLTgwMSwxMSArNzkxLDcgQEAgdm9pZCBQTkdJbWFn
ZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcihzaXplX3QgZnJhbWVJbmRleCkKICAgICBpZiAoZnJh
bWVSZWN0Lm1heFkoKSA+IHNpemUoKS5oZWlnaHQoKSkKICAgICAgICAgZnJhbWVSZWN0LnNldEhl
aWdodChzaXplKCkuaGVpZ2h0KCkgLSBtX3lPZmZzZXQpOwogCi0gICAgaW50IGxlZnQgPSB1cHBl
ckJvdW5kU2NhbGVkWChmcmFtZVJlY3QueCgpKTsKLSAgICBpbnQgcmlnaHQgPSBsb3dlckJvdW5k
U2NhbGVkWChmcmFtZVJlY3QubWF4WCgpLCBsZWZ0KTsKLSAgICBpbnQgdG9wID0gdXBwZXJCb3Vu
ZFNjYWxlZFkoZnJhbWVSZWN0LnkoKSk7Ci0gICAgaW50IGJvdHRvbSA9IGxvd2VyQm91bmRTY2Fs
ZWRZKGZyYW1lUmVjdC5tYXhZKCksIHRvcCk7Ci0gICAgYnVmZmVyLmJhY2tpbmdTdG9yZSgpLT5z
ZXRGcmFtZVJlY3QoSW50UmVjdChsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9w
KSk7CisgICAgYnVmZmVyLmJhY2tpbmdTdG9yZSgpLT5zZXRGcmFtZVJlY3QoZnJhbWVSZWN0KTsK
IH0KIAogdm9pZCBQTkdJbWFnZURlY29kZXI6OmZyYW1lQ29tcGxldGUoKQpAQCAtODI2LDcgKzgx
Miw2IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRlKCkKICAgICAgICAgaWYg
KG1fYmxlbmQgJiYgIWhhc0FscGhhKQogICAgICAgICAgICAgbV9ibGVuZCA9IDA7CiAKLSAgICAg
ICAgQVNTRVJUKCFtX3NjYWxlZCk7CiAgICAgICAgIHBuZ19ieXRlcCByb3cgPSBpbnRlcmxhY2VC
dWZmZXI7CiAgICAgICAgIGZvciAoaW50IHkgPSByZWN0LnkoKTsgeSA8IHJlY3QubWF4WSgpOyAr
K3ksIHJvdyArPSBjb2xvckNoYW5uZWxzICogc2l6ZSgpLndpZHRoKCkpIHsKICAgICAgICAgICAg
IHBuZ19ieXRlcCBwaXhlbCA9IHJvdzsKQEAgLTg0Myw3ICs4MjgsNyBAQCB2b2lkIFBOR0ltYWdl
RGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCiAKICAgICAgICAgaWYgKCFub25Ucml2aWFsQWxwaGEp
IHsKICAgICAgICAgICAgIEludFJlY3QgcmVjdCA9IGJ1ZmZlci5iYWNraW5nU3RvcmUoKS0+ZnJh
bWVSZWN0KCk7Ci0gICAgICAgICAgICBpZiAocmVjdC5jb250YWlucyhJbnRSZWN0KEludFBvaW50
KCksIHNjYWxlZFNpemUoKSkpKQorICAgICAgICAgICAgaWYgKHJlY3QuY29udGFpbnMoSW50UmVj
dChJbnRQb2ludCgpLCBzaXplKCkpKSkKICAgICAgICAgICAgICAgICBidWZmZXIuc2V0SGFzQWxw
aGEoZmFsc2UpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgc2l6ZV90IGZy
YW1lSW5kZXggPSBtX2N1cnJlbnRGcmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3BuZy9QTkdJbWFnZURlY29kZXIuaAppbmRleCA4
NWY3MDUzMzVlMzE2MWExOTM0NDk2MDY3NDUzMjZkNTZhZWZhMGRhLi4zZmJlYTJkN2YzM2QxZDQy
MTQ4OTVkYzNjY2RmNGY2MTMwYzE1ZmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCkBAIC01
MCw3ICs1MCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc2l6ZV90IGZyYW1lQ291
bnQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2ZyYW1lQ291bnQ7IH0KICAgICAgICAgUmVw
ZXRpdGlvbkNvdW50IHJlcGV0aXRpb25Db3VudCgpIGNvbnN0IG92ZXJyaWRlOwogI2VuZGlmCi0g
ICAgICAgIGJvb2wgc2V0U2l6ZShjb25zdCBJbnRTaXplJikgb3ZlcnJpZGU7CiAgICAgICAgIFNj
YWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUqIGZyYW1lQnVmZmVyQXRJbmRleChzaXplX3QgaW5kZXgp
IG92ZXJyaWRlOwogICAgICAgICAvLyBDQVVUSU9OOiBzZXRGYWlsZWQoKSBkZWxldGVzIHxtX3Jl
YWRlcnwuICBCZSBjYXJlZnVsIHRvIGF2b2lkCiAgICAgICAgIC8vIGFjY2Vzc2luZyBkZWxldGVk
IG1lbW9yeSwgZXNwZWNpYWxseSB3aGVuIGNhbGxpbmcgdGhpcyBmcm9tIGluc2lkZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>376967</attachid>
            <date>2019-08-21 19:28:37 -0700</date>
            <delta_ts>2019-08-22 02:13:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200498-20190822112836.patch</filename>
            <type>text/plain</type>
            <size>24424</size>
            <attacher name="Fujii Hironori">fujii</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ4OTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2E1YWJlODMxM2U1NDI3
YjQ2ZDIwOTU3MjhkOTgzZTI5YjM2MjI3OS4uNGI3ODc5NDg1OTE1YjJhMDg2MjcwNjkyZTQ1OWY0
MjkxZGE3NDA1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE5LTA4LTIxICBGdWpp
aSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgorCisgICAgICAgIFJlbW92ZSB0
aGUgZGVhZCBjb2RlIG9mIFNjYWxhYmxlSW1hZ2VEZWNvZGVyIGZvciBzY2FsaW5nCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDA0OTgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBwb3J0cyBhcmUgdXNp
bmcgdGhlIGRvd24gc2NhbGluZyBmZWF0dXJlIG9mCisgICAgICAgIFNjYWxhYmxlSW1hZ2VEZWNv
ZGVyIG5vdy4gUmVtb3ZlZCBpdC4KKworICAgICAgICBObyBiZWhhdmlvciBjaGFuZ2UuCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY2FsYWJsZUltYWdlRGVjb2Rlcjo6cHJlcGFyZVNjYWxlRGF0
YUlmTmVjZXNzYXJ5KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjYWxhYmxlSW1hZ2VE
ZWNvZGVyOjp1cHBlckJvdW5kU2NhbGVkWCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
Y2FsYWJsZUltYWdlRGVjb2Rlcjo6bG93ZXJCb3VuZFNjYWxlZFgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U2NhbGFibGVJbWFnZURlY29kZXI6OnVwcGVyQm91bmRTY2FsZWRZKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjYWxhYmxlSW1hZ2VEZWNvZGVyOjpsb3dlckJvdW5k
U2NhbGVkWSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTY2FsYWJsZUltYWdlRGVjb2Rl
cjo6c2NhbGVkWSk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
U2NhbGFibGVJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNjYWxhYmxlSW1hZ2VE
ZWNvZGVyOjpzY2FsZWRTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdJRklt
YWdlRGVjb2Rlcjo6c2V0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6
OmZpbmRGaXJzdFJlcXVpcmVkRnJhbWVUb0RlY29kZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJ
bWFnZURlY29kZXI6OmhhdmVEZWNvZGVkUm93KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdl
RGVjb2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29k
ZXI6OmluaXRGcmFtZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
anBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZURl
Y29kZXI6Om91dHB1dFNjYW5saW5lcyk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNv
ZGVyOjpzZXRTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9qcGVnL0pQRUdJbWFnZURlY29kZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9qcGVnMjAwMC9KUEVHMjAwMEltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpKUEVHMjAwMEltYWdlRGVjb2Rlcjo6ZGVjb2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBO
R0ltYWdlRGVjb2Rlcjo6cm93QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdl
RGVjb2Rlcjo6aW5pdEZyYW1lQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBOR0ltYWdlRGVj
b2Rlcjo6ZnJhbWVDb21wbGV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQTkdJbWFnZURlY29kZXI6
OnNldFNpemUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Bu
Zy9QTkdJbWFnZURlY29kZXIuaDoKKwogMjAxOS0wOC0yMCAgUnlvc3VrZSBOaXdhICA8cm5pd2FA
d2Via2l0Lm9yZz4KIAogICAgICAgICBuZXh0RWxlbWVudFdpdGhHcmVhdGVyVGFiSW5kZXggc2hv
dWxkIHVzZSBzaGFkb3dBZGp1c3RlZFRhYkluZGV4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rlci5j
cHAKaW5kZXggMGVhZjg2ZjhjNWFlNTM3MjcxMTUzZDJiNGRmN2UwM2VhNzQ0OTc5Mi4uMjYyOTli
NjFlODAwNGVmODRjZjEwMjVjOGVlY2VhNjBjZDFkMTU3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VE
ZWNvZGVyLmNwcApAQCAtMTUzLDQ3ICsxNTMsNiBAQCBSZWZQdHI8U2NhbGFibGVJbWFnZURlY29k
ZXI+IFNjYWxhYmxlSW1hZ2VEZWNvZGVyOjpjcmVhdGUoU2hhcmVkQnVmZmVyJiBkYXRhLCBBbAog
ICAgIHJldHVybiBudWxscHRyOwogfQogCi1uYW1lc3BhY2UgewotCi1lbnVtIE1hdGNoVHlwZSB7
Ci0gICAgRXhhY3QsCi0gICAgVXBwZXJCb3VuZCwKLSAgICBMb3dlckJvdW5kCi19OwotCi1pbmxp
bmUgdm9pZCBmaWxsU2NhbGVkVmFsdWVzKFZlY3RvcjxpbnQ+JiBzY2FsZWRWYWx1ZXMsIGRvdWJs
ZSBzY2FsZVJhdGUsIGludCBsZW5ndGgpCi17Ci0gICAgZG91YmxlIGluZmxhdGVSYXRlID0gMS4g
LyBzY2FsZVJhdGU7Ci0gICAgc2NhbGVkVmFsdWVzLnJlc2VydmVDYXBhY2l0eShzdGF0aWNfY2Fz
dDxpbnQ+KGxlbmd0aCAqIHNjYWxlUmF0ZSArIDAuNSkpOwotICAgIGZvciAoaW50IHNjYWxlZElu
ZGV4ID0gMDsgOyArK3NjYWxlZEluZGV4KSB7Ci0gICAgICAgIGludCBpbmRleCA9IHN0YXRpY19j
YXN0PGludD4oc2NhbGVkSW5kZXggKiBpbmZsYXRlUmF0ZSArIDAuNSk7Ci0gICAgICAgIGlmIChp
bmRleCA+PSBsZW5ndGgpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgc2NhbGVkVmFsdWVz
LmFwcGVuZChpbmRleCk7Ci0gICAgfQotfQotCi10ZW1wbGF0ZSA8TWF0Y2hUeXBlIHR5cGU+IGlu
dCBnZXRTY2FsZWRWYWx1ZShjb25zdCBWZWN0b3I8aW50PiYgc2NhbGVkVmFsdWVzLCBpbnQgdmFs
dWVUb01hdGNoLCBpbnQgc2VhcmNoU3RhcnQpCi17Ci0gICAgaWYgKHNjYWxlZFZhbHVlcy5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiB2YWx1ZVRvTWF0Y2g7Ci0KLSAgICBjb25zdCBpbnQqIGRh
dGFTdGFydCA9IHNjYWxlZFZhbHVlcy5kYXRhKCk7Ci0gICAgY29uc3QgaW50KiBkYXRhRW5kID0g
ZGF0YVN0YXJ0ICsgc2NhbGVkVmFsdWVzLnNpemUoKTsKLSAgICBjb25zdCBpbnQqIG1hdGNoZWQg
PSBzdGQ6Omxvd2VyX2JvdW5kKGRhdGFTdGFydCArIHNlYXJjaFN0YXJ0LCBkYXRhRW5kLCB2YWx1
ZVRvTWF0Y2gpOwotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgRXhhY3Q6Ci0gICAgICAg
IHJldHVybiBtYXRjaGVkICE9IGRhdGFFbmQgJiYgKm1hdGNoZWQgPT0gdmFsdWVUb01hdGNoID8g
bWF0Y2hlZCAtIGRhdGFTdGFydCA6IC0xOwotICAgIGNhc2UgTG93ZXJCb3VuZDoKLSAgICAgICAg
cmV0dXJuIG1hdGNoZWQgIT0gZGF0YUVuZCAmJiAqbWF0Y2hlZCA9PSB2YWx1ZVRvTWF0Y2ggPyBt
YXRjaGVkIC0gZGF0YVN0YXJ0IDogbWF0Y2hlZCAtIGRhdGFTdGFydCAtIDE7Ci0gICAgY2FzZSBV
cHBlckJvdW5kOgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBtYXRjaGVkICE9IGRhdGFF
bmQgPyBtYXRjaGVkIC0gZGF0YVN0YXJ0IDogLTE7Ci0gICAgfQotfQotCi19Ci0KIGJvb2wgU2Nh
bGFibGVJbWFnZURlY29kZXI6OmZyYW1lSXNDb21wbGV0ZUF0SW5kZXgoc2l6ZV90IGluZGV4KSBj
b25zdAogewogICAgIExvY2tIb2xkZXIgbG9ja0hvbGRlcihtX211dGV4KTsKQEAgLTI2NCw0OSAr
MjIzLDYgQEAgTmF0aXZlSW1hZ2VQdHIgU2NhbGFibGVJbWFnZURlY29kZXI6OmNyZWF0ZUZyYW1l
SW1hZ2VBdEluZGV4KHNpemVfdCBpbmRleCwgU3Vic2EKICAgICByZXR1cm4gYnVmZmVyLT5iYWNr
aW5nU3RvcmUoKS0+aW1hZ2UoKTsKIH0KIAotdm9pZCBTY2FsYWJsZUltYWdlRGVjb2Rlcjo6cHJl
cGFyZVNjYWxlRGF0YUlmTmVjZXNzYXJ5KCkKLXsKLSAgICBtX3NjYWxlZCA9IGZhbHNlOwotICAg
IG1fc2NhbGVkQ29sdW1ucy5jbGVhcigpOwotICAgIG1fc2NhbGVkUm93cy5jbGVhcigpOwotCi0g
ICAgaW50IHdpZHRoID0gc2l6ZSgpLndpZHRoKCk7Ci0gICAgaW50IGhlaWdodCA9IHNpemUoKS5o
ZWlnaHQoKTsKLSAgICBpbnQgbnVtUGl4ZWxzID0gaGVpZ2h0ICogd2lkdGg7Ci0gICAgaWYgKG1f
bWF4TnVtUGl4ZWxzIDw9IDAgfHwgbnVtUGl4ZWxzIDw9IG1fbWF4TnVtUGl4ZWxzKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBtX3NjYWxlZCA9IHRydWU7Ci0gICAgZG91YmxlIHNjYWxlID0gc3Fy
dChtX21heE51bVBpeGVscyAvIChkb3VibGUpbnVtUGl4ZWxzKTsKLSAgICBmaWxsU2NhbGVkVmFs
dWVzKG1fc2NhbGVkQ29sdW1ucywgc2NhbGUsIHdpZHRoKTsKLSAgICBmaWxsU2NhbGVkVmFsdWVz
KG1fc2NhbGVkUm93cywgc2NhbGUsIGhlaWdodCk7Ci19Ci0KLWludCBTY2FsYWJsZUltYWdlRGVj
b2Rlcjo6dXBwZXJCb3VuZFNjYWxlZFgoaW50IG9yaWdYLCBpbnQgc2VhcmNoU3RhcnQpCi17Ci0g
ICAgcmV0dXJuIGdldFNjYWxlZFZhbHVlPFVwcGVyQm91bmQ+KG1fc2NhbGVkQ29sdW1ucywgb3Jp
Z1gsIHNlYXJjaFN0YXJ0KTsKLX0KLQotaW50IFNjYWxhYmxlSW1hZ2VEZWNvZGVyOjpsb3dlckJv
dW5kU2NhbGVkWChpbnQgb3JpZ1gsIGludCBzZWFyY2hTdGFydCkKLXsKLSAgICByZXR1cm4gZ2V0
U2NhbGVkVmFsdWU8TG93ZXJCb3VuZD4obV9zY2FsZWRDb2x1bW5zLCBvcmlnWCwgc2VhcmNoU3Rh
cnQpOwotfQotCi1pbnQgU2NhbGFibGVJbWFnZURlY29kZXI6OnVwcGVyQm91bmRTY2FsZWRZKGlu
dCBvcmlnWSwgaW50IHNlYXJjaFN0YXJ0KQotewotICAgIHJldHVybiBnZXRTY2FsZWRWYWx1ZTxV
cHBlckJvdW5kPihtX3NjYWxlZFJvd3MsIG9yaWdZLCBzZWFyY2hTdGFydCk7Ci19Ci0KLWludCBT
Y2FsYWJsZUltYWdlRGVjb2Rlcjo6bG93ZXJCb3VuZFNjYWxlZFkoaW50IG9yaWdZLCBpbnQgc2Vh
cmNoU3RhcnQpCi17Ci0gICAgcmV0dXJuIGdldFNjYWxlZFZhbHVlPExvd2VyQm91bmQ+KG1fc2Nh
bGVkUm93cywgb3JpZ1ksIHNlYXJjaFN0YXJ0KTsKLX0KLQotaW50IFNjYWxhYmxlSW1hZ2VEZWNv
ZGVyOjpzY2FsZWRZKGludCBvcmlnWSwgaW50IHNlYXJjaFN0YXJ0KQotewotICAgIHJldHVybiBn
ZXRTY2FsZWRWYWx1ZTxFeGFjdD4obV9zY2FsZWRSb3dzLCBvcmlnWSwgc2VhcmNoU3RhcnQpOwot
fQotCiAjaWYgVVNFKERJUkVDVDJEKQogdm9pZCBTY2FsYWJsZUltYWdlRGVjb2Rlcjo6c2V0VGFy
Z2V0Q29udGV4dChJRDJEMVJlbmRlclRhcmdldCopCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rlci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvU2NhbGFibGVJbWFnZURlY29kZXIu
aAppbmRleCA4ODkwYWFhM2VkNTNiOGE2ZmRlMzQ0NDA4ZjI4NTgxMmE4MjAyNGQ5Li45OTcyOWJh
MjFjOTM3YzhlOGI4N2FmMmNlNDg1YTA5MTM1N2Y1MzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9TY2FsYWJsZUltYWdlRGVjb2Rlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL1NjYWxhYmxlSW1hZ2VEZWNv
ZGVyLmgKQEAgLTk4LDExICs5OCw2IEBAIHB1YmxpYzoKIAogICAgIEludFNpemUgc2l6ZSgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGlzU2l6ZUF2YWlsYWJsZSgpID8gbV9zaXplIDogSW50U2l6
ZSgpOyB9CiAKLSAgICBJbnRTaXplIHNjYWxlZFNpemUoKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fc2NhbGVkID8gSW50U2l6ZShtX3NjYWxlZENvbHVtbnMuc2l6ZSgpLCBtX3NjYWxlZFJvd3Mu
c2l6ZSgpKSA6IHNpemUoKTsKLSAgICB9Ci0KICAgICAvLyBUaGlzIHdpbGwgb25seSBkaWZmZXIg
ZnJvbSBzaXplKCkgZm9yIElDTyAod2hlcmUgZWFjaCBmcmFtZSBpcyBhCiAgICAgLy8gZGlmZmVy
ZW50IGljb24pIG9yIG90aGVyIGZvcm1hdHMgd2hlcmUgZGlmZmVyZW50IGZyYW1lcyBhcmUgZGlm
ZmVyZW50CiAgICAgLy8gc2l6ZXMuIFRoaXMgZG9lcyBOT1QgZGlmZmVyIGZyb20gc2l6ZSgpIGZv
ciBHSUYsIHNpbmNlIGRlY29kaW5nIEdJRnMKQEAgLTE5NywxOSArMTkyLDkgQEAgcHVibGljOgog
ICAgIE9wdGlvbmFsPEludFBvaW50PiBob3RTcG90KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
V1RGOjpudWxsb3B0OyB9CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIHByZXBhcmVTY2FsZURhdGFJ
Zk5lY2Vzc2FyeSgpOwotICAgIGludCB1cHBlckJvdW5kU2NhbGVkWChpbnQgb3JpZ1gsIGludCBz
ZWFyY2hTdGFydCA9IDApOwotICAgIGludCBsb3dlckJvdW5kU2NhbGVkWChpbnQgb3JpZ1gsIGlu
dCBzZWFyY2hTdGFydCA9IDApOwotICAgIGludCB1cHBlckJvdW5kU2NhbGVkWShpbnQgb3JpZ1ks
IGludCBzZWFyY2hTdGFydCA9IDApOwotICAgIGludCBsb3dlckJvdW5kU2NhbGVkWShpbnQgb3Jp
Z1ksIGludCBzZWFyY2hTdGFydCA9IDApOwotICAgIGludCBzY2FsZWRZKGludCBvcmlnWSwgaW50
IHNlYXJjaFN0YXJ0ID0gMCk7Ci0KICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBtX2RhdGE7IC8v
IFRoZSBlbmNvZGVkIGRhdGEuCiAgICAgVmVjdG9yPFNjYWxhYmxlSW1hZ2VEZWNvZGVyRnJhbWUs
IDE+IG1fZnJhbWVCdWZmZXJDYWNoZTsKICAgICBtdXRhYmxlIExvY2sgbV9tdXRleDsKLSAgICBi
b29sIG1fc2NhbGVkIHsgZmFsc2UgfTsKLSAgICBWZWN0b3I8aW50PiBtX3NjYWxlZENvbHVtbnM7
Ci0gICAgVmVjdG9yPGludD4gbV9zY2FsZWRSb3dzOwogICAgIGJvb2wgbV9wcmVtdWx0aXBseUFs
cGhhOwogICAgIGJvb2wgbV9pZ25vcmVHYW1tYUFuZENvbG9yUHJvZmlsZTsKICAgICBJbWFnZU9y
aWVudGF0aW9uIG1fb3JpZW50YXRpb247CkBAIC0yMjQsMTIgKzIwOSw2IEBAIHByaXZhdGU6CiAg
ICAgSW50U2l6ZSBtX3NpemU7CiAgICAgRW5jb2RlZERhdGFTdGF0dXMgbV9lbmNvZGVkRGF0YVN0
YXR1cyB7IEVuY29kZWREYXRhU3RhdHVzOjpUeXBlQXZhaWxhYmxlIH07CiAgICAgYm9vbCBtX2Rl
Y29kaW5nU2l6ZUZyb21TZXREYXRhIHsgZmFsc2UgfTsKLQotICAgIC8vIEZJWE1FOiBFdmFsdWF0
ZSB0aGUgbmVlZCBmb3IgZGVjb2RlZCBkYXRhIHNjYWxpbmcuIG1fc2NhbGVkLAotICAgIC8vIG1f
c2NhbGVkQ29sdW1ucyBhbmQgbV9zY2FsZWRSb3dzIGFyZSBtZW1iZXIgdmFyaWFibGVzIHRoYXQg
YXJlCi0gICAgLy8gYWZmZWN0ZWQgYnkgdGhpcyB2YWx1ZSwgYW5kIGFyZSBub3QgdXNlZCBhdCBh
bGwgc2luY2UgdGhlIHZhbHVlCi0gICAgLy8gaXMgbmVnYXZpdGUgKHNlZSBwcmVwYXJlU2NhbGVE
YXRhSWZOZWNlc3NhcnkoKSkuCi0gICAgc3RhdGljIGNvbnN0IGludCBtX21heE51bVBpeGVscyB7
IC0xIH07CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29k
ZXIuY3BwCmluZGV4IDRmMzQ4N2UzMzQ3NjQwNTQ3NGNmODZiNWM2MDZkMmMxOTg4YzdjYmEuLmQw
MTdhNTk4YjFkOWNmN2FiODZjOTZjYzU2NDc1MThiMzk1NzUwNWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZURlY29kZXIuY3BwCkBAIC01MywxMSArNTMsNyBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6c2V0
U2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogICAgIGlmIChTY2FsYWJsZUltYWdlRGVjb2Rlcjo6
ZW5jb2RlZERhdGFTdGF0dXMoKSA+PSBFbmNvZGVkRGF0YVN0YXR1czo6U2l6ZUF2YWlsYWJsZSAm
JiB0aGlzLT5zaXplKCkgPT0gc2l6ZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAo
IVNjYWxhYmxlSW1hZ2VEZWNvZGVyOjpzZXRTaXplKHNpemUpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBwcmVwYXJlU2NhbGVEYXRhSWZOZWNlc3NhcnkoKTsKLSAgICByZXR1cm4gdHJ1
ZTsKKyAgICByZXR1cm4gU2NhbGFibGVJbWFnZURlY29kZXI6OnNldFNpemUoc2l6ZSk7CiB9CiAK
IHNpemVfdCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKSBjb25zdApAQCAtMTI2LDkgKzEy
Miw2IEBAIHNpemVfdCBHSUZJbWFnZURlY29kZXI6OmZpbmRGaXJzdFJlcXVpcmVkRnJhbWVUb0Rl
Y29kZShzaXplX3QgZnJhbWVJbmRleCkKICAgICAgICAgICAgIGNvbnN0IGF1dG8qIGZyYW1lQ29u
dGV4dCA9IG1fcmVhZGVyLT5mcmFtZUNvbnRleHQoaSAtIDEpOwogICAgICAgICAgICAgQVNTRVJU
KGZyYW1lQ29udGV4dCk7CiAgICAgICAgICAgICBJbnRSZWN0IGZyYW1lUmVjdChmcmFtZUNvbnRl
eHQtPnhPZmZzZXQsIGZyYW1lQ29udGV4dC0+eU9mZnNldCwgZnJhbWVDb250ZXh0LT53aWR0aCwg
ZnJhbWVDb250ZXh0LT5oZWlnaHQpOwotICAgICAgICAgICAgLy8gV2Ugd291bGQgbmVlZCB0byBz
Y2FsZSBmcmFtZVJlY3QgYW5kIGNoZWNrIHdoZXRoZXIgaXQgZmlsbHMgdGhlIHdob2xlIHNjYWxl
ZFNpemUoKS4gQnV0Ci0gICAgICAgICAgICAvLyBjYW4gY2hlY2sgd2hldGhlciB0aGUgb3JpZ2lu
YWwgZnJhbWVSZWN0IGZpbGxzIHNpemUoKSBpbnN0ZWFkLiBJZiB0aGUgZnJhbWUgZmlsbHMgdGhl
Ci0gICAgICAgICAgICAvLyB3aG9sZSBhcmVhIHRoZW4gaXQgY2FuIGJlIGRlY29kZWQgd2l0aG91
dCBkZXBlbmRlbmNpZXMuCiAgICAgICAgICAgICBpZiAoZnJhbWVSZWN0LmNvbnRhaW5zKHsgeyB9
LCBzaXplKCkgfSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgIH0KQEAgLTIx
NiwxMSArMjA5LDExIEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnNp
Z25lZCBmcmFtZUluZGV4LCBjb25zdCBWZWN0b3I8dW5zaWduZWQKICAgICAvLyB0aGF0IHdpZHRo
ID09IChzaXplKCkud2lkdGgoKSAtIGZyYW1lQ29udGV4dC0+eE9mZnNldCksIHNvCiAgICAgLy8g
d2UgbXVzdCBlbnN1cmUgd2UgZG9uJ3QgcnVuIG9mZiB0aGUgZW5kIG9mIGVpdGhlciB0aGUgc291
cmNlIGRhdGEgb3IgdGhlCiAgICAgLy8gcm93J3MgWC1jb29yZGluYXRlcy4KLSAgICBpbnQgeEJl
Z2luID0gdXBwZXJCb3VuZFNjYWxlZFgoZnJhbWVDb250ZXh0LT54T2Zmc2V0KTsKLSAgICBpbnQg
eUJlZ2luID0gdXBwZXJCb3VuZFNjYWxlZFkoZnJhbWVDb250ZXh0LT55T2Zmc2V0ICsgcm93TnVt
YmVyKTsKLSAgICBpbnQgeEVuZCA9IGxvd2VyQm91bmRTY2FsZWRYKHN0ZDo6bWluKHN0YXRpY19j
YXN0PGludD4oZnJhbWVDb250ZXh0LT54T2Zmc2V0ICsgd2lkdGgpLCBzaXplKCkud2lkdGgoKSkg
LSAxLCB4QmVnaW4gKyAxKSArIDE7Ci0gICAgaW50IHlFbmQgPSBsb3dlckJvdW5kU2NhbGVkWShz
dGQ6Om1pbihzdGF0aWNfY2FzdDxpbnQ+KGZyYW1lQ29udGV4dC0+eU9mZnNldCArIHJvd051bWJl
ciArIHJlcGVhdENvdW50KSwgc2l6ZSgpLmhlaWdodCgpKSAtIDEsIHlCZWdpbiArIDEpICsgMTsK
LSAgICBpZiAocm93QnVmZmVyLmlzRW1wdHkoKSB8fCAoeEJlZ2luIDwgMCkgfHwgKHlCZWdpbiA8
IDApIHx8ICh4RW5kIDw9IHhCZWdpbikgfHwgKHlFbmQgPD0geUJlZ2luKSkKKyAgICBpbnQgeEJl
Z2luID0gZnJhbWVDb250ZXh0LT54T2Zmc2V0OworICAgIGludCB5QmVnaW4gPSBmcmFtZUNvbnRl
eHQtPnlPZmZzZXQgKyByb3dOdW1iZXI7CisgICAgaW50IHhFbmQgPSBzdGQ6Om1pbihzdGF0aWNf
Y2FzdDxpbnQ+KGZyYW1lQ29udGV4dC0+eE9mZnNldCArIHdpZHRoKSwgc2l6ZSgpLndpZHRoKCkp
OworICAgIGludCB5RW5kID0gc3RkOjptaW4oc3RhdGljX2Nhc3Q8aW50PihmcmFtZUNvbnRleHQt
PnlPZmZzZXQgKyByb3dOdW1iZXIgKyByZXBlYXRDb3VudCksIHNpemUoKS5oZWlnaHQoKSk7Cisg
ICAgaWYgKHJvd0J1ZmZlci5pc0VtcHR5KCkgfHwgeEVuZCA8PSB4QmVnaW4gfHwgeUVuZCA8PSB5
QmVnaW4pCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gR2V0IHRoZSBjb2xvcm1hcC4K
QEAgLTI0NCw3ICsyMzcsNyBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3co
dW5zaWduZWQgZnJhbWVJbmRleCwgY29uc3QgVmVjdG9yPHVuc2lnbmVkCiAgICAgYXV0byogY3Vy
cmVudEFkZHJlc3MgPSBidWZmZXIuYmFja2luZ1N0b3JlKCktPnBpeGVsQXQoeEJlZ2luLCB5QmVn
aW4pOwogICAgIC8vIFdyaXRlIG9uZSByb3cncyB3b3J0aCBvZiBkYXRhIGludG8gdGhlIGZyYW1l
LiAgCiAgICAgZm9yIChpbnQgeCA9IHhCZWdpbjsgeCA8IHhFbmQ7ICsreCkgewotICAgICAgICBj
b25zdCB1bnNpZ25lZCBjaGFyIHNvdXJjZVZhbHVlID0gcm93QnVmZmVyWyhtX3NjYWxlZCA/IG1f
c2NhbGVkQ29sdW1uc1t4XSA6IHgpIC0gZnJhbWVDb250ZXh0LT54T2Zmc2V0XTsKKyAgICAgICAg
Y29uc3QgdW5zaWduZWQgY2hhciBzb3VyY2VWYWx1ZSA9IHJvd0J1ZmZlclt4IC0gZnJhbWVDb250
ZXh0LT54T2Zmc2V0XTsKICAgICAgICAgaWYgKCghZnJhbWVDb250ZXh0LT5pc1RyYW5zcGFyZW50
IHx8IChzb3VyY2VWYWx1ZSAhPSBmcmFtZUNvbnRleHQtPnRwaXhlbCkpICYmIChzb3VyY2VWYWx1
ZSA8IGNvbG9yTWFwU2l6ZSkpIHsKICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBjb2xvckluZGV4
ID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihzb3VyY2VWYWx1ZSkgKiAzOwogICAgICAgICAgICAgYnVm
ZmVyLmJhY2tpbmdTdG9yZSgpLT5zZXRQaXhlbChjdXJyZW50QWRkcmVzcywgY29sb3JNYXBbY29s
b3JJbmRleF0sIGNvbG9yTWFwW2NvbG9ySW5kZXggKyAxXSwgY29sb3JNYXBbY29sb3JJbmRleCAr
IDJdLCAyNTUpOwpAQCAtMjg3LDcgKzI4MCw3IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpmcmFt
ZUNvbXBsZXRlKHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGZyYW1lRHVyYXRpb24sCiAg
ICAgICAgIAogICAgICAgICAvLyBUaGUgd2hvbGUgZnJhbWUgd2FzIG5vbi10cmFuc3BhcmVudCwg
c28gaXQncyBwb3NzaWJsZSB0aGF0IHRoZSBlbnRpcmUKICAgICAgICAgLy8gcmVzdWx0aW5nIGJ1
ZmZlciB3YXMgbm9uLXRyYW5zcGFyZW50LCBhbmQgd2UgY2FuIHNldEhhc0FscGhhKGZhbHNlKS4K
LSAgICAgICAgaWYgKHJlY3QuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzY2FsZWRTaXpl
KCkpKSkKKyAgICAgICAgaWYgKHJlY3QuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzaXpl
KCkpKSkKICAgICAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7CiAgICAgICAgIGVs
c2UgaWYgKGZyYW1lSW5kZXgpIHsKICAgICAgICAgICAgIC8vIFRyaWNreSBjYXNlLiAgVGhpcyBm
cmFtZSBkb2VzIG5vdCBoYXZlIGFscGhhIG9ubHkgaWYgZXZlcnl3aGVyZQpAQCAtMzc0LDcgKzM2
Nyw3IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVCdWZmZXIodW5zaWduZWQgZnJh
bWVJbmRleCkKIAogICAgIGlmICghZnJhbWVJbmRleCkgewogICAgICAgICAvLyBUaGlzIGlzIHRo
ZSBmaXJzdCBmcmFtZSwgc28gd2UncmUgbm90IHJlbHlpbmcgb24gYW55IHByZXZpb3VzIGRhdGEu
Ci0gICAgICAgIGlmICghYnVmZmVyLT5pbml0aWFsaXplKHNjYWxlZFNpemUoKSwgbV9wcmVtdWx0
aXBseUFscGhhKSkKKyAgICAgICAgaWYgKCFidWZmZXItPmluaXRpYWxpemUoc2l6ZSgpLCBtX3By
ZW11bHRpcGx5QWxwaGEpKQogICAgICAgICAgICAgcmV0dXJuIHNldEZhaWxlZCgpOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIC8vIFRoZSBzdGFydGluZyBzdGF0ZSBmb3IgdGhpcyBmcmFtZSBkZXBl
bmRzIG9uIHRoZSBwcmV2aW91cyBmcmFtZSdzCkBAIC00MDIsOCArMzk1LDggQEAgYm9vbCBHSUZJ
bWFnZURlY29kZXI6OmluaXRGcmFtZUJ1ZmZlcih1bnNpZ25lZCBmcmFtZUluZGV4KQogICAgICAg
ICAgICAgLy8gV2Ugd2FudCB0byBjbGVhciB0aGUgcHJldmlvdXMgZnJhbWUgdG8gdHJhbnNwYXJl
bnQsIHdpdGhvdXQKICAgICAgICAgICAgIC8vIGFmZmVjdGluZyBwaXhlbHMgaW4gdGhlIGltYWdl
IG91dHNpZGUgb2YgdGhlIGZyYW1lLgogICAgICAgICAgICAgSW50UmVjdCBwcmV2UmVjdCA9IHBy
ZXZCdWZmZXItPmJhY2tpbmdTdG9yZSgpLT5mcmFtZVJlY3QoKTsKLSAgICAgICAgICAgIGNvbnN0
IEludFNpemUmIGJ1ZmZlclNpemUgPSBzY2FsZWRTaXplKCk7Ci0gICAgICAgICAgICBpZiAoIWZy
YW1lSW5kZXggfHwgcHJldlJlY3QuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzY2FsZWRT
aXplKCkpKSkgeworICAgICAgICAgICAgY29uc3QgSW50U2l6ZSYgYnVmZmVyU2l6ZSA9IHNpemUo
KTsKKyAgICAgICAgICAgIGlmICghZnJhbWVJbmRleCB8fCBwcmV2UmVjdC5jb250YWlucyhJbnRS
ZWN0KEludFBvaW50KCksIHNpemUoKSkpKSB7CiAgICAgICAgICAgICAgICAgLy8gQ2xlYXJpbmcg
dGhlIGZpcnN0IGZyYW1lLCBvciBhIGZyYW1lIHRoZSBzaXplIG9mIHRoZSB3aG9sZQogICAgICAg
ICAgICAgICAgIC8vIGltYWdlLCByZXN1bHRzIGluIGEgY29tcGxldGVseSBlbXB0eSBpbWFnZS4K
ICAgICAgICAgICAgICAgICBpZiAoIWJ1ZmZlci0+aW5pdGlhbGl6ZShidWZmZXJTaXplLCBtX3By
ZW11bHRpcGx5QWxwaGEpKQpAQCAtNDI0LDExICs0MTcsNyBAQCBib29sIEdJRkltYWdlRGVjb2Rl
cjo6aW5pdEZyYW1lQnVmZmVyKHVuc2lnbmVkIGZyYW1lSW5kZXgpCiAgICAgaWYgKGZyYW1lUmVj
dC5tYXhZKCkgPiBzaXplKCkuaGVpZ2h0KCkpCiAgICAgICAgIGZyYW1lUmVjdC5zZXRIZWlnaHQo
c2l6ZSgpLmhlaWdodCgpIC0gZnJhbWVDb250ZXh0LT55T2Zmc2V0KTsKIAotICAgIGludCBsZWZ0
ID0gdXBwZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0LngoKSk7Ci0gICAgaW50IHJpZ2h0ID0gbG93
ZXJCb3VuZFNjYWxlZFgoZnJhbWVSZWN0Lm1heFgoKSwgbGVmdCk7Ci0gICAgaW50IHRvcCA9IHVw
cGVyQm91bmRTY2FsZWRZKGZyYW1lUmVjdC55KCkpOwotICAgIGludCBib3R0b20gPSBsb3dlckJv
dW5kU2NhbGVkWShmcmFtZVJlY3QubWF4WSgpLCB0b3ApOwotICAgIGJ1ZmZlci0+YmFja2luZ1N0
b3JlKCktPnNldEZyYW1lUmVjdChJbnRSZWN0KGxlZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0
b20gLSB0b3ApKTsKKyAgICBidWZmZXItPmJhY2tpbmdTdG9yZSgpLT5zZXRGcmFtZVJlY3QoZnJh
bWVSZWN0KTsKIAogICAgIC8vIFVwZGF0ZSBvdXIgc3RhdHVzIHRvIGJlIHBhcnRpYWxseSBjb21w
bGV0ZS4KICAgICBidWZmZXItPnNldERlY29kaW5nU3RhdHVzKERlY29kaW5nU3RhdHVzOjpQYXJ0
aWFsKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCmluZGV4IDBjMDU0OWI1YTNlZTA0
YWYyOWNhN2Q2MDYwMzVmY2ZlNjE3NDg1MjYuLmYzM2YyNDdhZDcwY2Q2MTA0NGMwYzRhNDM0MjM3
ZTQ0MzBmMDFjYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcApAQCAtNTAyLDE1
ICs1MDIsNiBAQCBKUEVHSW1hZ2VEZWNvZGVyOjpKUEVHSW1hZ2VEZWNvZGVyKEFscGhhT3B0aW9u
IGFscGhhT3B0aW9uLCBHYW1tYUFuZENvbG9yUHJvZmlsZQogCiBKUEVHSW1hZ2VEZWNvZGVyOjp+
SlBFR0ltYWdlRGVjb2RlcigpID0gZGVmYXVsdDsKIAotYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpz
ZXRTaXplKGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgaWYgKCFTY2FsYWJsZUltYWdlRGVj
b2Rlcjo6c2V0U2l6ZShzaXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcHJlcGFy
ZVNjYWxlRGF0YUlmTmVjZXNzYXJ5KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIFNjYWxhYmxl
SW1hZ2VEZWNvZGVyRnJhbWUqIEpQRUdJbWFnZURlY29kZXI6OmZyYW1lQnVmZmVyQXRJbmRleChz
aXplX3QgaW5kZXgpCiB7CiAgICAgaWYgKGluZGV4KQpAQCAtNTU2LDEyICs1NDcsMTIgQEAgdm9p
ZCBzZXRQaXhlbChTY2FsYWJsZUltYWdlRGVjb2RlckZyYW1lJiBidWZmZXIsIHVpbnQzMl90KiBj
dXJyZW50QWRkcmVzcywgSlNBTVAKICAgICB9CiB9CiAKLXRlbXBsYXRlIDxKX0NPTE9SX1NQQUNF
IGNvbG9yU3BhY2UsIGJvb2wgaXNTY2FsZWQ+Cit0ZW1wbGF0ZSA8Sl9DT0xPUl9TUEFDRSBjb2xv
clNwYWNlPgogYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoU2NhbGFibGVJ
bWFnZURlY29kZXJGcmFtZSYgYnVmZmVyKQogewogICAgIEpTQU1QQVJSQVkgc2FtcGxlcyA9IG1f
cmVhZGVyLT5zYW1wbGVzKCk7CiAgICAganBlZ19kZWNvbXByZXNzX3N0cnVjdCogaW5mbyA9IG1f
cmVhZGVyLT5pbmZvKCk7Ci0gICAgaW50IHdpZHRoID0gaXNTY2FsZWQgPyBtX3NjYWxlZENvbHVt
bnMuc2l6ZSgpIDogaW5mby0+b3V0cHV0X3dpZHRoOworICAgIGludCB3aWR0aCA9IGluZm8tPm91
dHB1dF93aWR0aDsKIAogICAgIHdoaWxlIChpbmZvLT5vdXRwdXRfc2NhbmxpbmUgPCBpbmZvLT5v
dXRwdXRfaGVpZ2h0KSB7CiAgICAgICAgIC8vIGpwZWdfcmVhZF9zY2FubGluZXMgd2lsbCBpbmNy
ZWFzZSB0aGUgc2NhbmxpbmUgY291bnRlciwgc28gd2UKQEAgLTU3MSwyNSArNTYyLDE1IEBAIGJv
b2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2NhbmxpbmVzKFNjYWxhYmxlSW1hZ2VEZWNvZGVy
RnJhbWUmIGJ1ZmZlcikKICAgICAgICAgaWYgKGpwZWdfcmVhZF9zY2FubGluZXMoaW5mbywgc2Ft
cGxlcywgMSkgIT0gMSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBpbnQg
ZGVzdFkgPSBzY2FsZWRZKHNvdXJjZVkpOwotICAgICAgICBpZiAoZGVzdFkgPCAwKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgYXV0byogY3VycmVudEFkZHJlc3MgPSBidWZmZXIu
YmFja2luZ1N0b3JlKCktPnBpeGVsQXQoMCwgZGVzdFkpOworICAgICAgICBhdXRvKiBjdXJyZW50
QWRkcmVzcyA9IGJ1ZmZlci5iYWNraW5nU3RvcmUoKS0+cGl4ZWxBdCgwLCBzb3VyY2VZKTsKICAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgKyt4KSB7Ci0gICAgICAgICAgICBzZXRQ
aXhlbDxjb2xvclNwYWNlPihidWZmZXIsIGN1cnJlbnRBZGRyZXNzLCBzYW1wbGVzLCBpc1NjYWxl
ZCA/IG1fc2NhbGVkQ29sdW1uc1t4XSA6IHgpOworICAgICAgICAgICAgc2V0UGl4ZWw8Y29sb3JT
cGFjZT4oYnVmZmVyLCBjdXJyZW50QWRkcmVzcywgc2FtcGxlcywgeCk7CiAgICAgICAgICAgICAr
K2N1cnJlbnRBZGRyZXNzOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiB0cnVlOwogfQog
Ci10ZW1wbGF0ZSA8Sl9DT0xPUl9TUEFDRSBjb2xvclNwYWNlPgotYm9vbCBKUEVHSW1hZ2VEZWNv
ZGVyOjpvdXRwdXRTY2FubGluZXMoU2NhbGFibGVJbWFnZURlY29kZXJGcmFtZSYgYnVmZmVyKQot
ewotICAgIHJldHVybiBtX3NjYWxlZCA/IG91dHB1dFNjYW5saW5lczxjb2xvclNwYWNlLCB0cnVl
PihidWZmZXIpIDogb3V0cHV0U2NhbmxpbmVzPGNvbG9yU3BhY2UsIGZhbHNlPihidWZmZXIpOwot
fQotCiBib29sIEpQRUdJbWFnZURlY29kZXI6Om91dHB1dFNjYW5saW5lcygpCiB7CiAgICAgaWYg
KG1fZnJhbWVCdWZmZXJDYWNoZS5pc0VtcHR5KCkpCkBAIC01OTgsNyArNTc5LDcgQEAgYm9vbCBK
UEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGluZXMoKQogICAgIC8vIEluaXRpYWxpemUgdGhl
IGZyYW1lYnVmZmVyIGlmIG5lZWRlZC4KICAgICBhdXRvJiBidWZmZXIgPSBtX2ZyYW1lQnVmZmVy
Q2FjaGVbMF07CiAgICAgaWYgKGJ1ZmZlci5pc0ludmFsaWQoKSkgewotICAgICAgICBpZiAoIWJ1
ZmZlci5pbml0aWFsaXplKHNjYWxlZFNpemUoKSwgbV9wcmVtdWx0aXBseUFscGhhKSkKKyAgICAg
ICAgaWYgKCFidWZmZXIuaW5pdGlhbGl6ZShzaXplKCksIG1fcHJlbXVsdGlwbHlBbHBoYSkpCiAg
ICAgICAgICAgICByZXR1cm4gc2V0RmFpbGVkKCk7CiAgICAgICAgIGJ1ZmZlci5zZXREZWNvZGlu
Z1N0YXR1cyhEZWNvZGluZ1N0YXR1czo6UGFydGlhbCk7CiAgICAgICAgIC8vIFRoZSBidWZmZXIg
aXMgdHJhbnNwYXJlbnQgb3V0c2lkZSB0aGUgZGVjb2RlZCBhcmVhIHdoaWxlIHRoZSBpbWFnZSBp
cwpAQCAtNjA5LDcgKzU5MCw3IEBAIGJvb2wgSlBFR0ltYWdlRGVjb2Rlcjo6b3V0cHV0U2Nhbmxp
bmVzKCkKICAgICBqcGVnX2RlY29tcHJlc3Nfc3RydWN0KiBpbmZvID0gbV9yZWFkZXItPmluZm8o
KTsKIAogI2lmIGRlZmluZWQoVFVSQk9fSlBFR19SR0JfU1dJWlpMRSkKLSAgICBpZiAoIW1fc2Nh
bGVkICYmIHR1cmJvU3dpenpsZWQoaW5mby0+b3V0X2NvbG9yX3NwYWNlKSkgeworICAgIGlmICh0
dXJib1N3aXp6bGVkKGluZm8tPm91dF9jb2xvcl9zcGFjZSkpIHsKICAgICAgICAgd2hpbGUgKGlu
Zm8tPm91dHB1dF9zY2FubGluZSA8IGluZm8tPm91dHB1dF9oZWlnaHQpIHsKICAgICAgICAgICAg
IHVuc2lnbmVkIGNoYXIqIHJvdyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGJ1
ZmZlci5iYWNraW5nU3RvcmUoKS0+cGl4ZWxBdCgwLCBpbmZvLT5vdXRwdXRfc2NhbmxpbmUpKTsK
ICAgICAgICAgICAgIGlmIChqcGVnX3JlYWRfc2NhbmxpbmVzKGluZm8sICZyb3csIDEpICE9IDEp
CkBAIC02MjAsNyArNjAxLDcgQEAgYm9vbCBKUEVHSW1hZ2VEZWNvZGVyOjpvdXRwdXRTY2FubGlu
ZXMoKQogI2VuZGlmCiAKICAgICBzd2l0Y2ggKGluZm8tPm91dF9jb2xvcl9zcGFjZSkgewotICAg
IC8vIFRoZSBjb2RlIGluc2lkZSBvdXRwdXRTY2FubGluZXM8aW50LCBib29sPiB3aWxsIGJlIGV4
ZWN1dGVkCisgICAgLy8gVGhlIGNvZGUgaW5zaWRlIG91dHB1dFNjYW5saW5lczxpbnQ+IHdpbGwg
YmUgZXhlY3V0ZWQKICAgICAvLyBmb3IgZWFjaCBwaXhlbCwgc28gd2Ugd2FudCB0byBhdm9pZCBh
bnkgZXh0cmEgY29tcGFyaXNvbnMgdGhlcmUuCiAgICAgLy8gVGhhdCBpcyB3aHkgd2UgdXNlIHRl
bXBsYXRlIGFuZCB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbnMgaGVyZSBzbwogICAgIC8vIHRoZSBw
cm9wZXIgY29kZSB3aWxsIGJlIGdlbmVyYXRlZCBhdCBjb21waWxlIHRpbWUuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJbWFnZURl
Y29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBF
R0ltYWdlRGVjb2Rlci5oCmluZGV4IDY5NTIxZGNmN2IwODZiYTczYjAyM2NiZTI0Mjk5YTgyNzlm
MDlkMzQuLjgyNTIyNmRkNmI4NzY0NDA3M2Q5OGQyMjhjYzAyODllZTQzNzBlNjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdl
RGVjb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pw
ZWcvSlBFR0ltYWdlRGVjb2Rlci5oCkBAIC01MiwxOSArNTIsMTIgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgICAgIC8vIFNjYWxhYmxlSW1hZ2VEZWNvZGVyCiAgICAgICAgIFN0cmluZyBm
aWxlbmFtZUV4dGVuc2lvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJqcGciX3M7IH0KLSAg
ICAgICAgYm9vbCBzZXRTaXplKGNvbnN0IEludFNpemUmKSBvdmVycmlkZTsKICAgICAgICAgU2Nh
bGFibGVJbWFnZURlY29kZXJGcmFtZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkg
b3ZlcnJpZGU7CiAgICAgICAgIC8vIENBVVRJT046IHNldEZhaWxlZCgpIGRlbGV0ZXMgfG1fcmVh
ZGVyfC4gIEJlIGNhcmVmdWwgdG8gYXZvaWQKICAgICAgICAgLy8gYWNjZXNzaW5nIGRlbGV0ZWQg
bWVtb3J5LCBlc3BlY2lhbGx5IHdoZW4gY2FsbGluZyB0aGlzIGZyb20gaW5zaWRlCiAgICAgICAg
IC8vIEpQRUdJbWFnZVJlYWRlciEKICAgICAgICAgYm9vbCBzZXRGYWlsZWQoKSBvdmVycmlkZTsK
IAotICAgICAgICBib29sIHdpbGxEb3duU2FtcGxlKCkKLSAgICAgICAgewotICAgICAgICAgICAg
QVNTRVJUKFNjYWxhYmxlSW1hZ2VEZWNvZGVyOjplbmNvZGVkRGF0YVN0YXR1cygpID49IEVuY29k
ZWREYXRhU3RhdHVzOjpTaXplQXZhaWxhYmxlKTsKLSAgICAgICAgICAgIHJldHVybiBtX3NjYWxl
ZDsKLSAgICAgICAgfQotCiAgICAgICAgIGJvb2wgb3V0cHV0U2NhbmxpbmVzKCk7CiAgICAgICAg
IHZvaWQganBlZ0NvbXBsZXRlKCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2pwZWcyMDAwL0pQRUcyMDAwSW1hZ2VEZWNvZGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcyMDAwL0pQRUcyMDAwSW1h
Z2VEZWNvZGVyLmNwcAppbmRleCAzNTA0N2UxZDVkOTI4ZDA1Zjk0ZWJkMTdiYWM3ZGIzZDYzNWUw
ZTRkLi41MjYzMWZiNmQxNDIzYjRlZmYwMGE2YjlmZmUyYzU2MTY1ZjRjYTJmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnMjAwMC9KUEVHMjAw
MEltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvanBlZzIwMDAvSlBFRzIwMDBJbWFnZURlY29kZXIuY3BwCkBAIC00NzksNyArNDc5LDcg
QEAgdm9pZCBKUEVHMjAwMEltYWdlRGVjb2Rlcjo6ZGVjb2RlKGJvb2wgb25seVNpemUsIGJvb2wg
YWxsRGF0YVJlY2VpdmVkKQogICAgIH0KIAogICAgIGF1dG8mIGJ1ZmZlciA9IG1fZnJhbWVCdWZm
ZXJDYWNoZVswXTsKLSAgICBpZiAoIWJ1ZmZlci5pbml0aWFsaXplKHNjYWxlZFNpemUoKSwgbV9w
cmVtdWx0aXBseUFscGhhKSkgeworICAgIGlmICghYnVmZmVyLmluaXRpYWxpemUoc2l6ZSgpLCBt
X3ByZW11bHRpcGx5QWxwaGEpKSB7CiAgICAgICAgIHNldEZhaWxlZCgpOwogICAgICAgICByZXR1
cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAppbmRleCA2MmNiOWIyMmEwMWYy
NmU5ZjJjZDQxZGVhMzgxYjM2MzY4OTdlZTQyLi5lNjI1OWMxMmYxNGY5NTZkZmQ0MzYyOWNiZjFh
NjEwNzRjOGRiMTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmNwcApAQCAtMjQ4LDE1ICsy
NDgsNiBAQCBSZXBldGl0aW9uQ291bnQgUE5HSW1hZ2VEZWNvZGVyOjpyZXBldGl0aW9uQ291bnQo
KSBjb25zdAogfQogI2VuZGlmCiAKLWJvb2wgUE5HSW1hZ2VEZWNvZGVyOjpzZXRTaXplKGNvbnN0
IEludFNpemUmIHNpemUpCi17Ci0gICAgaWYgKCFTY2FsYWJsZUltYWdlRGVjb2Rlcjo6c2V0U2l6
ZShzaXplKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcHJlcGFyZVNjYWxlRGF0YUlm
TmVjZXNzYXJ5KCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIFNjYWxhYmxlSW1hZ2VEZWNvZGVy
RnJhbWUqIFBOR0ltYWdlRGVjb2Rlcjo6ZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkK
IHsKICNpZiBFTkFCTEUoQVBORykKQEAgLTQzNSw3ICs0MjYsNyBAQCB2b2lkIFBOR0ltYWdlRGVj
b2Rlcjo6cm93QXZhaWxhYmxlKHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgcm93
SW5kZXgsCiAgICAgYXV0byYgYnVmZmVyID0gbV9mcmFtZUJ1ZmZlckNhY2hlW21fY3VycmVudEZy
YW1lXTsKICAgICBpZiAoYnVmZmVyLmlzSW52YWxpZCgpKSB7CiAgICAgICAgIHBuZ19zdHJ1Y3Rw
IHBuZyA9IG1fcmVhZGVyLT5wbmdQdHIoKTsKLSAgICAgICAgaWYgKCFidWZmZXIuaW5pdGlhbGl6
ZShzY2FsZWRTaXplKCksIG1fcHJlbXVsdGlwbHlBbHBoYSkpIHsKKyAgICAgICAgaWYgKCFidWZm
ZXIuaW5pdGlhbGl6ZShzaXplKCksIG1fcHJlbXVsdGlwbHlBbHBoYSkpIHsKICAgICAgICAgICAg
IGxvbmdqbXAoSk1QQlVGKHBuZyksIDEpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CkBAIC00NzcsOCArNDY4LDcgQEAgdm9pZCBQTkdJbWFnZURlY29kZXI6OnJvd0F2YWlsYWJsZSh1
bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVkIHJvd0luZGV4LAogICAgIC8vIG1ha2Ug
b3VyIGxpdmVzIGVhc2llci4KICAgICBpZiAoIXJvd0J1ZmZlcikKICAgICAgICAgcmV0dXJuOwot
ICAgIGludCB5ID0gIW1fc2NhbGVkID8gcm93SW5kZXggOiBzY2FsZWRZKHJvd0luZGV4KTsKLSAg
ICBpZiAoeSA8IDAgfHwgeSA+PSBzY2FsZWRTaXplKCkuaGVpZ2h0KCkpCisgICAgaWYgKHJvd0lu
ZGV4ID49IHNpemUoKS5oZWlnaHQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLyogbGlicG5n
IGNvbW1lbnRzIChjb250aW51ZWQpLgpAQCAtNTE2LDggKzUwNiw4IEBAIHZvaWQgUE5HSW1hZ2VE
ZWNvZGVyOjpyb3dBdmFpbGFibGUodW5zaWduZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCBy
b3dJbmRleCwKICAgICB9CiAKICAgICAvLyBXcml0ZSB0aGUgZGVjb2RlZCByb3cgcGl4ZWxzIHRv
IHRoZSBmcmFtZSBidWZmZXIuCi0gICAgYXV0byogYWRkcmVzcyA9IGJ1ZmZlci5iYWNraW5nU3Rv
cmUoKS0+cGl4ZWxBdCgwLCB5KTsKLSAgICBpbnQgd2lkdGggPSBzY2FsZWRTaXplKCkud2lkdGgo
KTsKKyAgICBhdXRvKiBhZGRyZXNzID0gYnVmZmVyLmJhY2tpbmdTdG9yZSgpLT5waXhlbEF0KDAs
IHJvd0luZGV4KTsKKyAgICBpbnQgd2lkdGggPSBzaXplKCkud2lkdGgoKTsKICAgICB1bnNpZ25l
ZCBjaGFyIG5vblRyaXZpYWxBbHBoYU1hc2sgPSAwOwogCiAgICAgcG5nX2J5dGVwIHBpeGVsID0g
cm93OwpAQCAtNzc3LDcgKzc2Nyw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjppbml0RnJhbWVC
dWZmZXIoc2l6ZV90IGZyYW1lSW5kZXgpCiAgICAgICAgIC8vIFdlIHdhbnQgdG8gY2xlYXIgdGhl
IHByZXZpb3VzIGZyYW1lIHRvIHRyYW5zcGFyZW50LCB3aXRob3V0CiAgICAgICAgIC8vIGFmZmVj
dGluZyBwaXhlbHMgaW4gdGhlIGltYWdlIG91dHNpZGUgb2YgdGhlIGZyYW1lLgogICAgICAgICBJ
bnRSZWN0IHByZXZSZWN0ID0gcHJldkJ1ZmZlci0+YmFja2luZ1N0b3JlKCktPmZyYW1lUmVjdCgp
OwotICAgICAgICBpZiAoIWZyYW1lSW5kZXggfHwgcHJldlJlY3QuY29udGFpbnMoSW50UmVjdChJ
bnRQb2ludCgpLCBzY2FsZWRTaXplKCkpKSkgeworICAgICAgICBpZiAoIWZyYW1lSW5kZXggfHwg
cHJldlJlY3QuY29udGFpbnMoSW50UmVjdChJbnRQb2ludCgpLCBzaXplKCkpKSkgewogICAgICAg
ICAgICAgLy8gQ2xlYXJpbmcgdGhlIGZpcnN0IGZyYW1lLCBvciBhIGZyYW1lIHRoZSBzaXplIG9m
IHRoZSB3aG9sZQogICAgICAgICAgICAgLy8gaW1hZ2UsIHJlc3VsdHMgaW4gYSBjb21wbGV0ZWx5
IGVtcHR5IGltYWdlLgogICAgICAgICAgICAgYnVmZmVyLmJhY2tpbmdTdG9yZSgpLT5jbGVhcigp
OwpAQCAtODAxLDExICs3OTEsNyBAQCB2b2lkIFBOR0ltYWdlRGVjb2Rlcjo6aW5pdEZyYW1lQnVm
ZmVyKHNpemVfdCBmcmFtZUluZGV4KQogICAgIGlmIChmcmFtZVJlY3QubWF4WSgpID4gc2l6ZSgp
LmhlaWdodCgpKQogICAgICAgICBmcmFtZVJlY3Quc2V0SGVpZ2h0KHNpemUoKS5oZWlnaHQoKSAt
IG1feU9mZnNldCk7CiAKLSAgICBpbnQgbGVmdCA9IHVwcGVyQm91bmRTY2FsZWRYKGZyYW1lUmVj
dC54KCkpOwotICAgIGludCByaWdodCA9IGxvd2VyQm91bmRTY2FsZWRYKGZyYW1lUmVjdC5tYXhY
KCksIGxlZnQpOwotICAgIGludCB0b3AgPSB1cHBlckJvdW5kU2NhbGVkWShmcmFtZVJlY3QueSgp
KTsKLSAgICBpbnQgYm90dG9tID0gbG93ZXJCb3VuZFNjYWxlZFkoZnJhbWVSZWN0Lm1heFkoKSwg
dG9wKTsKLSAgICBidWZmZXIuYmFja2luZ1N0b3JlKCktPnNldEZyYW1lUmVjdChJbnRSZWN0KGxl
ZnQsIHRvcCwgcmlnaHQgLSBsZWZ0LCBib3R0b20gLSB0b3ApKTsKKyAgICBidWZmZXIuYmFja2lu
Z1N0b3JlKCktPnNldEZyYW1lUmVjdChmcmFtZVJlY3QpOwogfQogCiB2b2lkIFBOR0ltYWdlRGVj
b2Rlcjo6ZnJhbWVDb21wbGV0ZSgpCkBAIC04MjYsNyArODEyLDYgQEAgdm9pZCBQTkdJbWFnZURl
Y29kZXI6OmZyYW1lQ29tcGxldGUoKQogICAgICAgICBpZiAobV9ibGVuZCAmJiAhaGFzQWxwaGEp
CiAgICAgICAgICAgICBtX2JsZW5kID0gMDsKIAotICAgICAgICBBU1NFUlQoIW1fc2NhbGVkKTsK
ICAgICAgICAgcG5nX2J5dGVwIHJvdyA9IGludGVybGFjZUJ1ZmZlcjsKICAgICAgICAgZm9yIChp
bnQgeSA9IHJlY3QueSgpOyB5IDwgcmVjdC5tYXhZKCk7ICsreSwgcm93ICs9IGNvbG9yQ2hhbm5l
bHMgKiBzaXplKCkud2lkdGgoKSkgewogICAgICAgICAgICAgcG5nX2J5dGVwIHBpeGVsID0gcm93
OwpAQCAtODQzLDcgKzgyOCw3IEBAIHZvaWQgUE5HSW1hZ2VEZWNvZGVyOjpmcmFtZUNvbXBsZXRl
KCkKIAogICAgICAgICBpZiAoIW5vblRyaXZpYWxBbHBoYSkgewogICAgICAgICAgICAgSW50UmVj
dCByZWN0ID0gYnVmZmVyLmJhY2tpbmdTdG9yZSgpLT5mcmFtZVJlY3QoKTsKLSAgICAgICAgICAg
IGlmIChyZWN0LmNvbnRhaW5zKEludFJlY3QoSW50UG9pbnQoKSwgc2NhbGVkU2l6ZSgpKSkpCisg
ICAgICAgICAgICBpZiAocmVjdC5jb250YWlucyhJbnRSZWN0KEludFBvaW50KCksIHNpemUoKSkp
KQogICAgICAgICAgICAgICAgIGJ1ZmZlci5zZXRIYXNBbHBoYShmYWxzZSk7CiAgICAgICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgICAgICBzaXplX3QgZnJhbWVJbmRleCA9IG1fY3VycmVudEZy
YW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
cG5nL1BOR0ltYWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvcG5nL1BOR0ltYWdlRGVjb2Rlci5oCmluZGV4IDg1ZjcwNTMzNWUzMTYxYTE5MzQ0OTYw
Njc0NTMyNmQ1NmFlZmEwZGEuLjNmYmVhMmQ3ZjMzZDFkNDIxNDg5NWRjM2NjZGY0ZjYxMzBjMTVm
YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3Bu
Zy9QTkdJbWFnZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9wbmcvUE5HSW1hZ2VEZWNvZGVyLmgKQEAgLTUwLDcgKzUwLDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBzaXplX3QgZnJhbWVDb3VudCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1fZnJhbWVDb3VudDsgfQogICAgICAgICBSZXBldGl0aW9uQ291bnQgcmVwZXRpdGlv
bkNvdW50KCkgY29uc3Qgb3ZlcnJpZGU7CiAjZW5kaWYKLSAgICAgICAgYm9vbCBzZXRTaXplKGNv
bnN0IEludFNpemUmKSBvdmVycmlkZTsKICAgICAgICAgU2NhbGFibGVJbWFnZURlY29kZXJGcmFt
ZSogZnJhbWVCdWZmZXJBdEluZGV4KHNpemVfdCBpbmRleCkgb3ZlcnJpZGU7CiAgICAgICAgIC8v
IENBVVRJT046IHNldEZhaWxlZCgpIGRlbGV0ZXMgfG1fcmVhZGVyfC4gIEJlIGNhcmVmdWwgdG8g
YXZvaWQKICAgICAgICAgLy8gYWNjZXNzaW5nIGRlbGV0ZWQgbWVtb3J5LCBlc3BlY2lhbGx5IHdo
ZW4gY2FsbGluZyB0aGlzIGZyb20gaW5zaWRlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>